wdi-method 0.5.3 → 0.5.9

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,100 +1,100 @@
1
- ---
2
- name: '{name}'
3
- type: architecture-spine
4
- purpose: build-substrate # build-substrate (default) · discussion · report · deck
5
- altitude: feature # initiative (keeps features) · feature (keeps epics) · epic (keeps stories)
6
- paradigm: '{named design pattern, e.g. hexagonal, layered, pipes-and-filters, actor}'
7
- scope: '{what this spine governs}'
8
- status: draft # draft · final
9
- created: '{date}'
10
- updated: '{date}'
11
- binds: [] # capability / unit IDs governed (from the driving spec; at epic altitude, also the inherited parent AD ids)
12
- sources: []
13
- companions: []
14
- reviewed: # V13. Diisi hanya setelah bmad-review benar-benar dijalankan
15
- date: '' # '{YYYY-MM-DD}'
16
- sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
17
- lenses: [] # structure · prose · edge-case-hunter · adversarial · verification-gap
18
- ---
19
-
20
- # Architecture Spine — {name}
21
-
22
- <!-- TEMPLATE GUIDE — act on these comments, then delete them; never emit a comment in the finished spine. This is a shape, not a script: keep only the sections this spine needs and cut the rest (no empty headers). A small intent may be just paradigm + a few ADs + conventions; a platform earns more. An inherited epic spine is usually mostly Inherited Invariants + a thin Deferred. Decisions, not rationale (rationale lives in the memlog). Carry shape in diagrams; prose only where it must. -->
23
-
24
- ## Design Paradigm
25
-
26
- <!-- Name the pattern (a known one loads a whole model for free) and map its layers to namespaces/directories. The smallest, most durable thing here. -->
27
-
28
- ## Inherited Invariants
29
-
30
- <!-- Only when this spine inherits a higher-altitude parent. The parent's ADs/conventions/paradigm that bind here, by their ORIGINAL ids — read-only, never renumbered, not re-derived. A local decision that contradicts one is a conflict to surface, not an override. Cut this section otherwise. -->
31
-
32
- | Inherited | From parent | Binds here |
33
- | --- | --- | --- |
34
- | {AD-id / convention} | {parent spine} | {what it constrains in this scope} |
35
-
36
- ## Invariants & Rules
37
-
38
- <!-- The durable heart: calls a future builder can't read off compliant code. One block per decision: stable ascending id (never reused/renumbered), Binds, Prevents (the divergence), Rule (enforceable). Tag [ADOPTED] when the user or existing reality settled it. Include a dependency-direction diagram (who may depend on whom) — it IS a rule; author it as valid mermaid, never an empty graph. -->
39
-
40
- ### AD-1 — {decision}
41
-
42
- - **Binds:** {capability / unit ids / fr/nfr's, areas, or `all`}
43
- - **Prevents:** {the divergence this stops}
44
- - **Rule:** {the constraint downstream must follow}
45
-
46
- ## Consistency Conventions
47
-
48
- <!-- Defaults that bind where independent builders would drift. Cut rows that don't apply; add rows the project needs. -->
49
-
50
- | Concern | Convention |
51
- | --- | --- |
52
- | Naming (entities, files, interfaces, events) | |
53
- | Data & formats (ids, dates, error shapes, envelopes) | |
54
- | State & cross-cutting (mutation, errors, logging, config, auth) | |
55
-
56
- ## Stack
57
-
58
- <!-- SEED — verified current at authoring; the code owns this once it exists. Name + version only; the why lives in the memlog. One row per language, framework, key dependency, platform, or chain that's pinned. -->
59
-
60
- | Name | Version |
61
- | --- | --- |
62
- | {language / framework / key dep / platform / chain} | {pinned version} |
63
-
64
- ## Structural Seed
65
-
66
- <!-- The shapes worth fixing at cold-start — not a fixed list. Include only what's non-obvious at this altitude, and use as many diagrams as convey it, each as VALID mermaid (never a placeholder or empty graph). Candidates: system/container/context view; DEPLOYMENT & ENVIRONMENTS and external provider/infra topology (cover the operational envelope here when this altitude owns it — don't let it fall through); core-entity ERD (names + relationships only; an attribute that's itself an invariant is an AD, not a diagram); a minimal source tree. The code owns the detail — this is scaffold, not a mirror to maintain. -->
67
-
68
- ```text
69
- {root}/
70
- {dir}/ # {what lives here}
71
- ```
72
-
73
- ## Capability → Architecture Map
74
-
75
- <!-- Present when a spec drove this run. Bridges the spec's capabilities to where they live + what governs them; the consistency auditor's checklist. Cut otherwise. -->
76
-
77
- | Capability / Area | Lives in | Governed by |
78
- | --- | --- | --- |
79
- | {CAP-id / area} | {component / module} | {AD-id, convention, paradigm} |
80
-
81
- ## Deferred
82
-
83
- <!-- Decisions intentionally pushed down, each with the reason it can wait — including whole dimensions this altitude doesn't own yet. The half of the contract that keeps the spine lean. -->
84
-
85
- ---
86
-
87
- ## Project overrides — WDI
88
-
89
- - **Altitude.** This project authors the `initiative` spine only, at `.how/_platform/architecture/`.
90
- Component-level design belongs to `SDD-<pc>.md`, written by `wdi-component`, not to a `feature`
91
- spine.
92
- - **This is not an HLD.** The spine constrains; it does not describe. What the system consists of
93
- belongs to `c4-l1-system-context.md` and `c4-l2-containers.md`. Deployment topology has no home
94
- in this corpus at all — it lives in the devops repository and is referenced from C4 L2.
95
- - **`AD-N` versus `DEC-NNN`.** An `AD-N` here is a living rule, edited in place. A `DEC-NNN` in
96
- `.control/decisions/` is one decision event, never edited and replaced by a `superseded` pointer.
97
- The two MUST NOT be interchanged.
98
- - **Ordering.** The spine is authored before `bmad-spec` runs, and `bmad-spec` adopts it as a
99
- companion — never the reverse.
100
- - **Memlog.** Written to `.control/memlog/spine.md` via `--path`.
1
+ ---
2
+ name: '{name}'
3
+ type: architecture-spine
4
+ purpose: build-substrate # build-substrate (default) · discussion · report · deck
5
+ altitude: feature # initiative (keeps features) · feature (keeps epics) · epic (keeps stories)
6
+ paradigm: '{named design pattern, e.g. hexagonal, layered, pipes-and-filters, actor}'
7
+ scope: '{what this spine governs}'
8
+ status: draft # draft · final
9
+ created: '{date}'
10
+ updated: '{date}'
11
+ binds: [] # capability / unit IDs governed (from the driving spec; at epic altitude, also the inherited parent AD ids)
12
+ sources: []
13
+ companions: []
14
+ reviewed: # V13. Filled only after wdi-review has actually run
15
+ date: '' # '{YYYY-MM-DD}'
16
+ sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
17
+ lenses: [] # structure · prose · edge-case-hunter · adversarial · verification-gap
18
+ ---
19
+
20
+ # Architecture Spine — {name}
21
+
22
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them; never emit a comment in the finished spine. This is a shape, not a script: keep only the sections this spine needs and cut the rest (no empty headers). A small intent may be just paradigm + a few ADs + conventions; a platform earns more. An inherited epic spine is usually mostly Inherited Invariants + a thin Deferred. Decisions, not rationale (rationale lives in the memlog). Carry shape in diagrams; prose only where it must. -->
23
+
24
+ ## Design Paradigm
25
+
26
+ <!-- Name the pattern (a known one loads a whole model for free) and map its layers to namespaces/directories. The smallest, most durable thing here. -->
27
+
28
+ ## Inherited Invariants
29
+
30
+ <!-- Only when this spine inherits a higher-altitude parent. The parent's ADs/conventions/paradigm that bind here, by their ORIGINAL ids — read-only, never renumbered, not re-derived. A local decision that contradicts one is a conflict to surface, not an override. Cut this section otherwise. -->
31
+
32
+ | Inherited | From parent | Binds here |
33
+ | --- | --- | --- |
34
+ | {AD-id / convention} | {parent spine} | {what it constrains in this scope} |
35
+
36
+ ## Invariants & Rules
37
+
38
+ <!-- The durable heart: calls a future builder can't read off compliant code. One block per decision: stable ascending id (never reused/renumbered), Binds, Prevents (the divergence), Rule (enforceable). Tag [ADOPTED] when the user or existing reality settled it. Include a dependency-direction diagram (who may depend on whom) — it IS a rule; author it as valid mermaid, never an empty graph. -->
39
+
40
+ ### AD-1 — {decision}
41
+
42
+ - **Binds:** {capability / unit ids / fr/nfr's, areas, or `all`}
43
+ - **Prevents:** {the divergence this stops}
44
+ - **Rule:** {the constraint downstream must follow}
45
+
46
+ ## Consistency Conventions
47
+
48
+ <!-- Defaults that bind where independent builders would drift. Cut rows that don't apply; add rows the project needs. -->
49
+
50
+ | Concern | Convention |
51
+ | --- | --- |
52
+ | Naming (entities, files, interfaces, events) | |
53
+ | Data & formats (ids, dates, error shapes, envelopes) | |
54
+ | State & cross-cutting (mutation, errors, logging, config, auth) | |
55
+
56
+ ## Stack
57
+
58
+ <!-- SEED — verified current at authoring; the code owns this once it exists. Name + version only; the why lives in the memlog. One row per language, framework, key dependency, platform, or chain that's pinned. -->
59
+
60
+ | Name | Version |
61
+ | --- | --- |
62
+ | {language / framework / key dep / platform / chain} | {pinned version} |
63
+
64
+ ## Structural Seed
65
+
66
+ <!-- The shapes worth fixing at cold-start — not a fixed list. Include only what's non-obvious at this altitude, and use as many diagrams as convey it, each as VALID mermaid (never a placeholder or empty graph). Candidates: system/container/context view; DEPLOYMENT & ENVIRONMENTS and external provider/infra topology (cover the operational envelope here when this altitude owns it — don't let it fall through); core-entity ERD (names + relationships only; an attribute that's itself an invariant is an AD, not a diagram); a minimal source tree. The code owns the detail — this is scaffold, not a mirror to maintain. -->
67
+
68
+ ```text
69
+ {root}/
70
+ {dir}/ # {what lives here}
71
+ ```
72
+
73
+ ## Capability → Architecture Map
74
+
75
+ <!-- Present when a spec drove this run. Bridges the spec's capabilities to where they live + what governs them; the consistency auditor's checklist. Cut otherwise. -->
76
+
77
+ | Capability / Area | Lives in | Governed by |
78
+ | --- | --- | --- |
79
+ | {CAP-id / area} | {component / module} | {AD-id, convention, paradigm} |
80
+
81
+ ## Deferred
82
+
83
+ <!-- Decisions intentionally pushed down, each with the reason it can wait — including whole dimensions this altitude doesn't own yet. The half of the contract that keeps the spine lean. -->
84
+
85
+ ---
86
+
87
+ ## Project overrides — WDI
88
+
89
+ - **Altitude.** This project authors the `initiative` spine only, at `.how/_platform/architecture/`.
90
+ Component-level design belongs to `SDD-<pc>.md`, written by `wdi-component`, not to a `feature`
91
+ spine.
92
+ - **This is not an HLD.** The spine constrains; it does not describe. What the system consists of
93
+ belongs to `c4-l1-system-context.md` and `c4-l2-containers.md`. Deployment topology has no home
94
+ in this corpus at all — it lives in the devops repository and is referenced from C4 L2.
95
+ - **`AD-N` versus `DEC-NNN`.** An `AD-N` here is a living rule, edited in place. A `DEC-NNN` in
96
+ `.control/decisions/` is one decision event, never edited and replaced by a `superseded` pointer.
97
+ The two MUST NOT be interchanged.
98
+ - **Ordering.** The spine is authored before `bmad-spec` runs, and `bmad-spec` adopts it as a
99
+ companion — never the reverse.
100
+ - **Memlog.** Written to `.control/memlog/spine.md` via `--path`.
@@ -31,8 +31,8 @@ verified: '' # commit SHA the derivation was read at; required when
31
31
  TWO WAYS THIS FILE COMES TO EXIST, and derived_from says which:
32
32
  plan no code yet. Written as intent — the tables, endpoints, or screens planned. Nothing can
33
33
  be derived, because there is no source.
34
- code code exists. Derived by .constitution/method/scripts/inventory.py migrations for tables,
35
- route registration for endpoints, pages for screens — and THEN compared with the plan.
34
+ code code exists. Derived by .constitution/method/scripts/inventory.py, reading this product's
35
+ patterns from .constitution/project/inventory-readers.py — and THEN compared with the plan.
36
36
  The difference is a FINDING, reported. It MUST NOT be patched into agreement by hand.
37
37
 
38
38
  MUST NOT be assembled from a README, from a route name that looks plausible, or from memory. -->
@@ -6,7 +6,7 @@ created: '{YYYY-MM-DD}'
6
6
  updated: '{YYYY-MM-DD}'
7
7
  realizes: [] # UC ids this design realizes, from usecases.yaml
8
8
  binds: [] # AD ids from the spine that bind here
9
- reviewed: # V13. Diisi hanya setelah bmad-review benar-benar dijalankan
9
+ reviewed: # V13. Filled only after wdi-review has actually run
10
10
  date: '' # '{YYYY-MM-DD}'
11
11
  sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
12
12
  lenses: [] # the set risk_accepted names — NOT a fixed list
@@ -1,149 +1,149 @@
1
- ---
2
- type: srs
3
- component: '{pc}'
4
- status: draft # draft · reviewed · locked · superseded
5
- created: '{YYYY-MM-DD}'
6
- updated: '{YYYY-MM-DD}'
7
- satisfies: [] # FR / NFR ids this component carries, from requirements.yaml
8
- reviewed: # V13. Diisi hanya setelah bmad-review benar-benar dijalankan
9
- date: '' # '{YYYY-MM-DD}'
10
- sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
11
- lenses: [] # the set risk_accepted names — NOT a fixed list
12
- ---
13
-
14
- # SRS — {Product Component}
15
-
16
- <!-- TEMPLATE GUIDE — act on these comments, then delete them. Never emit a comment in a finished
17
- SRS. Section headings stay English; the prose inside is Bahasa Indonesia, with technical terms
18
- left in English per the controlled vocabulary. -->
19
-
20
- <!-- NOT a one-shot document. Despite the IEEE name, this SRS is LIVING: one per Product Component,
21
- amended every wave, never signed off and frozen. -->
22
-
23
- <!-- TWO SKILLS WRITE IT, AT TWO GATES, and every section below says which:
24
- [G3] wdi-blueprint intent `catalog`. Exists at EVERY mode, including catalog
25
- [G4] wdi-component intent `behaviour`, only as deep as the component's mode
26
-
27
- So this file EXISTS at mode: catalog. It carries the actor list and the use case catalogue, and
28
- what is absent there is 04-usecases/UC-<n>-<slug>.md — the step-by-step flows.
29
-
30
- `reviewed.lenses` MUST match what this component's risk_accepted names in components.yaml —
31
- edge-case-hunter at low and medium, structure + prose at high. It is NOT read off `mode`. -->
32
-
33
- ## Decision Summary · [G3]
34
-
35
- <!-- <=1 page, business language, no jargon lacking a Glossary entry. What the Product Owner reads.
36
- A summary that cannot be read inside the gate's time budget IS the finding. -->
37
-
38
- ## Why · [G3]
39
-
40
- <!-- Why this component exists as a separate thing. One paragraph. If it reads the same as another
41
- component's Why, the boundary is wrong. -->
42
-
43
- ## Actor Register · [G3]
44
-
45
- <!-- SSOT for actors, referenced by the SDD. MUST stay in this kernel, never split into a slot. Two
46
- actors that turn out to be the same person MUST be merged, and G3 asks exactly this.
47
-
48
- A variant of one actor that differs only in what is shown to them is NOT a second actor. -->
49
-
50
- | Actor | Who they are | What they may do |
51
- | --- | --- | --- |
52
-
53
- ## UC Catalogue · [G3]
54
-
55
- <!-- THE use case list, and at mode: catalog it is the whole use-case record. One line each, and the
56
- line is the artifact — not a placeholder waiting for a file.
57
-
58
- A title MUST be a sentence a user would say, never a system term. G3 asks this as a starred
59
- question.
60
-
61
- `critical` is yes ONLY when the use case touches money, personal data, or an irreversible action.
62
- Nothing else. If more than a third of this component's use cases are marked, the definition was
63
- misapplied — derive it again rather than negotiating it.
64
-
65
- `critical` decides something only at mode: deep, where every critical UC gets a full flow. -->
66
-
67
- | id | Use case | Actor | Satisfies | critical |
68
- | --- | --- | --- | --- | --- |
69
- | UC-{n} | {a sentence a user would say} | {from the Actor Register} | {FR-n} | no |
70
-
71
- ## Constraints · [G3]
72
-
73
- <!-- What this component MUST work within, and where each comes from — a business rule, a regulation,
74
- an external system, an applied DEC-, an AD-N. A constraint with no source is an assumption in
75
- disguise; file it through wdi-question instead. -->
76
-
77
- ## Non-Goals · [G3]
78
-
79
- <!-- What this component explicitly does NOT do, and which component does it instead. This does more
80
- work than it looks: it is what stops the next builder adding a nearby thing here. -->
81
-
82
- ## Prerequisite · [G3]
83
-
84
- <!-- What MUST already exist before this component can behave as described — another component, an
85
- external system, a dataset, a credential. A prerequisite waiting on somebody outside belongs in
86
- .control/questions/external.md, and that file holds go-live only, never a design gate. -->
87
-
88
- ## Success Signal · [G3]
89
-
90
- <!-- How we will know this component works — observable, not aspirational. Scales with stakes: a
91
- sentence for a small component, a measure with a target for one touching money or personal data. -->
92
-
93
- ## Assumptions, Risks, and To Be Confirmed · [G3]
94
-
95
- <!-- THREE separate lists, and collapsing them loses the owner. An assumption is something we decided
96
- to believe; a risk is something that may go wrong; a to-be-confirmed is a question with an owner.
97
-
98
- Every to-be-confirmed MUST be filed through wdi-question before the gate opens — into
99
- assumptions.md by default, blocking.md only through the three tests that file states. -->
100
-
101
- ### Assumptions
102
-
103
- ### Risks
104
-
105
- ### To Be Confirmed
106
-
107
- ## Gate Checklist · [G3]
108
-
109
- <!-- The gate questions as they apply to THIS component, answered yes / no / change. The full list
110
- lives in delivery-flow-guide.md and MUST NOT be copied here. At mode: catalog only the starred
111
- questions are asked. -->
112
-
113
- ## Design Reference · [G3]
114
-
115
- <!-- One line pointing at the paired SDD, plus any AD-N or applied DEC- that binds this component.
116
- Nothing else — solution shape MUST NOT appear in this document: no framework, no table, no
117
- endpoint, no class, no queue, no file path. -->
118
-
119
- ---
120
-
121
- ## Slots
122
-
123
- <!-- All slot content is [G4], written by wdi-component intent `behaviour` and only as deep as the
124
- component's mode. At catalog every slot stays empty, and that is a finished state.
125
-
126
- Content SHOULD stay in this kernel until the file grows past roughly 400 lines — a suggestion,
127
- not a threshold. When it must split, the FIRST slot broken out SHOULD be 04-usecases/.
128
-
129
- The numbers are READING ORDER, not classification. This is the opposite of .how/<pc>/, where
130
- 01-06 classify by ABCE. The two MUST NOT be conflated.
131
-
132
- 02-rules/ rules-<pc>.md — business rules binding ONLY this component. From mode: outline.
133
- A rule that turns out to bind a second component is PROMOTED to
134
- .what/business-rules.md through wdi-blueprint, never copied
135
- 03-domain/ domain-model.md — entities, relations, columns. [G3], exists at every mode.
136
- state-machines.md — from mode: deep only.
137
- NOT a database schema; column types MUST NOT appear here
138
- 04-usecases/ UC-<n>-<slug>.md, one file per full flow. At most 3 at outline and guarded;
139
- every critical UC at deep. At most EIGHT steps each — a flow needing more is
140
- either two use cases or has started describing implementation
141
- 05-scenarios/ SCN-<nn>-<slug>.md, long branches hanging off one UC. From mode: deep only
142
-
143
- 01-requirements/ and supplements/ are REPEALED. The first was permanently empty — FR live in the
144
- PRD and this document cites them by id. The second existed for the ANX- concept, which is gone. -->
145
-
146
- ## Open Items
147
-
148
- <!-- Anything still unresolved, each pointing at its row in .control/questions/. An assumption left
149
- here with no id is the failure wdi-question exists to prevent. -->
1
+ ---
2
+ type: srs
3
+ component: '{pc}'
4
+ status: draft # draft · reviewed · locked · superseded
5
+ created: '{YYYY-MM-DD}'
6
+ updated: '{YYYY-MM-DD}'
7
+ satisfies: [] # FR / NFR ids this component carries, from requirements.yaml
8
+ reviewed: # V13. Filled only after wdi-review has actually run
9
+ date: '' # '{YYYY-MM-DD}'
10
+ sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
11
+ lenses: [] # the set risk_accepted names — NOT a fixed list
12
+ ---
13
+
14
+ # SRS — {Product Component}
15
+
16
+ <!-- TEMPLATE GUIDE — act on these comments, then delete them. Never emit a comment in a finished
17
+ SRS. Section headings stay English; the prose inside is Bahasa Indonesia, with technical terms
18
+ left in English per the controlled vocabulary. -->
19
+
20
+ <!-- NOT a one-shot document. Despite the IEEE name, this SRS is LIVING: one per Product Component,
21
+ amended every wave, never signed off and frozen. -->
22
+
23
+ <!-- TWO SKILLS WRITE IT, AT TWO GATES, and every section below says which:
24
+ [G3] wdi-blueprint intent `catalog`. Exists at EVERY mode, including catalog
25
+ [G4] wdi-component intent `behaviour`, only as deep as the component's mode
26
+
27
+ So this file EXISTS at mode: catalog. It carries the actor list and the use case catalogue, and
28
+ what is absent there is 04-usecases/UC-<n>-<slug>.md — the step-by-step flows.
29
+
30
+ `reviewed.lenses` MUST match what this component's risk_accepted names in components.yaml —
31
+ edge-case-hunter at low and medium, structure + prose at high. It is NOT read off `mode`. -->
32
+
33
+ ## Decision Summary · [G3]
34
+
35
+ <!-- <=1 page, business language, no jargon lacking a Glossary entry. What the Product Owner reads.
36
+ A summary that cannot be read inside the gate's time budget IS the finding. -->
37
+
38
+ ## Why · [G3]
39
+
40
+ <!-- Why this component exists as a separate thing. One paragraph. If it reads the same as another
41
+ component's Why, the boundary is wrong. -->
42
+
43
+ ## Actor Register · [G3]
44
+
45
+ <!-- SSOT for actors, referenced by the SDD. MUST stay in this kernel, never split into a slot. Two
46
+ actors that turn out to be the same person MUST be merged, and G3 asks exactly this.
47
+
48
+ A variant of one actor that differs only in what is shown to them is NOT a second actor. -->
49
+
50
+ | Actor | Who they are | What they may do |
51
+ | --- | --- | --- |
52
+
53
+ ## UC Catalogue · [G3]
54
+
55
+ <!-- THE use case list, and at mode: catalog it is the whole use-case record. One line each, and the
56
+ line is the artifact — not a placeholder waiting for a file.
57
+
58
+ A title MUST be a sentence a user would say, never a system term. G3 asks this as a starred
59
+ question.
60
+
61
+ `critical` is yes ONLY when the use case touches money, personal data, or an irreversible action.
62
+ Nothing else. If more than a third of this component's use cases are marked, the definition was
63
+ misapplied — derive it again rather than negotiating it.
64
+
65
+ `critical` decides something only at mode: deep, where every critical UC gets a full flow. -->
66
+
67
+ | id | Use case | Actor | Satisfies | critical |
68
+ | --- | --- | --- | --- | --- |
69
+ | UC-{n} | {a sentence a user would say} | {from the Actor Register} | {FR-n} | no |
70
+
71
+ ## Constraints · [G3]
72
+
73
+ <!-- What this component MUST work within, and where each comes from — a business rule, a regulation,
74
+ an external system, an applied DEC-, an AD-N. A constraint with no source is an assumption in
75
+ disguise; file it through wdi-question instead. -->
76
+
77
+ ## Non-Goals · [G3]
78
+
79
+ <!-- What this component explicitly does NOT do, and which component does it instead. This does more
80
+ work than it looks: it is what stops the next builder adding a nearby thing here. -->
81
+
82
+ ## Prerequisite · [G3]
83
+
84
+ <!-- What MUST already exist before this component can behave as described — another component, an
85
+ external system, a dataset, a credential. A prerequisite waiting on somebody outside belongs in
86
+ .control/questions/external.md, and that file holds go-live only, never a design gate. -->
87
+
88
+ ## Success Signal · [G3]
89
+
90
+ <!-- How we will know this component works — observable, not aspirational. Scales with stakes: a
91
+ sentence for a small component, a measure with a target for one touching money or personal data. -->
92
+
93
+ ## Assumptions, Risks, and To Be Confirmed · [G3]
94
+
95
+ <!-- THREE separate lists, and collapsing them loses the owner. An assumption is something we decided
96
+ to believe; a risk is something that may go wrong; a to-be-confirmed is a question with an owner.
97
+
98
+ Every to-be-confirmed MUST be filed through wdi-question before the gate opens — into
99
+ assumptions.md by default, blocking.md only through the three tests that file states. -->
100
+
101
+ ### Assumptions
102
+
103
+ ### Risks
104
+
105
+ ### To Be Confirmed
106
+
107
+ ## Gate Checklist · [G3]
108
+
109
+ <!-- The gate questions as they apply to THIS component, answered yes / no / change. The full list
110
+ lives in delivery-flow-guide.md and MUST NOT be copied here. At mode: catalog only the starred
111
+ questions are asked. -->
112
+
113
+ ## Design Reference · [G3]
114
+
115
+ <!-- One line pointing at the paired SDD, plus any AD-N or applied DEC- that binds this component.
116
+ Nothing else — solution shape MUST NOT appear in this document: no framework, no table, no
117
+ endpoint, no class, no queue, no file path. -->
118
+
119
+ ---
120
+
121
+ ## Slots
122
+
123
+ <!-- All slot content is [G4], written by wdi-component intent `behaviour` and only as deep as the
124
+ component's mode. At catalog every slot stays empty, and that is a finished state.
125
+
126
+ Content SHOULD stay in this kernel until the file grows past roughly 400 lines — a suggestion,
127
+ not a threshold. When it must split, the FIRST slot broken out SHOULD be 04-usecases/.
128
+
129
+ The numbers are READING ORDER, not classification. This is the opposite of .how/<pc>/, where
130
+ 01-06 classify by ABCE. The two MUST NOT be conflated.
131
+
132
+ 02-rules/ rules-<pc>.md — business rules binding ONLY this component. From mode: outline.
133
+ A rule that turns out to bind a second component is PROMOTED to
134
+ .what/business-rules.md through wdi-blueprint, never copied
135
+ 03-domain/ domain-model.md — entities, relations, columns. [G3], exists at every mode.
136
+ state-machines.md — from mode: deep only.
137
+ NOT a database schema; column types MUST NOT appear here
138
+ 04-usecases/ UC-<n>-<slug>.md, one file per full flow. At most 3 at outline and guarded;
139
+ every critical UC at deep. At most EIGHT steps each — a flow needing more is
140
+ either two use cases or has started describing implementation
141
+ 05-scenarios/ SCN-<nn>-<slug>.md, long branches hanging off one UC. From mode: deep only
142
+
143
+ 01-requirements/ and supplements/ are REPEALED. The first was permanently empty — FR live in the
144
+ PRD and this document cites them by id. The second existed for the ANX- concept, which is gone. -->
145
+
146
+ ## Open Items
147
+
148
+ <!-- Anything still unresolved, each pointing at its row in .control/questions/. An assumption left
149
+ here with no id is the failure wdi-question exists to prevent. -->