Skip to content

feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0)#294

Merged
kyle-sexton merged 7 commits into
mainfrom
feat/interview-sibling-cadence
Jul 17, 2026
Merged

feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0)#294
kyle-sexton merged 7 commits into
mainfrom
feat/interview-sibling-cadence

Conversation

@kyle-sexton

@kyle-sexton kyle-sexton commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Propagates the frontier-rounds questioning cadence (introduced for /planning:interview in 0.13.0, PR #278) to the sibling planning skills that still carried the abandoned one-question-at-a-time cadence:

  • /planning:plan (formerly architect, renamed in 0.14.0) — the Step 4.6 confidence-gate routing and context/tag-decisions.md both described "an interview round (one question at a time, recommendation + basis)". The description now lives once in tag-decisions.md (stated as a numbered set of settled-prerequisite questions); the SKILL.md summary no longer duplicates the parenthetical. The scope-clarity check ("prose, one question at a time") now asks open questions as one numbered round.
  • /planning:prd — Step 4 renamed to "Drive frontier-rounds Q&A"; "never batch unrelated questions" replaced with rounds grouped by PRD section, dependent questions waiting on their prerequisites.
  • /planning:design — the "Collaborative always" behavior asks in frontier rounds over design threads (their dependency tracking already is a frontier graph); two evals.json assertions updated to match.
  • Left as is: /planning:brainstorm's single intake question — one question is genuinely correct there, and a frontier of one degenerates anyway.

All three siblings now render a round via AskUserQuestion only through the same use_ask_user_question user config the interview skill reads (opt-in, and only for ≤4 independent questions) instead of re-deciding prose-vs-card inline.

Planning plugin bumped 0.15.0 → 0.16.0. Rebased over the #276 rename (git followed the architect/plan/ move) and the #279 domain-modeling extraction. Along the way this PR also repairs two artifacts of those merges:

  • CHANGELOG: the 0.14.0 (rename) and 0.15.0 (domain-modeling move) entries are filed under their own version headings — both had been folded into the 0.13.0 section while the manifest version advanced past them.
  • plugin.json: the DDD merge had landed the updated plugin description inside userConfig.use_ask_user_question (overwriting that entry's prompt text) and left the stale pre-DDD description at top level; both fields are restored (the userConfig prompt now names all four round-asking skills).

Related

Closes #282. Follow-up to #278 (interview frontier-rounds rewrite); staged behind it and unblocked by its merge.

Verification

  • Residue grep across plugins/planning for one question at a time / one-question / one at a time / never batch: only remaining match is the interview eval's legitimate dependency-rule text ("never batches a question into the same round as a question it depends on")
  • jq empty on design/evals/evals.json and plugin.json
  • claude plugin validate plugins/planning
  • markdownlint-cli2 on all touched markdown: 0 errors

🤖 Generated with Claude Code

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7b695e5ed6

ℹ️ 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".

Comment thread plugins/planning/skills/plan/SKILL.md Outdated
@kyle-sexton
kyle-sexton force-pushed the feat/interview-sibling-cadence branch from 7b695e5 to 748d92f Compare July 17, 2026 20:07
@kyle-sexton kyle-sexton changed the title feat(planning): propagate frontier-rounds cadence to prd, design, architect (0.14.0) feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.16.0) Jul 17, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 62103f6596

ℹ️ 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".

Comment thread plugins/planning/.claude-plugin/plugin.json

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e05949ddd7

ℹ️ 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".

Comment thread plugins/planning/skills/plan/context/tag-decisions.md Outdated
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.16.0)

Tasks

  • Gather context and understand the request
  • Review changed files
  • Analyze Codex review comments for validity
  • Post findings

View job run

@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 0s —— View job


PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.16.0)

Tasks

  • Gather context and understand the request
  • Read changed files
  • Analyze Codex review comments for validity
  • Post findings

Summary

The core changes are correct and consistent. The frontier-rounds cadence is properly propagated to /planning:prd (Step 4), /planning:design (Key behaviors), and /planning:plan (scope-clarity check in Step 1). The plugin.json DDD-merge corruption is cleanly repaired. The CHANGELOG restructuring correctly separates the 0.13.0/0.14.0/0.15.0 version headings that had been folded together. The evals accurately update their expected-output strings to match the new cadence.

Codex Comment Verdicts

Comment 1 — plan/SKILL.md:71 — "Honor opt-in for architect open-decision prompts"CONFIRMED

The scope-clarity bullet directly above line 71 was updated in this PR to check ${user_config.use_ask_user_question}, but the immediately adjacent Open Decisions bullet was not:

plan/SKILL.md#L71:

resolve via `AskUserQuestion` (≤4 decisions) or single-prompt prose (≥5)

This resolves via AskUserQuestion unconditionally — no check for ${user_config.use_ask_user_question}. With the config defaulting to false, a user who hasn't opted in will still receive a card-rendered decision round for Open Decisions while the scope-clarity question one bullet up correctly falls back to prose. The inconsistency is introduced by this PR. The fix should mirror the scope-clarity line: check use_ask_user_question and apply the ≤4-question guard.

Fix this →


Comment 2 — plugin.json:13 — "Regenerate the README catalog"NOT VALID

The Codex reviewer ran against the intermediate commit 62103f6 before the catalog was regenerated. The third commit in this PR (e05949d chore: regenerate README catalog for updated planning description) already updates README.md to match the new plugin description. The diff confirms the catalog entry is correct. No action needed.


Comment 3 — plan/context/tag-decisions.md:16 — "Honor AskUserQuestion opt-in for gate rounds"CONFIRMED

The tag-decisions.md file is the authoritative description of how the confidence-gate interview round works (cited as the source of truth in SKILL.md Step 4.6: "Full gate, taxonomy, and presentation contract: context/tag-decisions.md"). This PR updated it to describe the numbered-set format:

tag-decisions.md#L16:

run an interview round — every queued question whose prerequisites are settled asked as one numbered set, each with recommendation + basis — BEFORE the plan body locks

But the rendering surface — check ${user_config.use_ask_user_question}, apply the ≤4-question cap, fall back to prose — is absent. The three sibling skills that also ask rounds (prd, design, scope-clarity) all carry this rule inline. The gate-round description in tag-decisions.md should carry the same rule, since SKILL.md defers the full description there.

Fix this →


Additional Observation (not flagged by Codex)

plan/SKILL.md line ~210 — stress-test alternatives surface (pre-existing, out of scope for this PR):

If 2–4 named alternatives surfaced during the stress-test, present them via `AskUserQuestion`

This is not in the diff and predates this PR, but it has the same gap — it unconditionally uses AskUserQuestion without checking the config. Worth a follow-up issue if the goal is to have use_ask_user_question fully gate every card render in the skill.


Verdict

Two of the three Codex findings are real. Both are in plan/SKILL.md and plan/context/tag-decisions.md, and both stem from the same root cause: the Open Decisions and confidence-gate interview paths were not updated alongside the scope-clarity check. The rest of the PR is solid — the cadence propagation is coherent, the plugin.json corruption is correctly repaired, and the CHANGELOG restructuring is accurate.

kyle-sexton added a commit that referenced this pull request Jul 17, 2026
…_question

The Open Decisions block, the confidence-gate round in
tag-decisions.md, and the stress-test alternatives surface still
rendered AskUserQuestion unconditionally; all three now honor the
shared opt-in with the ≤4-independent-questions cap and inline-prose
fallback.

Addresses Codex P2 x2 on PR #294 (both confirmed by claude-review).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

All three Codex findings dispositioned per the analysis above, in 303015e:

Finding Classification Action
Open Decisions unconditional card render VALID Gated on use_ask_user_question + ≤4 cap, prose fallback
README catalog stale VALID at reviewed commit Already regenerated in e05949d
tag-decisions.md gate round missing render rule VALID Same opt-in rule added to the authoritative gate description

The additional observation (stress-test alternatives surface, SKILL.md ~210) is gated in the same commit — same root cause, same PR contract. Line 236's plan-mode note stays: it describes the harness plan-mode idiom, not a skill-owned round render.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 303015ec67

ℹ️ 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".

Comment thread plugins/planning/skills/plan/SKILL.md Outdated
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
…_question

The Open Decisions block, the confidence-gate round in
tag-decisions.md, and the stress-test alternatives surface still
rendered AskUserQuestion unconditionally; all three now honor the
shared opt-in with the ≤4-independent-questions cap and inline-prose
fallback.

Addresses Codex P2 x2 on PR #294 (both confirmed by claude-review).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton force-pushed the feat/interview-sibling-cadence branch from 303015e to 63d2b75 Compare July 17, 2026 21:47
@kyle-sexton kyle-sexton changed the title feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.16.0) feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.17.0) Jul 17, 2026
@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Rebased over #291 (standards grounding), which took planning 0.16.0 — this PR is now 0.17.0; CHANGELOG entry restacked above the 0.16.0 standards entry. The manifest repair carries over: #291 fixed the top-level description but left the scrambled userConfig prompt in place; this PR restores the prompt text.

kyle-sexton and others added 4 commits July 17, 2026 17:51
The one-question-at-a-time cadence the interview skill dropped in
0.13.0 still appeared in sibling skills. prd Step 4, design's
collaborative stance, and plan's scope-clarity check and
confidence-gate routing now ask in frontier rounds, and all render a
round via AskUserQuestion only through the shared use_ask_user_question
user config. The plan skill's interview-round description is stated
once in context/tag-decisions.md instead of duplicated in SKILL.md.
brainstorm's single intake question is intentionally unchanged.

Also files the 0.14.0 (architect-to-plan rename) and 0.15.0
(domain-modeling extraction) CHANGELOG entries under their own version
headings — both had been folded into the 0.13.0 section while the
manifest version advanced.

Closes #282

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The domain-driven-design extraction merge landed the updated plugin
description inside userConfig.use_ask_user_question, overwriting that
entry's prompt text, and left the stale pre-DDD text at top level.
Restores the userConfig prompt (updated to name all four round-asking
skills) and puts the glossary-steward description at top level.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…_question

The Open Decisions block, the confidence-gate round in
tag-decisions.md, and the stress-test alternatives surface still
rendered AskUserQuestion unconditionally; all three now honor the
shared opt-in with the ≤4-independent-questions cap and inline-prose
fallback.

Addresses Codex P2 x2 on PR #294 (both confirmed by claude-review).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton force-pushed the feat/interview-sibling-cadence branch from 63d2b75 to 3038e45 Compare July 17, 2026 21:52
@kyle-sexton kyle-sexton changed the title feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.17.0) feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0) Jul 17, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3038e454cb

ℹ️ 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".

Comment thread plugins/planning/.claude-plugin/plugin.json
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 14s —— View job


PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.17.0)

Tasks

  • Gather context and understand the request
  • Read changed files
  • Analyze new Codex findings on HEAD commit (3038e45)
  • Post review findings

Summary

The core propagation is solid — the frontier-rounds cadence is consistently applied to /planning:prd (Step 4), /planning:design (Key behaviors), and /planning:plan (scope-clarity, Open Decisions, tag-decisions gate, and stress-test alternatives surface). The plugin.json manifest corruption is cleanly repaired. The CHANGELOG restructuring correctly separates the 0.13.0/0.14.0/0.15.0 version headings that had been folded together. The evals accurately reflect the new cadence.

Two new Codex findings land on HEAD (3038e454cb). One is confirmed; one is real but concerns a pre-existing pattern the PR inherited rather than introduced.


Codex Comment Verdicts (HEAD commit 3038e454cb)

Finding 1 — plan/SKILL.md:70 — "Defer dependent scope clarifiers"CONFIRMED

Line 70 says:

plan/SKILL.md#L70:

Ask the open questions as one numbered round, each with a recommendation

Every sibling skill uses the settled-prerequisite qualifier explicitly:

  • design/SKILL.md (L168): "every open thread whose prerequisites are settled surfaces in the same numbered round… a thread that depends on an unresolved thread waits for the round after it resolves"
  • prd/SKILL.md Step 4: "each round surfaces every open question whose prerequisites are settled… a question that depends on another still open waits for the round after its prerequisite resolves"
  • tag-decisions.md (L16): "every queued question whose prerequisites are settled asked as one numbered set"

The scope-clarity check says "the open questions" — which is ambiguous and doesn't restrict to settled-prerequisite ones. With a real dependency chain (e.g., eviction policy can't be meaningfully answered until cache scope is settled), this instruction could produce a round that asks both simultaneously, undermining the frontier graph the cadence is designed to build. The fix is a one-line wording adjustment to match siblings: "every question whose prerequisites are settled asked as one numbered round, each with a recommendation; dependent questions wait for the round after their prerequisite resolves."

Fix this →


Finding 2 — plugin.json:9 — "Gate PRD tier prompts behind the same opt-in"PLAUSIBLE (pre-existing, not introduced by this PR)

The Codex reviewer is correct that the PRD tier-selection (Action Router lines 57–69 and Step 3 lines 96–108) unconditionally uses AskUserQuestion regardless of use_ask_user_question. However, none of these lines were touched by this PR — only the Step 4 Q&A heading and body were changed. The tier-selection behavior predates this PR.

The inconsistency does create a gap: the updated plugin.json config description says the config controls "the planning skills' question rounds (interview, prd, design, plan)", but the tier-selection card fires before any of those Q&A rounds and isn't gated. A user who sets use_ask_user_question: false for dictation-friendly behavior will still receive a tier-selection card when no tier is supplied.

The cleanest resolution is to narrow the config description to "Q&A rounds" rather than "all AskUserQuestion usage" — the tier-selection is a routing choice, not a substantive question round, and gating it behind the config would degrade the UX for users who do want the visual tier comparison but prefer prose Q&A. But this scope decision belongs to a follow-up or to the author, since this PR didn't introduce the pattern.


Verdict

One confirmed finding (scope-clarity frontier guard) — a one-line fix in plan/SKILL.md:70. One pre-existing gap (tier-selection not gated) — real but not introduced here; the right fix is clarifying the config description rather than forcing the tier card behind the opt-in. The rest of the PR is solid. The CHANGELOG, manifest repair, cadence propagation to all three siblings, and the additional stress-test-surface gate from the previous review round are all correct.

…r card

The plan scope-clarity round now restricts each round to
settled-prerequisite questions like every sibling, and the prd tier
prompt renders a card only under the use_ask_user_question opt-in —
the manifest promises inline prose by default for prd surfaces.

Addresses Codex P2 + claude-review Finding 1 on PR #294.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 17, 2026
….0) (#297)

## Summary

Adds a named design-smell baseline to the `code-reviewer` agent — the
review plugin's designated owner of design judgment automated tooling
misses. Twelve curated smells from Fowler, *Refactoring* 2nd ed., ch. 3
(Mysterious Name, Duplicated Code, Feature Envy, Data Clumps, Primitive
Obsession, Repeated Switches, Shotgun Surgery, Divergent Change,
Speculative Generality, Message Chains, Middle Man, Refused Bequest),
each as a terse what-it-is → how-to-fix line in our own voice.

Semantics, per the evaluation that greenlit the port (adapted from
mattpocock/skills upstream PR #464):

- **Advisory only.** Smells default to SUGGESTION at medium/low
confidence; escalation happens only through a documented project rule —
the rule carries the severity, the smell label stays advisory. This
rides the agent's existing judgement-call contract.
- **Repo overrides.** A documented project standard that endorses a
flagged pattern suppresses the smell; suppression policy lives in the
existing `REVIEW.md` / project-rules seam, NOT userConfig (rich prose
policy; a per-smell knob matrix fails the Rule of Three). The plugin
keeps zero userConfig.
- **Single home.** Inlined in the agent definition — its only reader.
`fanout` (every tier) and `quality-gate` (fallback + self-with-agent
paths) inherit by dispatching the agent; the external
`pr-review-toolkit` orchestrator path and self-mode general fallback
don't reach it — documented limitations, not gaps.
- The prior duplicated-structural-boilerplate bullet folds into
Duplicated Code so the concept appears once.
- Provenance: Fowler cited as primary source; no upstream phrasing
copied. No live upstream — regeneration trigger is a Fowler edition
revision to ch. 3 or a taxonomy change in the agent.

Review plugin bumped 0.9.0 → 0.10.0. No evals required (agent-scoped
enrichment; this repo's evals are skill-scoped). No security-review
re-trigger (no hooks, MCP, config, or egress).

## Related

Closes #283. Same upstream gap-analysis batch as #278/#282 (#294), #284,
#285.

## Verification

- `claude plugin validate plugins/review` ✔
- `markdownlint-cli2` on all touched markdown: 0 errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2f300e5c39

ℹ️ 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".

Comment thread plugins/planning/skills/prd/SKILL.md
Comment thread plugins/planning/.claude-plugin/plugin.json
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 22s —— View job


PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0)

Tasks

  • Gather context and understand the request
  • Read changed files on HEAD (2f300e5c39)
  • Analyze new Codex findings
  • Post review findings

Summary

The two new Codex findings on HEAD (2f300e5c39) land on different ground. One is a confirmed inconsistency introduced by this PR; the other is pre-existing. Both are small in scope.


Codex Comment Verdicts (HEAD commit 2f300e5c39)

Finding 1 — prd/SKILL.md:122 — "Remove the stale depth-first PRD handoff"CONFIRMED

The PR correctly updated Step 4's heading and body from Drive depth-first Q&ADrive frontier-rounds Q&A, but the transitional sentence at the end of Step 2 (Survey) was not touched. It still reads:

prd/SKILL.md#L94:

Survey output is a one-paragraph summary in your reply. Then transition to depth-first Q&A.

A model following Step 2 could reasonably treat this as an instruction to use depth-first (one-question-at-a-time) cadence in the next step — exactly the abandoned cadence this PR is replacing. The updated Step 4 heading and Step 2's transitional phrase now directly contradict each other. The fix is one line: Then transition to depth-first Q&A.Then drive frontier rounds per Step 4. (or equivalent).

Fix this →


Finding 2 — plugin.json:9 — "Gate plan-mode clarifier cards behind opt-in"PLAUSIBLE (pre-existing, not introduced by this PR)

The Codex reviewer correctly identifies that plan/SKILL.md's Plan Mode Integration section (lines 247–248) says:

Plan mode is also the canonical surface for AskUserQuestion-driven clarifying questions —
if you're entering plan mode for safe exploration during planning, treat it as a license to
ask 1–4 clarifying questions before proposing the plan.

This is unconditional — no use_ask_user_question check. However, the git diff confirms this section was not touched by this PR. It predates the branch entirely. The scope-clarity, Open Decisions, stress-test alternatives, and gate-round paths were all gated in this PR; the plan-mode free-text clarifier section was not.

The real question is what the config description promises. The current manifest says the config controls "the planning skills' question rounds (interview, prd, design, plan)". The plan-mode section describes ad-hoc clarifying questions during plan-mode exploration — not a structured frontier Q&A round. The cleanest resolution is a follow-up that either (a) gates the plan-mode clarifier behind the config, or (b) narrows the manifest description to "structured Q&A rounds" to exclude the ad-hoc plan-mode surface. Gating the plan-mode section is arguably the more consistent choice — a dictation-friendly user opting out of AskUserQuestion cards would still get one at plan-mode entry. But this is out of scope for a PR that didn't introduce the pattern.


Verdict

One confirmed finding (stale depth-first Q&A phrase in prd/SKILL.md:94) — a one-line fix that should land before merge, since it directly contradicts the frontier-rounds Step 4 this PR introduces. One pre-existing gap (plan-mode clarifier not gated) — real but not introduced here; belongs in a follow-up. The rest of the PR — propagation to all three siblings, plugin.json repair, CHANGELOG restructuring, evals updates, and all prior-round fixes — is solid.

Two stale depth-first Q&A handoffs in prd (Step 2 transition and the
tier-2 template note) now say frontier-rounds, and the plan-mode
clarifying-question note renders a card only under the shared
use_ask_user_question opt-in.

Addresses Codex P2 x2 on PR #294.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 28s —— View job


PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0)

Tasks

  • Gather context and understand the request
  • Read changed files on HEAD (f20b77b00b)
  • Verify the two fixes from the previous round (depth-first handoff + plan-mode clarifier)
  • Check for any new issues
  • Post findings

Summary

HEAD (f20b77b00b) is the sixth and final commit of the PR. It addresses both Codex findings from the previous round — the stale depth-first handoffs in prd/SKILL.md and prd/context/templates.md, and the ungated plan-mode clarifier in plan/SKILL.md. All six commits together produce a coherent, consistent result: frontier-rounds cadence is correctly propagated to all three sibling skills, use_ask_user_question gates every card-render path in the plugin, and the manifest corruption from the DDD merge is cleanly repaired.


Verification of Final Commit Fixes

Fix 1 — prd/SKILL.md:94 depth-first handoffRESOLVED

prd/SKILL.md#L94 now reads "Then transition to frontier-rounds Q&A." — matches Step 4's heading. No contradiction.

Fix 2 — prd/context/templates.md:151 depth-first template noteRESOLVED

templates.md#L151 now reads "agent fills via frontier-rounds Q&A." — consistent.

Fix 3 — plan/SKILL.md:248 plan-mode clarifier ungatedRESOLVED

plan/SKILL.md#L248 now gates via AskUserQuestion only when use_ask_user_question is on and questions are independent — inline prose otherwise.


Residue Check

Ran grep -rn "depth.first\|one.question.at.a.time\|one at a time\|never batch" across plugins/planning/. All remaining hits are in /planning:interview:

  • interview/SKILL.md:29,55 and interview/context/loop.md:1 — these are the interview skill's own cadence description, which intentionally uses "depth-first" to describe how it drills into a single topic via its frontier graph. Not stale.
  • interview/evals/evals.json:57 — the "never batches a question into the same round as a question it depends on" dependency-rule text, which the PR body correctly calls out as the legitimate carve-out.
  • CHANGELOG.md:13,84 — historical documentation.

No stale cadence wording in any of the three sibling skills.


Minor Observation (not blocking)

plan/SKILL.md:248 — ≤4 cap absent from the render condition

The plan-mode clarifier note fixes the core issue (now gated) but the render condition wording is slightly looser than siblings:

"The round renders via AskUserQuestion only when the plugin's use_ask_user_question user config … is on and the questions are independent — inline prose otherwise."

Every other render condition in the plugin says "≤4 independent questions" explicitly (scope-clarity at L70, Open Decisions at L71, tag-decisions at L16, stress-test alternatives at L222, prd Step 4 at L122, design L168). The ≤4 bound is contextually established by "1–4 clarifying questions" in the same sentence, but the render rule itself is not fully consistent in form. A follow-up wording pass could add "≤4" to the render condition to match all siblings — low priority since the bound is clear from context.


Verdict

Merge-ready. All prior Codex and Claude-review findings are addressed. The residue grep is clean. The plugin.json manifest is correctly repaired. The CHANGELOG restructuring correctly separates 0.13.0/0.14.0/0.15.0/0.16.0/0.17.0/0.18.0. The evals match the new cadence. The one minor observation above is a polish item, not a correctness issue.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f20b77b00b

ℹ️ 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".

Comment thread plugins/planning/skills/plan/SKILL.md Outdated
Comment thread plugins/planning/skills/prd/SKILL.md
…ier helper

The Open Decisions block now surfaces only settled-prerequisite
decisions (dependent ones wait for the next round), and the PRD tier
cheat sheet in templates.md carries the same card-only-under-opt-in
wording as the skill body.

Addresses Codex P2 x2 (round 4) on PR #294.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Jul 17, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 0s —— View job


PR Review — feat(planning): propagate frontier-rounds cadence to prd, design, plan (0.18.0)

Tasks

  • Gather context and understand the request
  • Read changed files on HEAD (2396ada700)
  • Verify the two fixes from the previous round (Open Decisions frontier filter + templates.md tier opt-in)
  • Check for any new issues
  • Post findings

Summary

HEAD (2396ada700) is clean. The two Codex findings from the previous round are both correctly addressed, and no new issues are introduced.


Verification of Final Commit Fixes (2396ada700)

Fix 1 — Open Decisions frontier filterRESOLVED

plan/SKILL.md#L71 now reads:

"Surface every decision whose prerequisites are settled as a numbered 'Open Decisions' block… a decision whose option set depends on another still open waits for the round after its prerequisite resolves"

Matches the sibling frontier wording in design/SKILL.md:168, prd/SKILL.md:122, and tag-decisions.md:16. ✅

Fix 2 — templates.md tier cheat sheet behind the opt-inRESOLVED

prd/context/templates.md#L252 now reads:

"use this to drive the tier prompt (card only under the use_ask_user_question opt-in; numbered prose otherwise)"

The helper can no longer resurrect the unconditional card when the opt-in is off. ✅


Full Residue Grep

Ran grep -rn "AskUserQuestion|depth.first|one question at a time" across plan/, prd/, and design/. All nine AskUserQuestion references in the sibling skills are correctly gated behind ${user_config.use_ask_user_question}:

Location Surface Gated?
plan/SKILL.md:68 User override of design gate (escape hatch, not a Q&A round) n/a — user-initiated action
plan/SKILL.md:70 Scope-clarity round
plan/SKILL.md:71 Open Decisions block ✅ (+ frontier filter added in this commit)
plan/SKILL.md:222 Stress-test alternatives
plan/SKILL.md:248 Plan-mode clarifier
plan/context/tag-decisions.md:16 Confidence-gate interview round
prd/SKILL.md:69 Tier selection
prd/SKILL.md:122 Step 4 frontier rounds
design/SKILL.md:168 Collaborative always

No stale depth-first or one-question-at-a-time wording in any of the three sibling skills.


Verdict

Merge-ready. The full seven-commit arc is coherent: the frontier-rounds cadence is consistently propagated to all three siblings, every card-render surface in the plugin is now gated behind use_ask_user_question, the plugin.json manifest corruption from the DDD merge is cleanly repaired, and the CHANGELOG correctly separates the 0.13.0/0.14.0/0.15.0/0.16.0/0.17.0/0.18.0 version headings. No new issues on HEAD.

@kyle-sexton
kyle-sexton merged commit af5c6f6 into main Jul 17, 2026
20 checks passed
@kyle-sexton
kyle-sexton deleted the feat/interview-sibling-cadence branch July 17, 2026 23:15
kyle-sexton added a commit that referenced this pull request Jul 18, 2026
…19.0) (#311)

## Summary

Adds `/planning:questionnaire` — a user-invoked-only skill that turns a
decision the user cannot answer, because another *person* holds the
knowledge, into a Markdown discovery questionnaire handed off async.
Adapted from Matt Pocock's `to-questionnaire` (mattpocock/skills,
in-progress) per the evaluation that greenlit the port, with the
grill→interview vocabulary rename throughout.

The defining move: **interview the send, not the subject**. The skill
asks the user only what they can always answer — who the questionnaire
goes to (role, expertise, relationship) and what they need back — then
writes questions aimed at the gap between what the recipient knows and
what the user needs. It never quizzes the user on the subject the
recipient holds.

Decisions from the evaluation, all carried through:

- **Home + name:** planning plugin, artifact-noun `questionnaire` (the
`prd` precedent); keeps the future interview→questionnaire routing
intra-plugin. `disable-model-invocation: true` (a side-effecting
hand-off the user times, matching upstream).
- **Composition:** third routing bucket beside `/planning:interview`'s
facts-vs-decisions split — a person-arbitered deferral. Ships
standalone; the interview-side one-line pull-out lands separately as an
additive edit.
- **PII:** output relocated from upstream's cwd write to the topic-docs
**memory slice** (default `.work/`, self-ignoring), so recipient names
never enter git history. No egress — the skill authors a local file;
delivery is out-of-band.
- **Tracker seam:** optional "awaiting answer" lifecycle item goes
through the work-item-tracker seam (title/topic only, never the
recipient's name), skipped gracefully when no tracker is bound. Never a
hardcoded `gh` call.
- **Config:** none — output path rides the existing topic-docs binding;
no speculative knobs (Rule of Three).
- **Evals (warranted):** four cases — send-only happy path, the
never-quiz-the-subject guardrail, self-answerable routing back to
`/planning:interview`, tracker-absent graceful degrade.

Also fixes the planning README's stale "depth-first Q&A" phrasing in the
interview row (missed residue from the frontier-rounds propagation).

Planning plugin bumped 0.18.0 → 0.19.0. Security review clears
trivially: no hooks, scripts, MCP, network, secrets, or userConfig.

## Related

Closes #284. Same upstream gap-analysis batch as #278/#282 (#294), #283
(#297), #285 (#298).

## Verification

- `jq empty` on `evals.json` and `plugin.json`
- `claude plugin validate plugins/planning` ✔
- `markdownlint-cli2` on all new/touched markdown: 0 errors
- `node scripts/generate-catalog.mjs`: catalog in sync (plugin
description unchanged)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Jul 18, 2026
## Summary

Adds a `block-dangerous-git` guard to the guardrails plugin (PreToolUse
on Bash, blocking), per the evaluation that greenlit the port:
capability adapted from mattpocock/skills `git-guardrails-claude-code`;
implementation rejected wholesale and rewritten on the house
argv-grammar parser (upstream's substring matching blocks ALL `git push`
and fires `checkout .` on `checkout .github/…`).

**Default block-list — irreversible operations only:**

| Blocked | Not blocked |
|---|---|
| `push --force` / `-f` | `--force-with-lease` (safe force), plain
`push` |
| `reset --hard` | soft/mixed reset, `--keep` |
| `clean -f` / `-fd` / `-fdx` / `--force` | `clean -n` (dry run) |
| `checkout .` / `restore .` (worktree-wide, incl. `:/`, exclude-only,
magic-`top`) | path-scoped forms, `restore --staged .` (index-only) |
| forced `checkout -f` / `switch --discard-changes` | plain branch
switch/create |

`branch -D` stays out of the defaults: reflog recovers deleted refs, and
repo-hygiene's `/clean` issues it inline in a sanctioned,
already-confirmed flow (verified collision).

**Seams (native userConfig):** the guard follows the marketplace's
kill-switch doctrine (per-hook toggles and tuning scalars are native
`userConfig`, not `HOOK_*` env vars). Kill switch = the
`block_dangerous_git_enabled` option (default `true`); per-repo/per-user
allow-list = the `block_dangerous_git_allow` option (comma list, any
subset of
`push-force,reset-hard,clean-force,checkout-dot,restore-dot,checkout-force`),
read by the hook from the `CLAUDE_PLUGIN_OPTION_*` process mirror.
Configure with `/plugin configure guardrails` or `--config KEY=VALUE`.
userConfig is resolved at plugin-enable time, so an inline env prefix on
the command line cannot alter the guard; the residual trust boundary is
settings write access.

**Shared parser refactor:** the argv tokenizer, git-executable resolver,
and subcommand walk that `block-no-verify` carried privately move into
`lib/hook-utils.sh` (`hook::bash_parse_segments`,
`hook::git_resolve_index`, `hook::git_resolve_subcommand`) so both git
guards share one parser. `block-no-verify` behavior is unchanged with
one documented alignment: `core.hooksPath` now blocks exactly on `git
commit`/`git push` (its documented scope) instead of firing mid-walk on
any git subcommand. Per the hook-utils sync contract, all ten carrying
plugins bump versions so consumers receive the lib change.

Guardrails → 0.6.0 (main's userConfig/prerequisite waves took it to
0.5.1 while this PR was in review; the new guard is the 0.6.0 minor).
Hook plugins skip evals — the `.test.sh` contract tests are the
coverage.

## Related

Closes #285. Same upstream gap-analysis batch as #278/#282 (#294) and
#283 (#297).

## Verification

- `block-dangerous-git.test.sh`: 190/190 pass (each blocked form, safe
near-misses, argv-faithful positives/negatives incl.
quoting/wrappers/`env -S`/heredocs/process-subs/aliases, allow-list
on/off/partial, kill switch, fail-closed length cap, telemetry envelope)
- `block-no-verify.test.sh`: 75/75 pass on the shared-parser refactor;
`lib/hook-utils.test.sh`: 65/65
- `scripts/sync-hook-utils.sh --check` / `--check-bump`: all 10 plugin
copies match and are bumped
- `shellcheck --rcfile .shellcheckrc -x` on all changed shell: clean
- `claude plugin validate` on every bumped plugin: pass
- `node scripts/generate-catalog.mjs`: catalog already in sync
- `markdownlint-cli2` on changed markdown: 0 errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

planning: propagate frontier-rounds cadence to sibling skills (prd, design, architect)

1 participant