7.3 KiB
issue_title
| issue_title |
|---|
| Phase 8 improvement roadmap |
Retro: Phase 8 improvement roadmap
Stage: Final Retrospective (2026-07-04T02:16:53Z)
Session summary
Ran the plan-improvements workflow for pi-permission-system and produced the Phase 8 roadmap ("Tidy first for the authority spine") in docs/architecture/architecture.md.
Treated the architecture doc's declared "authority model" target as a hypothesis; the user's ask_user steer ("I want to tackle the Authority spine but, Tidy First, what's the change that makes the authority spine easy?") reshaped the phase from building the spine into the preparatory refactoring that makes the spine diff small.
Restructured the doc (moved Phase 7 to history/phase-7-accesspath-universal-representation.md, condensed its summary), committed as 6f46df5f, filed Steps 1–8 as issues #525–#532, linked the roadmap back, and committed as c71d0c27.
The Phase 7 archival was done inline — which, surfaced during the retro, turned out to be /finish-phase's job that was skipped (see friction below).
Observations
What went well
- The prompt's "treat a declared direction as a hypothesis, confirm with
ask_user" instruction combined with the user's tidy-first note pivoted the entire phase cleanly. The agent read the "Target: the authority model" section, deferred deep-tracing until after the focus gate, and let the user's "what makes the spine change easy?" question become the organizing principle — producing a preparatory phase (yolo into the ruleset,PermissionForwardersplit by direction,SubagentDetectioncollaborator) rather than a premature spine build. No rework followed eitherask_usergate. - The mandated "verify each created issue's title matches its body" step (File the issues, step 2) caught the
\u2192literal-escape bug in #526's title before it stuck — a case of a verification step earning its place in the workflow. - Verification was incremental:
rumdl+mmdcran after the first doc restructure (both diagrams checked) and again after the issue-linking edit, not only at session end.
What caused friction (agent side)
scope-drift(user-caught, in the retro) — the session ran/plan-improvementswhile Phase 7's full roadmap was still inline inarchitecture.md, and archived it inline (wrotehistory/phase-7-*.md, condensed the summary, fixed orphaned link defs) as part of planning. That archival is/finish-phase's job: a dedicated prompt with a hard gate verifying every previous-phase step issue is closed, plus a code-vs-doc reconciliation pass. Doing it inline bypassed that gate. Impact: no damage this session (Phase 7's issues were all closed and reconciliation was minimal), but the completeness gate that exists to catch an un-closed prior step was skipped. The correct sequence is/finish-phase→/plan-improvements; the planning prompt should detect the un-archived phase and pause rather than absorb the work.other(shell-escape slip) — #526 was created with a literal\u2192in its title because thegh issue create --title "...ask\u2192allow..."argument was double-quoted and zsh does not interpolate\uXXXXin double quotes. Caught by the mandated title-verification step and fixed with onegh issue edit. A generic zsh quirk, not a workflow gap; the better content rule is to avoid non-ASCII in issue titles at all. Impact: one extra round-trip call; no lasting damage.other(zsh syntax hiccup) — two exploratorygrep/wccommands batched in one turn both errored; the corrected re-run succeeded on the next turn. Impact: added friction, no rework to any deliverable.
What caused friction (user side)
- None material.
The user's
ask_usersteer was well-timed strategic input delivered at the first decision boundary — the model of the focus gate working as intended, not a late correction.
Higher-level evaluation: template, process, fallow
plan-improvementstemplate — its crown-jewel instruction ("treat the doc's declared direction as a hypothesis, confirm withask_userbefore deep-tracing") is why the phase came out right: it deferred the spine build and let the user's tidy-first steer reshape Phase 8 into preparatory work, with no rework after either gate. The template is long and prescriptive — accreted scar tissue from prior retros — but the determinism paid off (grep-ableRelease:tags andRelease batchesfor downstream/plan-issue//ship-issue, well-formed first-pass output). Its one real gap was the missing/finish-phasehand-off gate (above).- Process — the cross-stage artifact hand-off is well-designed (release metadata is machine-consumable across stages; the retro-as-bridge worked — this file's naming and structure were bootstrapped from
0334-phase-4-roadmap.md). Mild seam: theretrotemplate is issue-centric, but a phase-planning session has no single issue or plan file — placement was inferred from precedent. - fallow — helps at the margins, does not drive — three of eight steps (fixture extraction, forwarding harness,
value-guardssplit) came from fallow's dupes / refactoring-target output, and "no dead code / no new hotspots" is useful confirmation. But the heart of the phase (yolo relocation, forwarder split,SubagentDetection, theauthority/seed) came from tracing code against the architecture doc. fallow's health score has held at 76 (B) across Phases 6 → 7 → 8 — structurally insensitive to the architectural refactoring these phases deliver, as theimprovement-discoveryskill already documents. It is a useful input and guardrail, not a driver; the risk to watch is a future run reading a flat 76 as "structurally done." No fallow change warranted.
Diagnostic details
- Model-performance correlation — the judgment-heavy work (fallow synthesis, entry-point tracing, tidy-first roadmap design, doc restructure) ran on
claude-fable-5(messages 2–38); issue drafting/filing/linking ran onclaude-sonnet-5(messages 40–57); this retro onclaude-opus-4-8. Aclaude-deepseek-v4-flashmodel_changecarried no assistant turn under it — a transient selection that never ran, not a dispatch. No mismatch: the roadmap the reasoning-heavy phase produced was accepted without rework. - Feedback-loop gap analysis — no gap.
Docs-only session;
rumdlandmmdcran incrementally after each write and both passed. - Escalation-delay and unused-tool lenses — nothing notable.
The single bash error resolved in one retry (no >5 sequence), and targeted
grep/readon specific symbols (isSubagentExecutionContext,requestApproval,deriveResolution) was the correct tool per thecolgrepdecision table — no unused-tool gap.
Changes made
- Added a hard gate to
.pi/prompts/plan-improvements.mdStep 2: if the previous phase (N−1) is still inline inarchitecture.mdrather than archived tohistory/, stop and direct the user to run/finish-phase $1first, then resume — the archival is/finish-phase's job (with its step-completion gate), not/plan-improvements's. - Created this retro file,
packages/pi-permission-system/docs/retro/0525-phase-8-roadmap.md.