Repository navigation
Description
Problem
Child of #793, blocked by #976. Delivers AC12 of the parent, which this issue numbers AC1, and owns the offline capability-probe test (TestWatchCommandProbe, with TestWatchProbeOffline in the wrapper pull request): the skill's watcher entry becomes a thin wrapper that probes for the Go command from the sibling child and falls back to the unchanged existing shell script.
Watching stays shell behavior until a wrapper selects the Go command (packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53). Consumers on older binaries must keep working through the N-2 window.
Acceptance criteria
- AC1: Non-functional: the skill's watcher entry ends this change as a new thin shell wrapper that probes the Go subcommand, forwards unchanged arguments, output and status when supported, and falls back to the existing
watch-checks.sh, left byte-for-byte unchanged, when the binary or subcommand is unavailable throughout the N-2 window; a failed supported invocation never triggers fallback.
Scope and non-goals
In scope: the wrapper, the capability probe, the skill manifest's watcher invocation, the generated skill copies, and the consumer steps in docs/agent-skills-migration.md.
Non-goals:
- Any change to the Go command's behavior: the sibling child owns it.
- The command-versus-shell parity proof: test(checks): prove watch command parity against the pinned shell #978 owns it.
- Retiring the fallback, which waits on Ship the Go binaries as release assets installed through mise's github backend #333 and feat(distribution): migrate consumer tool pins to release assets #544.
- Behavior changes tracked by watch-checks.sh prints job names without their workflow, so same-named jobs look like duplicates #310, watch-pr: default 30s poll interval multiplies across concurrent agents #370, watch-pr reports pending checks as unreadable because gh pr checks exits 8 #375, watch-pr ends with NO CHECKS after an undocumented 120-second bound that PR_CHECKS_TIMEOUT does not control #430, watch-pr names a stalled code-scanning analysis instead of reporting a generic timeout #465 and watch-checks.sh retries a transient 5xx once before reporting ERROR #515.
Approach
Add a new wrapper script written with shell builtins only (parameter expansion rather than external commands such as dirname, so mise run lint-shell-allowlist passes). It probes the installed binary for the watcher's usage text, forwards arguments, output and status unchanged when supported, and runs the existing watch-checks.sh otherwise. Leave watch-checks.sh byte-for-byte untouched as the frozen fallback, so the shell allowlist gate does not check it, and point the skill manifest's watcher invocation at the wrapper. Consumers that call watch-checks.sh by name keep the old shell behavior through the N-2 window. A failed supported invocation never falls back. Run mise run generate-skills, then mise run skill-tokens, then apm install, and verify the deployed entry points, token metadata and lock changes independently.
Dependencies
- Blocked by feat(checks): add the Go pull request watch command #976, the command child. It must merge first, and the issue carries the native blocked-by link. Parent: feat(checks): move pull request watching into Go #793.
- Ship the Go binaries as release assets installed through mise's github backend #333 and feat(distribution): migrate consumer tool pins to release assets #544: binary delivery and consumer installation must complete before any fallback retirement.
Size
S
Verify plan
- Failing test first: add a wrapper regression that runs with a supporting binary available and fails against the original shell entry point because it never routes to the command, then passes once routing exists. Keep the unsupported-capability and operational-failure cases here. Command semantics are verified by feat(checks): add the Go pull request watch command #976 and are cited rather than repeated. Use scripted local responses; no live PR watching is needed.
- AC1: Exercise a supporting binary, no binary, an N-2 binary lacking the subcommand, and a supporting command returning 1, 2 or 76. Assert probe has no reads or side effects, fallback runs only for unsupported capability, forwards bytes/arguments/statuses, and never replaces an operational failure. Inspect the wrapper for forwarding/probe logic only. Run
git diff --exit-code origin/main -- packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.shand confirm the existing script is byte-identical to origin/main. - AC1: Run
mise run lint-shell-allowlistand confirm it passes with the wrapper as the only new or changed shell file. - Run
mise run check,mise run cover-go-checkandmise run cover-py-check, recording results on the reviewed head. The coverage floors are not part ofcheck. - Run
mise run generate-skills,mise run skill-tokens,apm installandmise run check-generated-skills. Compare packaged and deployed entry points, token metadata and lock changes independently. - D1–D10: Verify every AC on the merged head and cite its evidence in the PR; obtain independent exact-head approval and passing required checks; complete gitleaks, the repository leak scan and the review of every content post; sign commits and squash; update docs; include Assisted-by trailers and the provenance:agent-assisted label; check actual PR size limits; file follow-ups with Problem and numbered ACs, list them in PR Related and link deferred code to them; close the issue with a closing reference, move it to Done and record the merge commit in the final Status comment.
Risks
A fallback after an operational Go failure could repeat reads and conceal the actual outcome. Older binaries can answer help for an unknown subcommand with success, so a wrong probe could bypass the fallback.
The shell allowlist gate is not loosened or baselined: the wrapper uses builtins only and the unchanged script is not rechecked.
Undo: revert this change to restore shell watching. Do not edit the frozen shell to repair unrelated behavior.
Operator authority
None
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Work type
Projects
- StatusShow more project fieldsDone
Activity
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: NOT READY — wrapper verification must start from the merged command prerequisite
Checked
Read #977, parent Epic #793, sibling #976, and PRs #961/#962 (bodies and changed-file lists); inspected #962's wrapper and shell-test patches. Accepted the supplied mechanical-gate pass without rerunning it.
The AC split is complete and disjoint: #976 AC1–AC11 match parent AC1–AC11; #977 AC1 matches parent AC12. Wrapper shape and frozen fallback are explicit parent outcomes, so their appearance in AC1 is appropriate. AC1 is testable and traced to supporting/absent/older binaries, argument/output/status forwarding, and a side-effect-free probe. N-2 compatibility, failure handling, generated artifacts and consumer docs are covered. S fits one wrapper PR; risks, revert and Operator authority: None fit the scope. Existing behavior is at
packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53; #962's proposed wrapper starts atpackages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:3(PR head).Gaps
mise run check,mise run cover-go-checkandmise run cover-py-check, recording results on the reviewed head. The generic D1–D10 bullet does not identify these additional repository gates; the coverage floors are not run bycheck. The existing generation/token/install/check-generated sequence covers the other repository items.Split
No further split needed. Keep #977 as the S wrapper slice after #976. Acceptance ownership does not overlap; shared parity checks may validate integration without moving command acceptance into this child. Map PR #962's older parent-AC verification labels to child AC1 when attaching it to #977.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation, not that implementation or merge evidence has passed. D3 assumes gates remain intact; any gate loosening needs exact-head owner approval.
D1 The author verified each AC on the merged head, and the Verification section of the pull request cites each AC ID with its evidence: the command and its result, or a link.
D2 An independent reviewer approved the exact merged head, and the author resolved each finding or filed it as a follow-up.
D3 The required checks pass on that head, and any loosened gate has the owner's approval of that exact head.
D4 The leak scans come back clean: gitleaks, devtools'
check-leaks.shwith the repository's private-strings list, and the leak review of each post.D5 The author signed each commit, the squash included.
D6 The docs match the change (README,
docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.D7 The commits and the squash have Assisted-by trailers, and the pull request has the
provenance:agent-assistedlabel.D8 The pull request stays within the size limits, or the owner approved its exact head over the hard limit.
D9 The author files follow-ups and deferred findings as issues with at least a Problem and numbered AC and lists them under the Related section of the pull request. Any work left in the code links its issue.
D10 The merge closes the issue through a closing reference and the board shows Done. The final
Status:comment names the merge commit.devtools-1
mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.devtools-2 A change to skill sources under
packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.devtools-3 A consumer-visible change (the vendored payload, a skill, a reusable workflow, a task or a pin) has its consumer steps in
docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watch or mechanical request check were run.
Round: 1 of 3
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: NOT READY — native parent and blocker links are still missing
Checked
Read the revised #977 body, its round 1 Refinement comment, parent Epic #793, sibling #976, and PRs #961/#962 (bodies and changed-file lists). Also inspected #962's proposed wrapper and wrapper-test patches. Accepted the supplied mechanical-gate pass without rerunning it.
Round 1 gap 1 is closed: the failing-first regression now starts with a supporting binary and the original shell entry point, then passes after wrapper routing. Unsupported-capability and operational-failure cases stay here; command semantics are cited to #976. This is executable after the command prerequisite merges.
Round 1 gap 3 is closed: the Verify plan explicitly names
mise run check,mise run cover-go-checkandmise run cover-py-check, with results recorded on the reviewed head. It retains the ordered generation/token/install sequence and independent checks of deployed entry points, token metadata and lock changes.The acceptance split remains complete and disjoint: #976 owns parent AC1–AC11; #977 AC1 owns parent AC12 verbatim. Wrapper shape and the frozen fallback are required parent outcomes, so their inclusion in the child AC is appropriate. AC1 is testable and explicitly traced to supporting/absent/older binaries, unchanged forwarding, operational statuses 1/2/76, a side-effect-free probe and frozen-source comparison. N-2 compatibility, generated artifacts and consumer migration documentation are covered. S fits one wrapper PR. The risks, revert and Operator authority: None fit the scope. The current shell entry point starts repository work at
packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53; #962's proposed probe starts atpackages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:3(PR head).Gaps
parent: nullandblockedBy.nodes: []. Set the native parent to feat(checks): move pull request watching into Go #793 and native blocked-by to feat(checks): add the Go pull request watch command #976, then verify both relationships. Keep the prose consistent with those actual links. Ship the Go binaries as release assets installed through mise's github backend #333/feat(distribution): migrate consumer tool pins to release assets #544 remain conditions for future fallback retirement, not prerequisites for landing this wrapper.Split
No further split needed. Keep #977 as the S wrapper slice after #976. When attaching PR #962, map its older parent-AC12 evidence to child AC1 and ensure command acceptance evidence needed to close #976 lands in #961. Shared parity checks can validate integration without changing acceptance ownership.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation; they do not attest that implementation or merge evidence has passed. D3 assumes gates remain intact; any gate loosening requires exact-head owner approval.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.provenance:agent-assistedlabel.Status:comment names the merge commit.mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watch or mechanical request check were run.
Round: 2 of 3
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: READY — native relationships verified; wrapper slice is ready after #976
Checked
Read the revised #977 body, the round 2 Refinement comment, parent Epic #793, sibling #976, and PRs #961/#962 (bodies and changed-file lists). Inspected #962's proposed wrapper, wrapper-test and migration-document patches, the current shell entry point and the N-2 policy. Accepted the supplied mechanical-gate pass without rerunning it.
Round 2's remaining gap is CLOSED. Read-only GraphQL returned parent.number = 793, issueDependenciesSummary = {blockedBy: 1, totalBlockedBy: 1, blocking: 0, totalBlocking: 0}, and blockedBy.nodes = [{number: 976}]. The Dependencies prose now agrees with the native relationships. #976 must merge first; #333/#544 remain conditions for future fallback retirement rather than blockers for landing this wrapper.
The previously closed gaps remain closed in the revised body: the failing-first regression starts with a supporting binary and the original shell entry point, then passes after routing. Unsupported-capability and operational-failure checks remain here, while command semantics are cited to #976. The Verify plan explicitly names
mise run check,mise run cover-go-checkandmise run cover-py-check, recording results on the reviewed head, and retains the ordered generation/token/install sequence plus independent deployed-entry-point, token-metadata and lock checks.The children cover the parent without acceptance overlap: #976 AC1–AC11 match parent AC1–AC11; #977 AC1 matches parent AC12. The thin wrapper and frozen fallback are explicit parent outcomes, so their wording in AC1 is appropriate. AC1 is testable and traced to supporting, absent and older binaries; unchanged argument/output/status forwarding; operational statuses 1/2/76 without fallback; a probe without reads or side effects; and comparison with the pinned shell. The baseline begins repository work at
packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53; #962's proposed probe starts atpackages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:3(PR head). N-2 compatibility followsdocs/compatibility.md:3and has explicit verification. Consumer migration docs and generated artifacts are covered. S fits one wrapper PR; risks, revert and Operator authority: None fit this scope.Gaps
None. All round 2 gaps are closed. READY describes refinement readiness; implementation remains blocked until #976 merges.
Split
No further split needed. Keep #977 as the S wrapper slice after #976. When attaching PR #962, map its older parent-AC12 verification labels to child AC1. Evidence needed to close command acceptance, including repository-state preservation and command-versus-shell parity, must land with #976/#961 as that child's revised Approach requires. Existing PR descriptions are implementation evidence to update, not additional acceptance ownership for this issue.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation; they do not attest that implementation or merge evidence has passed. D3 assumes gates remain intact; any gate loosening requires exact-head owner approval.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.provenance:agent-assistedlabel.Status:comment names the merge commit.mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watch or mechanical request check were run.
Round: 3 of 3
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: NOT READY — wrapper scope is sound; the epic still omits the new parity child
Checked
Read the current #977 body and previous READY Refinement comment, parent #793, siblings #976/#978, and PRs #961/#962, including the probe, wrapper and parity-test patches. Accepted the supplied mechanical-gate pass without rerunning it. Read-only GraphQL confirms #977 and #978 both have parent #793 and native blocked-by #976; the epic has all three native children.
The stable acceptance IDs are preserved: #976 AC1–AC11 still match parent AC1–AC11, and #977 AC1 still matches parent AC12. No parent outcome was dropped or assigned to both implementation children. #978 adds comparative evidence rather than taking command or wrapper behavior away from either child.
The changed #977 scope correctly excludes command-versus-shell parity and owns the offline capability-probe check. Its AC1 verification requires a probe without reads or side effects, supporting/absent/N-2 binaries, unchanged arguments/output/status, operational statuses 1/2/76 without fallback, and a pinned fallback comparison. The offline probe in PR #962 is at
internal/agentrepo/watch_command_internal_test.go:137(PR head); its empty PATH and non-repository directory exercise the intended offline boundary. PR #961 currently also contains the lighterTestWatchCommandProbeatinternal/agentrepo/watch_internal_test.go:17(PR head). Their final allocation must follow the revised child scopes.AC1 is testable and traced in the Verify plan. Wrapper shape and frozen fallback are explicit parent outcomes, so that wording is appropriate here. The failing-first routing regression is executable after #976 merges. N-2 compatibility follows
docs/compatibility.md:3; the baseline starts repository work atpackages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53. Size S fits one wrapper PR. Required gates, coverage floors, generation/token/install ordering, deployed artifacts, migration docs, risks, revert and Operator authority: None remain covered.Gaps
Split
No further split of #977 is needed. Keep the command, wrapper/offline probe, and comparative oracle in #976, #977 and #978 respectively. The previous READY comment's instruction to land parity in #976/#961 is superseded by this scope change.
When revising the PRs, map #962's parent AC12 evidence to #977 AC1, place command acceptance evidence in #961, and move the comparative parity case to #978. #978 already calls for retiring the Bats parity case when its replacement lands; ensure the final PRs implement that handoff. Existing PR descriptions still reflect the earlier split and are not proof that the new work is complete.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation, not that implementation, checks or merge evidence has passed. D3 retains exact-head owner approval for any loosened gate.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.provenance:agent-assistedlabel.Status:comment names the merge commit.mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watching or mechanical request check were run.
Round: 1 of 3
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: READY — epic now includes all three children and requires the parity proof
Checked
Read the current #977 body, previous READY Refinement comment and re-refinement round 1 comment, parent Epic #793, siblings #976/#978, and PRs #961/#962 (bodies, changed-file lists and relevant probe, wrapper and test patches). Accepted the supplied mechanical-gate pass without rerunning it.
Round 1's gap is closed. The epic now names all three children in Outcome and Children, assigns parent AC1–AC11 to #976 and parent AC12 to #977 AC1, and explicitly requires #978 AC1/AC2 parity evidence plus all three merges for closure. Parent AC1–AC12 and both implementation children's AC IDs remain unchanged. The native child list contains #976, #977 and #978. Read-only GraphQL confirms #977 and #978 each have parent #793 and native blocked-by #976.
The revised allocation is complete and disjoint. #976 owns command behavior and direct regression evidence, including repository-state preservation. #977 owns wrapper selection, forwarding, frozen fallback and the offline capability probe. #978 owns comparing the command with the pinned shell on identical scripted responses, including stdout, stderr, exit status and check-read counts. Its offline/state-preservation checks constrain the comparison itself; they do not duplicate command acceptance. Its baseline fixture does not depend on the wrapper fallback's location, so #978 and #977 can independently follow #976. No parent outcome or comparative closing condition is left uncovered.
The previous READY comment's instruction to put parity into #976/#961 is superseded by this scope change. #977 explicitly names #978 in its non-goals and owns the offline probe test. PR #962's TestWatchProbeOffline uses an empty executable search path and a non-repository directory, asserting help succeeds without stderr at
internal/agentrepo/watch_command_internal_test.go:137(PR head). PR #961 still contains the lighter TestWatchCommandProbe atinternal/agentrepo/watch_internal_test.go:17(PR head); final test allocation must follow the revised scope rather than retain duplicate probe ownership.#977 AC1 is testable and traced to supporting, absent and N-2 binaries; unchanged argument/output/status forwarding; statuses 1/2/76 without fallback; a probe without reads or side effects; and pinned-source fallback comparison. Wrapper shape and frozen fallback are parent outcomes, so that wording is appropriate. The failing-first routing regression runs on the required command-enabled base. The baseline begins repository work at
packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53; #962's proposed probe starts atpackages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:3(PR head). N-2 verification matchesdocs/compatibility.md:3.Size S fits one wrapper PR. The Verify plan covers required checks, both coverage floors, ordered generation/token/install steps, independent generated/deployed artifact checks and migration documentation. Risks identify operational-failure fallback and misleading older-binary help; undo restores shell watching. Operator authority: None is appropriate. #333/#544 remain retirement conditions, not landing blockers.
Gaps
None. The epic's former two-child closure gap is closed, with no new acceptance gap or overlap. READY is refinement readiness; #977 still waits for #976 to merge.
Split
No further split needed. Keep command/direct evidence in #976/#961, wrapper/offline probe in #977/#962, and comparative parity in #978. When updating the existing PRs, map #962's parent AC12 labels to #977 AC1, move command acceptance evidence into #961, and transfer parity to #978. Retire the Bats parity case when its replacement lands, as #978 already requires. Existing PR descriptions and patches still reflect the earlier split; align them before closure. They do not establish that the revised work is complete.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation; they do not certify implementation, test or merge completion. D3 retains exact-head owner approval for any loosened gate.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.provenance:agent-assistedlabel.Status:comment names the merge commit.mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watching or mechanical request check were run.
Round: 2 of 3
tbhb-dev-reviews commentedon Oct 31, 2026
Refinement: READY — the new wrapper preserves the frozen watcher and leaves the shell gate intact
Checked
Reviewed the amended #977 body and all five earlier Refinement comments; parent Epic #793 and shell-migration Epic #588; siblings #976/#978/#994/#996; distribution prerequisites #333/#544; native relationships; and PRs #824/#961/#962/#1000. Accepted the supplied mechanical-gate pass without rerunning it.
Computed round: 1. There are zero earlier Refinement comments since the redesign at 11:51Z; all five predate it. Thus 1 + 0 = 1, agreeing with the new-lineage note and disagreeing with the prompt's isolated “2”.
Verified origin/main against the live remote: bfa8937. The cited watcher path exists, and line 53 still begins repository discovery (
packages/agents/source/skills/watch-pr/shared/scripts/watch-checks.sh:53). The Go command is now registered (internal/agentrepo/command.go:84), and its help branch precedes repository and GitHub access (internal/agentrepo/watch.go:46,internal/agentrepo/watch.go:81). #961 and #1000 merged the command and repository-preservation evidence; #976 is CLOSED. Native metadata confirms parent #793 and the historical blocked-by link to #976, with zero open blockers.Earlier gaps remain resolved: the failing-first regression starts with a supporting binary and fails because the original entry point does not route; command semantics stay with #976; native parent/blocker links match the prose; both coverage-floor commands and
mise run checkare explicit; and #793 names command, wrapper and parity delivery with all three required for closure. #978 retains comparative evidence, including its disclosed empty-after-registration divergence. #996 tracks later fallback retirement and is blocked by #977/#978/#333/#544; it is not a prerequisite for this wrapper.AC1 states the required consumer boundary and compatibility outcome. Its wrapper/frozen-fallback shape is itself parent AC12's outcome, so it is appropriate in the criterion. The Verify plan traces AC1 to supporting, absent and N-2 binaries; usage-based capability detection; unchanged arguments, stdout, stderr and status; supported failures 1/2/76 without fallback; an offline probe; byte identity of the existing script; and inspection of the routing boundary. This covers the touched non-functional compatibility and failure behavior (
docs/compatibility.md:3). Generated outputs, deployment/token/lock checks, consumer steps and repository gates are explicit. S fits one PR below 800 code lines after excluding command and parity work. Risks and revert are concrete; Operator authority: None fits the change.The redesign addresses the shell-freeze problem: add only a thin probe/forwarding wrapper, keep the original shell file untouched, and change the skill invocation. The gate checks changed maintained shell files and excludes generated copies (
cmd/shell-allowlist/changed.go:14,cmd/shell-allowlist/changed.go:42); shell builtins and agentrepo are already allowed (.devtools/shell-allowlist.toml:3,.devtools/shell-allowlist.toml:72). Parameter expansion avoids adding dirname. Passingmise run lint-shell-allowlistis required; no allowlist edit, baseline or suppression is authorized. No new watcher algorithm, guard or speculative layer is needed.Checked for delivery overlap. Open PRs #824/#962 contain the older design, which replaces watch-checks.sh and adds a legacy copy. That does not satisfy the amended requirement to leave watch-checks.sh byte-identical and add a separate wrapper. Their command content is already delivered by #961/#1000. Update the existing wrapper PR #962 to this scope rather than open a duplicate; keep its offline probe, remove already-landed command work, and leave comparative parity to #978. Neither an open nor a merged PR currently completes the amended AC1. The current skill call sites that must select the new entry are
packages/agents/source/skills/watch-pr/SKILL.codex.md:18andpackages/agents/source/skills/watch-pr/SKILL.claude.md:32.Gaps
None in the amended wrapper scope or verification contract. READY is refinement readiness, not an implementation or gate-pass attestation. #976's prerequisite has now landed. The existing PR still needs the redesign and required evidence before closure.
Split
No further split. Keep wrapper selection, forwarding, frozen fallback and offline probe in #977; command behavior/evidence in the already-landed command changes; comparative parity in #978; and eventual fallback/oracle deletion in #996. Retain child AC1's mapping to parent AC12 when updating #962.
Definition of done
Ticks mean the ACs and Verify plan cover the obligation; they do not certify that implementation, checks or merge evidence have passed. D3 retains the base owner-approval rule; this issue specifically requires an unchanged shell gate.
check-leaks.shwith the repository's private-strings list, and the leak review of each post.docs/, CHANGELOG or help text), or the Verification section says "No doc impact" and why.provenance:agent-assistedlabel.Status:comment names the merge commit.mise run checkis green, and so are the coverage floorsmise run cover-go-checkandmise run cover-py-check, whichcheckdoesn't run.packages/agents/source/commits whatmise run generate-skills, thenmise run skill-tokens, thenapm installrewrite, in that order, andcheck-generated-skills(part oflint) passes.docs/agent-skills-migration.mdor the adoption docs, or the PR's Verification says "No consumer impact" and why.No tests, builds, full suites, live watch, generation/install tasks or mechanical request check were run. No repository files were changed.
Round: 1 of 3