wdi-method 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,99 +1,102 @@
1
- ---
2
- name: wdi-help
3
- description: Use when you need to know where the project stands in the delivery flow and which skill comes next. Answers from this project's five gates, not from BMad's phase column.
4
- ---
5
-
6
- # WDI Help
7
-
8
- `bmad-help` cannot answer "where am I" in this project. Its progress detection globs `output-location`
9
- paths resolved from `resolve_config.py`, so it is blind to every class-A artifact this project redirects
10
- into `.what/` and `.how/`. It also lists two required gates — `epics.md` and `sprint-status.yaml` — that
11
- this project's route never produces, and it is the only BMad skill with no `customize.toml`, so none of
12
- that can be corrected.
13
-
14
- This skill replaces it for position and routing. `bmad-help` remains useful for one thing only: questions
15
- about BMad itself.
16
-
17
- ## Inputs
18
-
19
- | Source | What it answers |
20
- |---|---|
21
- | `.control/generated/status` | Which spec is open, how many of its tickets are done, which validators are red |
22
- | `.control/registry/index.yaml` | The global `mode`, and the gate map |
23
- | `.control/registry/components.yaml` | Per-component `mode`, `risk_accepted`, and `g4_passed` |
24
- | `.control/registry/specs.yaml` | Spec → release, size, `depends_on`, and its ticket index |
25
- | `.constitution/method/document/delivery-flow-guide.md` | The five gates and their checklists |
26
- | `.constitution/method/why/README.md` | The whole shape, when the caller has never seen the method |
27
-
28
- You MUST read `.control/generated/status` rather than counting files yourself. It is generated from the
29
- registry; hand-counting produces a second answer that will disagree.
30
-
31
- ## What to answer
32
-
33
- Three things, in this order, and nothing else unless asked:
34
-
35
- 1. **Where the project stands** — the last gate passed, and which gate is next.
36
- 2. **What blocks that gate** — the specific artifact, validator, or blocking question that is not ready.
37
- 3. **Which skill to invoke next** — one skill, named, with its intent, and the reason in a clause.
38
-
39
- Keep it under fifteen lines. A routing answer that needs scrolling has failed at its job.
40
-
41
- ## The one thing that changes the answer
42
-
43
- **Read the component's `mode` before routing to G4.** A component at `mode: catalog` skips G4 entirely —
44
- routing it to `wdi-component` is wrong, and the next step is `wdi-build`. That is the single most common
45
- mis-route in this flow, because every other gate is the same for every component.
46
-
47
- ## Routing by what exists
48
-
49
- | State | Next |
50
- |---|---|
51
- | `wdi-method update` just ran and its summary printed an `upgrade` line | `wdi-upgrade` — **before anything else**. Content is still in the old shape, and every skill below reads the new one |
52
- | No registry, or no global `mode` set | `wdi-init` intent `setup` — nothing has started |
53
- | No `.what/_product-brief/brief.md` | `wdi-problem` — G1 has not started |
54
- | A brief exists, and no PRD covers the area in play | `wdi-product` intent `prd` |
55
- | A PRD covers it but the promise has moved | `wdi-product` intent `update` — never a second PRD for the same area |
56
- | Only the **wording** of an `FR` is wrong | Nobody. Whichever skill is at work fixes it directly; putting it behind a gate is how three earlier corrections were dropped |
57
- | A PRD exists and the interface is a large part of what it promises | `wdi-ux` — optional, and it runs **before G2**, which reads its `EXPERIENCE.md`. It needs no Product Component: `design-system.md` lands at once, and the two `<pc>`-scoped halves land when `wdi-init` intent `component` runs |
58
- | A PRD exists, no `product_components` yet | `wdi-init` intent `component` — the slicing is born here, at the tail of G2 |
59
- | Components exist, `mode` or `risk_accepted` unset | `wdi-init` intents `mode` and `risk` — both are the owner's, and G4 cannot be read without them |
60
- | Components exist, no UC catalogue or no spine | `wdi-blueprint` — intent `catalog` first, then `platform` |
61
- | The blueprint is complete and G3 has not been held | The gate. Read `.how-rendered/blueprint.md`, not seven files |
62
- | G3 passed, a component at `outline`/`guarded`/`deep` has no depth | `wdi-component` |
63
- | G3 passed, the component is at `mode: catalog` | `wdi-build` — G4 is skipped by design |
64
- | Depth done and G4 passed for every component the work touches | `wdi-build` — it opens the spec, has the owner run `to-spec` and `to-tickets`, ships each ticket, closes the spec |
65
- | A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: the owner runs `/implement` directly. It stops and becomes a spec `S` the moment an `FR` is touched |
66
- | A planning assumption turned out void | `wdi-decision` intent `open` it proposes, and changes nothing |
67
- | An accepted `DEC-` has not reached its documents | `wdi-decision` intent `apply` |
68
- | A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, before any fix is proposed |
69
- | Numbers are wanted before the work is committed | `wdi-report` intent `estimate` |
70
-
71
- A brief that exists but is thin is still a brief. You MUST NOT route back to `wdi-problem` because a
72
- section reads weakly — route there only when the brief is absent, when a change signal invalidates what
73
- it claims, or when one of its eight required sections is missing outright.
74
-
75
- ## Rules
76
-
77
- - You MUST answer from this project's five gates — G1 Problem · G2 Product · G3 Blueprint · G4 Component ·
78
- G5 Release. BMad's `phase` column MUST NOT be used; it mixes two conventions and names gates this
79
- project does not run.
80
- - When a `wdi-*` wrapper exists for a BMad skill, you MUST name the wrapper, never the skill it wraps. The
81
- wrapper carries the position check and the content checks; routing past it produces an artifact nothing
82
- verifies. Today every BMad skill this method uses has one: `wdi-problem`, `wdi-product`,
83
- `wdi-blueprint`, `wdi-build`, `wdi-decision`, `wdi-review`, `wdi-ux`.
84
- - Only `.control/questions/blocking.md` holds a gate. `external.md` holds go-live and MUST NOT be reported
85
- as blocking a design gate; `assumptions.md` holds nothing.
86
- - You MUST NOT invent progress. If `.control/generated/status` is missing or stale, say so and name
87
- `validate.py --generate`.
88
- - You MUST NOT run other skills on the user's behalf. Name the skill; let them invoke it.
89
- - When the next step is blocked by a decision rather than by work, route to `wdi-question` or
90
- `wdi-decision`, not to a producing skill.
91
- - When asked about BMad itself what a BMad skill does, what it writes, which are deprecated answer
92
- from `bmad-skill-register.md`, and only fall back to `bmad-help` for module documentation.
93
- - When the caller has never seen this method, point at `.constitution/method/why/README.md` rather than
94
- paraphrasing it here.
95
-
96
- ## When there is no spec open
97
-
98
- Say so plainly, then route by the table above. An artifact a later gate produces MUST NOT be reported as
99
- missing that is not a gap, it is the plan.
1
+ ---
2
+ name: wdi-help
3
+ description: Use when you need to know where the project stands in the delivery flow and which skill comes next. Answers from this project's five gates, not from BMad's phase column.
4
+ ---
5
+
6
+ # WDI Help
7
+
8
+ `bmad-help` cannot answer "where am I" in this project. Its progress detection globs `output-location`
9
+ paths resolved from `resolve_config.py`, so it is blind to every class-A artifact this project redirects
10
+ into `.what/` and `.how/`. It also lists two required gates — `epics.md` and `sprint-status.yaml` — that
11
+ this project's route never produces, and it is the only BMad skill with no `customize.toml`, so none of
12
+ that can be corrected.
13
+
14
+ This skill replaces it for position and routing. `bmad-help` remains useful for one thing only: questions
15
+ about BMad itself.
16
+
17
+ ## Inputs
18
+
19
+ | Source | What it answers |
20
+ |---|---|
21
+ | `.control/generated/status` | Which spec is open, how many of its tickets are done, which validators are red |
22
+ | `.control/registry/index.yaml` | The global `mode`, and the gate map |
23
+ | `.control/registry/components.yaml` | Per-component `mode`, `risk_accepted`, and `g4_passed` |
24
+ | `.control/registry/specs.yaml` | Spec → release, size, `depends_on`, and its ticket index |
25
+ | `.constitution/method/document/delivery-flow-guide.md` | The five gates and their checklists |
26
+ | `.constitution/method/why/README.md` | The whole shape, when the caller has never seen the method |
27
+
28
+ You MUST read `.control/generated/status` rather than counting files yourself. It is generated from the
29
+ registry; hand-counting produces a second answer that will disagree.
30
+
31
+ ## What to answer
32
+
33
+ Three things, in this order, and nothing else unless asked:
34
+
35
+ 1. **Where the project stands** — the last gate passed, and which gate is next.
36
+ 2. **What blocks that gate** — the specific artifact, validator, or blocking question that is not ready.
37
+ 3. **Which skill to invoke next** — one skill, named, with its intent, and the reason in a clause.
38
+
39
+ Keep it under fifteen lines. A routing answer that needs scrolling has failed at its job.
40
+
41
+ ## The one thing that changes the answer
42
+
43
+ **Read the component's `mode` before routing to G4.** A component at `mode: catalog` skips G4 entirely —
44
+ routing it to `wdi-component` is wrong, and the next step is `wdi-build`. That is the single most common
45
+ mis-route in this flow, because every other gate is the same for every component.
46
+
47
+ ## Routing by what exists
48
+
49
+ | State | Next |
50
+ |---|---|
51
+ | `wdi-method update` just ran and its summary printed an `upgrade` line | `wdi-upgrade` — **before anything else**. Content is still in the old shape, and every skill below reads the new one |
52
+ | No registry, or no global `mode` set | `wdi-init` intent `setup` — nothing has started |
53
+ | No `.what/_product-brief/brief.md` | `wdi-problem` — G1 has not started |
54
+ | A brief exists, and no PRD covers the area in play | `wdi-product` intent `prd` |
55
+ | A PRD covers it but the promise has moved | `wdi-product` intent `update` — never a second PRD for the same area |
56
+ | Only the **wording** of an `FR` is wrong | Nobody. Whichever skill is at work fixes it directly; putting it behind a gate is how three earlier corrections were dropped |
57
+ | A PRD exists and the interface is a large part of what it promises | `wdi-ux` — optional, and it runs **before G2**, which reads its `EXPERIENCE.md`. It needs no Product Component: `design-system.md` lands at once, and the two `<pc>`-scoped halves land when `wdi-init` intent `component` runs |
58
+ | A PRD exists, no `product_components` yet | `wdi-init` intent `component` — the slicing is born here, at the tail of G2 |
59
+ | Components exist, `mode` or `risk_accepted` unset | `wdi-init` intents `mode` and `risk` — both are the owner's, and G4 cannot be read without them |
60
+ | Components exist, no UC catalogue or no spine | `wdi-blueprint` — intent `catalog` first, then `platform` |
61
+ | The blueprint is complete and G3 has not been held | The gate. Read `.how-rendered/blueprint.md`, not seven files |
62
+ | G3 passed, a component at `outline`/`guarded`/`deep` has no depth | `wdi-component` |
63
+ | G3 passed, the component is at `mode: catalog` | `wdi-build` — G4 is skipped by design |
64
+ | Depth done and G4 passed for every component the work touches | `wdi-build` — it opens the spec, has the owner run `to-spec` and `to-tickets`, ships each ticket, closes the spec |
65
+ | A small fix touching no `FR`, `UC`, `AD-N`, or domain model | Fast Path: the owner runs `/implement` directly. It stops and becomes a spec `S` the moment an `FR` is touched |
66
+ | The owner wants every `FR` delivered without being asked in between | `wdi-autopilot` a preflight first, then one mandate the owner accepts, then a loop that fires it. Route here only when the owner asks for it; it is never the default next step |
67
+ | A planning assumption turned out void | `wdi-decision` intent `open` — it proposes, and changes nothing |
68
+ | The owner has to decide something and wants the reading done first | `wdi-explain-to-me` it briefs, and changes nothing; the decision then goes to `wdi-decision` or `wdi-question` |
69
+ | An accepted `DEC-` has not reached its documents | `wdi-decision` intent `apply` |
70
+ | A bug, a failing test, unexpected behaviour | `wdi-systematic-debugging`, before any fix is proposed |
71
+ | Numbers are wanted before the work is committed | `wdi-report` intent `estimate` |
72
+
73
+ A brief that exists but is thin is still a brief. You MUST NOT route back to `wdi-problem` because a
74
+ section reads weakly — route there only when the brief is absent, when a change signal invalidates what
75
+ it claims, or when one of its eight required sections is missing outright.
76
+
77
+ ## Rules
78
+
79
+ - You MUST answer from this project's five gates — G1 Problem · G2 Product · G3 Blueprint · G4 Component ·
80
+ G5 Release. BMad's `phase` column MUST NOT be used; it mixes two conventions and names gates this
81
+ project does not run.
82
+ - When a `wdi-*` wrapper exists for a BMad skill, you MUST name the wrapper, never the skill it wraps. The
83
+ wrapper carries the position check and the content checks; routing past it produces an artifact nothing
84
+ verifies. Today every BMad skill this method uses has one: `wdi-problem`, `wdi-product`,
85
+ `wdi-blueprint`, `wdi-build`, `wdi-decision`, `wdi-review`, `wdi-ux`.
86
+ - Only `.control/questions/blocking.md` holds a gate. `external.md` holds go-live and MUST NOT be reported
87
+ as blocking a design gate; `assumptions.md` holds nothing.
88
+ - You MUST NOT invent progress. If `.control/generated/status` is missing or stale, say so and name
89
+ `validate.py --generate`.
90
+ - You MUST NOT run other skills on the user's behalf. Name the skill; let them invoke it. The one skill that
91
+ runs others is `wdi-autopilot`, and only under a mandate the owner accepted that is what the mandate is.
92
+ - When the next step is blocked by a decision rather than by work, route to `wdi-question` or
93
+ `wdi-decision`, not to a producing skill.
94
+ - When asked about BMad itself — what a BMad skill does, what it writes, which are deprecated — answer
95
+ from `bmad-skill-register.md`, and only fall back to `bmad-help` for module documentation.
96
+ - When the caller has never seen this method, point at `.constitution/method/why/README.md` rather than
97
+ paraphrasing it here.
98
+
99
+ ## When there is no spec open
100
+
101
+ Say so plainly, then route by the table above. An artifact a later gate produces MUST NOT be reported as
102
+ missing — that is not a gap, it is the plan.
@@ -1,170 +1,176 @@
1
- ---
2
- name: wdi-question
3
- description: Use when something cannot be decided now and must not be silently assumed. Files it into one of four lists in .control/questions/ by what the reader has to do about it, and closes it in place when the answer arrives.
4
- ---
5
-
6
- # WDI Question
7
-
8
- Free of stage and free of role. The purpose is narrow: make sure an unresolved thing is written down
9
- where it will be seen, instead of becoming an assumption nobody remembers making.
10
-
11
- The old single list reached `OQ-146` and stopped being readable. It is now four files in
12
- `.control/questions/`, split by **what the reader has to do about it** — not by subject, and not by
13
- severity.
14
-
15
- | File | Holds | Read when |
16
- |---|---|---|
17
- | `blocking.md` | Holds a gate. Target ≤3 per Product Component | Every gate |
18
- | `assumptions.md` | An assumption the agent took itself. One line: the assumption plus the cost of being wrong | Swept once per gate; MAY be skipped |
19
- | `external.md` | Waiting on a file, an action, or a credential from outside. Owner and `by_when` required | Before go-live — **not** at a design gate |
20
- | `answered.md` | Archive. Closed in place, never deleted | Almost never; only to stop a question being reopened |
21
-
22
- **Only `blocking.md` holds a gate.** `external.md` holds go-live; `assumptions.md` holds nothing.
23
-
24
- ## The default class is `assumptions.md`
25
-
26
- A question is filed there unless it passes one of three tests. One is enough:
27
-
28
- 1. It touches money, personal data, or a legal obligation.
29
- 2. It changes the wording of an `FR`'s promise.
30
- 3. Answering it wrong forces a rewrite of more than one Product Component.
31
-
32
- Failing all three, you take the answer yourself — and then one more test decides whether it is
33
- recorded at all.
34
-
35
- ## The recording threshold — most assumptions MUST NOT be written down
36
-
37
- **Two filters, and a line has to pass both.**
38
-
39
- **First: it is about the PRODUCT, not about the corpus.** An open question names something undecided
40
- about what is being built — a behaviour, a boundary, a promise, a limit. *"Does the SRS contradict the
41
- SDD"* is not an open question; it is an **edit**, and it goes to whichever skill owns the file. A
42
- question about which document says what has never once changed what gets built, and it is the single
43
- easiest way to fill this list with rows nobody can act on.
44
-
45
- **Second: an assumption whose reversal costs less than the conversation about it MUST NOT be recorded.
46
- The shipping default IS the record.**
47
-
48
- The test is the `Cost if wrong` column that already exists. If the honest answer is *one setting
49
- changes* · *one default changes* · *a shortcut is added later* — with no rework, no migration, and
50
- nothing already built on it — then there is nothing to decide and nothing to remember. The code says
51
- what was chosen, and it says it more reliably than a line in a list.
52
-
53
- This is not a licence to assume quietly. It is the opposite: it protects the list. One real corpus
54
- carried twenty-five open lines, and **six** of them were this class — a default image dimension, how many
55
- quality presets to offer, whether one working folder at a time is enough. Every one had a default already
56
- running and a one-value reversal. Sitting in the same list as six real decisions, they made a
57
- six-item list look like twenty-five items of homework, and the owner stopped reading it.
58
-
59
- **The threshold does NOT apply**, and the line is recorded, when being wrong touches money, personal
60
- data, an irreversible action, a third-party contract, or the wording of an `FR`'s promise. Those are
61
- the three tests above, and they always win.
62
-
63
- **You MUST NOT register a question as blocking "to be safe."** That habit is what produced 146 ids and
64
- a list nobody read, and the cost is paid at every gate afterwards.
65
-
66
- ## One batch, per gate, already ranked
67
-
68
- Inside a single working pass you do **not** ask. You collect. The batch is delivered once, at the gate,
69
- ranked, and it MUST NOT be dribbled out as each question surfaces.
70
-
71
- A healthy batch on `mode: catalog`: **≤3 blocking questions, plus ≤15 one-line assumptions.** A batch
72
- larger than that is a signal about the pass, not about the corpus — say so rather than delivering it
73
- as a list.
74
-
75
- When N agents ran in parallel, their questions arrive as **one** ranked batch, never as N reports.
76
-
77
- ## Every row says whose it is, and whether it can be answered at all
78
-
79
- The four files split by **what the reader has to do**. That was not enough: a file can still hold
80
- lines nobody may answer yet beside lines the owner owes today, and then the owner opens it and sees
81
- one flat pile. In the corpus above, of twenty-five open lines exactly **six** were the owner's and
82
- answerable — the other nineteen were frozen, waiting on a measurement, external, or fossil.
83
-
84
- So every row carries **`Whose`**, and the vocabulary is closed:
85
-
86
- | `Whose` | Means | Who acts |
87
- |---|---|---|
88
- | `owner` | A judgement only the owner can make, and it can be made now | the owner |
89
- | `run: <what>` | The answer comes from running or measuring something, not from an opinion | **you**, not the owner |
90
- | `frozen: DEC-NNN` | An applied decision forbids answering it yet | nobody, until that `DEC-` lifts |
91
-
92
- `run:` MUST name what has to be run. "Needs testing" is not a value; `run: capture 5-finding review,
93
- measure handoff time` is. A row that cannot name it is not waiting on a measurement — it is an
94
- `owner` row in disguise.
95
-
96
- `frozen:` MUST name a `DEC-` that is `applied` and that actually forbids the work. A freeze covers
97
- **planning as well as building**: where a decision bans new `FR`, new use cases, and a UX pass in a
98
- component, answering a design question there is exactly what it bans. When that `DEC-` lifts or is
99
- superseded, its frozen rows become `owner` rows automatically — no re-triage.
100
-
101
- A row whose `Whose` is wrong is worse than a missing row, because it puts work in the wrong person's
102
- lap and it is invisible.
103
-
104
- ## Registering
105
-
106
- | Field | Rule |
107
- |---|---|
108
- | Question | One sentence, answerable. "How should referrals work?" is a topic, not a question |
109
- | Blocks | What cannot proceed — a gate, an `FR`, a ticket, or nothing |
110
- | Whose | `owner` · `run: <what>` · `frozen: DEC-NNN`. See above |
111
- | Owner | Who can answer. A question with no owner is a wish |
112
- | By when | The moment it must be answered, usually a gate |
113
-
114
- Ids stay `OQ-`, allocated from the highest ever used including closed ones. An id MUST NOT be reused.
115
-
116
- A question whose discussion outgrows one line gets `.control/questions/OQ-NNN-<slug>.md` in the same
117
- folder, from `templates/oq.md`, and the list keeps a one-line pointer. The old home
118
- `.control/supplements/` is gone.
119
-
120
- ## Closing
121
-
122
- An answered question is closed **in place** the answer written beside it with the date and who
123
- answered then moved to `answered.md`. You MUST NOT delete the entry.
124
-
125
- **A fossil is closed, not answered, and you MUST look for fossils first.** A row questioning a rule, a
126
- layer, or a validator that has since been repealed cannot bite again: it closes with the repeal as its
127
- answer and MUST NOT be put to the owner as a decision. These are free, and a long list usually holds
128
- several one real corpus was still carrying a question about `parallel-tickets-blocked`'s shape after the layer `parallel-tickets-blocked` runs
129
- on had been retired.
130
-
131
- **An answer goes into the document it belongs to, and that is usually the end of it.** An `FR` in the
132
- PRD, a rule in `business-rules.md`, a line in the brief written there, closed here, done. The closure
133
- routes to `wdi-decision` **only** when the answer has no home in any design document, or contradicts an
134
- `AD-N`. `decision-guide.md` § A decision's first home owns that split, and a `DEC-` is never permission
135
- to edit a document.
136
-
137
- This matters most at G1 and G2, where almost nothing is homeless yet: an answer about a brief belongs in
138
- the brief.
139
-
140
- ## Rules
141
-
142
- - You MUST NOT answer the question yourself when the owner is the client or a stakeholder. Drafting a
143
- proposed answer for them to confirm is useful; recording it as settled is not.
144
- - An `[ASSUMPTION]` tag left in a PRD, an SRS, or an SDD MUST be filed here before that document
145
- passes its gate. That is precisely the failure this skill exists to prevent.
146
- - A question past its "by when" MUST be raised, not silently carried forward. Carried forward twice is
147
- a signal that either the owner is wrong or the question is not real.
148
- - A row MUST move between files when its class changes, and MUST NOT be copied into a second one. An
149
- assumption that turns out to touch money moves to `blocking.md`; it does not appear in both.
150
- - Terms MUST match `.control/product-glossary.md`.
151
-
152
- ## Output
153
-
154
- **The owner's section MUST contain only `owner` rows.** Everything else is reported as a count with one
155
- line saying why it is not theirs never as a list they have to read past. A report that shows all
156
- nineteen alongside the six is the failure this skill was reshaped to end.
157
-
158
- | Section | Contents |
159
- |---|---|
160
- | **Yours, now** | every `owner` row, ranked. This is the list |
161
- | Mine | `run:` count, plus what has to be run |
162
- | Frozen | `frozen:` count, plus which `DEC-` holds them and what lifts it |
163
- | External | `external.md` count. States plainly that it holds no design gate |
164
- | Not recorded | how many assumptions the threshold turned away this pass |
165
-
166
- Then: which file each question landed in, and anything routed on to `wdi-decision`.
167
-
168
- **"Are we done no more OQ?" is answerable, and the honest answer is usually no.** Say which third is
169
- the owner's, name what lifts the frozen third, and name what you have to run for the rest. A clean
170
- list is not the goal; a list where every line is somebody's and actionable is.
1
+ ---
2
+ name: wdi-question
3
+ description: Use when something cannot be decided now and must not be silently assumed. Files it into one of four lists in .control/questions/ by what the reader has to do about it, and closes it in place when the answer arrives.
4
+ ---
5
+
6
+ # WDI Question
7
+
8
+ Free of stage and free of role. The purpose is narrow: make sure an unresolved thing is written down
9
+ where it will be seen, instead of becoming an assumption nobody remembers making.
10
+
11
+ The old single list reached `OQ-146` and stopped being readable. It is now four files in
12
+ `.control/questions/`, split by **what the reader has to do about it** — not by subject, and not by
13
+ severity.
14
+
15
+ | File | Holds | Read when |
16
+ |---|---|---|
17
+ | `blocking.md` | Holds a gate. Target ≤3 per Product Component | Every gate |
18
+ | `assumptions.md` | An assumption the agent took itself. One line: the assumption plus the cost of being wrong | Swept once per gate; MAY be skipped |
19
+ | `external.md` | Waiting on a file, an action, or a credential from outside. Owner and `by_when` required | Before go-live — **not** at a design gate |
20
+ | `answered.md` | Archive. Closed in place, never deleted | Almost never; only to stop a question being reopened |
21
+
22
+ **Only `blocking.md` holds a gate.** `external.md` holds go-live; `assumptions.md` holds nothing.
23
+
24
+ ## The default class is `assumptions.md`
25
+
26
+ A question is filed there unless it passes one of three tests. One is enough:
27
+
28
+ 1. It touches money, personal data, or a legal obligation.
29
+ 2. It changes the wording of an `FR`'s promise.
30
+ 3. Answering it wrong forces a rewrite of more than one Product Component.
31
+
32
+ Failing all three, you take the answer yourself — and then one more test decides whether it is
33
+ recorded at all.
34
+
35
+ ## The recording threshold — most assumptions MUST NOT be written down
36
+
37
+ **Two filters, and a line has to pass both.**
38
+
39
+ **First: it is about the PRODUCT, not about the corpus.** An open question names something undecided
40
+ about what is being built — a behaviour, a boundary, a promise, a limit. *"Does the SRS contradict the
41
+ SDD"* is not an open question; it is an **edit**, and it goes to whichever skill owns the file. A
42
+ question about which document says what has never once changed what gets built, and it is the single
43
+ easiest way to fill this list with rows nobody can act on.
44
+
45
+ **Second: an assumption whose reversal costs less than the conversation about it MUST NOT be recorded.
46
+ The shipping default IS the record.**
47
+
48
+ The test is the `Cost if wrong` column that already exists. If the honest answer is *one setting
49
+ changes* · *one default changes* · *a shortcut is added later* — with no rework, no migration, and
50
+ nothing already built on it — then there is nothing to decide and nothing to remember. The code says
51
+ what was chosen, and it says it more reliably than a line in a list.
52
+
53
+ This is not a licence to assume quietly. It is the opposite: it protects the list. One real corpus
54
+ carried twenty-five open lines, and **six** of them were this class — a default image dimension, how many
55
+ quality presets to offer, whether one working folder at a time is enough. Every one had a default already
56
+ running and a one-value reversal. Sitting in the same list as six real decisions, they made a
57
+ six-item list look like twenty-five items of homework, and the owner stopped reading it.
58
+
59
+ **The threshold does NOT apply**, and the line is recorded, when being wrong touches money, personal
60
+ data, an irreversible action, a third-party contract, or the wording of an `FR`'s promise. Those are
61
+ the three tests above, and they always win.
62
+
63
+ **You MUST NOT register a question as blocking "to be safe."** That habit is what produced 146 ids and
64
+ a list nobody read, and the cost is paid at every gate afterwards.
65
+
66
+ ## One batch, per gate, already ranked
67
+
68
+ Inside a single working pass you do **not** ask. You collect. The batch is delivered once, at the gate,
69
+ ranked, and it MUST NOT be dribbled out as each question surfaces.
70
+
71
+ A healthy batch on `mode: catalog`: **≤3 blocking questions, plus ≤15 one-line assumptions.** A batch
72
+ larger than that is a signal about the pass, not about the corpus — say so rather than delivering it
73
+ as a list.
74
+
75
+ When N agents ran in parallel, their questions arrive as **one** ranked batch, never as N reports.
76
+
77
+ ## Every row says whose it is, and whether it can be answered at all
78
+
79
+ The four files split by **what the reader has to do**. That was not enough: a file can still hold
80
+ lines nobody may answer yet beside lines the owner owes today, and then the owner opens it and sees
81
+ one flat pile. In the corpus above, of twenty-five open lines exactly **six** were the owner's and
82
+ answerable — the other nineteen were frozen, waiting on a measurement, external, or fossil.
83
+
84
+ So every row carries **`Whose`**, and the vocabulary is closed:
85
+
86
+ | `Whose` | Means | Who acts |
87
+ |---|---|---|
88
+ | `owner` | A judgement only the owner can make, and it can be made now | the owner |
89
+ | `run: <what>` | The answer comes from running or measuring something, not from an opinion | **you**, not the owner |
90
+ | `frozen: DEC-NNN` | An applied decision forbids answering it yet | nobody, until that `DEC-` lifts |
91
+
92
+ `run:` MUST name what has to be run. "Needs testing" is not a value; `run: capture 5-finding review,
93
+ measure handoff time` is. A row that cannot name it is not waiting on a measurement — it is an
94
+ `owner` row in disguise.
95
+
96
+ `frozen:` MUST name a `DEC-` that is `applied` and that actually forbids the work. A freeze covers
97
+ **planning as well as building**: where a decision bans new `FR`, new use cases, and a UX pass in a
98
+ component, answering a design question there is exactly what it bans. When that `DEC-` lifts or is
99
+ superseded, its frozen rows become `owner` rows automatically — no re-triage.
100
+
101
+ A row whose `Whose` is wrong is worse than a missing row, because it puts work in the wrong person's
102
+ lap and it is invisible.
103
+
104
+ **Under an active mandate, `owner` rows are `wdi-autopilot`'s.** It answers each with a default, files the
105
+ line in `assumptions.md` with its cost and `under: DEC-<mandate>`, and closes it in `answered.md` in the same
106
+ pass. Two things do not move: a row the mandate lists as `parked` stays `owner` and is reported, and a row
107
+ whose owner is the client or a stakeholder — the first rule below — is never the agent's to answer, mandate or
108
+ not. The mandate came from the owner; it cannot delegate what was never the owner's.
109
+
110
+ ## Registering
111
+
112
+ | Field | Rule |
113
+ |---|---|
114
+ | Question | One sentence, answerable. "How should referrals work?" is a topic, not a question |
115
+ | Blocks | What cannot proceed — a gate, an `FR`, a ticket, or nothing |
116
+ | Whose | `owner` · `run: <what>` · `frozen: DEC-NNN`. See above |
117
+ | Owner | Who can answer. A question with no owner is a wish |
118
+ | By when | The moment it must be answered, usually a gate |
119
+
120
+ Ids stay `OQ-`, allocated from the highest ever used including closed ones. An id MUST NOT be reused.
121
+
122
+ A question whose discussion outgrows one line gets `.control/questions/OQ-NNN-<slug>.md` in the same
123
+ folder, from `templates/oq.md`, and the list keeps a one-line pointer. The old home
124
+ `.control/supplements/` is gone.
125
+
126
+ ## Closing
127
+
128
+ An answered question is closed **in place** the answer written beside it with the date and who
129
+ answered then moved to `answered.md`. You MUST NOT delete the entry.
130
+
131
+ **A fossil is closed, not answered, and you MUST look for fossils first.** A row questioning a rule, a
132
+ layer, or a validator that has since been repealed cannot bite again: it closes with the repeal as its
133
+ answer and MUST NOT be put to the owner as a decision. These are free, and a long list usually holds
134
+ several one real corpus was still carrying a question about `parallel-tickets-blocked`'s shape after the layer `parallel-tickets-blocked` runs
135
+ on had been retired.
136
+
137
+ **An answer goes into the document it belongs to, and that is usually the end of it.** An `FR` in the
138
+ PRD, a rule in `business-rules.md`, a line in the brief — written there, closed here, done. The closure
139
+ routes to `wdi-decision` **only** when the answer has no home in any design document, or contradicts an
140
+ `AD-N`. `decision-guide.md` § A decision's first home owns that split, and a `DEC-` is never permission
141
+ to edit a document.
142
+
143
+ This matters most at G1 and G2, where almost nothing is homeless yet: an answer about a brief belongs in
144
+ the brief.
145
+
146
+ ## Rules
147
+
148
+ - You MUST NOT answer the question yourself when the owner is the client or a stakeholder. Drafting a
149
+ proposed answer for them to confirm is useful; recording it as settled is not.
150
+ - An `[ASSUMPTION]` tag left in a PRD, an SRS, or an SDD MUST be filed here before that document
151
+ passes its gate. That is precisely the failure this skill exists to prevent.
152
+ - A question past its "by when" MUST be raised, not silently carried forward. Carried forward twice is
153
+ a signal that either the owner is wrong or the question is not real.
154
+ - A row MUST move between files when its class changes, and MUST NOT be copied into a second one. An
155
+ assumption that turns out to touch money moves to `blocking.md`; it does not appear in both.
156
+ - Terms MUST match `.control/product-glossary.md`.
157
+
158
+ ## Output
159
+
160
+ **The owner's section MUST contain only `owner` rows.** Everything else is reported as a count with one
161
+ line saying why it is not theirs never as a list they have to read past. A report that shows all
162
+ nineteen alongside the six is the failure this skill was reshaped to end.
163
+
164
+ | Section | Contents |
165
+ |---|---|
166
+ | **Yours, now** | every `owner` row, ranked. This is the list |
167
+ | Mine | `run:` count, plus what has to be run |
168
+ | Frozen | `frozen:` count, plus which `DEC-` holds them and what lifts it |
169
+ | External | `external.md` count. States plainly that it holds no design gate |
170
+ | Not recorded | how many assumptions the threshold turned away this pass |
171
+
172
+ Then: which file each question landed in, and anything routed on to `wdi-decision`.
173
+
174
+ **"Are we done — no more OQ?" is answerable, and the honest answer is usually no.** Say which third is
175
+ the owner's, name what lifts the frozen third, and name what you have to run for the rest. A clean
176
+ list is not the goal; a list where every line is somebody's and actionable is.