Rewrite retrospective routing and destination taxonomy#283
Merged
Conversation
Replace the asymmetric global-auto-issue / project-AskUserQuestion routing with per-finding AskUserQuestion for both scopes, and replace the 4-step countermeasure priority list with a 5-destination taxonomy (existing-rule-edit, existing-skill-update, mechanize, new-rule, new-skill) tagged explicitly on each finding. Preserve the sanitize rule for global issues (now stated up front in Step 2) and add a prompt-fatigue split for sessions with many findings. Co-authored-by: Claude <Opus 4.7 (1M context)> <[email protected]>
Resolve gaps flagged by an outside review of the routing rewrite: the apply-now branch context was unspecified (session end could be on the default branch or an unrelated feature branch), and the create-issue granularity was ambiguous between per-finding and per-session issues. Add a branch gate that refuses apply-now on the default branch and leaves feature-branch writes uncommitted, batch approved findings by scope into one session-level issue each, and note that the dotfiles cwd edge case still uses Other rather than lifting the global apply-now ban. Co-authored-by: Claude <Opus 4.7 (1M context)> <[email protected]>
Code review flagged three issues. The branch-gate detection compared `git symbolic-ref refs/remotes/origin/HEAD` (which returns `refs/remotes/origin/main`) to `git rev-parse --abbrev-ref HEAD` (which returns `main`), so the two strings never matched and the gate silently failed open. Normalize both to short branch names and show the shell one-liner explicitly. Also split the "Global finding" multi-clause bullet into parent + rationale/exception children per the bullet-per-sentence rule, and restructure the `skip` / `Other` outcome lines as prose so they no longer sit as trailing bullets under the `create issue` list. Co-authored-by: Claude <Opus 4.7 (1M context)> <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The
retrospectiveskill used to auto-file every global-scope finding as aikuwow/dotfilesissue with no user gate, while project-scope findings had a 3-choiceAskUserQuestion(apply now/create issue/drop) that only covered rule edits. This PR gates every finding — global included — through per-findingAskUserQuestion(no silent writes) and expands the action set to matchanalysis.md's countermeasure taxonomy (mechanize,new-rule,new-skillin addition to rule and skill edits), so a finding can materialize as more than a rule tweak.Why the shape it took
Per-scope action asymmetry: global findings drop
apply now. The weekly-improvement routine already consumes global issues, and letting an arbitrary project session edit dotfiles-managed files would bypass the dotfiles branch/PR workflow. Project-scope findings keepapply now, but only on a non-default branch and without auto-commit, so the writes surface in the current working tree for the user to reconcile with the branch's intended diff.Issue batching: approved findings are grouped by scope into one session-level issue each, matching the current title format (
Retrospective: <date> …) and keeping the weekly-routine consumption model intact.Prompt fatigue:
AskUserQuestioncaps at 4 questions per call (the tool schema'squestions.maxItemsfield, surfaced byToolSearch select:AskUserQuestion). At ≥5 findings,low-severity ones auto-skipand the rest are batched across multiple ≤4-question calls, so a user who has already left the session isn't hit with N sequential prompts.Verification
Static:
pre-commit run --files claude/skills/retrospective/SKILL.md claude/skills/retrospective/analysis.md→ all applicable hooksPassed; JSON/YAML/line-count budget hooksSkippedas N/Agit grep -n 'Global-scope findings\|Project-scope findings' claude/skills/retrospective/→ no output (removed sections have no lingering references)AskUserQuestionschema still hasquestions: { minItems: 1, maxItems: 4 }and each question'soptionsstillminItems: 2, maxItems: 4— the 4-choice-per-finding fits comfortablyEnd-to-end:
/retrospectivefrom a separate Claude Code session against this branch before merge — the skill walked Step 0 → Step 1 (Fable subagent analysis, ~6 min) → Step 2 (per-findingAskUserQuestionrouting) to completion without error. Symlinked skill mutation and real-issue side effects were accepted for that run because the alternative (reviewing without executing the flow) would leave the routing rewrite unexercisedFollow-up
#284 restructures the flow so the main session produces first-pass findings and Fable reviews them, instead of Fable re-reading the whole transcript. Taxonomy and routing established here are its prerequisites.