Repository navigation
feat(planning): carry universal, overridable design defaults through planning output #8326
Copy link
Copy link
Closed
Feature
9 / 99 of 9 issues completed
Copy link
Labels
needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.Human-in-the-loop required; autonomous sessions must not resolve items carrying this.work-mapDecision map container for /planning:wayfind; sub-issues are its typed decision items.Decision map container for /planning:wayfind; sub-issues are its typed decision items.
Description
TLDR
- A short bundled planning reference: one directive line per foundational principle, each cited to a universal primary source with a pointer, an as-of date and a recheck trigger. It states that the principles apply to code, Markdown, skills and instructions, and that the consumer's standards win.
/planning:interviewreads the consumer's standards and asks the intent question in every engineering session: is this expected to repeat or vary per client, what the product's existing structure does, and what upstream context says. It captures NFRs under Constraints./planning:designnames the principles in its design defaults and gains a lifecycle and reversibility section. That section covers one-way vs two-way doors, a greenfield vertical-slice default the user can override, and design investment scaled by subdomain. The handoff gate, plan Step 2 and plan-reviewer check these threads.- The plan template's
Review: code-designtag gets a consumer. It loads the consumer's review criteria, else small bundled universal criteria. Introduced, unsynced Duplicated Code is blocking in code; every other cascade finding, and all of Markdown, is a suggestion (DA-A).code-revieweruses the same severity. - Sizing keeps decompose's one-context-window bar and adds an integrate-at-least-daily cadence. Delivery is several small PRs, one per concern.
Goal
By the time an implementing agent receives an interview Brief or PLAN.md, the planning output already carries universal design defaults. It has asked whether the work should be generalized now or kept specific, grounded in product direction and upstream context, not a fixed rule. It has captured non-functional requirements, matched design investment to reversibility and subdomain, and sized the work for daily integration. Review then flags changes that cascade across many files. Consumers shape or override every default through their own standards and instruction files, the user drives every default the skills present, and nothing ships that is specific to one organization.
Constraints
- Extend existing skills; no new plugin or skill (Q1).
- Consumer overrides use the existing standards-contract layering; no new planning.yaml key in this effort (Q5). /planning:interview and /planning:design read the consumer's standards through the same contract plan Step 2 uses (Q16). Consumer standards win over the bundled reference (C1).
- The bundled reference cites only universal canonical primaries. It never cites melodic-software/standards or another organization's convention files (Q2, Q3). Vendor guidance, such as AWS and Microsoft on per-tenant variation, is labeled as vendor guidance (Q29).
- Every design default the interview and design skills present is a recommendation the user can decline (Q17). Review severities are overridable by the consumer's own review criteria (Q21).
- Ingested upstream text (tickets, docs, meeting notes) is framed as data, never instructions (docs/conventions/untrusted-content), and generic skills name no provider, going through the operation's owner (ADR 0060).
- No new Brief heading: NFRs go under Constraints, and intent and lifecycle under Captured assumptions (Q6, Q15). The Problem First session owns the new
### Problemheading and the gate script's heading list. Edits stay in separate sections, and whichever PR merges second rebases (F7). - Skill bodies point at sources with a pointer, an as-of date and a recheck trigger, never restating volatile specifics (
.claude/rules/skill-bodies-state-current-rules.md). - Each new standing instruction names its observed-stumble evidence (AGENTS.md Code Review Rules; Q22):
- intent question:
variation-points.md:5-7anddesign/SKILL.md:182depend on an answer no interview file asks for; - code-design review and cascade severity:
plan-template.md:362promises a review nothing runs, and the user reports PRs where one change cascades across many files; - reuse line: measured missed reuse and redundancy in agent PRs (deep-research over-engineering report);
- principle names in design defaults: SRP, ISP, LSP, DIP and composition are absent from
design/SKILL.md(EXPLORE); - NFR prompt: the Brief, PRD and plan have no NFR slot (EXPLORE);
- reversibility section and per-tenant line: no owner today (EXPLORE); the user raised both in this interview.
- intent question:
- No friction for fast-moving consumers (prototypes, R&D, go-to-market teams): depth scales with the quality bar (Q48).
- Avoid overengineering: cheap extension points are fine, speculative machinery is not (C2). Principles apply to Markdown and skills as well as code (C3).
- Deliver as several small PRs, one per concern; the exact split belongs to /work-items:decompose (Q28, C4).
- Mechanism decisions (which files, scripts and keys change) are made at /planning:plan (Q14).
Acceptance criteria
- A bundled reference file in the planning plugin opens with a scope line: the principles apply to code, Markdown, skills and agent instructions, and the consumer's standards win over it.
- The reference lists SRP, OCP, LSP, ISP, DIP, composition over inheritance, reuse / DRY of knowledge, coupling and cohesion, information hiding, deep modules and change amplification, and YAGNI's cheap-now test. Each is one directive line, cited to a universal primary with a pointer, an as-of date and a recheck trigger, and gets a Markdown example where one fits.
- The reference contains no link to melodic-software/standards or any other organization's convention files.
- The reuse line says to search for and reuse existing code first. It says whether to generalize now or wait for real duplication is a per-task decision to ask the user. Its inputs are expected repetition or per-client variation, the product's existing structure, and upstream context. With known repetition or variation, generalize up front, isolating what varies. Otherwise apply the Rule of Three and Metz's wrong-abstraction caution.
- The GoF composition wording, the Constantine coupling and cohesion origin, and the Rule of Three are each cited to a fetched primary; where a primary cannot be fetched, the plan-time research picks the best secondary source, the line is labeled secondary, and its recheck trigger is "the cited secondary moves or changes, or a recheck reaches the primary" (Q30).
- IF a consumer's standards contradict a bundled default, THEN interview, design and the code-design review apply the consumer's standard and name the default it overrode.
/planning:interviewand/planning:designread the consumer's standards through the plan Step 2 contract before applying the bundled defaults./planning:interviewasks the intent question in every engineering session (Q18, Q34), drawing on connected upstream sources where available; when the request or an upstream artifact already states an answer, the question confirms it rather than asking open. It records the answer under Captured assumptions, sovariation-points.md's dependency on that answer is no longer dangling.- The interview prompts NFRs from a short list presented as prompts, not a taxonomy: performance, reliability/availability, security, maintainability, usability, scalability, observability (Q31). It asks for a measurable target only where one matters and records them under Constraints. The list lives in the interview, not the bundled reference, and is labeled judgment (no primary defines it).
/planning:designtreats an NFR the Brief already captured, observability included, as settled and does not re-ask it. - The intent question and NFR prompt run only in engineering sessions (Q34). Upstream context they draw on is recorded in the Brief as a short summary, never a verbatim quote of private content (Q32). In a private target repo the summary carries a pointer to its source; in a public one it omits identifying titles and URLs of private sources (Q39). Unknown visibility counts as public. The rule covers the auto-resolve source citation and everything published from the Brief, such as PR bodies and issues (Q43).
- In an unattended run, the repeat-or-vary part of the intent question is auto-resolved only from the user's own words: the request, or a Brief or PRD the user confirmed. Third-party upstream text informs the recommendation but never settles it, and conflicting sources count as unstated. An unstated answer is recorded
blockedwith arbiter USER-RESERVED. The existing-structure and upstream-context parts are facts the agent resolves./planning:design's generalize-now-or-wait question follows the same rule (Q38, Q40, Q41). - In an unattended run, an unstated measurable NFR target and the greenfield architecture style are recorded as captured assumptions, not blocked (Q42).
- For bug fixes and refactors, the intent question collapses to a one-line "not applicable?" confirmation (Q45).
/planning:design's design defaults name the reference's principles and point at it./planning:designhas a lifecycle and reversibility section, with a small reversibility reference beside it:- Each significant decision is classed as a one-way or two-way door, and one-way doors get deliberate design and an ADR prompt.
- The baseline is the consumer's existing style. Greenfield work gets a vertical slice built to clean internal quality, presented as a default the user can override.
- Design investment scales by subdomain type: core, supporting or generic (Evans, Khononov).
- The configurability design default carries the per-tenant line: one shared mechanism, flags for temporary variation, entitlements for per-tier access, and every option has an owner and a removal path. It is cited as vendor guidance.
- Plan Step 2's design-default checklist, plan-reviewer and the design-handoff gate check the principle and reversibility threads as resolved or deferred.
- Sizing guidance keeps decompose's one-fresh-context-window bar and adds integrating at least daily. It states no hours unit and no one-day cap, and cites small PRs as practice guidance.
- A plan phase tagged
Review: code-designtriggers a fresh-context review at that phase boundary, which:- loads the consumer's review criteria when present, else small bundled universal criteria;
- rates a many-file cascade as blocking in code and as a suggestion in Markdown, naming the repeated fact or logic, with no numeric file threshold.
code-reviewerrates introduced, unsynced Duplicated Code at the same severity as the code-design review; Shotgun Surgery stays a suggestion (DA-G, approved 2026-10-18).- Markdown and skill authoring guidance points at existing rules rather than adding a new one.
- The new defaults scale with the interview's existing quality-bar answer, with no new setting (Q48):
- Prototype, proof of concept or R&D: the intent question is one line; the NFR prompt and the reversibility section are skipped and named as deferred; the code-design review rates a cascade as a suggestion. The reuse line always applies.
- Internal tool: intent and NFRs asked briefly; reversibility only for one-way doors.
- Production: the full set.
- A consumer whose standards favor speed overrides through the standards layering (Q16).
- Each behavior change adds one eval case. Each changed plugin gets a changelog fragment (all touched plugins are in fragment mode,
scripts/fragment-plugins.txt). Existing evals and gate scripts still pass.
Captured assumptions
- The canonical principle sources change rarely, so pointers with as-of dates and recheck triggers keep the reference current. Revisit if a recheck finds a moved or changed source.
- Consumer org rules arrive through the consumer's own standards, read by interview, design and plan. Revisit if a consumer cannot override a default that way, which would reopen Q5's planning.yaml key.
- The phase-boundary code-design review is the right home for the cascade check. Revisit if /planning:plan finds the dispatch too costly.
- Coverage check answered: one unwanted-behavior criterion added (consumer standards contradict a default); no state-driven case applies. Revisit if the user corrects this at confirmation.
Out-of-scope
- Syncing melodic-software/standards files into this repo's docs/standards/ (Q4, withdrawn).
- A new
### Problemheading, solution-shaped request handling, and /discovery:trace-intent routing (owned by the Problem First session). - A full multi-tenancy design section (Q12) and a full strategic-DDD step; context discovery stays with event-storming (Q23).
- A new "SRP for skills" rule (Q13).
- /planning:prd changes; its missing NFR section is filed as a follow-up issue (Q27).
- Changing plugins outside planning, review and work-items (for example pull-request creation or issue filing) to enforce the privacy rule; this effort changes only the planning-side text they consume (Q46).
- Connascence, the Law of Demeter and Beck's simple design in the reference (Q19).
Deferred questions
- Q35: Which plugin owns the shared code-design criteria and severity, and how do the others reach them without duplicating them (cite by /plugin:skill, never by path)? Defer until /planning:plan; arbiter: /planning:plan
- Q36: When does /planning:plan tag a phase
Review: code-design? Defer until /planning:plan; arbiter: /planning:plan - Q37: How deep do interview and design ground in consumer standards, given plan Step 2's scale table and prompts? Defer until /planning:plan; arbiter: /planning:plan
- Q47: Unattended edge cases. What counts as the user's own words when a bot or teammate wrote the request? What proves a Brief or PRD was user-confirmed? Does a blocked intent row halt the Brief or let it lock deferred? What happens when design classes the architecture style as a one-way door? How is an unattended NFR assumption recorded? Who classifies a bug fix, and does a refactor that extracts an abstraction skip the one-line collapse? Defer until /planning:plan approval; arbiter: USER-RESERVED
- Q44: Where does /planning:design get the NFR prompt list when it runs without an interview Brief, and does an NFR recorded as "no target needed" count as captured? Defer until /planning:plan; arbiter: /planning:plan
Execution shape: per-item PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.Human-in-the-loop required; autonomous sessions must not resolve items carrying this.work-mapDecision map container for /planning:wayfind; sub-issues are its typed decision items.Decision map container for /planning:wayfind; sub-issues are its typed decision items.
Type
Fields
No fields configured for Feature.
Activity
github-actions commentedon Oct 19, 2026
Thanks for the report. Automated triage handed this issue to a maintainer.
Proposed work class: work-class: structural
Basis: automated intake triage; a maintainer confirms or changes it.
Automated triage. A maintainer reviews it.
feat(planning): gate principle and reversibility threads at handoff, …
kyle-sexton commentedon Oct 19, 2026
Close-out for the malleable design defaults plan. All nine items shipped:
Phase 8 filed #8322. The approved plan, with phase tags and the one scope change (Phase 5) as shipped:
PLAN.md
Malleable design defaults
Restatement: CONFIRMED (user, 2026-10-18; Q48 quality-bar scaling added and accepted the same day)
Brief
Spec container: github:#8326
TLDR
/planning:interviewreads the consumer's standards and asks the intent question in every engineering session: is this expected to repeat or vary per client, what the product's existing structure does, and what upstream context says. It captures NFRs under Constraints./planning:designnames the principles in its design defaults and gains a lifecycle and reversibility section. That section covers one-way vs two-way doors, a greenfield vertical-slice default the user can override, and design investment scaled by subdomain. The handoff gate, plan Step 2 and plan-reviewer check these threads.Review: code-designtag gets a consumer. It loads the consumer's review criteria, else small bundled universal criteria. A many-file cascade is blocking in code and a suggestion in Markdown, andcode-revieweruses the same severity.Goal
By the time an implementing agent receives an interview Brief or PLAN.md, the planning output already carries universal design defaults. It has asked whether the work should be generalized now or kept specific, grounded in product direction and upstream context, not a fixed rule. It has captured non-functional requirements, matched design investment to reversibility and subdomain, and sized the work for daily integration. Review then flags changes that cascade across many files. Consumers shape or override every default through their own standards and instruction files, the user drives every default the skills present, and nothing ships that is specific to one organization.
Constraints
### Problemheading and the gate script's heading list. Edits stay in separate sections, and whichever PR merges second rebases (F7)..claude/rules/skill-bodies-state-current-rules.md).variation-points.md:5-7anddesign/SKILL.md:182depend on an answer no interview file asks for;plan-template.md:362promises a review nothing runs, and the user reports PRs where one change cascades across many files;design/SKILL.md(EXPLORE);Acceptance criteria
/planning:interviewand/planning:designread the consumer's standards through the plan Step 2 contract before applying the bundled defaults./planning:interviewasks the intent question in every engineering session (Q18, Q34), drawing on connected upstream sources where available; when the request or an upstream artifact already states an answer, the question confirms it rather than asking open. It records the answer under Captured assumptions, sovariation-points.md's dependency on that answer is no longer dangling./planning:designtreats an NFR the Brief already captured, observability included, as settled and does not re-ask it.blockedwith arbiter USER-RESERVED. The existing-structure and upstream-context parts are facts the agent resolves./planning:design's generalize-now-or-wait question follows the same rule (Q38, Q40, Q41)./planning:design's design defaults name the reference's principles and point at it./planning:designhas a lifecycle and reversibility section, with a small reversibility reference beside it:Review: code-designtriggers a fresh-context review at that phase boundary, which:code-reviewerrates Shotgun Surgery at the same severity as the code-design review.scripts/fragment-plugins.txt). Existing evals and gate scripts still pass.Captured assumptions
Out-of-scope
### Problemheading, solution-shaped request handling, and /discovery:trace-intent routing (owned by the Problem First session).Deferred questions
Review: code-design? Defer until /planning:plan; arbiter: /planning:planDesign
Scope: module. Lifecycle: the same principles apply proactively at interview, design and plan, and reactively at the
phase boundary and PR review as a backstop for drift between plan and code.
Module layout
reference/design-principles.md(new)skills/design/reference/reversibility.md(new)skills/interviewQuality bar:andIntent:linesskills/designdesign-handoff,planStep 2,plan-reviewerskills/quality-gatecode-designmode (new)agents/code-reviewer.mdskills/implement,implement-dispatcharchitecture,security,code-designtags to/review:quality-gate <mode>skills/decomposeDependency direction: planning cites review and implementation by
/plugin:skillonly; review never cites planningfiles; implementation reads the plan's
Review:tags and invokes review. No cycle.Contracts
### Captured assumptions. Bug fix or refactor:Intent: not applicable (confirmed). A missing quality-bar line counts asproductionfor review severity, and thereview names that assumption.
architecture→/review:quality-gate architecture;security→/review:quality-gate security;code-design→/review:quality-gate code-design;concurrency→/review:quality-gate slice concurrency(existing mode,quality-gate/SKILL.md:65; reports nothing when theconsumer has no concurrency criteria file). The review receives the phase diff, the tag and the
Quality bar:line, with rationale withheld.introduces, naming the repeated fact or logic and the later otherwise-correct change that would diverge, with no
shared source or sync check keeping the copies aligned; every other repetition or cascade finding (Shotgun Surgery
included) SUGGESTION; Markdown SUGGESTION; quality bar
prototypeSUGGESTION everywhere; consumer severityvocabulary and criteria win. (Amended by DA-A after the stress test; was "else IMPORTANT".)
or build what existing code already does?"
Variation verdicts
plugins/planning/reference/standards-contract.mdresolution ladderNo abstraction proposed; no abstraction question left to a human.
Conventions followed
plugins/planning/reference/variation-points.md(intent vocabulary, contain-by-default)plugins/planning/reference/standards-contract.md(resolution ladder, provenance)plugins/review/context/severity.md(tier tests)plugins/planning/skills/plan/context/plan-template.md(phaseReview:tags)plugins/planning/skills/plan/context/plan-reviewer.md(review axes).claude/rules/skill-bodies-state-current-rules.md,docs/conventions/untrusted-content/README.md,docs/adr/0060-abstract-provider-details-in-skills-behind-consumer-conventions-and-adapters.mdPlan
Draft (Step 4.7), not yet approved.
Goal. Planning output carries universal, overridable design defaults before an implementing agent gets it; review
backs it up at the phase boundary and the PR.
Standards grounding. Index
docs/standards/README.md(standards-contract: 1.0.2; the planning binding is 1.1.0,so routing is best-effort: index at v1.0.2, contract at v1.1.0, re-run setup). Rows matched for skill and reference
text:
reference-dont-duplicate.md(each fact in one place: drives the cite-by-skill ownership and the C-plan-gapitem),
simpler-code.md(no new mechanism beyond what a reader acts on),documentation-and-citations.md(pointer,as-of, recheck records in the principle reference),
concise-prose.md,source-authority-tiers.md(primary-firstcitations, labeled secondaries). Ambient:
AGENTS.mdCode Review Rules,.claude/rules/skill-bodies-state-current-rules.md,.claude/rules/cost-claims.md. Loaded on demand per phase:plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md,docs/plugin-philosophy.md#instruction-economy.Resolved deferred questions.
/review:quality-gate code-design); planning citesit by
/plugin:skill; implementation invokes it. Basis: user approval of design T2, 2026-10-18.Review: code-designon any phase that adds or changes a contract, type, module, or a fact or ruleseveral files read, skill and instruction Markdown included; omit only for trivial edits. Basis: user, 2026-10-18.
design/architecture concerns); depth follows the quality bar (prototype: ambient only). Basis: user, 2026-10-18.
plugins/planning/skills/interview/context/nfr-prompts.md; design reads it by path(same plugin) when no Brief captured NFRs; "no target needed" counts as captured. Basis: user, 2026-10-18.
phase_order: composed (default;
docs/conventions/planning.yamlsets nophase_order). scaffold_stubs: false(default). integration_posture: by-kind (no
docs/conventions/implementation.yamlkey); this is a feature, butthe touched skills grow sections rather than branches, so no reshaping work items beyond each phase's own edits.
No dead-code removal step: the change adds and edits text, and removes no code.
Every phase: one eval case per behavior change in that skill's
evals/evals.json; one changelog fragment per touchedplugin (
scripts/new-changelog-fragment.sh); mergeorigin/mainfirst. Each phase is its own PR(Brief C4); /work-items:decompose turns phases into tracker items.
Phase 1: Code-design review mode [DONE]
Review: code-design
Implements: Design › Module layout rows 6-7; Contracts (C-severity, C-override).
review/skills/quality-gate/SKILL.md: addcode-designmode (argument hint, router row, description trigger), andexplicit phase-boundary inputs for every mode: worktree path, base SHA (the previous phase-boundary commit), quality
bar, and a report-only flag;
allowed-toolsgains the worktree-targeted diff form. With a base SHA no forge lookupruns. The mode hands the review to
review:brief-reviewerin fresh context with the diff, the tag and the qualitybar only, as
per-slice.md:10does (no plan rationale).New
quality-gate/context/code-design.md: load consumer review criteria through the standards contract, else smallbundled universal criteria; apply a contradicting consumer standard and emit
Overrides bundled default <principle> per <standards file>; cascade rule per C-severity naming the repeated fact orlogic, no numeric file threshold, CRITICAL only when the diff introduces the repetition and no shared source or sync
check keeps the copies aligned; exempt
contract-restatementmarkers, registries the repo declares, generated files,fixtures and rename diffs (DA-A; the exemptions are judgment: no review guide read states them, research gap 1); read the
Quality bar:line when the brief carries one (absent = production,named in the output).
review/agents/code-reviewer.md: Duplicated Code follows C-severity (the CRITICAL case is Fowler's Duplicated Code,introduced and unsynced; Shotgun Surgery, one change forcing many small edits, stays SUGGESTION). Edit
:95so thebundled code-design criteria count as the documented rule that licenses escalation for Duplicated Code only, and
:103so a cascade finding naming therepeated fact and the diverging change may carry
Confidence: highwhen verified at both sites; other smells keepthe advisory default. When its brief carries no
Quality bar:line (PR review, fanout), it rates as production andsays so.
case.yamldirs underplugins/review/evals/:qg-code-design-cascade(introduced unsynced repetitionCRITICAL),
qg-code-design-sanctioned(registry and rename diffs not CRITICAL),qg-code-design-markdown(SUGGESTION),
qg-code-design-prototype(SUGGESTION),qg-code-design-override(override line),qg-phase-boundary-worktree(review run from an orchestrator against a separate worktree and base SHA). First,probe that a
scaffold_script-writtendocs/standards/file is readable in an eval run (the plugin-evals page saysso; unprobed, research gap).
Run
/evals:plugin-evalon them with and without the plugin; record the difference in the PR body.grep -c "code-design" plugins/review/skills/quality-gate/SKILL.md≥ 2 andtest -f plugins/review/skills/quality-gate/context/code-design.md.bash scripts/check-changed-skills.sh origin/mainexits 0 andbash scripts/check-affected.sh --testsexits 0 with noSKIPline in its output.Phase 2: Principle reference [DONE]
Review: code-design
Implements: Design › Module layout row 1; Contracts (scope line, consumer-wins line). Needs Phase 1 merged (cites
/review:quality-gate code-design).cannot be fetched, pick the best secondary, label it, and set the Q30 recheck trigger (
/discovery:research).plugins/planning/reference/design-principles.md. Line format for each principle:- **<Name>**: <directive>. Source: <primary>. As of <date>; recheck when <trigger>.Content: scope line (code,Markdown, skills, agent instructions; consumer standards win, emitting the C-override line); SRP, OCP, LSP, ISP, DIP,
composition over inheritance, reuse/DRY of knowledge, coupling and cohesion, information hiding, deep modules and
change amplification, YAGNI cheap-now test; a Markdown example where one fits; the reuse line (search and reuse
first; generalize-now-or-wait asked per task from intent, existing structure, upstream; known repetition →
generalize up front isolating what varies; else Rule of Three plus Metz's wrong-abstraction caution); a pointer to
/review:quality-gate code-designfor review-time criteria; Markdown and skill authoring points at existing rules(
.claude/rules/skill-bodies-state-current-rules.md,/docs-hygiene:extract-ssot), no new rule.grep -c "melodic-software/standards" plugins/planning/reference/design-principles.mdreturns 0.grep -cE "^- \*\*(SRP|OCP|LSP|ISP|DIP)\*\*" plugins/planning/reference/design-principles.mdreturns 5, and
grep -c "; recheck when" plugins/planning/reference/design-principles.md≥ 11.bash scripts/check-affected.shexits 0 with noSKIPline.Phase 3: Interview defaults [DONE]
Review: code-design
Implements: Design › Contracts (C-intent, C-bar, C-override); Module layout row 3. Needs Phase 2.
plugins/planning/skills/interview/context/nfr-prompts.md: quality requirements (often called non-functionalrequirements, NFRs) as prompts: performance, reliability/availability, security, maintainability, usability
(ISO/IEC 25010:2023 name: interaction capability), scalability (ISO/IEC 25010:2023: part of flexibility),
observability (not an ISO/IEC 25010 characteristic; included by judgment). Labeled judgment; points at ISO/IEC
25010:2023 with as-of and recheck; measurable target only where one matters. Each recorded line under Constraints
starts
Quality requirement:so it stays distinct from true constraints (DA-F).check-skill.sh:534): all new text goes incontext/loop.mdandcontext/nfr-prompts.md, with at most one pointer line ininterview/SKILL.md, net zero lines (trim one). Content:read consumer standards through the ladder before bundled defaults (Q37);
intent question every engineering session (confirm when stated; one line for prototype; "not applicable?" for bug
fix/refactor); record
Intent:andQuality bar:lines under Captured assumptions; NFR prompt by quality bar,recorded under Constraints; upstream summary rules (no verbatim private content; pointer only in private repos,
unknown visibility = public); unattended rules per Q47's answers.
case.yamldirs underplugins/planning/evals/(no sharedevals.jsonappend, so no conflict with theProblem First branch): intent asked and recorded; unattended blocked row; prototype one-line collapse; NFR captured;
consumer override line (consumer standards written by
scaffold_scriptasdocs/standards/files; eval runs loadno
CLAUDE.mdor.claude/content, even one a scaffold wrote). Judge each new instruction by running the suite onmain's plugin and on the branch's plugin; drop any instruction that does not improve on main. The no-plugin Δ stays
the skill-level check (DA-C).
grep -c "Quality bar:" plugins/planning/skills/interview/context/loop.md≥ 1 andgrep -c "Intent: second variant" plugins/planning/skills/interview/context/loop.md≥ 1.bash plugins/planning/tests/interview-defenses.test.shandbash scripts/check-changed-skills.sh origin/mainexit 0.Phase 4: Design defaults and reversibility [DONE]
Review: code-design
Implements: Design › Module layout rows 2 and 4; Contracts (C-intent read, C-override). Needs Phase 3 (reads
nfr-prompts.mdand theQuality bar:line).with one pointer line each in "Design defaults" (DA-C). "Design defaults": name the principles and point at
${CLAUDE_PLUGIN_ROOT}/reference/design-principles.md; the per-tenant line on configurability (one mechanism, flagsfor temporary variation, entitlements per tier, owner and removal path; labeled vendor guidance); read standards
through the ladder (Q37); NFRs in the Brief are settled, else read
${CLAUDE_PLUGIN_ROOT}/skills/interview/context/nfr-prompts.md(Q44; the plugin-root form is whatcheck-skill.shCheck 5 resolves for a sibling-skill file); generalize-now-or-wait follows the interview'sunattended rule.
design/reference/reversibility.md: one-way/two-way door per significantdecision, ADR prompt for one-way; baseline is the consumer's style, greenfield vertical slice as an overridable
default; investment by subdomain (core, supporting, generic: the three-way split is Vernon's and Khononov's; Evans's DDD
Reference names core and generic only); scaled by the
Quality bar:line.case.yamldirs underplugins/planning/evals/: outcome case first (a task whose obvious design puts onefact in several files; graded on whether the design places it once); one-way door gets an ADR prompt; prototype
skips reversibility and names it deferred; NFR from Brief not re-asked. Judge each new line by running the suite on
main's plugin and on the branch's plugin; drop any line that does not improve on main (DA-C).
grep -c "design-principles.md" plugins/planning/skills/design/SKILL.md≥ 1 andtest -f plugins/planning/skills/design/reference/reversibility.md.bash scripts/check-changed-skills.sh origin/mainexits 0.Phase 5: Plan-time checks [DONE]
Review: code-design
Implements: Design › Module layout row 5; Contracts (C-plan-gap, C-tag writer side). Needs Phase 4 (gates its threads).
design-handoff/SKILL.md: gate requires principle and reversibility threads RESOLVED, directional orTAGGED-DEFERRED (skipped and named for prototype).
plan/SKILL.mdStep 2 design-default checklist: same threads;copy.Quality bar:into tagged phases' review briefScope change 2026-10-19 (review on feat(planning): gate principle and reversibility threads at handoff, plan and plan-reviewer #8419): implementation already passes the plan-level
Quality bar:line toevery phase-boundary review (
implement/SKILL.md:221), so a per-phase copy was never read. Step 2 now confirms theBrief carries the line. Step 2 and plan-reviewer also exempt an early-exit
design-resolution.mdfrom the threadaudit.
plan/context/plan-reviewer.mdDesign alignment: the C-plan-gap item and the principle/reversibility threads.plan/context/plan-template.mdphase Review tags: the Q36 rule;concurrencymaps to/review:quality-gate slice concurrency.case.yamldirs underplugins/planning/evals/:dh-missing-reversibility-thread-fails; outcome caseplan-reviewer-flags-spread-fact(a plan whose file list repeats one fact is flagged). Run/evals:plugin-evalwith and without.
grep -c "one fact or rule in several files" plugins/planning/skills/plan/context/plan-reviewer.mdreturns 1.
bash scripts/check-changed-skills.sh origin/mainexits 0 andbash scripts/check-affected.sh --testsexits 0 with noSKIPline.Phase 6: Phase-boundary dispatch [DONE]
Review: architecture
Implements: Design › Contracts (C-tag reader side). Needs Phase 1; runs before Phase 2 so this effort's own tagged
phases get reviewed.
implementation/skills/implement/SKILL.mdStep 4 ritual andimplement-dispatch/SKILL.mdPhase boundaries: for eachReview:concern tag on the phase, invoke/review:quality-gate <mode>in fresh context (architecture,security,code-design, andslice concurrencyforconcurrency) with the phase diff, the tag and theQuality bar:line, worktree path, base SHA and report-only flag, rationale withheld. Sequence: review, fix insidethe phase fence, one re-review scoped to the fixed hunks, then the phase-verifier last. A second CRITICAL on the same
finding goes to
DEVIATIONS.mdas a blocker and escalates; it never loops.case.yamldirs underplugins/implementation/evals/: a tagged phase dispatches its review before thecommit; an untagged phase does not; a repeated CRITICAL escalates once (unattended). Run
/evals:plugin-evalwithand without; record the difference.
grep -c "quality-gate code-design" plugins/implementation/skills/implement/SKILL.md≥ 1.bash scripts/check-changed-skills.sh origin/mainexits 0.Phase 7: Sizing cadence [DONE]
work-items/skills/decompose/SKILL.md:71window-bar row: add integrate at least daily as practice-guidance cadence,not an estimate (DORA trunk-based development and small batches, Fowler's Continuous Integration: "at least daily"
is the merge floor); no hours unit, no one-day cap; wording agreed with the Problem First session's Work size and
time-units rule before merge (DA-E).
case.yamldir underplugins/work-items/evals/: a slice sized to the window bar is also checked fordaily integration, with no hours estimate.
grep -c "at least daily" plugins/work-items/skills/decompose/SKILL.md≥ 1 andgrep -ciE "[0-9]+ hours" plugins/work-items/skills/decompose/SKILL.mdreturns 0.bash scripts/check-changed-skills.sh origin/mainexits 0.Phase 8: Follow-up issue [DONE]
Search (2026-10-18):
gh issue list --state all --search "prd non-functional in:title,body"and"prd NFR"bothreturned no match. Filed #8322.
/work-items:track search), then file: /planning:prd lacks an NFR section (Q27). On a match,link instead of filing.
Test strategy. Behavior is tested by
case.yamleval cases under each plugin'sevals/directory, run with/evals:plugin-eval. The no-plugin Δ (with-plugin score minus no-plugin score) measures the whole plugin, so each newinstruction is judged by running the same suite on main's plugin and on the branch's plugin; each phase records both
results in its PR body, and an instruction that does not improve on main is dropped. Consumer standards in cases are
docs/standards/files written byscaffold_script. Outcome cases (a planted spread fact, a planted cascade)lead; mention checks are secondary. Static gates:
scripts/check-changed-skills.sh,scripts/check-affected.sh --tests,both run after the phase commit. CI runs no eval automatically (
eval-browser-dispatch.yml:24is manual dispatch),so the per-phase run is the gate.
Alternatives considered.
removed from the marketplace.
security mode cannot take a phase diff.
Risks and mitigations.
/docs-hygiene:compress auditbefore PR.Blast radius
Blast radius: HIGH
Stress-test needed: Yes — invoking /planning:devils-advocate
Reason: changes standing instructions in four plugins that every consumer's planning and implementation runs read,
and turns a review that never ran into one that can block phase completion.
Stress-test summary
Step 3 plan-reviewer: 0 CRITICAL / 6 IMPORTANT / 6 SUGGESTION, all verified and fixed (review mode first, strict
2→5 chain,
concurrency→ existingslicemode, real standards index, code-reviewer:95/:103reconciled, per-phaseevals, post-commit checks).
Step 4 devils-advocate: 9 HIGH / 7 MEDIUM / 2 LOW. Fixed in the plan: runnable
case.yamlevals with a with/withoutrun per phase and outcome cases; SKILL.md line caps (text in context files); quality-gate phase-boundary inputs
(worktree, base SHA, quality bar, report-only, fresh
brief-reviewer); bounded review loop with escalation; Phase 6moved before Phase 2; per-case eval dirs to avoid conflicts with Problem First; Phase 6 sanity grep. Changes to user
answers: listed in "Displaced answers and new external effects" below, awaiting replies.
Displaced answers and new external effects
babysit_classify.py:102), so a code-reviewer cascade finding becomes a merge blocker in unattended lanes/evals:plugin-evalruns, two per phaseQuality requirement:and the term written "quality requirement (NFR)", because the SEI authors keep quality requirements and constraints separatecode-reviewerrates Shotgun Surgery at the code-design severity (Brief acceptance criterion)Execution shape
.changes/<plugin>/gets one new fragment file per phase (no shared file);plan-template.mdonly in Phase 5Open questions
Glossary
Sources: verified research slices (
terminology-sources,cadence-review,agent-instructions, eachverification: pass, and earlier slicesprinciples-canon,elicitation-architecture-fit), kept in the planning session's local memory.Terms
Quality bar:in the Brief.plugins/review/context/severity.md:11-13;babysit_classify.py:102Codes used in this plan
interview-checklist.md, the register behind the Brief.design-threads.md.## Design › Contracts.Handoff to implementation
Approval: approved by the user on 2026-10-18 ("go with recommended" after the final research pass): plan, DA-A to DA-G and Q47 as recommended. Content-control eval arm not adopted (added cost; revisit if branch-vs-main results are ambiguous).
User-approval gates
Execution shape ([EXEC-SHAPE] tagged)
Mechanical work
origin/mainbefore each phase; fragment per touched plugin;scripts/check-affected.sh --testsbefore push.work-items/skills/decompose/SKILL.md:71kyle-sexton commentedon Oct 19, 2026
Close-out review: PASS. All 9 sub-items are closed by their shipping PRs (#8348, #8382, #8388, #8395, #8394, #8393, #8407, #8413, #8419), and every acceptance criterion was delivered at main 8c85f63.
Departures the user approved:
Quality bar:copy, because implementation reads the plan-level line.Durable records: ADR 0078 (the review plugin owns the code-design criteria) and ADR 0079 (phase-boundary dispatch of
Review:tags), shipped in #8422.Review observations:
Follow-up filed during the effort: #8322 (PRD quality-requirements section).