wdi-method 0.6.30 → 0.6.32

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/NOTICE +7 -2
  3. package/README.md +16 -11
  4. package/bin/wdi-method.js +396 -87
  5. package/kit/.constitution/method/document/architecture-guide.md +217 -209
  6. package/kit/.constitution/method/document/bmad-skill-register.md +107 -104
  7. package/kit/.constitution/method/document/corpus-guide.md +522 -517
  8. package/kit/.constitution/method/document/decision-guide.md +236 -216
  9. package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
  10. package/kit/.constitution/method/document/prd-guide.md +245 -245
  11. package/kit/.constitution/method/document/templates/design-system.md +96 -66
  12. package/kit/.constitution/method/document/templates/experience.md +62 -0
  13. package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
  14. package/kit/.constitution/method/document/templates/ux.md +78 -76
  15. package/kit/.constitution/method/document/ux-guide.md +161 -115
  16. package/kit/.constitution/method/method-glossary.md +3 -0
  17. package/kit/.constitution/method/scripts/validate.py +3375 -3200
  18. package/kit/.constitution/method/structure-guide.md +204 -202
  19. package/kit/.constitution/method/why/README.md +1 -1
  20. package/kit/.constitution/method/why/artifact-map.md +158 -157
  21. package/kit/.constitution/method/why/portability.md +19 -2
  22. package/kit/skills/wdi-autopilot/SKILL.md +32 -19
  23. package/kit/skills/wdi-blueprint/SKILL.md +271 -264
  24. package/kit/skills/wdi-build/SKILL.md +28 -19
  25. package/kit/skills/wdi-component/SKILL.md +179 -174
  26. package/kit/skills/wdi-daily-autopilot/SKILL.md +24 -13
  27. package/kit/skills/wdi-daily-what-to-build/SKILL.md +9 -6
  28. package/kit/skills/wdi-daily-what-to-test/SKILL.md +2 -0
  29. package/kit/skills/wdi-decision/SKILL.md +206 -203
  30. package/kit/skills/wdi-explain-to-me/SKILL.md +2 -0
  31. package/kit/skills/wdi-help/SKILL.md +130 -125
  32. package/kit/skills/wdi-init/SKILL.md +10 -5
  33. package/kit/skills/wdi-problem/SKILL.md +114 -108
  34. package/kit/skills/wdi-product/SKILL.md +167 -162
  35. package/kit/skills/wdi-prune-or-archive/SKILL.md +2 -0
  36. package/kit/skills/wdi-reconcile/SKILL.md +170 -169
  37. package/kit/skills/wdi-upgrade/SKILL.md +234 -215
  38. package/kit/skills/wdi-ux/SKILL.md +187 -169
  39. package/kit-overlay/AGENTS.md +15 -2
  40. package/kit-overlay/portability.md +19 -2
  41. package/lib/platforms.mjs +420 -248
  42. package/package.json +1 -1
  43. package/scaffold/.control/registry/index.yaml +2 -1
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wdi-build
3
- description: Use at G5 Release — one spec from open to closed in one supervised run. Opens the spec, hands the owner to-spec and to-tickets, ships every ticket to a green PR through a five-step pipeline, then closes the spec. One invocation, not four.
3
+ description: Use at G5 Release — one spec from open to closed in one supervised run. Opens the spec, drives to-spec and to-tickets, ships every ticket to a green PR through a five-step pipeline, then closes the spec. One invocation, not four.
4
4
  ---
5
5
 
6
6
  # WDI Build
@@ -16,29 +16,37 @@ without them. Thirteen BMad skills are **retired** at this gate and MUST NOT be
16
16
  `bmad-spec`, `bmad-build`, `bmad-build-auto`, `bmad-code-review`, `bmad-retrospective`,
17
17
  `bmad-agent-dev`, `bmad-create-epics-and-stories`, `bmad-create-story`, `bmad-dev-story`,
18
18
  `bmad-dev-auto`, `bmad-quick-dev`, `bmad-sprint-planning`, `bmad-sprint-status`. That is enforced, not
19
- requested: `install` and `update` lock each one out of model invocation and add a `Skill()` deny rule.
20
- `bmad-skill-register.md` carries the list and the criterion behind it.
21
-
22
- **All five engines are INVOKED, by this skill, through the Skill tool.** Upstream ships `to-spec`,
23
- `to-tickets` and `implement` with `disable-model-invocation: true`; `wdi-method` strips it from the
24
- copies this repo owns, so there is no command to hand to the owner and no reading-and-following to do.
25
- Where an engine needs a decision — the seams, the `to-tickets` quiz — that decision is made before the
26
- invocation and passed IN it, because an engine that stops to ask inside an unattended run is a run
27
- that stalls with nobody there to answer.
19
+ requested: `install` and `update` lock each one out of model invocation wherever the host offers a lock
20
+ (`disable-model-invocation`, `.claude/settings.json` deny rules, `opencode.json` `ask`), and the
21
+ `AGENTS.md` block forbids them on every host. `bmad-skill-register.md` carries the list and the
22
+ criterion behind it.
23
+
24
+ **All six engines are INVOKED, by this skill, through the host's own skill mechanism.** Which mechanism
25
+ that is belongs to the host, not to this skill: a skill tool where the host has one (Claude Code's
26
+ `Skill`, OpenCode's `skill`, Gemini's `activate_skill`), and where the host has none — Kiro, Codex,
27
+ Cursor, and most others — loading the engine is reading its `SKILL.md` **in full, from the repo's
28
+ own copy**, and carrying it out. That is not a workaround on those hosts; it is the only way they load any
29
+ skill. `hosts:` in `.control/wdi-method.yaml` says where this host reads skills. Upstream ships
30
+ `to-spec`, `to-tickets` and `implement` with `disable-model-invocation: true`; `wdi-method` strips it
31
+ from the copies this repo owns, so on every host this skill drives the engines itself and hands no command
32
+ to the owner. Where an engine needs a decision — the seams, the `to-tickets` quiz — that decision is
33
+ made before the invocation and passed IN it, because an engine that stops to ask inside an unattended run
34
+ is a run that stalls with nobody there to answer.
28
35
 
29
36
  **If an engine will not invoke, stop and say why.** `disable-model-invocation` back in its frontmatter
30
37
  is what `npx skills update` does, and the fix is one command: `npx wdi-method engines --fix`, or the
31
- `wdi-init` / `wdi-upgrade` skill. MUST NOT work around it by pasting the engine's process inline: the
32
- engine's rules are its own, and a paraphrase of them is not the engine.
38
+ `wdi-init` / `wdi-upgrade` skill. An engine missing from every folder this host reads is the other
39
+ cause, and `npx wdi-method engines` names the `npx skills add --agent` that fixes it. MUST NOT work
40
+ around either by paraphrasing the engine from memory, summarising it into a brief, or reading a copy from
41
+ outside the repo: the engine's rules are its own, and anything short of its whole `SKILL.md` is not the
42
+ engine.
33
43
 
34
44
  **Under an active mandate the owner's part is `wdi-autopilot`'s.** A `DEC-` of `type: mandate` at
35
45
  `status: accepted`, unexpired, moves **every** "the owner runs" and "the owner decides" in this skill to the
36
46
  coordinator — G5's checklist and Step 2's *stop and reach the owner* included, which reach the coordinator and
37
- not a person. Three of them change **shape** as well as owner: the engines run by **read-and-follow** — a builder brief
38
- that names the engine's `SKILL.md` path and carries out its process — or from a copy in the repo, and the ledger
39
- names which; the seams, the `to-tickets` quiz, and § When the code turns out to be right are decided by the
47
+ not a person. Two of them change **shape** as well as owner: the seams, the `to-tickets` quiz, and § When the code turns out to be right are decided by the
40
48
  coordinator and written to the ledger, one row each; and whatever the mandate lists as `parked` still stops,
41
- reported for the owner rather than decided. One thing changes **shape** rather than owner: a mandate is one
49
+ reported for the owner rather than decided. The engines are invoked exactly as above, mandate or not. One thing changes **shape** rather than owner: a mandate is one
42
50
  unit of work and reaches the active development branch (`policy.development_branch`, default `main`) through **one PR**, so Step 4 commits the ticket to the run branch instead of
43
51
  opening a PR per ticket, and Step 5 splits: the coordinator pushes the run branch at every spec close, but
44
52
  **the cloud run happens once, at `wdi-autopilot` § Finish** — every intermediate push starts nothing, and
@@ -224,7 +232,7 @@ is not.
224
232
 
225
233
  ### Step 2 — build
226
234
 
227
- - The owner runs `/implement`, and it MUST be given the ticket and the three brief rules above.
235
+ - This skill invokes `implement` (as § All six engines says), and it MUST be given the ticket and the three brief rules above.
228
236
  - It commits to the current branch and **never pushes**. That is its own behaviour and it is what we want; the
229
237
  coordinator is the hand that pushes.
230
238
  - **`/implement` calls `/code-review` itself, and that call does NOT satisfy Step 3.** It is the builder
@@ -385,8 +393,9 @@ only thing `V19` checked.
385
393
  - Amending what a ticket `satisfies` to make a must-fix go away
386
394
  - A ticket that slices one layer instead of cutting through all of them, outside a wide refactor
387
395
  - Running a wide refactor's batches in parallel
388
- - Claiming this skill invoked `to-spec`, `to-tickets`, or `implement` — it cannot; the owner runs them, or under
389
- a mandate a builder reads and follows them, and the ledger says so
396
+ - Paraphrasing `to-spec`, `to-tickets`, or `implement` from memory, or summarising one into a brief, and
397
+ calling that the engine — on a host with no skill tool the engine is its whole `SKILL.md`, read from the repo
398
+ - Stopping because the host has no `Skill` tool — that host loads skills by reading them, and so does this skill
390
399
  - A builder editing `.what/`, `.how/`, or an `applied` `DEC-` to make its code fit
391
400
  - Fixing a failing test without knowing why it failed
392
401
  - Opening a PR with an unresolved must-fix, or before the ticket-closing checklist is answered
@@ -1,174 +1,179 @@
1
- ---
2
- name: wdi-component
3
- description: Use at G4 Component — the depth of one Product Component, as deep as that component's mode and no deeper. Two intents, behaviour and design. Owns .what/<pc>/ slots 02-05 and .how/<pc>/ minus 01-ux. Skipped entirely at mode catalog.
4
- ---
5
-
6
- # WDI Component
7
-
8
- G4 decides **how one Product Component is built, and what the choice costs.** It is the only gate that changes
9
- shape with `mode`, and the only one that runs more than once for a reason other than a new PRD.
10
-
11
- | `mode` | This skill |
12
- |---|---|
13
- | `catalog` | **Not run. G4 is skipped.** |
14
- | `outline` | `behaviour` + `design` **as far as § Structure**, and no further |
15
- | `guarded` | `behaviour` + `design` |
16
- | `deep` | `behaviour` + `design` |
17
-
18
- This table said `outline` → `behaviour` only until 2026-08-18. It contradicted **Step 4 of this same
19
- skill**, which starts `Decision Summary` and `Structure` "from `outline`", and it contradicted
20
- `delivery-flow-guide.md`, which owns the mapping and lists both for `outline`. Read literally, it would
21
- have left every `outline` component with an SDD that is a template skeleton forever — and `review-trace` would have
22
- been right to keep flagging it.
23
-
24
- Read the component's `mode` from its row in `components.yaml`, falling back to `mode:` in `index.yaml`. Read
25
- its `risk_accepted` from the same row; it decides the review lenses and nothing else.
26
-
27
- **You MUST NOT write more than the component's `mode` demands.** Writing a section the mode does not ask for is
28
- the failure this gate was rebuilt to stop — it is how 41 of 56 use cases ended up marked `critical` and how the
29
- previous run stalled. Depth is a preference the owner set, and exceeding it is not diligence.
30
-
31
- Stage-3 and Stage-4 work were two skills before and are one now, because they are one gate. The boundary
32
- between them is intact and it is **horizontal**: `behaviour` writes what the system does, `design` writes how.
33
-
34
- ## Inputs
35
-
36
- | Source | What it answers |
37
- |---|---|
38
- | `.control/registry/components.yaml` | This component's `mode`, `risk_accepted`, `risk_note`, `owns` |
39
- | `.what/<pc>/SRS-<pc>.md` § UC Catalogue · § Actor Register | Which use cases exist, and which are `critical` |
40
- | `.what/_prd/*/prd.md` | The `FR` this component has to make true |
41
- | `.what/business-rules.md` | Rules that already bind more than one component |
42
- | `.how/_platform/inventory-api.md` · `inventory-screen.md` | **The boundary list.** It is already derived; do not derive it again |
43
- | `.how/_platform/ARCHITECTURE-SPINE.md` | Every `AD-N` that binds this component |
44
- | `.how/_platform/cross-cutting.md` | The error envelope, and anything else decided once |
45
- | `.control/decisions/` | `applied` decisions this must not contradict |
46
- | `.constitution/method/document/srs-guide.md` · `sdd-guide.md` | The rules the result is checked against |
47
- | `src/` · `web/` | Only as evidence when the code already exists. Never as a substitute for the SRS |
48
-
49
- ## Step 1 — Scope, one component
50
-
51
- State it in one line before doing anything. A pass MUST NOT write content for several components: an SDD is per
52
- component by construction, and one pass over two of them inherits the wrong constraints.
53
-
54
- | Ask | Scope |
55
- |---|---|
56
- | "Take `<pc>` to G4" | One component, both intents as its `mode` demands |
57
- | "Write the failure behaviour for `<pc>`" | One section of one component |
58
- | "Is our design consistent?" | Read-only across components — that is `wdi-reconcile`. Route there |
59
-
60
- ## Step 2 — Preconditions
61
-
62
- None of these are yours to create.
63
-
64
- | Check | When it fails |
65
- |---|---|
66
- | The component is registered with `mode` and `risk_accepted` set | Route to `wdi-init` intents `component`, `mode`, `risk` |
67
- | Its `mode` is not `catalog` | Stop. G4 is skipped, and the work goes straight to `wdi-build` |
68
- | G3 has passed | Route to `wdi-blueprint`. Depth written against a moving portrait is rewritten |
69
- | The spine exists and its `AD-N` are readable | Route to `wdi-blueprint`. You MUST NOT write the spine |
70
- | For `design`: the container this component runs in is registered | Route to `wdi-blueprint`. G3 has passed by now, so the answer exists — an `LC` written here MUST carry it. Only a screen `LC` born at G2 is allowed an empty one, and G3 fills it |
71
-
72
- ## Step 3 — Intent `behaviour`
73
-
74
- Writes `.what/<pc>/`, slots `02`–`05`. You MUST NOT write solution shape: no framework, no table, no endpoint,
75
- no class, no queue, no file path.
76
-
77
- | `mode` | Written |
78
- |---|---|
79
- | `outline` · `guarded` | Full flows for the use cases the component exists for, **at most 3**, in `04-usecases/UC-<n>-<slug>.md` · local business rules in `02-rules/rules-<pc>.md` |
80
- | `deep` | + a full flow for **every** `critical` use case · `03-domain/state-machines.md` · `05-scenarios/SCN-<nn>-<slug>.md` |
81
-
82
- A flow is at most **eight steps**. A flow needing more is either two use cases or has started describing
83
- implementation, and the cap is what makes that visible while it is still cheap to fix. Branches go to
84
- `05-scenarios/` — at `deep` only — never into a fatter UC file.
85
-
86
- A rule that turns out to bind a second component MUST be **promoted** to `.what/business-rules.md` through
87
- `wdi-blueprint`, not copied. Two copies of one rule is how components start disagreeing about the same policy.
88
-
89
- ## Step 4 — Intent `design`
90
-
91
- Writes `.how/<pc>/`. Two carve-outs that are not negotiable: `01-ux/` belongs to `wdi-ux`, and all of
92
- `.how/_platform/` belongs to `wdi-blueprint`. You MUST NOT write into either.
93
-
94
- Write in this order, stopping at whatever the `mode` does not reach:
95
-
96
- 1. **`Decision Summary`** — from `outline`. One page: what this component is built as, and the one or two most
97
- expensive choices reversed.
98
- 2. **`Structure`** — from `outline`. The `LC` list and the direction of their dependencies.
99
- 3. **`Inherited Constraints`** — from `guarded`. Every `AD-N` reaching this component, **quoted verbatim**. A
100
- paraphrase drifts, and the drift is invisible because both texts read reasonably. A design that must deviate
101
- does not argue here: it goes to `wdi-decision`, and either the spine changes or the design does.
102
- 4. **`Failure Behaviour`** — from `guarded`, for **every** boundary. The boundary list is the endpoints and
103
- screens this component owns in the two platform inventories. Per boundary: what happens when the other side
104
- is slow, absent, or lying — timeout, retry policy, what the user sees, what gets logged. "Returns an error"
105
- is not an answer.
106
- 5. **`03-integrations/<name>.md`** — from `guarded`, when the component has a third party. It MUST name the
107
- owner outside the team, and what happens when they change it without telling anyone.
108
- 6. **The ABCE pass** — `deep` only, in order: Boundary → Control → Entity → Behaviour. It MUST NOT have
109
- appeared in the SRS, and below `deep` it MUST NOT be written at all.
110
- 7. **`02-contracts/`, `04-components/`, `05-model/data-model.md`, `06-flows/`** — `deep` only. The contract
111
- inventory comes first and specs carry its stable numbers; every spec answers all five lanes, with `none` and
112
- a reason where one does not apply. The data model carries a dictionary beside its diagram.
113
-
114
- From `guarded` up, every Boundary object MUST become an `LC` in `components.yaml`; at `deep`, Control objects
115
- too. Registration is checked **when the spec closes** — `lc-registered` — not before a ticket is picked up. You MUST
116
- NOT register a `container`, and you MUST NOT register `ui-screen` or `ui-composite`.
117
-
118
- ## Step 5 — Evidence, and the as-built case
119
-
120
- Every technical claim about code that already exists MUST name what was read. The four labels — `[ASSUMED]` ·
121
- `[PARTIAL]` · `[NEEDS CONFIRMATION]` · `[MISSING]` — are mandatory, and their ladder rules are in
122
- `sdd-guide.md`.
123
-
124
- **Raising a component's `mode` after its code runs is the case this matters most for.** What you write then is
125
- an **as-built record, not a design**, and you MUST NOT raise a claim to verified without naming the file that
126
- proves it. Two labels MUST be acted on rather than left in the text:
127
-
128
- - `[NEEDS CONFIRMATION]` → `wdi-question`, before G4 opens.
129
- - `[MISSING]` → dispositioned as a `BUG-`, a correction, or planned work. It MUST NOT be deleted; the
130
- sentence is the only surviving evidence that somebody once believed the thing existed.
131
-
132
- ## Step 6 — Drift
133
-
134
- Check against the layer above and the code below, and **report** — never edit the other side.
135
-
136
- | Found | Where it goes |
137
- |---|---|
138
- | Depth needs behaviour the catalogue never listed | `wdi-blueprint` — into the catalogue, before any code |
139
- | The catalogue promised behaviour this component cannot deliver | `wdi-product`. Do not quietly narrow it here |
140
- | A contradiction with an `applied` decision or an `AD-N` | `wdi-decision` — a new `DEC-`, never an edit to one already applied |
141
- | A decision that would bind a second component | `wdi-blueprint` — it is an `AD-N`, not an SDD paragraph |
142
- | The code does something this document does not describe | Here, as a labelled claim, or as a `BUG-` when the code is wrong |
143
-
144
- `wdi-reconcile` is the read-only sweep across all layers. Run it rather than reimplementing it.
145
-
146
- ## Step 7 — Review
147
-
148
- No `doc_standards` fires for an SRS or an SDD. Dispatch `wdi-review`, which reads the lens set from this
149
- component's `risk_accepted` — `edge-case-hunter` at `low` and `medium`, `structure` + `prose` at `high`, plus a
150
- two-reviewer code panel at `low`. Slots are part of the artifact; reviewing a kernel alone misses where the
151
- branches and contracts live.
152
-
153
- You MUST NOT open G4 on depth that has not been through it.
154
-
155
- ## Rules
156
-
157
- - A decision taken while writing is **written into the document as its own content**, stated as what now
158
- holds. Never as a parenthetical aside — there is no memlog here to catch one. It goes to `wdi-decision`
159
- only when no design document has a home for it, or it touches an `AD-N`; `decision-guide.md` § A
160
- decision's first home owns that split.
161
- - You MUST NOT write into `.what/_prd/`, `.what/business-rules.md`, `.how/_platform/`, or `.how/<pc>/01-ux/`.
162
- - You MUST NOT raise `status:`. Status is a stage; the `reviewed:` block is an event.
163
- - You MUST NOT lower or raise the component's `mode` to fit what you want to write. That is `wdi-init`, and it
164
- is the owner's call.
165
- - The spec's contract is cut **after** this, never before, and it MUST NOT introduce anything these documents do not say.
166
- - Memlog: `.control/memlog/<pc>.md`, through `memlog.py --path`. `--workspace` MUST NOT be used.
167
- - Questions arrive as **one** ranked batch at the gate, not as they surface.
168
-
169
- ## Output
170
-
171
- Component and its `mode` and `risk_accepted` · which intents ran · what was written per slot and **what the
172
- mode deliberately left unwritten** · the `AD-N` inherited · the `LC` registered and their types · evidence
173
- labels outstanding by kind · drift found and where it was routed · whether `wdi-review` ran · the one ranked
174
- batch of questions.
1
+ ---
2
+ name: wdi-component
3
+ description: Use at G4 Component — the depth of one Product Component, as deep as that component's mode and no deeper. Two intents, behaviour and design. Owns .what/<pc>/ slots 02-05 and .how/<pc>/ minus 01-ux. Skipped entirely at mode catalog.
4
+ ---
5
+
6
+ # WDI Component
7
+
8
+ G4 decides **how one Product Component is built, and what the choice costs.** It is the only gate that changes
9
+ shape with `mode`, and the only one that runs more than once for a reason other than a new PRD.
10
+
11
+ | `mode` | This skill |
12
+ |---|---|
13
+ | `catalog` | **Not run. G4 is skipped.** |
14
+ | `outline` | `behaviour` + `design` **as far as § Structure**, and no further |
15
+ | `guarded` | `behaviour` + `design` |
16
+ | `deep` | `behaviour` + `design` |
17
+
18
+ This table said `outline` → `behaviour` only until 2026-08-18. It contradicted **Step 4 of this same
19
+ skill**, which starts `Decision Summary` and `Structure` "from `outline`", and it contradicted
20
+ `delivery-flow-guide.md`, which owns the mapping and lists both for `outline`. Read literally, it would
21
+ have left every `outline` component with an SDD that is a template skeleton forever — and `review-trace` would have
22
+ been right to keep flagging it.
23
+
24
+ Read the component's `mode` from its row in `components.yaml`, falling back to `mode:` in `index.yaml`. Read
25
+ its `risk_accepted` from the same row; it decides the review lenses and nothing else.
26
+
27
+ **You MUST NOT write more than the component's `mode` demands.** Writing a section the mode does not ask for is
28
+ the failure this gate was rebuilt to stop — it is how 41 of 56 use cases ended up marked `critical` and how the
29
+ previous run stalled. Depth is a preference the owner set, and exceeding it is not diligence.
30
+
31
+ Stage-3 and Stage-4 work were two skills before and are one now, because they are one gate. The boundary
32
+ between them is intact and it is **horizontal**: `behaviour` writes what the system does, `design` writes how.
33
+
34
+ ## Inputs
35
+
36
+ | Source | What it answers |
37
+ |---|---|
38
+ | `.control/registry/components.yaml` | This component's `mode`, `risk_accepted`, `risk_note`, `owns` |
39
+ | `.what/<pc>/SRS-<pc>.md` § UC Catalogue · § Actor Register | Which use cases exist, and which are `critical` |
40
+ | `.what/_prd/*/prd.md` | The `FR` this component has to make true |
41
+ | `.what/business-rules.md` | Rules that already bind more than one component |
42
+ | `.how/_platform/inventory-api.md` · `inventory-screen.md` | **The boundary list.** It is already derived; do not derive it again |
43
+ | `.how/_platform/ARCHITECTURE-SPINE.md` | Every `AD-N` that binds this component |
44
+ | `.how/_platform/cross-cutting.md` | The error envelope, and anything else decided once |
45
+ | `.control/decisions/` | `applied` decisions this must not contradict |
46
+ | `.constitution/method/document/srs-guide.md` · `sdd-guide.md` | The rules the result is checked against |
47
+ | `src/` · `web/` | Only as evidence when the code already exists. Never as a substitute for the SRS |
48
+
49
+ ## Step 1 — Scope, one component
50
+
51
+ State it in one line before doing anything. A pass MUST NOT write content for several components: an SDD is per
52
+ component by construction, and one pass over two of them inherits the wrong constraints.
53
+
54
+ | Ask | Scope |
55
+ |---|---|
56
+ | "Take `<pc>` to G4" | One component, both intents as its `mode` demands |
57
+ | "Write the failure behaviour for `<pc>`" | One section of one component |
58
+ | "Is our design consistent?" | Read-only across components — that is `wdi-reconcile`. Route there |
59
+
60
+ ## Step 2 — Preconditions
61
+
62
+ None of these are yours to create.
63
+
64
+ | Check | When it fails |
65
+ |---|---|
66
+ | The component is registered with `mode` and `risk_accepted` set | Route to `wdi-init` intents `component`, `mode`, `risk` |
67
+ | Its `mode` is not `catalog` | Stop. G4 is skipped, and the work goes straight to `wdi-build` |
68
+ | `G3` is in `gates_passed` | Route to `wdi-blueprint`. Depth written against a moving portrait is rewritten. A missing record is asked of the owner, never inferred from the spine existing |
69
+ | The spine exists and its `AD-N` are readable | Route to `wdi-blueprint`. You MUST NOT write the spine |
70
+ | For `design`: the container this component runs in is registered | Route to `wdi-blueprint`. G3 has passed by now, so the answer exists — an `LC` written here MUST carry it. Only a screen `LC` born at G2 is allowed an empty one, and G3 fills it |
71
+
72
+ ## Step 3 — Intent `behaviour`
73
+
74
+ Writes `.what/<pc>/`, slots `02`–`05`. You MUST NOT write solution shape: no framework, no table, no endpoint,
75
+ no class, no queue, no file path.
76
+
77
+ | `mode` | Written |
78
+ |---|---|
79
+ | `outline` · `guarded` | Full flows for the use cases the component exists for, **at most 3**, in `04-usecases/UC-<n>-<slug>.md` · local business rules in `02-rules/rules-<pc>.md` |
80
+ | `deep` | + a full flow for **every** `critical` use case · `03-domain/state-machines.md` · `05-scenarios/SCN-<nn>-<slug>.md` |
81
+
82
+ A flow is at most **eight steps**. A flow needing more is either two use cases or has started describing
83
+ implementation, and the cap is what makes that visible while it is still cheap to fix. Branches go to
84
+ `05-scenarios/` — at `deep` only — never into a fatter UC file.
85
+
86
+ A rule that turns out to bind a second component MUST be **promoted** to `.what/business-rules.md` through
87
+ `wdi-blueprint`, not copied. Two copies of one rule is how components start disagreeing about the same policy.
88
+
89
+ ## Step 4 — Intent `design`
90
+
91
+ Writes `.how/<pc>/`. Two carve-outs that are not negotiable: `01-ux/` belongs to `wdi-ux`, and all of
92
+ `.how/_platform/` belongs to `wdi-blueprint`. You MUST NOT write into either.
93
+
94
+ Write in this order, stopping at whatever the `mode` does not reach:
95
+
96
+ 1. **`Decision Summary`** — from `outline`. One page: what this component is built as, and the one or two most
97
+ expensive choices reversed.
98
+ 2. **`Structure`** — from `outline`. The `LC` list and the direction of their dependencies.
99
+ 3. **`Inherited Constraints`** — from `guarded`. Every `AD-N` reaching this component, **quoted verbatim**. A
100
+ paraphrase drifts, and the drift is invisible because both texts read reasonably. A design that must deviate
101
+ does not argue here: it goes to `wdi-decision`, and either the spine changes or the design does.
102
+ 4. **`Failure Behaviour`** — from `guarded`, for **every** boundary. The boundary list is the endpoints and
103
+ screens this component owns in the two platform inventories. Per boundary: what happens when the other side
104
+ is slow, absent, or lying — timeout, retry policy, what the user sees, what gets logged. "Returns an error"
105
+ is not an answer.
106
+ 5. **`03-integrations/<name>.md`** — from `guarded`, when the component has a third party. It MUST name the
107
+ owner outside the team, and what happens when they change it without telling anyone.
108
+ 6. **The ABCE pass** — `deep` only, in order: Boundary → Control → Entity → Behaviour. It MUST NOT have
109
+ appeared in the SRS, and below `deep` it MUST NOT be written at all.
110
+ 7. **`02-contracts/`, `04-components/`, `05-model/data-model.md`, `06-flows/`** — `deep` only. The contract
111
+ inventory comes first and specs carry its stable numbers; every spec answers all five lanes, with `none` and
112
+ a reason where one does not apply. The data model carries a dictionary beside its diagram.
113
+
114
+ From `guarded` up, every Boundary object MUST become an `LC` in `components.yaml`; at `deep`, Control objects
115
+ too. Registration is checked **when the spec closes** — `lc-registered` — not before a ticket is picked up. You MUST
116
+ NOT register a `container`, and you MUST NOT register `ui-screen` or `ui-composite`.
117
+
118
+ ## Step 5 — Evidence, and the as-built case
119
+
120
+ Every technical claim about code that already exists MUST name what was read. The four labels — `[ASSUMED]` ·
121
+ `[PARTIAL]` · `[NEEDS CONFIRMATION]` · `[MISSING]` — are mandatory, and their ladder rules are in
122
+ `sdd-guide.md`.
123
+
124
+ **Raising a component's `mode` after its code runs is the case this matters most for.** What you write then is
125
+ an **as-built record, not a design**, and you MUST NOT raise a claim to verified without naming the file that
126
+ proves it. Two labels MUST be acted on rather than left in the text:
127
+
128
+ - `[NEEDS CONFIRMATION]` → `wdi-question`, before G4 opens.
129
+ - `[MISSING]` → dispositioned as a `BUG-`, a correction, or planned work. It MUST NOT be deleted; the
130
+ sentence is the only surviving evidence that somebody once believed the thing existed.
131
+
132
+ ## Step 6 — Drift
133
+
134
+ Check against the layer above and the code below, and **report** — never edit the other side.
135
+
136
+ | Found | Where it goes |
137
+ |---|---|
138
+ | Depth needs behaviour the catalogue never listed | `wdi-blueprint` — into the catalogue, before any code |
139
+ | The catalogue promised behaviour this component cannot deliver | `wdi-product`. Do not quietly narrow it here |
140
+ | A contradiction with an `applied` decision or an `AD-N` | `wdi-decision` — a new `DEC-`, never an edit to one already applied |
141
+ | A decision that would bind a second component | `wdi-blueprint` — it is an `AD-N`, not an SDD paragraph |
142
+ | The code does something this document does not describe | Here, as a labelled claim, or as a `BUG-` when the code is wrong |
143
+
144
+ `wdi-reconcile` is the read-only sweep across all layers. Run it rather than reimplementing it.
145
+
146
+ ## Step 7 — Review
147
+
148
+ No `doc_standards` fires for an SRS or an SDD. Dispatch `wdi-review`, which reads the lens set from this
149
+ component's `risk_accepted` — `edge-case-hunter` at `low` and `medium`, `structure` + `prose` at `high`, plus a
150
+ two-reviewer code panel at `low`. Slots are part of the artifact; reviewing a kernel alone misses where the
151
+ branches and contracts live.
152
+
153
+ You MUST NOT open G4 on depth that has not been through it.
154
+
155
+ ## Step 8 — Record the gate
156
+
157
+ Ask the owner whether G4 passed for this component. Write today's date into its `g4_passed` only on
158
+ their explicit *yes* — `delivery-flow-guide.md` § *Recording a gate that passed*. `spec-after-g4` reads it.
159
+
160
+ ## Rules
161
+
162
+ - A decision taken while writing is **written into the document as its own content**, stated as what now
163
+ holds. Never as a parenthetical aside — there is no memlog here to catch one. It goes to `wdi-decision`
164
+ only when no design document has a home for it, or it touches an `AD-N`; `decision-guide.md` § A
165
+ decision's first home owns that split.
166
+ - You MUST NOT write into `.what/_prd/`, `.what/business-rules.md`, `.how/_platform/`, or `.how/<pc>/01-ux/`.
167
+ - You MUST NOT raise `status:`. Status is a stage; the `reviewed:` block is an event.
168
+ - You MUST NOT lower or raise the component's `mode` to fit what you want to write. That is `wdi-init`, and it
169
+ is the owner's call.
170
+ - The spec's contract is cut **after** this, never before, and it MUST NOT introduce anything these documents do not say.
171
+ - Memlog: `.control/memlog/<pc>.md`, through `memlog.py --path`. `--workspace` MUST NOT be used.
172
+ - Questions arrive as **one** ranked batch at the gate, not as they surface.
173
+
174
+ ## Output
175
+
176
+ Component and its `mode` and `risk_accepted` · which intents ran · what was written per slot and **what the
177
+ mode deliberately left unwritten** · the `AD-N` inherited · the `LC` registered and their types · evidence
178
+ labels outstanding by kind · drift found and where it was routed · whether `wdi-review` ran · the one ranked
179
+ batch of questions · whether G4 was recorded.
@@ -1,15 +1,17 @@
1
1
  ---
2
2
  name: wdi-daily-autopilot
3
- description: Compose and launch the autonomous daily loop routine (default 10m interval) with self code-review and peer-review runners resolved from local configuration. Invoke as `/wdi-daily-autopilot [self-review] [peer] [interval] [--skip-peer-review|--no-review]` (`[self-review]` alias `[in-session]`).
3
+ description: Compose and launch the autonomous daily loop routine (default 10m interval, on the host's own scheduler; once where the host has none) with self code-review and peer-review runners resolved from local configuration. Invoke as `/wdi-daily-autopilot [self-review] [peer] [interval] [--skip-peer-review|--no-review]` (`[self-review]` alias `[in-session]`).
4
4
  disable-model-invocation: true
5
5
  ---
6
6
 
7
7
  # WDI Daily Autopilot Launch
8
8
 
9
+ > **Typed by the owner, or not at all.** Run this skill only when the person typed `wdi-daily-autopilot` — `/wdi-daily-autopilot` or this host's own syntax for it — in the turn that is running. Reached any other way (a description that looked relevant, another skill, a subagent), stop and name it instead. Hosts that can hold a skill to manual-only already do; on the others, this line is the lock.
10
+
9
11
  Composes the autonomous daily engineering routine, verifies or initiates the owner-accepted mandate
10
12
  required by `wdi-autopilot`, resolves coordinator self code-review and independent peer-review dispatch
11
- from local configuration or agent rules, and launches the execution via `/loop <interval>` (default
12
- `10m`).
13
+ from local configuration or agent rules, and launches the execution on the host's own scheduler (default
14
+ `10m`) — or, on a host that has none, runs one iteration now.
13
15
 
14
16
  `/wdi-daily-autopilot [self-review] [peer] [interval] [--skip-peer-review|--no-review]`:
15
17
  - `[self-review]` — coordinator self code-review pass model (`default` or explicit model slug; alias `[in-session]`).
@@ -53,9 +55,10 @@ Inspect the repository for `.control/custom-dispatch.yaml` (if not found in the
53
55
  Guardrail: coordinator direct implementation MUST NOT eliminate independent peer review when any component the mandate touches has `risk_accepted: low`. There `low` is the hardest review: `wdi-build` Step 3 requires a two-reviewer panel of agents that are not the builder (`delivery-flow-guide.md`). The coordinator MUST NOT honour a peer-review bypass (`roles.reviewer: none`, `review_policy.peer_review: false`, `--skip-peer-review`, or `--no-review`) when any touched component has `risk_accepted: low`: stop and report which components block it (fail-closed). When every touched component is `medium` or `high`, the bypass is allowed, and the choice MUST be recorded in the mandate text (step 4) and in the ledger.
54
56
  - Resolve runner dispatch by `type:` for reviewer and deep analyst:
55
57
  - `auto`: Evaluates whether the runner's target model is reachable in-session from the active
56
- session profile (per the caller's global agent collaboration rules). Dispatches in-session via `Agent`
57
- if reachable; falls back to shell-out using `command` if unreachable in-session.
58
- - `in-session`: Dispatches strictly via in-session `Agent` subagent.
58
+ session profile (per the caller's global agent collaboration rules). Dispatches through this host's
59
+ own read-only subagent tooling if reachable; falls back to shell-out using `command` if unreachable in-session.
60
+ - `in-session`: Dispatches strictly through this host's own subagent tooling (read-only). A host with
61
+ none cannot satisfy it — stop and report (fail-closed).
59
62
  - `shell-out`: Executes the external shell-out `command` (single-string command). If `command` is absent
60
63
  or empty, stop and report immediately (fail-closed).
61
64
  - **If `.control/custom-dispatch.yaml` does not exist**:
@@ -123,17 +126,25 @@ self-review and self-verification without external peer dispatch.
123
126
 
124
127
  ## 5. Launch
125
128
 
126
- Invoke the `loop` skill with `<resolved interval> /wdi-autopilot <composed text from step 4>`. This
127
- starts the loop execution.
129
+ Read this host's `loop:` from `hosts:` in `.control/wdi-method.yaml` (the entry whose `id` is the host
130
+ running this session) and launch the way `wdi-autopilot` § Starting the loop says:
131
+
132
+ - **`kind: command` or `kind: scheduler`** — start the host's own scheduler with `<resolved interval>` and
133
+ the prompt `/wdi-autopilot <composed text from step 4>` (the host's own invocation syntax, `invoke:` in
134
+ the same entry, replaces `/wdi-autopilot` where it differs).
135
+ - **`none`** (or the host is not in `hosts:`) — do not look for a substitute: no shell loop, no OS
136
+ scheduler, no second agent. Run **one** iteration of `wdi-autopilot` now, in this turn, with the composed
137
+ text. The mandate the owner already accepted (step 3) is the go-ahead; nothing more is asked.
128
138
 
129
139
  ## 6. Verify Immediate Execution
130
140
 
131
- Before finishing, verify that `/wdi-autopilot` was invoked in this same turn for the first iteration
132
- rather than remaining idle until the first cron interval tick. If it did not run immediately, invoke
133
- `/wdi-autopilot` now to start the first iteration.
141
+ Before finishing, verify that `wdi-autopilot` ran its first iteration in this same turn rather than
142
+ waiting for the first scheduled tick. If it did not, run it now.
134
143
 
135
144
  ## 7. Report and Stop
136
145
 
137
146
  Report the resolved configuration (in-session mechanism, peer review status, active mandate ID, and
138
- loop interval), confirm that the loop is active, and stop. MUST NOT intervene in or micromanage
139
- subsequent loop iterations.
147
+ loop interval — or `once: this host has no scheduler`), and stop. Where a schedule is running, MUST NOT
148
+ intervene in or micromanage subsequent iterations. Where it ran once, the report ends with the one line
149
+ the owner needs: invoke this skill again to run the next iteration — the mandate, ledger, and run branch
150
+ carry over.
@@ -6,6 +6,8 @@ disable-model-invocation: true
6
6
 
7
7
  # WDI Daily What-to-Build Triage
8
8
 
9
+ > **Typed by the owner, or not at all.** Run this skill only when the person typed `wdi-daily-what-to-build` — `/wdi-daily-what-to-build` or this host's own syntax for it — in the turn that is running. Reached any other way (a description that looked relevant, another skill, a subagent), stop and name it instead. Hosts that can hold a skill to manual-only already do; on the others, this line is the lock.
10
+
9
11
  Daily entry point for "I just tested something by hand, now what." Classifies the notes (new feature,
10
12
  fix, removal, or green), authors the resulting spec or ticket through this repo's own `wdi-build` flow,
11
13
  dispatches an independent second opinion grounded in the *original* notes, folds that feedback back in,
@@ -107,9 +109,10 @@ Reviewer resolution:
107
109
  - If `.control/custom-dispatch.yaml` exists in the repo root (or in the main repository root via `(git rev-parse --git-common-dir)/..` when running inside a linked git worktree): inspect `runners:` and `roles.reviewer`.
108
110
  A runner definition specifies `type:` (`auto`, `in-session`, or `shell-out`):
109
111
  - `auto` (recommended): Evaluates whether the runner's target model is reachable in-session from the active
110
- session profile (per the caller's global agent collaboration rules). Dispatches in-session via the `Agent`
111
- tool in read-only mode if reachable; falls back to shell-out using `command` if unreachable in-session.
112
- - `in-session`: Dispatches strictly via the in-session `Agent` tool using a read-only subagent type.
112
+ session profile (per the caller's global agent collaboration rules). Dispatches through this host's own
113
+ subagent tooling in read-only mode if reachable; falls back to shell-out using `command` if unreachable in-session.
114
+ - `in-session`: Dispatches strictly through this host's own subagent tooling, read-only. A host with none
115
+ cannot satisfy it — stop and report (fail-closed).
113
116
  - `shell-out`: Dispatches strictly via external shell `command` (single-string command, passing the review packet path).
114
117
  A shell-out reviewer MUST be invoked with its read-only flag where supported (e.g. `--trust-tools=fs_read` for
115
118
  `kiro-cli`, `--mode plan` for `cursor-agent`).
@@ -124,11 +127,11 @@ Reviewer resolution:
124
127
  killing). Record in the final report: `peer review: fell back to coordinator self-review after timeout/failure`.
125
128
  MUST NOT fabricate or synthesize unread reviewer output as if it were faithfully received.
126
129
  - In the absence of a custom runner file: follow the caller's configured agent collaboration setup
127
- (e.g., in-session read-only subagent via the `Agent` tool if reachable, or the caller's configured CLI
130
+ (e.g., a read-only subagent through this host's own tooling if reachable, or the caller's configured CLI
128
131
  environment).
129
132
 
130
- When the dispatched reviewer has no native Skill tool, instruct it to read and follow the target
131
- guide directly as plain markdown instructions.
133
+ The reviewer loads the target guide the way its host loads any instruction: through its skill tool where
134
+ it has one, otherwise by reading the guide in full. MUST NOT hand it a summary in the guide's place.
132
135
 
133
136
  ## 5. Coordinator fold-in, stamping, and validation
134
137
 
@@ -6,6 +6,8 @@ disable-model-invocation: true
6
6
 
7
7
  # WDI Daily What-to-Test
8
8
 
9
+ > **Typed by the owner, or not at all.** Run this skill only when the person typed `wdi-daily-what-to-test` — `/wdi-daily-what-to-test` or this host's own syntax for it — in the turn that is running. Reached any other way (a description that looked relevant, another skill, a subagent), stop and name it instead. Hosts that can hold a skill to manual-only already do; on the others, this line is the lock.
10
+
9
11
  The post-merge daily verification step after a `wdi-autopilot` or ticket delivery run merges: lands
10
12
  back on the active development branch, safely prunes stale merged worktrees and task branches while
11
13
  strictly preserving protected branches, configures the application where it needs to be for platform