feat(planning): route the ungrillable question to a prototype detour, and leave plan mode off while interviewing - #3045
Conversation
…2998) Course lane 5's `/planning:audit-answers` pass (two fresh-context validators against the upstream primaries) overturned the lane's provisional zero-work-items answer and surfaced two grilling-family techniques absent from `planning:interview`. ## The ungrillable question Some questions cannot be answered by asking, however well the round is framed: the user has to see a thing and react to it. Upstream fires the escape mid-grilling — stop grilling, build the throwaway, come back and answer in one line. Our route existed only downstream (`wayfind`, `plan`, `brainstorm`); the interview's mid-session composition named research, exploration, and handoff only, and its categorization taxonomy had no needs-an-artifact arm. - `interview/SKILL.md` "Mid-interview composition" now carries the detour, routing a look-and-feel question to `/prototype:explore-directions` and a logic/state/data-shape question to `/prototype:pressure-test` (via the Skill tool, if installed), with a matching composition-table row. - `interview/context/loop.md` gains a **Needs-an-artifact** arm beside resolvable / blocked / defer, marked explicitly as a route rather than a deferral. The prototype is the instrument that produces the answer, not a deliverable. The question is registered `open` before the detour so it cannot be lost. ## Plan mode off while interviewing Beyond upstream's taste point, a mechanical edge: the ask-time open-question register is a disk write (the ledger's `## Open-question register` section), and plan mode's read-only enforcement blocks it — so a round asked under plan mode leaves nothing on disk holding it, the exact failure the register exists to prevent. - New `interview/context/gotchas.md` entry under the Q&A surface, beside the other register gotchas. - `plan/SKILL.md` "Plan Mode Integration" reconciled with lane 4's asset-rush doctrine: its plan-mode round is scoped to a scoping confirm, and substantive what-are-we-building questions route to `/planning:interview` outside plan mode. ## Verification Documentation only; no behavior change. planning 0.31.0 -> 0.32.0. validate-plugins, both generator --check runs, all four check-changelog-parity modes, check-changed-skills (2 checked, 0 failed), markdownlint on the five touched files, typos, and the three planning test suites all pass. The two check-changed-skills warnings (SKILL.md soft line target; the Plan Review Mode numbered list) are pre-existing on origin/main, not introduced here. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 4m 36s —— View job Code review complete
This is a documentation-only change to the One finding posted inline:
Everything else — the new |
|
Claude finished @kyle-sexton's task in 48s —— View job Security Review
Skip gate triggered — no security-relevant surface. All 6 changed files are documentation-only (Markdown skill instructions +
There is no code, no script, no GitHub Actions workflow, no permission/config change, no dependency/action pin, and no executable logic anywhere in the diff — just prose describing when/how an agent should invoke other skills ( No security issues found. Per this lane's high-signal bar, nothing further to report. |
…#2998) The two lane 5 ADOPT rows carried only their `Filed:` pointer. Both are now delivered by #3045, so each row names the delivering PR and what actually landed — the prototype detour plus the Needs-an-artifact categorization arm on one, the plan-mode gotcha plus the `planning:plan` scoping-confirm reconciliation on the other — and moves its as-of date. This is the row-home the issue's criteria point at: the originally cited `docs/upstream/aihero-core-lanes.md` dissolved at the lane 6 harvest and its lane 5 rows now live here, per the redirect recorded on #2998. Co-authored-by: Claude <noreply@anthropic.com>
|
Last security-reviewed head: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 91cbd014d6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…e detour (#2998) Codex review on #3045, verified against the tree: the prototype skills gate model-initiated entry — stop and confirm scope before writing any throwaway code, and do not detour out of an active workflow without checkpointing first. The detour as written invoked them immediately, so the interview handed off without the confirm and without an explicit checkpoint of its own live state. The detour now confirms the spike's scope with the user and checkpoints the interview before handing off, and names what that checkpoint already consists of: the question registered `open` at ask-time plus the ledger and Brief written per lock-in, which is exactly what lets the open branch survive the detour. The composition-table row and the CHANGELOG entry carry the same sequence. The gate is described rather than cited: another skill's `context/` files are private, so the requirement is stated in the interview's own terms. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 43s —— View job Security Review
Skip gate triggered — no security-relevant surface. Per the lane's skip gate, this run compares only the commits since the last-reviewed head (
No code, no script, no GitHub Actions workflow, no permission/config change, no dependency/action Combined with the earlier pass on |
|
Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
…#2998) Code-review finding on #3045, verified against the section: the new "substantive rounds do not belong in plan mode" text asserted the interview runs with plan mode off but named no mechanism, and the paragraph four lines above already settles that the skill toggles no permission mode — it *suggests* entering and lets the user act. Asserting the exit case without the symmetric step left the rule unsatisfiable: a run mid-formulation in plan mode ("stay in it") that hits a substantive question had no scripted way to reach plan-mode-off, and the likely fallback — invoking the interview from inside plan mode — reproduces the exact register-write failure the paragraph exists to prevent. The exit is now the user's move, stated the same way as the entry: say why, ask the user to exit (shift+tab), invoke the interview once they have, and never invoke it from inside plan mode assuming the register write will survive. The CHANGELOG entry carries the same clause. Co-authored-by: Claude <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 46s —— View job Security Review
Skip gate triggered — no security-relevant surface. Per the lane's skip gate, this run compares only the commits since the last-reviewed head
No code, no script, no GitHub Actions workflow, no permission/config change, no dependency/action Combined with the earlier passes on |
|
Claude finished @kyle-sexton's task in 2m 51s —— View job Code review complete
This lane already reviewed this PR twice (at This commit (
This closes the exact gap flagged: it's now symmetric with the entering-plan-mode doctrine at line 249 (suggest, don't act), it names the concrete mechanism ( No new issues found. I re-checked the full diff against
Note: I did not independently re-run the gate scripts ( |
Resolves the plugins/planning/CHANGELOG.md conflict: main shipped planning 0.32.0 for #2936 while this branch had claimed the same number for #2998. The #2998 entries move up to a new 0.33.0 heading above main's preserved 0.32.0 section, and plugin.json bumps to 0.33.0 to match. plan/SKILL.md auto-merged cleanly — both #2936's test-boundary naming and this branch's plan-mode routing are present.
|
Claude finished @kyle-sexton's task in 1m 29s —— View job Code review complete
Skip gate triggered — condition 4 (this head already has a successful review from this lane that still applies). This lane has already reviewed this PR three times, at The only commit since
No new PR-owned content was introduced by the merge, so there is nothing new to review. Per this lane's skip gate, posting nothing further. |
|
Claude finished @kyle-sexton's task in 1m 39s —— View job Security Review
Skip gate triggered — no security-relevant surface, and this head's diff already fully reviewed. HEAD Comparing this PR's actual contribution against the current
The only mechanical difference from the previously reviewed state is that the merge rebased this PR's version bump onto a newer As established across the earlier passes: this is a documentation-only change (Markdown skill instructions, a No security issues found. Per this lane's high-signal bar, nothing further to report. |
Closes #2998
Summary
Course lane 5's
/planning:audit-answerspass — two fresh-context validators reading the upstreamprimaries independently — overturned the lane's provisional zero-work-items answer and surfaced two
grilling-family techniques absent from
planning:interview. This adopts both, and reconciles theplanning:plansentence that sat in tension with the second.Documentation only; no behavior change. planning 0.32.0 → 0.33.0.
Fix
The ungrillable question → prototype detour. Some questions cannot be answered by asking,
however well the round is framed: the user has to see a thing and react to it before they know what
they think. Upstream fires the escape mid-grilling ("stop grilling… build the throwaway version…
come back and answer in one line"). Our route existed only downstream —
wayfind,plan,brainstorm— while the interview's mid-session composition named research, exploration, andhandoff only, and its categorization taxonomy had no needs-an-artifact arm.
interview/SKILL.md"Mid-interview composition" now carries the detour, routing a look-and-feelquestion to
/prototype:explore-directionsand a logic/state/data-shape question to/prototype:pressure-test(invoked via the Skill tool, if installed), then returning to answer inone line. A matching composition-table row keeps the two surfaces consistent.
interview/context/loop.mdgains a Needs-an-artifact arm beside resolvable / blocked /defer-with-assumption / defer-fully, marked explicitly as a route, not a deferral.
The prototype is the instrument that produces the answer, not a deliverable — it is thrown away. The
question is registered
openbefore the detour so it cannot be lost across it.Plan mode off while interviewing. Beyond upstream's taste point, the audit surfaced a mechanical
edge: the ask-time open-question register is a disk write (the ledger's
## Open-question registersection — verified againstcontext/loop.md"Write at ask-time, not at answer-time", notinferred), and plan mode's read-only enforcement blocks it. A round asked under plan mode therefore
leaves nothing on disk holding it — precisely the failure the register exists to prevent,
reintroduced by the permission mode.
interview/context/gotchas.mdentry under the Q&A surface, beside the other register gotchas.plan/SKILL.md"Plan Mode Integration" reconciled with lane 4's asset-rush doctrine: itsplan-mode round is now scoped to a scoping confirm, and substantive what are we building
questions route to
/planning:interviewoutside plan mode, on both the register-write mechanicsand the doctrine that plan mode primes the run toward producing the asset while the job is still
reaching shared understanding.
Merge with
main(2026-08-20)mainshipped planning 0.32.0 for #2936 while this branch had already claimed that number for#2998, so the branch merged
mainand re-numbered:plugins/planning/CHANGELOG.md— the planning: interview prototype detour + plan-mode-off guidance (aihero lane 5 audit findings) #2998 entries move up under a new## [0.33.0]heading;main's## [0.32.0]section and its Lane C: TDD wiring + zero-assembly default chain #2936 entry are preserved verbatim beneath it (all 55headings confirmed preserved by
check-changelog-parity.sh --check-preserved origin/main).plugins/planning/.claude-plugin/plugin.json— 0.32.0 → 0.33.0 to match.plan/SKILL.mdauto-merged cleanly; both Lane C: TDD wiring + zero-assembly default chain #2936's test-boundary naming and this branch'splan-mode routing are present in the merged file.
Verification
Full local gate re-run on the merge commit, all green:
scripts/validate-plugins.shgenerate-catalog.mjs --check/generate-cheatsheet.mjs --checkcheck-changelog-parity.sh--check/--check-order/--check-bump origin/main/--check-preserved origin/maincheck-changed-skills.sh origin/mainmarkdownlint-cli2(6 touched files)typosstandards-binding,goal-condition-length,check-open-questions)The three
check-changed-skillswarnings are pre-existing onorigin/main, not introduced here:the SKILL.md soft line-count target (interview and plan were both already over the 200 target before
this change) and the numbered-procedure completion-criteria warning on the unchanged
Plan Review Modelist. TheREcompile() - paniclines in that run are the known mawk/ERE-intervalartifact tracked as #3005, not a failure — the script exits 0.
Related
planreconciliation answers to)🤖 Generated with Claude Code
https://claude.ai/code/session_01QbfCrj3X9FfGL7VRZYmrn4
Generated by Claude Code