You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two families of composable skills end in an unconditional developer-approval round and have no non-interactive signal of their own:
the assess-* family (up to eight composed by bootstrap) — the resolution cascade's Path A steps 3-4, "Confirm the override with the developer", each skill declaring its own prompt;
the map-* family (/pair-capability-map-subdomains Step 3, /pair-capability-map-contexts Step 4) — "Approve or adjust?".
Any caller that must not ask — a quick/non-interactive depth, an automated run, a supervisor loop — therefore has only one option: declare that it suppresses the composed skill's approval round. Bootstrap now does exactly that, twice, as disclosed deviations 2 and 3 in quick-mode-defaults.md (#278, PR #408).
That is the wrong place for the fix, and the shape of the bug is instructive: the same defect recurred twice in two review rounds on #408, in two different surfaces, because a caller-side suppression note cannot structurally see the next composed skill that asks. Round 2 fixed assess-*; round 3 found map-*. Nothing prevents a fourth surface.
What the real fix looks like
A first-class non-interactive signal on the composed skill, so a caller states its depth once and every composed skill honours it — instead of each caller enumerating, per composed skill, an approval round it happens to know about.
Scope, and it is why this is its own story:
Decide the mechanism and record it as an ADR — a shared parameter honoured by both families, versus extending the resolution cascade convention itself. This changes the convention, not just skills.
Apply it to the assess-* family (eight skills) and the map-* family (two), in both corpora.
Rewrite the approval steps so they are conditional on it, without changing guided behaviour at all.
Retire bootstrap's disclosed deviations 2 and 3, and the caller-side notes in SKILL.md Steps 2.2 and 3.5 that exist only to describe them.
Decide what happens to the one gate that must survive: /map-contexts HALTs on an unbalanced + volatile relationship offered with neither mitigation nor acceptance. Quickstart path in bootstrap — opinionated one-command setup #278 deliberately keeps it even in quick mode — writing a domain model that records a coupling risk nobody judged is worse than asking. A generic non-interactive signal must not silently swallow it.
Raised as review finding 5 on PR #408 (untracked deferred scope), and reinforced by finding 1 of the same round: the deferral had no issue number, and the gap had just widened from one family to two.
Classification
risk:yellow · cost:green · coupling: not assessed
Matrix — per dimension
Dimension
Tier
Source
Note
Service/domain criticality
yellow
KB default
no Criticality Table declared ⇒ Medium (D21)
Change/diff risk
yellow
blast radius
ten skills plus a shared convention; map-* are modified by #387
Business impact
yellow
subdomain class
Knowledge & Standards (Supporting) — changes a convention every future skill inherits
Security relevance
green
path heuristic
prose + skill definitions; no credential, no runtime code
Coupling balance
not assessed
absent
no new integration point; it removes per-caller coupling
Acceptance Criteria
Given-When-Then:
Given a caller that must not ask (a quick depth, an automated run, a supervisor loop) When it composes any assess-* or map-* skill Then it passes one signal and every composed skill honours it — the caller never enumerates, per composed skill, an approval round it happens to know about
Given a caller that passes nothing When it composes those skills Then behaviour is unchanged: the approval round runs exactly as today. Guided must not shift by one word
Given the signal is honoured When bootstrap's quick mode runs Then disclosed deviations 2 and 3 are retired from quick-mode-defaults.md, and the caller-side notes in Steps 2.2 and 3.5 that exist only to describe them are gone
Given the one gate that must survive — /map-contexts HALTing on an unbalanced + volatile relationship with neither mitigation nor acceptance When the non-interactive signal is passed Then that HALT still fires. A generic signal must not swallow a judgement gate; Quickstart path in bootstrap — opinionated one-command setup #278 kept it deliberately and this story must not undo that decision silently
Given a new skill added to either family later When it declares an approval round Then the convention obliges it to honour the signal — so the defect cannot recur in an eleventh surface, which is the whole point of this story
Given the conformance suite When it runs Then it asserts the signal is honoured per skill present, data-driven, with no hardcoded count — the families grow
Guided is untouchable. Any behaviour change to the default depth makes this a different, larger story.
The surviving HALT is a feature. Writing a domain model that records a coupling risk nobody judged is worse than asking one question.
Edge Cases
A skill whose approval round has a side effect (writes before asking) — must be found during T-2, not assumed absent.
A caller that passes the signal but IS interactive — the signal means "do not ask", not "do not report": the summary obligation stays.
Partial adoption — if only some skills honour it, a caller gets a worse guarantee than today's explicit suppression, because it looks total and is not. T-2 lands the family atomically or not at all.
Definition of Done
All acceptance criteria implemented and verified
The mechanism recorded as an ADR — it changes a shared convention
Conformance is data-driven over the skills present; no count asserted
T-2 and T-3 are parallel once the mechanism exists; T-4 only after both, or bootstrap loses a suppression it still needs. T-5 is independent of the application work but must land in the same PR — a convention that obliges nothing until later is how this defect got here.
Problem
Two families of composable skills end in an unconditional developer-approval round and have no non-interactive signal of their own:
assess-*family (up to eight composed by bootstrap) — the resolution cascade's Path A steps 3-4, "Confirm the override with the developer", each skill declaring its own prompt;map-*family (/pair-capability-map-subdomainsStep 3,/pair-capability-map-contextsStep 4) — "Approve or adjust?".Any caller that must not ask — a quick/non-interactive depth, an automated run, a supervisor loop — therefore has only one option: declare that it suppresses the composed skill's approval round. Bootstrap now does exactly that, twice, as disclosed deviations 2 and 3 in
quick-mode-defaults.md(#278, PR #408).That is the wrong place for the fix, and the shape of the bug is instructive: the same defect recurred twice in two review rounds on #408, in two different surfaces, because a caller-side suppression note cannot structurally see the next composed skill that asks. Round 2 fixed
assess-*; round 3 foundmap-*. Nothing prevents a fourth surface.What the real fix looks like
A first-class non-interactive signal on the composed skill, so a caller states its depth once and every composed skill honours it — instead of each caller enumerating, per composed skill, an approval round it happens to know about.
Scope, and it is why this is its own story:
assess-*family (eight skills) and themap-*family (two), in both corpora.SKILL.mdSteps 2.2 and 3.5 that exist only to describe them./map-contextsHALTs on an unbalanced + volatile relationship offered with neither mitigation nor acceptance. Quickstart path in bootstrap — opinionated one-command setup #278 deliberately keeps it even in quick mode — writing a domain model that records a coupling risk nobody judged is worse than asking. A generic non-interactive signal must not silently swallow it.Dependencies
map-subdomains/SKILL.mdandmap-contexts/SKILL.md, both modified by PR [US-230] feat: pair-process-brainstorm — 3 phases, parametrized ($root, orientation) #387 while it is open, plus eightassess-*skills. Do not enter a batch before [US-230] feat: pair-process-brainstorm — 3 phases, parametrized ($root, orientation) #387 merges.Origin
Raised as review finding 5 on PR #408 (untracked deferred scope), and reinforced by finding 1 of the same round: the deferral had no issue number, and the gap had just widened from one family to two.
Classification
risk:yellow·cost:green· coupling: not assessedMatrix — per dimension
map-*are modified by #387Acceptance Criteria
Given-When-Then:
Given a caller that must not ask (a quick depth, an automated run, a supervisor loop)
When it composes any
assess-*ormap-*skillThen it passes one signal and every composed skill honours it — the caller never enumerates, per composed skill, an approval round it happens to know about
Given a caller that passes nothing
When it composes those skills
Then behaviour is unchanged: the approval round runs exactly as today. Guided must not shift by one word
Given the signal is honoured
When bootstrap's quick mode runs
Then disclosed deviations 2 and 3 are retired from
quick-mode-defaults.md, and the caller-side notes in Steps 2.2 and 3.5 that exist only to describe them are goneGiven the one gate that must survive —
/map-contextsHALTing on an unbalanced + volatile relationship with neither mitigation nor acceptanceWhen the non-interactive signal is passed
Then that HALT still fires. A generic signal must not swallow a judgement gate; Quickstart path in bootstrap — opinionated one-command setup #278 kept it deliberately and this story must not undo that decision silently
Given a new skill added to either family later
When it declares an approval round
Then the convention obliges it to honour the signal — so the defect cannot recur in an eleventh surface, which is the whole point of this story
Given the conformance suite
When it runs
Then it asserts the signal is honoured per skill present, data-driven, with no hardcoded count — the families grow
Business Rules
Edge Cases
Definition of Done
pnpm quality-gategreen; PR followspr-template.mdTask Breakdown
assess-*skills, both corpora, atomicallymap-subdomains+map-contexts, preserving the unbalanced+volatile HALTDependency Graph
T-2 and T-3 are parallel once the mechanism exists; T-4 only after both, or bootstrap loses a suppression it still needs. T-5 is independent of the application work but must land in the same PR — a convention that obliges nothing until later is how this defect got here.
AC Coverage