[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DAS1YTEDXBYRGS8J48MCAV":3,"skill-same:01M6DAS1YTEDXBYRGS8J48MCAV":130},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":13,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6DAS1YTEDXBYRGS8J48MCAV","beads-pr-reviewer-worker",null,"Use when a coordinator dispatches a dedicated `pr-review-task` bead for an open GitHub PR that needs review follow-up, thread triage, merge assessment, or retry handling in an isolated worktree.","tzeusy-org\u002Fai-bootstrap","tzeusy-org","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F141543652?v=4","01M6DAM1AP09H27BYGFY9QCNPB","01M6DAM1F4R187EK11XDN9JZKH",0,"MIT","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"beads pr reviewer worker","pr reviewer","worker","beads","reviewer","pr","when","worktrees","merge","active","worktree","coordinator","retry","review","git worktrees","access","open","assessment","up","openai codex","2026-11-10 10:12:30",false,"---\nname: beads-pr-reviewer-worker\ndescription: Use when a coordinator dispatches a dedicated `pr-review-task` bead for an open GitHub PR that needs review follow-up, thread triage, merge assessment, or retry handling in an isolated worktree.\nmetadata:\n  owner: tze\n  authors:\n    - tze\n    - OpenAI Codex\n    - Claude Fable 5.1\n  status: active\n  last_reviewed: \"2026-11-06\"\ncompatibility: Requires a Beads-backed git repository with git worktrees, git, bd, jq, gh, and python3 available, plus authenticated GitHub access and network access for review, push, and merge operations.\n---\n\n# Beads PR Reviewer Worker\n\n## Overview\n\nProcess exactly one dedicated `pr-review-task` bead tied to a GitHub PR:\n- resolve the original implementation bead and canonical PR,\n- review the exact head's diff, its unresolved threads, and its tests,\n- leave actionable, resolvable findings for the implementation\u002Frecovery lane,\n- decide whether the PR is mergeable,\n- report the outcome in a machine-readable form for the coordinator.\n\nYou may mutate GitHub review state and merge or close the PR when warranted.\nYou do **not** mutate Beads lifecycle state.\n\n## Use This Skill When\n\n- the coordinator dispatches one dedicated `pr-review-task` bead\n- you are given `ISSUE_ID`, `WORKTREE_PATH`, and `REPO_ROOT` (plus an optional\n  2-4 line summary\u002Facceptance-criteria excerpt from the coordinator)\n- the PR already exists and needs review follow-up, retry triage, or merge\n  evaluation\n\nTypically invoked by [`..\u002Fbeads-coordinator\u002FSKILL.md`](..\u002Fbeads-coordinator\u002FSKILL.md),\nnot directly by users.\n\n## Context\n\n| Variable | Description |\n|---|---|\n| `ISSUE_ID` | Assigned PR-review bead ID |\n| `WORKTREE_PATH` | Dedicated isolated git worktree for this worker |\n| `REPO_ROOT` | Main repository root for read-only orientation |\n| `ISSUE_JSON` | (Optional\u002Flegacy) Full issue JSON if inlined by an older coordinator. When absent, self-fetch with the projected `bd show` in Phase 1 |\n| `MERGE_QUEUE` | (Optional) `yes`\u002F`no` from the coordinator's preflight. When absent, trust `merge_queue` in the merge-readiness helper output |\n\n## Non-Negotiable Boundaries\n\n- All git operations happen inside `WORKTREE_PATH`, never inside `REPO_ROOT`.\n- Never `cd` to `REPO_ROOT`. Use absolute paths or `git -C \"${REPO_ROOT}\"`.\n- Do not run `bd create`, `bd update`, `bd dep add`, or `bd close`.\n- Assume the coordinator already claimed the review bead and applied the\n  `review-running` lock. Do not try to claim or release that lock yourself.\n- No hidden parallel writers; on `LANE-CONTINUATION`, redo bootstrap + attestations.\n- Preserve reviewer independence: do not author semantic corrections on the\n  head being reviewed. The original author or a recovery worker owns fixes.\n- Do not require a synthetic \"no issues detected\" marker thread in order to\n  merge. Audit comments are optional, not merge gates.\n\n## Optional Project-Level Craft-And-Care Gate\n\nBefore the first finding, apply\n[`..\u002F..\u002Freferences\u002Fcraft-and-care-gate.md`](..\u002F..\u002Freferences\u002Fcraft-and-care-gate.md):\ndiscover a repo-owned `craft-and-care` skill, read it once if present, use it\nas the bar for findings and merge readiness, and run its final standards pass\nagainst the diff before handoff.\n\n## Bundled Helpers\n\nUse the bundled helpers for deterministic operations (prepare, reply, resolve,\nand comment mutate GitHub or push), each by the loaded package's absolute path:\n\n- [`scripts\u002Fresolve_review_context.py`](scripts\u002Fresolve_review_context.py)\n  Resolves the original bead, PR number, repo, branches, and current PR state.\n  Every `bd show` response it uses must contain exactly one record whose `id`\n  matches the requested ID; empty, multiple, non-record, or foreign responses\n  fail closed rather than selecting a first record.\n- [`scripts\u002Fprepare_pr_branch.py`](scripts\u002Fprepare_pr_branch.py)\n  Checks out `review\u002F\u003Creview-id>` at the published package head and probes\n  merge compatibility. Never rewrites the implementation branch; conflicts\n  return to its existing owner.\n- [`scripts\u002Flist_review_threads.py`](scripts\u002Flist_review_threads.py)\n  Lists review threads with full pagination and returns unresolved-thread\n  details in JSON.\n- [`scripts\u002Fevaluate_merge_readiness.py`](scripts\u002Fevaluate_merge_readiness.py)\n  Computes merge gates in one place, failing closed when required checks cannot\n  be verified, and reports whether the base branch sits behind a merge queue\n  (`merge_queue`, `merge_command`).\n- [`scripts\u002Fdiscover_quality_gates.py`](scripts\u002Fdiscover_quality_gates.py)\n  Discovers likely lint, typecheck, and test commands from common project\n  manifests when project docs do not name them explicitly.\n- [`scripts\u002Freply_to_review_thread.py`](scripts\u002Freply_to_review_thread.py)\n  Adds an idempotent reply to an existing review thread.\n- [`scripts\u002Fresolve_review_thread.py`](scripts\u002Fresolve_review_thread.py)\n  Resolves a review thread idempotently.\n- [`scripts\u002Fcreate_inline_review_comment.py`](scripts\u002Fcreate_inline_review_comment.py)\n  Adds an idempotent line-level review comment for a newly discovered issue.\n\nUse the bundled references in `references\u002F` when you need the exact GitHub\nreview-thread operations or the failure protocol:\n\n- [`references\u002Fthread-operations.md`](references\u002Fthread-operations.md)\n- [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md)\n- [`references\u002Fevaluation.md`](references\u002Fevaluation.md)\n\n## Workflow\n\n### Phase 1: Bootstrap\n\n1. `cd \"${WORKTREE_PATH}\"`.\n2. Fetch full issue details when `ISSUE_JSON` was not inlined by the coordinator:\n\n```bash\nISSUE_JSON=$(bd show \"${ISSUE_ID}\" --json \\\n  | jq -e --arg id \"$ISSUE_ID\" '\n      if type == \"array\" and length == 1 and .[0].id == $id then\n        .[0] | {id, title, status, labels, external_ref, description, acceptance_criteria, design, notes}\n      else error(\"expected exactly the requested bead\") end')\n```\n\nProject to those fields only (`..\u002F..\u002Freferences\u002Ftoken-efficiency.md`); the\nfull record carries history you do not need.\n\n3. Verify runtime context:\n\n```bash\nASSERT_WORKER_CONTEXT=\"\u003Cloaded beads-worker package>\u002Fscripts\u002Fassert_worker_context.py\"\npython3 \"${ASSERT_WORKER_CONTEXT}\" \\\n  --worktree-path \"${WORKTREE_PATH}\" \\\n  --repo-root \"${REPO_ROOT}\" \\\n  --issue-id \"${ISSUE_ID}\" \\\n  --review-id \"${ISSUE_ID}\" \\\n  --current-path \"$(pwd -P)\"\n```\n\nResolve the helper from the loaded `beads-worker\u002FSKILL.md` path. It derives the\nbranch and repository identity without inherited `GIT_*` overrides. Run it and\nlater Git\u002Fworktree commands with actual cwd set to `WORKTREE_PATH`; `bd -C`\ndoes not set Git's cwd. The worktree branch is `review\u002F\u003CISSUE_ID>` on\nboth the initial review and later rechecks. Keep the implementation owner's\nworktree and `agent\u002F\u003Canchor>` branch intact.\n4. Confirm GitHub access before doing anything expensive:\n\n```bash\ngh auth status\n```\n\n5. If a repository-level `craft-and-care` skill exists, read it now.\n6. Resolve review context with the bundled helper. The output must include:\n   - `original_id`\n   - `pr_number`\n   - `pr_url`\n   - `owner`\n   - `repo`\n   - `head_branch`\n   - `base_branch`\n7. Record reviewer identity (runtime agent ID when available plus authenticated\n   GitHub login) and classify the PR as `high`, `standard`, or `low` using the\n   coordinator's\n   [review risk tiers](..\u002Fbeads-coordinator\u002Freferences\u002Fruntime-and-safety.md#review-risk-tiers).\n\nIf review context cannot be resolved, stop and report\n`blocked-awaiting-coordinator`.\n\nConcrete invocation:\n\n```bash\nCONTEXT_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fresolve_review_context.py\" --issue-id \"${ISSUE_ID}\")\n```\n\n### Phase 2: Prepare The Review Snapshot\n\nRun the helper in the isolated review worktree:\n\n```bash\nPREP_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fprepare_pr_branch.py\" \\\n  --base-branch \"${PR_BASE_BRANCH}\" \\\n  --head-branch \"${PR_HEAD_BRANCH}\" \\\n  --review-id \"${ISSUE_ID}\")\n```\n\nThe helper checks out `review\u002F\u003Creview-id>` at the fetched PR head and probes\n`git merge-tree --write-tree`. Clean base drift does not rewrite the author's\nhead. `corrections-required` (conflict or `.beads\u002F` divergence) returns to the\nexisting implementation owner on the same PR; `blocked` requires diagnosis.\nAn unsupported merge probe fails closed. Never remove the implementation\nworktree, stash its state, rebase its branch, or force-push it as preparation.\n\nBefore reviewing, verify local HEAD and GitHub PR head equal the reported\n`head_commit`. Load the current packet and member acceptance criteria from\n`delivery_members` \u002F `delivery_packet` in the resolved context. The package\nhas one canonical review bead targeting its anchor. Do not create a review\nper member or assign the anchor's `gh-pr:N` to members.\n\n### Phase 3: Review And Classify Findings\n\n1. Fetch review threads with:\n\n```bash\nTHREADS_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Flist_review_threads.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\")\n```\n\n2. If the thread helper reports incomplete or ambiguous evidence, stop and\n   report `blocked-awaiting-coordinator`. Do not review from partial thread\n   context.\n3. For each unresolved thread:\n   - inspect the feedback in code and tests,\n   - classify it as current-PR correctness, prerequisite blocker, new behavior,\n     or duplicate,\n   - reply in-thread with a concrete verdict: `correction-required`,\n     `answered`, `won't-fix`, or `duplicate`,\n   - leave correction threads unresolved for the implementation\u002Frecovery lane;\n     resolve only after the answer or corrected exact head is real.\n4. Use the bundled thread helpers instead of raw ad hoc API calls:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Freply_to_review_thread.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\" \\\n  --comment-id \"${TOP_LEVEL_COMMENT_ID}\" \\\n  --thread-id \"${THREAD_ID}\" \\\n  --body \"${BODY}\" \\\n  --dedupe-key \"${ISSUE_ID}:${THREAD_ID}:reply\"\n\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fresolve_review_thread.py\" \\\n  --thread-id \"${THREAD_ID}\"\n```\n\n5. Review the exact-head diff against the original bead's acceptance criteria\n   and applicable governing contract; threads alone are not the review. Leave a line-level\n   comment (a resolvable thread) for each untracked verdict-changing issue:\n   correctness, contract, acceptance, the craft-and-care bar, or a test-growth\n   gate. When unsure, thread it; the rest go to `Discovered-Follow-Ups-JSON`:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fcreate_inline_review_comment.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\" \\\n  --commit-id \"${HEAD_SHA}\" \\\n  --path \"${FILE_PATH}\" \\\n  --line \"${LINE}\" \\\n  --body \"${BODY}\" \\\n  --dedupe-key \"${ISSUE_ID}:${FILE_PATH}:${LINE}\"\n```\n\n6. Review the tests as part of the diff using\n   [`..\u002F..\u002Freferences\u002Ftest-growth-gate.md`](..\u002F..\u002Freferences\u002Ftest-growth-gate.md):\n   the PR body states its net test delta, new tests extend the nearest existing\n   test rather than cloning setup, each behavior is pinned by one gate species,\n   and no test asserts source text, log lines, or exact strings that are not a\n   contract. A violation is a `correction-required` thread like any other.\n\n7. Default to **no code changes**. Return current-outcome corrections to the\n   existing implementation owner directly, with substantive findings and the\n   reviewed content identity. Resume that session for corrections and this\n   reviewer for recheck. A coordinator relays only when the runtime requires\n   it; ordinary repairs need no new task, allocation, or permission. Recovery\n   replaces the owner only after its lease is dead or an explicit handoff.\n\n   Fail-closed behavior, auth\u002Fauthorization, approvals, persistence, migrations,\n   cross-schema access, concurrency, replay\u002Fidempotence, and data-loss handling\n   are semantic regardless of line count.\n\n8. If a reviewer has already authored semantic fixes in an exceptional\n   recovery, report `pushed-review-fixes`: a fresh independent reviewer is\n   required. This is a recovery report, not the ordinary correction route.\n   Keep session URLs and attribution links out of commits and PR bodies.\n\n9. Repeated same-seam corrections update the current behavior matrix in place\n   with the same owner\u002Freviewer. A new trust boundary, subsystem, or risk\n   class returns to its governing scope\u002Fauthorization gate.\n\n### Phase 4: Verify\n\nRun all required project quality gates needed to substantiate the review, and\nthe repository's required landing checks. Typical gates:\n- lint\n- typecheck\n- tests\n\nIf project docs do not name the commands clearly, use:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fdiscover_quality_gates.py\"\n```\n\nTreat discovered commands as candidates that still need judgment, not blind\ntruth. Do not claim completion with failing gates.\n\nRun gates token-efficiently (`..\u002F..\u002Freferences\u002Ftoken-efficiency.md`): log to a\nfile, read exit status plus failure tail, iterate on covering tests only. Hosted\nCI on the exact reviewed head is the broad evidence; recompute it locally only if\nthe repo names a local broad gate, no hosted run covers it, or to reproduce one.\n\n### Phase 5: Merge Or Report Retry\n\n1. Evaluate merge readiness with:\n\n```bash\nMERGE_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fevaluate_merge_readiness.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\")\n```\n\n2. Reuse substantive review and test evidence according to\n   [delivery policy](..\u002F..\u002Freferences\u002Fdelivery-model.md): record source\u002Ftree\n   scope, diff and relevant base assumptions. Reuse unchanged content after\n   a session wake or identity-only head change; assess the changed content\n   and interactions when its inputs change. Runtime\u002Fenvironment evidence has\n   its own freshness requirement. Bind the resulting verdict to the current\n   `Reviewed-Head-Commit` immediately before merge assessment.\n   Merge is allowed only when `git rev-parse HEAD` and the GitHub PR head both\n   still equal that exact head SHA and all are true:\n   - PR state is `OPEN`\n   - PR is not draft\n   - unresolved review thread count is zero\n   - required checks are green or neutral\u002Fskipped\n   - `reviewDecision` is not `CHANGES_REQUESTED`\n   - `mergeStateStatus` is one of `CLEAN`, `HAS_HOOKS`, or `UNSTABLE`\n3. Apply the canonical [Owner merge hold](..\u002Fbeads-coordinator\u002Freferences\u002Fcoordinator-loop.md#owner-merge-hold)\n   immediately before every direct\u002Fauto merge, GraphQL enqueue fallback and\n   retry: `owner_merge_guard \"$PR_NUMBER\" && \u003Caction>`. No action on nonzero.\n   Exact OPEN held PRs report `held-for-owner`; unavailable labels fail closed.\n   Never call `gh pr merge` unless the merge-readiness helper returns\n   `merge_ok: true`. If required checks could not be fetched or validated, that\n   is a blocker and must fail closed.\n4. If the head moved after review, stop and report\n   `blocked-awaiting-coordinator`; never merge an unreviewed head.\n5. If merge is safe, run the helper's `merge_command` (do **not** delete the\n   branch; `MERGE_QUEUE=yes` from the coordinator overrides a `null` detection):\n\n```bash\nowner_merge_guard \"$PR_NUMBER\" && gh pr merge \"${PR_NUMBER}\" --squash          # no queue; confirm state=MERGED -> merged-pr\nowner_merge_guard \"$PR_NUMBER\" && gh pr merge \"${PR_NUMBER}\" --squash --auto   # queue; confirm mergeQueueEntry -> merge-queued\n```\n\n   Under a queue the reviewer's job ends at `merge-queued`; the queue rebuilds\n   and re-tests once and the coordinator confirms `MERGED`. Never bypass the\n   queue with `--admin`. Leave `agent\u002F\u003Cid>` in place: the coordinator deletes\n   it after closure so the branch → bead correlation survives a crash.\n   Confirm the PR is actually merged (or queued) before reporting; details in\n   [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md).\n\n6. If merge is not safe, do not mutate Beads state. Report the retry reason in\n   `Blockers-JSON` or `Discovered-Follow-Ups-JSON` so the coordinator can\n   create or wire the right follow-up work.\n\n7. If you intentionally close the PR instead of merging it, leave an\n   explanatory comment first, then freshly guard immediately before closing\n   (see [thread operations](references\u002Fthread-operations.md#close-a-pr-instead-of-merging)).\n\n## Failure Protocol\n\nUse [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md) for\nstatus selection, owner holds, failures and confirmed merge\u002Fqueue outcomes.\nDo not mutate Beads lifecycle state; the coordinator reconciles the report.\n\n## Validation\n\nFor trigger checks, helper smoke tests, and end-to-end dry-run scenarios, use\n[`references\u002Fevaluation.md`](references\u002Fevaluation.md). Run that validation\nloop whenever you materially change this skill.\n\n## Output Format\n\nThis report is the only valid ending; never stop on a plan or a question. Only\nan external or hard-gated blocker is `blocked-awaiting-coordinator`. Produce\nexactly this high-level structure: plain-text scalars, compact JSON arrays.\n\n````text\n## PR Reviewer Report: \u003CISSUE_ID>\n\nStatus: merged-pr | merge-queued | held-for-owner | corrections-required | pushed-review-fixes | blocked-awaiting-coordinator | invalid-runtime-context\nIssue: \u003CISSUE_ID>\nOriginal-Issue: \u003Coriginal bead id or unknown>\nBranch: \u003Chead branch or n\u002Fa>\nWorktree: \u003CWORKTREE_PATH>\nHead-Commit: \u003Cgit rev-parse HEAD or n\u002Fa>\nReviewed-Head-Commit: \u003Cexact reviewed head SHA or n\u002Fa>\nReviewer-Identity: \u003Cruntime agent id and\u002For GitHub login>\nRisk-Tier: high | standard | low\nBranch-Pushed: yes | no\nPR-URL: \u003Curl or n\u002Fa>\nPR-Number: \u003Cnumber or n\u002Fa>\nBase-Branch: \u003Cbranch or n\u002Fa>\nMerge-Performed: yes | queued | no\nPR-Closed: yes | no\nSummary: \u003C1-2 sentence description of what was done>\n\nQuality-Gates:\n- lint: pass | fail | not-run\n- typecheck: pass | fail | not-run\n- tests: pass | fail | not-run\n\nReview-Actions-JSON:\n```json\n[]\n```\n\nDiscovered-Follow-Ups-JSON:\n```json\n[]\n```\n\nBlockers-JSON:\n```json\n[]\n```\n````\n\nRules:\n- use exactly one `Status` value\n- `merged-pr` means the PR was merged and confirmed, but no Beads closure was\n  performed here\n- `merge-queued` means the exact reviewed head passed every merge gate and was\n  enqueued with `gh pr merge --squash --auto` (confirmed via an actual\n  `mergeQueueEntry`); `Merge-Performed: queued`; the coordinator confirms the\n  eventual merge and performs closure\n- `held-for-owner` means an OPEN owner hold; `Merge-Performed: no` and\n  `PR-Closed: no`; preserve all findings, identity\u002Fhead\u002Frisk and correction\n  evidence per the failure protocol (including fresh-independent-review needs)\n- `corrections-required` means actionable unresolved threads were returned to\n  the original author or recovery worker; the reviewer did not author semantic\n  corrections\n- `pushed-review-fixes` means exceptional reviewer-authored code was pushed;\n  another fresh independent reviewer must assess the new head\n- `blocked-awaiting-coordinator` requires at least one blocker object\n- `invalid-runtime-context` means bootstrap failed before meaningful review work\n- if there are no review actions, follow-ups, or blockers, use `[]`\n\nJSON object schemas:\n\n`Review-Actions-JSON` entries:\n\n```json\n{\n  \"thread_url\": \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123#discussion_r1\",\n  \"action\": \"correction-required\",\n  \"summary\": \"Fail closed when the evidence field is malformed\"\n}\n```\n\n`Discovered-Follow-Ups-JSON` entries:\n\n```json\n{\n  \"title\": \"Short follow-up title\",\n  \"type\": \"bug\",\n  \"priority\": 2,\n  \"depends_on\": \"bd-42\",\n  \"rationale\": \"Why this should be tracked separately\"\n}\n```\n\n`Blockers-JSON` entries:\n\n```json\n{\n  \"title\": \"Concrete blocker title\",\n  \"type\": \"task\",\n  \"priority\": 1,\n  \"depends_on\": \"bd-42\",\n  \"rationale\": \"What is blocked and why\",\n  \"unblock_condition\": \"What must happen before work can resume\"\n}\n```\n","# Beads PR Reviewer Worker\n\n## Overview\n\nProcess exactly one dedicated `pr-review-task` bead tied to a GitHub PR:\n- resolve the original implementation bead and canonical PR,\n- review the exact head's diff, its unresolved threads, and its tests,\n- leave actionable, resolvable findings for the implementation\u002Frecovery lane,\n- decide whether the PR is mergeable,\n- report the outcome in a machine-readable form for the coordinator.\n\nYou may mutate GitHub review state and merge or close the PR when warranted.\nYou do **not** mutate Beads lifecycle state.\n\n## Use This Skill When\n\n- the coordinator dispatches one dedicated `pr-review-task` bead\n- you are given `ISSUE_ID`, `WORKTREE_PATH`, and `REPO_ROOT` (plus an optional\n  2-4 line summary\u002Facceptance-criteria excerpt from the coordinator)\n- the PR already exists and needs review follow-up, retry triage, or merge\n  evaluation\n\nTypically invoked by [`..\u002Fbeads-coordinator\u002FSKILL.md`](..\u002Fbeads-coordinator\u002FSKILL.md),\nnot directly by users.\n\n## Context\n\n| Variable | Description |\n|---|---|\n| `ISSUE_ID` | Assigned PR-review bead ID |\n| `WORKTREE_PATH` | Dedicated isolated git worktree for this worker |\n| `REPO_ROOT` | Main repository root for read-only orientation |\n| `ISSUE_JSON` | (Optional\u002Flegacy) Full issue JSON if inlined by an older coordinator. When absent, self-fetch with the projected `bd show` in Phase 1 |\n| `MERGE_QUEUE` | (Optional) `yes`\u002F`no` from the coordinator's preflight. When absent, trust `merge_queue` in the merge-readiness helper output |\n\n## Non-Negotiable Boundaries\n\n- All git operations happen inside `WORKTREE_PATH`, never inside `REPO_ROOT`.\n- Never `cd` to `REPO_ROOT`. Use absolute paths or `git -C \"${REPO_ROOT}\"`.\n- Do not run `bd create`, `bd update`, `bd dep add`, or `bd close`.\n- Assume the coordinator already claimed the review bead and applied the\n  `review-running` lock. Do not try to claim or release that lock yourself.\n- No hidden parallel writers; on `LANE-CONTINUATION`, redo bootstrap + attestations.\n- Preserve reviewer independence: do not author semantic corrections on the\n  head being reviewed. The original author or a recovery worker owns fixes.\n- Do not require a synthetic \"no issues detected\" marker thread in order to\n  merge. Audit comments are optional, not merge gates.\n\n## Optional Project-Level Craft-And-Care Gate\n\nBefore the first finding, apply\n[`..\u002F..\u002Freferences\u002Fcraft-and-care-gate.md`](..\u002F..\u002Freferences\u002Fcraft-and-care-gate.md):\ndiscover a repo-owned `craft-and-care` skill, read it once if present, use it\nas the bar for findings and merge readiness, and run its final standards pass\nagainst the diff before handoff.\n\n## Bundled Helpers\n\nUse the bundled helpers for deterministic operations (prepare, reply, resolve,\nand comment mutate GitHub or push), each by the loaded package's absolute path:\n\n- [`scripts\u002Fresolve_review_context.py`](scripts\u002Fresolve_review_context.py)\n  Resolves the original bead, PR number, repo, branches, and current PR state.\n  Every `bd show` response it uses must contain exactly one record whose `id`\n  matches the requested ID; empty, multiple, non-record, or foreign responses\n  fail closed rather than selecting a first record.\n- [`scripts\u002Fprepare_pr_branch.py`](scripts\u002Fprepare_pr_branch.py)\n  Checks out `review\u002F\u003Creview-id>` at the published package head and probes\n  merge compatibility. Never rewrites the implementation branch; conflicts\n  return to its existing owner.\n- [`scripts\u002Flist_review_threads.py`](scripts\u002Flist_review_threads.py)\n  Lists review threads with full pagination and returns unresolved-thread\n  details in JSON.\n- [`scripts\u002Fevaluate_merge_readiness.py`](scripts\u002Fevaluate_merge_readiness.py)\n  Computes merge gates in one place, failing closed when required checks cannot\n  be verified, and reports whether the base branch sits behind a merge queue\n  (`merge_queue`, `merge_command`).\n- [`scripts\u002Fdiscover_quality_gates.py`](scripts\u002Fdiscover_quality_gates.py)\n  Discovers likely lint, typecheck, and test commands from common project\n  manifests when project docs do not name them explicitly.\n- [`scripts\u002Freply_to_review_thread.py`](scripts\u002Freply_to_review_thread.py)\n  Adds an idempotent reply to an existing review thread.\n- [`scripts\u002Fresolve_review_thread.py`](scripts\u002Fresolve_review_thread.py)\n  Resolves a review thread idempotently.\n- [`scripts\u002Fcreate_inline_review_comment.py`](scripts\u002Fcreate_inline_review_comment.py)\n  Adds an idempotent line-level review comment for a newly discovered issue.\n\nUse the bundled references in `references\u002F` when you need the exact GitHub\nreview-thread operations or the failure protocol:\n\n- [`references\u002Fthread-operations.md`](references\u002Fthread-operations.md)\n- [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md)\n- [`references\u002Fevaluation.md`](references\u002Fevaluation.md)\n\n## Workflow\n\n### Phase 1: Bootstrap\n\n1. `cd \"${WORKTREE_PATH}\"`.\n2. Fetch full issue details when `ISSUE_JSON` was not inlined by the coordinator:\n\n```bash\nISSUE_JSON=$(bd show \"${ISSUE_ID}\" --json \\\n  | jq -e --arg id \"$ISSUE_ID\" '\n      if type == \"array\" and length == 1 and .[0].id == $id then\n        .[0] | {id, title, status, labels, external_ref, description, acceptance_criteria, design, notes}\n      else error(\"expected exactly the requested bead\") end')\n```\n\nProject to those fields only (`..\u002F..\u002Freferences\u002Ftoken-efficiency.md`); the\nfull record carries history you do not need.\n\n3. Verify runtime context:\n\n```bash\nASSERT_WORKER_CONTEXT=\"\u003Cloaded beads-worker package>\u002Fscripts\u002Fassert_worker_context.py\"\npython3 \"${ASSERT_WORKER_CONTEXT}\" \\\n  --worktree-path \"${WORKTREE_PATH}\" \\\n  --repo-root \"${REPO_ROOT}\" \\\n  --issue-id \"${ISSUE_ID}\" \\\n  --review-id \"${ISSUE_ID}\" \\\n  --current-path \"$(pwd -P)\"\n```\n\nResolve the helper from the loaded `beads-worker\u002FSKILL.md` path. It derives the\nbranch and repository identity without inherited `GIT_*` overrides. Run it and\nlater Git\u002Fworktree commands with actual cwd set to `WORKTREE_PATH`; `bd -C`\ndoes not set Git's cwd. The worktree branch is `review\u002F\u003CISSUE_ID>` on\nboth the initial review and later rechecks. Keep the implementation owner's\nworktree and `agent\u002F\u003Canchor>` branch intact.\n4. Confirm GitHub access before doing anything expensive:\n\n```bash\ngh auth status\n```\n\n5. If a repository-level `craft-and-care` skill exists, read it now.\n6. Resolve review context with the bundled helper. The output must include:\n   - `original_id`\n   - `pr_number`\n   - `pr_url`\n   - `owner`\n   - `repo`\n   - `head_branch`\n   - `base_branch`\n7. Record reviewer identity (runtime agent ID when available plus authenticated\n   GitHub login) and classify the PR as `high`, `standard`, or `low` using the\n   coordinator's\n   [review risk tiers](..\u002Fbeads-coordinator\u002Freferences\u002Fruntime-and-safety.md#review-risk-tiers).\n\nIf review context cannot be resolved, stop and report\n`blocked-awaiting-coordinator`.\n\nConcrete invocation:\n\n```bash\nCONTEXT_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fresolve_review_context.py\" --issue-id \"${ISSUE_ID}\")\n```\n\n### Phase 2: Prepare The Review Snapshot\n\nRun the helper in the isolated review worktree:\n\n```bash\nPREP_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fprepare_pr_branch.py\" \\\n  --base-branch \"${PR_BASE_BRANCH}\" \\\n  --head-branch \"${PR_HEAD_BRANCH}\" \\\n  --review-id \"${ISSUE_ID}\")\n```\n\nThe helper checks out `review\u002F\u003Creview-id>` at the fetched PR head and probes\n`git merge-tree --write-tree`. Clean base drift does not rewrite the author's\nhead. `corrections-required` (conflict or `.beads\u002F` divergence) returns to the\nexisting implementation owner on the same PR; `blocked` requires diagnosis.\nAn unsupported merge probe fails closed. Never remove the implementation\nworktree, stash its state, rebase its branch, or force-push it as preparation.\n\nBefore reviewing, verify local HEAD and GitHub PR head equal the reported\n`head_commit`. Load the current packet and member acceptance criteria from\n`delivery_members` \u002F `delivery_packet` in the resolved context. The package\nhas one canonical review bead targeting its anchor. Do not create a review\nper member or assign the anchor's `gh-pr:N` to members.\n\n### Phase 3: Review And Classify Findings\n\n1. Fetch review threads with:\n\n```bash\nTHREADS_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Flist_review_threads.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\")\n```\n\n2. If the thread helper reports incomplete or ambiguous evidence, stop and\n   report `blocked-awaiting-coordinator`. Do not review from partial thread\n   context.\n3. For each unresolved thread:\n   - inspect the feedback in code and tests,\n   - classify it as current-PR correctness, prerequisite blocker, new behavior,\n     or duplicate,\n   - reply in-thread with a concrete verdict: `correction-required`,\n     `answered`, `won't-fix`, or `duplicate`,\n   - leave correction threads unresolved for the implementation\u002Frecovery lane;\n     resolve only after the answer or corrected exact head is real.\n4. Use the bundled thread helpers instead of raw ad hoc API calls:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Freply_to_review_thread.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\" \\\n  --comment-id \"${TOP_LEVEL_COMMENT_ID}\" \\\n  --thread-id \"${THREAD_ID}\" \\\n  --body \"${BODY}\" \\\n  --dedupe-key \"${ISSUE_ID}:${THREAD_ID}:reply\"\n\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fresolve_review_thread.py\" \\\n  --thread-id \"${THREAD_ID}\"\n```\n\n5. Review the exact-head diff against the original bead's acceptance criteria\n   and applicable governing contract; threads alone are not the review. Leave a line-level\n   comment (a resolvable thread) for each untracked verdict-changing issue:\n   correctness, contract, acceptance, the craft-and-care bar, or a test-growth\n   gate. When unsure, thread it; the rest go to `Discovered-Follow-Ups-JSON`:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fcreate_inline_review_comment.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\" \\\n  --commit-id \"${HEAD_SHA}\" \\\n  --path \"${FILE_PATH}\" \\\n  --line \"${LINE}\" \\\n  --body \"${BODY}\" \\\n  --dedupe-key \"${ISSUE_ID}:${FILE_PATH}:${LINE}\"\n```\n\n6. Review the tests as part of the diff using\n   [`..\u002F..\u002Freferences\u002Ftest-growth-gate.md`](..\u002F..\u002Freferences\u002Ftest-growth-gate.md):\n   the PR body states its net test delta, new tests extend the nearest existing\n   test rather than cloning setup, each behavior is pinned by one gate species,\n   and no test asserts source text, log lines, or exact strings that are not a\n   contract. A violation is a `correction-required` thread like any other.\n\n7. Default to **no code changes**. Return current-outcome corrections to the\n   existing implementation owner directly, with substantive findings and the\n   reviewed content identity. Resume that session for corrections and this\n   reviewer for recheck. A coordinator relays only when the runtime requires\n   it; ordinary repairs need no new task, allocation, or permission. Recovery\n   replaces the owner only after its lease is dead or an explicit handoff.\n\n   Fail-closed behavior, auth\u002Fauthorization, approvals, persistence, migrations,\n   cross-schema access, concurrency, replay\u002Fidempotence, and data-loss handling\n   are semantic regardless of line count.\n\n8. If a reviewer has already authored semantic fixes in an exceptional\n   recovery, report `pushed-review-fixes`: a fresh independent reviewer is\n   required. This is a recovery report, not the ordinary correction route.\n   Keep session URLs and attribution links out of commits and PR bodies.\n\n9. Repeated same-seam corrections update the current behavior matrix in place\n   with the same owner\u002Freviewer. A new trust boundary, subsystem, or risk\n   class returns to its governing scope\u002Fauthorization gate.\n\n### Phase 4: Verify\n\nRun all required project quality gates needed to substantiate the review, and\nthe repository's required landing checks. Typical gates:\n- lint\n- typecheck\n- tests\n\nIf project docs do not name the commands clearly, use:\n\n```bash\npython3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fdiscover_quality_gates.py\"\n```\n\nTreat discovered commands as candidates that still need judgment, not blind\ntruth. Do not claim completion with failing gates.\n\nRun gates token-efficiently (`..\u002F..\u002Freferences\u002Ftoken-efficiency.md`): log to a\nfile, read exit status plus failure tail, iterate on covering tests only. Hosted\nCI on the exact reviewed head is the broad evidence; recompute it locally only if\nthe repo names a local broad gate, no hosted run covers it, or to reproduce one.\n\n### Phase 5: Merge Or Report Retry\n\n1. Evaluate merge readiness with:\n\n```bash\nMERGE_JSON=$(python3 \"\u003Cloaded beads-pr-reviewer-worker package>\u002Fscripts\u002Fevaluate_merge_readiness.py\" \\\n  --owner \"${OWNER}\" \\\n  --repo \"${REPO}\" \\\n  --pr-number \"${PR_NUMBER}\")\n```\n\n2. Reuse substantive review and test evidence according to\n   [delivery policy](..\u002F..\u002Freferences\u002Fdelivery-model.md): record source\u002Ftree\n   scope, diff and relevant base assumptions. Reuse unchanged content after\n   a session wake or identity-only head change; assess the changed content\n   and interactions when its inputs change. Runtime\u002Fenvironment evidence has\n   its own freshness requirement. Bind the resulting verdict to the current\n   `Reviewed-Head-Commit` immediately before merge assessment.\n   Merge is allowed only when `git rev-parse HEAD` and the GitHub PR head both\n   still equal that exact head SHA and all are true:\n   - PR state is `OPEN`\n   - PR is not draft\n   - unresolved review thread count is zero\n   - required checks are green or neutral\u002Fskipped\n   - `reviewDecision` is not `CHANGES_REQUESTED`\n   - `mergeStateStatus` is one of `CLEAN`, `HAS_HOOKS`, or `UNSTABLE`\n3. Apply the canonical [Owner merge hold](..\u002Fbeads-coordinator\u002Freferences\u002Fcoordinator-loop.md#owner-merge-hold)\n   immediately before every direct\u002Fauto merge, GraphQL enqueue fallback and\n   retry: `owner_merge_guard \"$PR_NUMBER\" && \u003Caction>`. No action on nonzero.\n   Exact OPEN held PRs report `held-for-owner`; unavailable labels fail closed.\n   Never call `gh pr merge` unless the merge-readiness helper returns\n   `merge_ok: true`. If required checks could not be fetched or validated, that\n   is a blocker and must fail closed.\n4. If the head moved after review, stop and report\n   `blocked-awaiting-coordinator`; never merge an unreviewed head.\n5. If merge is safe, run the helper's `merge_command` (do **not** delete the\n   branch; `MERGE_QUEUE=yes` from the coordinator overrides a `null` detection):\n\n```bash\nowner_merge_guard \"$PR_NUMBER\" && gh pr merge \"${PR_NUMBER}\" --squash          # no queue; confirm state=MERGED -> merged-pr\nowner_merge_guard \"$PR_NUMBER\" && gh pr merge \"${PR_NUMBER}\" --squash --auto   # queue; confirm mergeQueueEntry -> merge-queued\n```\n\n   Under a queue the reviewer's job ends at `merge-queued`; the queue rebuilds\n   and re-tests once and the coordinator confirms `MERGED`. Never bypass the\n   queue with `--admin`. Leave `agent\u002F\u003Cid>` in place: the coordinator deletes\n   it after closure so the branch → bead correlation survives a crash.\n   Confirm the PR is actually merged (or queued) before reporting; details in\n   [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md).\n\n6. If merge is not safe, do not mutate Beads state. Report the retry reason in\n   `Blockers-JSON` or `Discovered-Follow-Ups-JSON` so the coordinator can\n   create or wire the right follow-up work.\n\n7. If you intentionally close the PR instead of merging it, leave an\n   explanatory comment first, then freshly guard immediately before closing\n   (see [thread operations](references\u002Fthread-operations.md#close-a-pr-instead-of-merging)).\n\n## Failure Protocol\n\nUse [`references\u002Ffailure-protocol.md`](references\u002Ffailure-protocol.md) for\nstatus selection, owner holds, failures and confirmed merge\u002Fqueue outcomes.\nDo not mutate Beads lifecycle state; the coordinator reconciles the report.\n\n## Validation\n\nFor trigger checks, helper smoke tests, and end-to-end dry-run scenarios, use\n[`references\u002Fevaluation.md`](references\u002Fevaluation.md). Run that validation\nloop whenever you materially change this skill.\n\n## Output Format\n\nThis report is the only valid ending; never stop on a plan or a question. Only\nan external or hard-gated blocker is `blocked-awaiting-coordinator`. Produce\nexactly this high-level structure: plain-text scalars, compact JSON arrays.\n\n````text\n## PR Reviewer Report: \u003CISSUE_ID>\n\nStatus: merged-pr | merge-queued | held-for-owner | corrections-required | pushed-review-fixes | blocked-awaiting-coordinator | invalid-runtime-context\nIssue: \u003CISSUE_ID>\nOriginal-Issue: \u003Coriginal bead id or unknown>\nBranch: \u003Chead branch or n\u002Fa>\nWorktree: \u003CWORKTREE_PATH>\nHead-Commit: \u003Cgit rev-parse HEAD or n\u002Fa>\nReviewed-Head-Commit: \u003Cexact reviewed head SHA or n\u002Fa>\nReviewer-Identity: \u003Cruntime agent id and\u002For GitHub login>\nRisk-Tier: high | standard | low\nBranch-Pushed: yes | no\nPR-URL: \u003Curl or n\u002Fa>\nPR-Number: \u003Cnumber or n\u002Fa>\nBase-Branch: \u003Cbranch or n\u002Fa>\nMerge-Performed: yes | queued | no\nPR-Closed: yes | no\nSummary: \u003C1-2 sentence description of what was done>\n\nQuality-Gates:\n- lint: pass | fail | not-run\n- typecheck: pass | fail | not-run\n- tests: pass | fail | not-run\n\nReview-Actions-JSON:\n```json\n[]\n```\n\nDiscovered-Follow-Ups-JSON:\n```json\n[]\n```\n\nBlockers-JSON:\n```json\n[]\n```\n````\n\nRules:\n- use exactly one `Status` value\n- `merged-pr` means the PR was merged and confirmed, but no Beads closure was\n  performed here\n- `merge-queued` means the exact reviewed head passed every merge gate and was\n  enqueued with `gh pr merge --squash --auto` (confirmed via an actual\n  `mergeQueueEntry`); `Merge-Performed: queued`; the coordinator confirms the\n  eventual merge and performs closure\n- `held-for-owner` means an OPEN owner hold; `Merge-Performed: no` and\n  `PR-Closed: no`; preserve all findings, identity\u002Fhead\u002Frisk and correction\n  evidence per the failure protocol (including fresh-independent-review needs)\n- `corrections-required` means actionable unresolved threads were returned to\n  the original author or recovery worker; the reviewer did not author semantic\n  corrections\n- `pushed-review-fixes` means exceptional reviewer-authored code was pushed;\n  another fresh independent reviewer must assess the new head\n- `blocked-awaiting-coordinator` requires at least one blocker object\n- `invalid-runtime-context` means bootstrap failed before meaningful review work\n- if there are no review actions, follow-ups, or blockers, use `[]`\n\nJSON object schemas:\n\n`Review-Actions-JSON` entries:\n\n```json\n{\n  \"thread_url\": \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123#discussion_r1\",\n  \"action\": \"correction-required\",\n  \"summary\": \"Fail closed when the evidence field is malformed\"\n}\n```\n\n`Discovered-Follow-Ups-JSON` entries:\n\n```json\n{\n  \"title\": \"Short follow-up title\",\n  \"type\": \"bug\",\n  \"priority\": 2,\n  \"depends_on\": \"bd-42\",\n  \"rationale\": \"Why this should be tracked separately\"\n}\n```\n\n`Blockers-JSON` entries:\n\n```json\n{\n  \"title\": \"Concrete blocker title\",\n  \"type\": \"task\",\n  \"priority\": 1,\n  \"depends_on\": \"bd-42\",\n  \"rationale\": \"What is blocked and why\",\n  \"unblock_condition\": \"What must happen before work can resume\"\n}\n```\n",{"name":5,"metadata":43,"description":7,"compatibility":49},{"owner":44,"status":27,"authors":45,"last_reviewed":48},"tze",[44,46,47],"OpenAI Codex","Claude Fable 5.1","2026-11-06","Requires a Beads-backed git repository with git worktrees, git, bd, jq, gh, and python3 available, plus authenticated GitHub access and network access for review, push, and merge operations.","main","255e91995b1a1c1178f024d1e29fbe8f93b618c9","skills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap","https:\u002F\u002Fgithub.com\u002Ftzeusy-org","2026-11-10 23:17:25",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add tzeusy-org\u002Fai-bootstrap --skill beads-pr-reviewer-worker",{"tool":62,"command":63},"bunx","bunx skills add tzeusy-org\u002Fai-bootstrap --skill beads-pr-reviewer-worker",{"tool":65,"command":66},"pnpm","pnpm dlx skills add tzeusy-org\u002Fai-bootstrap --skill beads-pr-reviewer-worker","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002FSKILL.md",true,[70,76,80,84,88,94,98,102,106,110,114,118,122,126],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"agents\u002Fopenai.yaml","REFERENCE","参考文档",324,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fagents\u002Fopenai.yaml",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fevaluation.md",3618,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Freferences\u002Fevaluation.md",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Ffailure-protocol.md",7588,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Freferences\u002Ffailure-protocol.md",{"path":85,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fthread-operations.md",2828,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Freferences\u002Fthread-operations.md",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fcreate_inline_review_comment.py","SCRIPT","脚本",3881,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fcreate_inline_review_comment.py",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Fdiscover_quality_gates.py",1928,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fdiscover_quality_gates.py",{"path":99,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002Fevaluate_merge_readiness.py",8054,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fevaluate_merge_readiness.py",{"path":103,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":104,"sourceHtmlUrl":105},"scripts\u002Flist_review_threads.py",4454,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Flist_review_threads.py",{"path":107,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":108,"sourceHtmlUrl":109},"scripts\u002Fprepare_pr_branch.py",3959,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fprepare_pr_branch.py",{"path":111,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":112,"sourceHtmlUrl":113},"scripts\u002Freply_to_review_thread.py",3786,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Freply_to_review_thread.py",{"path":115,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":116,"sourceHtmlUrl":117},"scripts\u002Fresolve_review_context.py",12445,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fresolve_review_context.py",{"path":119,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":120,"sourceHtmlUrl":121},"scripts\u002Fresolve_review_thread.py",2504,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Fscripts\u002Fresolve_review_thread.py",{"path":123,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":124,"sourceHtmlUrl":125},"tests\u002Ftest_scripts.py",62308,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Ftests\u002Ftest_scripts.py",{"path":127,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":128,"sourceHtmlUrl":129},"tests\u002Ftest_skill_package.py",8814,"https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fbeads-orchestration\u002Fsubskills\u002Fbeads-pr-reviewer-worker\u002Ftests\u002Ftest_skill_package.py",[131,156,182,197,214,225],{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":38},"01M6DAZD21TWH2ET70V9FF75CQ","user-run","Use when a step needs privileges this session lacks (docker, sudo, another user's checkout or secrets, host access) and the owner must run it as tze. Writes a reviewable \u002Fhome\u002Forca\u002F.tmp\u002F\u003Cslug>\u002Frun.sh that impersonates tze (USER_TO_IMPERSONATE overrides), tees timestamped logs plus latest.log and collects artifacts there; Claude presents it with a risk and time brief, then continues from the logs. Triggers: \"I'll run it for you\", \"permission denied on docker.sock\", \"needs sudo\", \"sudo: a password is required\", \"run as tze\", \"\u002Fuser-run\".","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fuser-run\u002FSKILL.md",[],[138,139,140,141,142,143,144,145,146,147,27,148,149,150,151,152,33,153,154,155],"user run","user","run","docker","logs","use","host","as","triggers","permission","time","log","artifacts","session","password","secrets","risk","brief",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":172,"publishedAt":38},"01M6DAZAHTCBAD2WF0GAHWPST8","requesting-code-review","Use when completing tasks, implementing major features, or before merging to verify work meets requirements","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fth-workflow\u002Fsubskills\u002Frequesting-code-review\u002FSKILL.md",[162,167],{"categoryNo":163,"categoryName":164,"taxonomyType":165,"taxonomyTypeDesc":166},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":168,"categoryName":169,"taxonomyType":170,"taxonomyTypeDesc":171},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[173,174,31,175,176,177,27,178,179,143,180,181],"requesting code review","code","code review","work","requirements","upstream","superpowers","verify","tasks",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":190,"publishedAt":38},"01M6DAZ7CJ82D81XZB2YHVVY48","receiving-code-review","Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fth-workflow\u002Fsubskills\u002Freceiving-code-review\u002FSKILL.md",[188,189],{"categoryNo":163,"categoryName":164,"taxonomyType":165,"taxonomyTypeDesc":166},{"categoryNo":168,"categoryName":169,"taxonomyType":170,"taxonomyTypeDesc":171},[191,174,31,175,27,178,192,179,143,193,194,195,196],"receiving code review","implementation","code review feedback","technical","feedback","verification",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":38},"01M6DAZ4ER76ADXJ9KRFP7V3Q9","finishing-a-development-branch","Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fth-workflow\u002Fsubskills\u002Ffinishing-a-development-branch\u002FSKILL.md",[],[204,205,206,207,143,208,176,209,210,23,179,26,211,212,27,178,213,192],"branch","development","finishing a development branch","integrate","decide","how","cleanup","tests","structured","options",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":218,"categories":219,"keywords":220,"publishedAt":38},"01M6DAYZFWWW2YPKP89QNQR96H","executing-plans","Use when you have a written implementation plan to execute in a separate session with review checkpoints","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fth-workflow\u002Fsubskills\u002Fexecuting-plans\u002FSKILL.md",[],[221,222,223,31,224,27,178,192,179,143,151],"plans","executing plans","plan","execute",{"skillNo":226,"name":227,"nameZh":6,"description":228,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":229,"categories":230,"keywords":231,"publishedAt":38},"01M6DAYWM2YQHYCK7C35K1D29J","dispatching-parallel-agents","Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies","https:\u002F\u002Fgithub.com\u002Ftzeusy-org\u002Fai-bootstrap\u002Fblob\u002Fmain\u002Fskills\u002Fpersonal\u002Fth-workflow\u002Fsubskills\u002Fdispatching-parallel-agents\u002FSKILL.md",[],[232,233,234,143,179,178,235,27,236,181,237],"parallel agents","parallel","dispatching parallel agents","state","dependencies","shared"]