Consolidate radio/task-pm/task-reviewer to canonical files (#122 Phase 1; precedes #163-#169)#171
Conversation
…e 1; precedes #163-#169): single root bin/ copies replace 18 per-loadout duplicates - bin/radio: byte-identical across all 7 loadouts — moved to root as-is (drift sentinels stripped), 7 copies deleted, every loadout install.sh retargeted to ln -sf "$SCRIPT_DIR/../bin/radio". - bin/task-pm: dispatcher replaced by the shared body; impl resolved via lib/detect-impl.sh, agent prefix branches only the launch line (claude "/pm" vs kiro-cli chat --agent pm). 7 copies deleted. - bin/task-reviewer: claude x4 body folded into the root file; kiro-* impls still route to kiro-gh/bin/task-reviewer until #146. AW_LOADOUT now comes from impl detection instead of the file path. 4 copies deleted. - tools/check-drift.sh: retired radio|body, task-pm-claude|body, task-pm-kiro|body, task-reviewer-claude|body entries (17 groups remain). - tests: helpers point at the canonical binaries; task_pm.bats / task_reviewer.bats pin loadouts via AW_IMPL; install_symlinks.bats asserts the radio symlink resolves to the root copy. - task-pm/task-reviewer --help now work outside a configured repo (fresh-install acceptance check). Note: the issue's "1 canonical + 3 kiro" reviewer count reflects a stale inventory — only kiro-gh ever shipped a task-reviewer (kiro-local / kiro-notion parity is #146), so the tree lands at 1 canonical + 1 kiro. Closes #170 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review — PR #171 (spec: #170, epic #122 Phase 1)Verdict: no blockers. Five nits, all optional — none should hold up the merge. Spec complianceChecked against #170's acceptance criteria: ✅ one Verification performed
Nits (optional, in rough priority order)
Nits 4+5 could also be deferred into a small follow-up issue rather than blocking this PR — worktree churn on a −5.8k-line diff is the riskier option. Review process note: diff reviewed via 8-angle candidate pass + verification against main; 3 efficiency candidates were discarded as preexisting-on-main rather than introduced. |
…e 1; precedes #163-#169): address review nits (PR #171) - task-pm: explicit failing *) fallback in the agent-launch case — a new agent family added to detect-impl without a launch line here now errors instead of exiting 0 after the tab rename. - task-reviewer: kiro-unavailable error now links #146 (kiro parity tracker), matching the adjacent comment; was stale #136. - task-reviewer: five scattered [[ $AW_LOADOUT == claude-gh ]] checks collapsed into one TRACKER="${IMPL##*-}" suffix variable, so #146/#92 inherit tracker-aware behavior for free. - install.sh x7: the now-identical shared-symlink stanza (task-init / task-work / task-done / task-pm / radio) is wrapped in an install-shared-symlinks sentinel region and drift-guarded by a new manifest entry (18 groups); task-reviewer/task-board lines stay outside the region. Labels refreshed (task-pm is canonical, not a dispatcher). - install_symlinks.bats: new test sweeps all 7 installers against a clean ~/.local/bin, asserting radio/task-pm (and task-reviewer where shipped) resolve to the canonical root copies — and that kiro-local/kiro-notion do NOT install a reviewer. 806/806 tests green; check-drift green (18 groups). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Re-review — commit 09075a7All five nits verified fixed:
Independently verified: targeted bats suites green locally, |
Closes #170
Phase 1 of epic #122 — lands before the radio-reliability bundle #163–#169 so each of those tickets edits one file instead of seven.
What changed
bin/radio— the 7 byte-identical loadout copies collapse into one canonical root file (sentinels stripped; no dispatch needed since it's identical everywhere). Every loadoutinstall.shnow links$SCRIPT_DIR/../bin/radio.bin/task-pm— the root dispatcher is replaced by the shared body. Impl comes fromlib/detect-impl.sh(--impl/AW_IMPL/ workflow-doc auto-detect); the agent prefix (claude/kiro) branches only the final launch line (claude "/pm"vskiro-cli chat --agent pm). 7 copies deleted.bin/task-reviewer— the claude×4 body is folded into the root file;kiro-*impls still route tokiro-gh/bin/task-revieweruntil kiro-gh/bin/task-reviewer: migrate to SPEC_IDENTIFIER + AW_LOADOUT to match claude-* (post-#144) #146.AW_LOADOUT(tracker-aware behavior, task-reviewer: spec-issue cross-check is GitHub-only — breaks claude-jira / claude-notion / claude-local #144) now comes from impl detection instead of the file's own path. 4 copies deleted.tools/check-drift.sh— retiredradio|body,task-pm-claude|body,task-pm-kiro|body,task-reviewer-claude|body; 17 groups remain, green.task_pm.bats/task_reviewer.batspin loadouts viaAW_IMPL=<impl> run …(the workflow-doc auto-detect routing tests are unchanged and still cover detection);install_symlinks.batsasserts the radio symlink resolves to the root copy.task-pm --help/task-reviewer --helpnow work outside a configured repo (per the fresh-install acceptance criterion; previously the dispatchers errored on impl detection before help could print).Acceptance criteria
radio, onetask-pm;task-reviewer= 1 canonical +kiro-gh's. Note: the issue said "+ 3 kiro", but onlykiro-ghever shipped a task-reviewer (kiro-local/kiro-notion parity is kiro-gh/bin/task-reviewer: migrate to SPEC_IDENTIFIER + AW_LOADOUT to match claude-* (post-#144) #146, listed as a non-goal) — so 1 + 1 is the correct landing state../run_tests.sh: 805/805 green.tools/check-drift.sh: green (17 groups)../install.sh allinto a scratch$HOME:radio/task-pm/task-reviewersymlinks all resolve to the root canonicals and--helpcleanly.task-pmbehavior is byte-equal to today on both agents except the launch line (body shared, branch is the finalcase "$AGENT").🤖 Generated with Claude Code