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.
- package/CHANGELOG.md +129 -0
- package/NOTICE +7 -2
- package/README.md +16 -11
- package/bin/wdi-method.js +396 -87
- package/kit/.constitution/method/document/architecture-guide.md +217 -209
- package/kit/.constitution/method/document/bmad-skill-register.md +107 -104
- package/kit/.constitution/method/document/corpus-guide.md +522 -517
- package/kit/.constitution/method/document/decision-guide.md +236 -216
- package/kit/.constitution/method/document/delivery-flow-guide.md +20 -0
- package/kit/.constitution/method/document/prd-guide.md +245 -245
- package/kit/.constitution/method/document/templates/design-system.md +96 -66
- package/kit/.constitution/method/document/templates/experience.md +62 -0
- package/kit/.constitution/method/document/templates/structure-codebase.md +131 -129
- package/kit/.constitution/method/document/templates/ux.md +78 -76
- package/kit/.constitution/method/document/ux-guide.md +161 -115
- package/kit/.constitution/method/method-glossary.md +3 -0
- package/kit/.constitution/method/scripts/validate.py +3375 -3200
- package/kit/.constitution/method/structure-guide.md +204 -202
- package/kit/.constitution/method/why/README.md +1 -1
- package/kit/.constitution/method/why/artifact-map.md +158 -157
- package/kit/.constitution/method/why/portability.md +19 -2
- package/kit/skills/wdi-autopilot/SKILL.md +32 -19
- package/kit/skills/wdi-blueprint/SKILL.md +271 -264
- package/kit/skills/wdi-build/SKILL.md +28 -19
- package/kit/skills/wdi-component/SKILL.md +179 -174
- package/kit/skills/wdi-daily-autopilot/SKILL.md +24 -13
- package/kit/skills/wdi-daily-what-to-build/SKILL.md +9 -6
- package/kit/skills/wdi-daily-what-to-test/SKILL.md +2 -0
- package/kit/skills/wdi-decision/SKILL.md +206 -203
- package/kit/skills/wdi-explain-to-me/SKILL.md +2 -0
- package/kit/skills/wdi-help/SKILL.md +130 -125
- package/kit/skills/wdi-init/SKILL.md +10 -5
- package/kit/skills/wdi-problem/SKILL.md +114 -108
- package/kit/skills/wdi-product/SKILL.md +167 -162
- package/kit/skills/wdi-prune-or-archive/SKILL.md +2 -0
- package/kit/skills/wdi-reconcile/SKILL.md +170 -169
- package/kit/skills/wdi-upgrade/SKILL.md +234 -215
- package/kit/skills/wdi-ux/SKILL.md +187 -169
- package/kit-overlay/AGENTS.md +15 -2
- package/kit-overlay/portability.md +19 -2
- package/lib/platforms.mjs +420 -248
- package/package.json +1 -1
- 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,
|
|
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
|
|
20
|
-
`
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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.
|
|
32
|
-
|
|
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.
|
|
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
|
-
-
|
|
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
|
-
-
|
|
389
|
-
|
|
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
|
|
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
|
-
##
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
|
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
|
|
57
|
-
if reachable; falls back to shell-out using `command` if unreachable in-session.
|
|
58
|
-
- `in-session`: Dispatches strictly
|
|
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
|
-
|
|
127
|
-
|
|
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
|
|
132
|
-
|
|
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
|
|
139
|
-
subsequent
|
|
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
|
|
111
|
-
|
|
112
|
-
- `in-session`: Dispatches strictly
|
|
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.,
|
|
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
|
-
|
|
131
|
-
guide
|
|
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
|