wdi-method 0.5.13 → 0.6.0
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/README.md +436 -271
- package/bin/wdi-method.js +198 -5
- package/kit/.constitution/method/README.md +76 -75
- package/kit/.constitution/method/constitution.md +2 -1
- package/kit/.constitution/method/document/architecture-guide.md +10 -10
- package/kit/.constitution/method/document/bmad-guide.md +50 -16
- package/kit/.constitution/method/document/bmad-skill-register.md +74 -71
- package/kit/.constitution/method/document/brief-guide.md +42 -11
- package/kit/.constitution/method/document/corpus-guide.md +146 -11
- package/kit/.constitution/method/document/decision-guide.md +199 -134
- package/kit/.constitution/method/document/delivery-flow-guide.md +154 -83
- package/kit/.constitution/method/document/prd-guide.md +63 -20
- package/kit/.constitution/method/document/sdd-guide.md +5 -4
- package/kit/.constitution/method/document/srs-guide.md +150 -147
- package/kit/.constitution/method/document/templates/addendum.md +70 -71
- package/kit/.constitution/method/document/templates/architecture-spine.md +6 -4
- package/kit/.constitution/method/document/templates/brief.md +132 -110
- package/kit/.constitution/method/document/templates/c4.md +11 -11
- package/kit/.constitution/method/document/templates/contract.md +51 -52
- package/kit/.constitution/method/document/templates/cross-cutting.md +1 -2
- package/kit/.constitution/method/document/templates/design-system.md +0 -1
- package/kit/.constitution/method/document/templates/integration.md +68 -69
- package/kit/.constitution/method/document/templates/inventory.md +0 -1
- package/kit/.constitution/method/document/templates/lc.md +49 -47
- package/kit/.constitution/method/document/templates/lifecycle.md +51 -52
- package/kit/.constitution/method/document/templates/model.md +68 -55
- package/kit/.constitution/method/document/templates/oq.md +45 -45
- package/kit/.constitution/method/document/templates/prd.md +244 -226
- package/kit/.constitution/method/document/templates/questions.md +100 -76
- package/kit/.constitution/method/document/templates/rules.md +46 -47
- package/kit/.constitution/method/document/templates/sdd.md +26 -11
- package/kit/.constitution/method/document/templates/srs.md +46 -25
- package/kit/.constitution/method/document/templates/uc.md +1 -1
- package/kit/.constitution/method/document/templates/ux.md +76 -77
- package/kit/.constitution/method/document/ux-guide.md +115 -99
- package/kit/.constitution/method/language-guide.md +1 -1
- package/kit/.constitution/method/method-glossary.md +29 -16
- package/kit/.constitution/method/scripts/timeline.py +663 -665
- package/kit/.constitution/method/scripts/validate.py +1143 -362
- package/kit/.constitution/method/structure-guide.md +3 -3
- package/kit/.constitution/method/why/README.md +184 -169
- package/kit/.constitution/method/why/artifact-map.md +15 -13
- package/kit/.constitution/method/why/mode-risk-map.md +140 -0
- package/kit/.constitution/method/why/portability.md +1 -1
- package/kit/.constitution/method/why/rationale.md +12 -5
- package/kit/.constitution/project/README.md +2 -2
- package/kit/.constitution/project/codebase-brownfield-guide.md +18 -18
- package/kit/.constitution/project/codebase-conventions-guide.md +18 -18
- package/kit/.constitution/project/codebase-stack-guide.md +18 -18
- package/kit/assets/bmad-custom/bmad-architecture.toml +1 -1
- package/kit/assets/bmad-custom/bmad-correct-course.toml +5 -5
- package/kit/assets/bmad-custom/bmad-prd.toml +9 -3
- package/kit/assets/bmad-custom/bmad-product-brief.toml +6 -2
- package/kit/skills/wdi-blueprint/SKILL.md +71 -10
- package/kit/skills/wdi-build/SKILL.md +233 -122
- package/kit/skills/wdi-component/SKILL.md +8 -6
- package/kit/skills/wdi-decision/SKILL.md +187 -183
- package/kit/skills/wdi-help/SKILL.md +8 -7
- package/kit/skills/wdi-init/SKILL.md +20 -6
- package/kit/skills/wdi-problem/SKILL.md +31 -13
- package/kit/skills/wdi-product/SKILL.md +30 -17
- package/kit/skills/wdi-question/SKILL.md +170 -88
- package/kit/skills/wdi-reconcile/SKILL.md +33 -10
- package/kit/skills/wdi-report/SKILL.md +77 -25
- package/kit/skills/wdi-review/SKILL.md +201 -118
- package/kit/skills/wdi-systematic-debugging/SKILL.md +7 -7
- package/kit/skills/wdi-upgrade/SKILL.md +179 -0
- package/kit/skills/wdi-ux/SKILL.md +35 -11
- package/kit-overlay/AGENTS.md +2 -2
- package/kit-overlay/README.md +76 -75
- package/kit-overlay/constitution.md +2 -1
- package/kit-overlay/portability.md +1 -1
- package/package.json +43 -43
- package/scaffold/.control/product-glossary.md +1 -1
- package/scaffold/.control/registry/goals.yaml +25 -0
- package/scaffold/.control/registry/index.yaml +5 -5
- package/scaffold/.control/registry/specs.yaml +5 -0
- package/scaffold/.control/structure-codebase.md +19 -19
- package/scaffold/.control/structure-document.md +25 -25
- package/kit/.constitution/method/document/templates/rtr.md +0 -61
- package/kit/assets/bmad-custom/bmad-build-auto.toml +0 -10
- package/kit/assets/bmad-custom/bmad-build.toml +0 -52
- package/kit/assets/bmad-custom/bmad-code-review.toml +0 -13
- package/kit/assets/bmad-custom/bmad-retrospective.toml +0 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +0 -16
- package/scaffold/.control/registry/requirements.yaml +0 -15
- package/scaffold/.control/registry/waves.yaml +0 -5
|
@@ -1,76 +1,100 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: questions
|
|
3
|
-
list: blocking # blocking · assumptions · external · answered
|
|
4
|
-
status: draft # draft · reviewed · locked · superseded
|
|
5
|
-
created: '{YYYY-MM-DD}'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<!-- list:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
<!--
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
1
|
+
---
|
|
2
|
+
type: questions
|
|
3
|
+
list: blocking # blocking · assumptions · external · answered
|
|
4
|
+
status: draft # draft · reviewed · locked · superseded
|
|
5
|
+
created: '{YYYY-MM-DD}'
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# {Blocking Questions | Assumptions | Waiting on an Outside Party | Answered}
|
|
9
|
+
|
|
10
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
11
|
+
|
|
12
|
+
ONE template, four lists, all in .control/questions/. `list:` decides which row shape below
|
|
13
|
+
survives; delete the other three.
|
|
14
|
+
|
|
15
|
+
THE SPLIT IS BY WHAT THE READER HAS TO DO — not by subject and not by severity. That is the whole
|
|
16
|
+
design, and it is what the single old list could not express: it reached OQ-146 and the majority
|
|
17
|
+
of its weight was answered entries.
|
|
18
|
+
|
|
19
|
+
blocking holds a gate. Read at every gate. Target <=3 per Product Component
|
|
20
|
+
assumptions the DEFAULT class. Swept once per gate; MAY be skipped. Holds nothing
|
|
21
|
+
external waiting on a file, an action, or a credential from outside. Holds GO-LIVE ONLY,
|
|
22
|
+
never a design gate. Owner and `Sebelum` required on every row
|
|
23
|
+
answered archive. Closed in place, never deleted
|
|
24
|
+
|
|
25
|
+
WHY oq.md IS NOT THIS: oq.md is the shape of ONE question whose discussion outgrew a line, and it
|
|
26
|
+
lives beside these four as OQ-NNN-<slug>.md with a one-line pointer from the list. This is the
|
|
27
|
+
shape of the four LISTS.
|
|
28
|
+
|
|
29
|
+
A ROW MOVES BETWEEN FILES WHEN ITS CLASS CHANGES, and it MUST NOT be copied into a second one.
|
|
30
|
+
|
|
31
|
+
Ids stay OQ-, allocated from the highest ever used including closed ones. An id MUST NOT be
|
|
32
|
+
reused. The prose inside the tables follows the product's `doc_language`; a machine-facing
|
|
33
|
+
marker such as `[NEEDS CONFIRMATION]` stays English wherever it appears — `language-guide.md`
|
|
34
|
+
owns that split. -->
|
|
35
|
+
|
|
36
|
+
## The class test
|
|
37
|
+
|
|
38
|
+
<!-- Keep this block in blocking.md and assumptions.md; delete it from the other two.
|
|
39
|
+
|
|
40
|
+
A question is filed in `assumptions` unless it passes one of three tests. One is enough:
|
|
41
|
+
|
|
42
|
+
1. It touches money, personal data, or a legal obligation.
|
|
43
|
+
2. It changes the wording of an FR's promise.
|
|
44
|
+
3. Answering it wrong forces a rewrite of more than one Product Component.
|
|
45
|
+
|
|
46
|
+
Failing all three, the agent takes the answer itself — and then THE RECORDING THRESHOLD decides
|
|
47
|
+
whether it becomes a row at all. Read `Cost if wrong` first: if it is *one setting changes*, *one
|
|
48
|
+
default changes*, or *a shortcut is added later*, with no rework and nothing built on it, then
|
|
49
|
+
there is NO ROW. The shipping default is the record, and the code says it more reliably than a
|
|
50
|
+
line here. wdi-question owns the rule.
|
|
51
|
+
|
|
52
|
+
The threshold never applies to the three tests above. Those always win.
|
|
53
|
+
|
|
54
|
+
A question MUST NOT be filed as blocking "to be safe". That habit is what produced 146 ids. -->
|
|
55
|
+
|
|
56
|
+
## Open
|
|
57
|
+
|
|
58
|
+
<!-- list: blocking · external -->
|
|
59
|
+
|
|
60
|
+
| id | Question | Blocks | Whose | Owner | Before |
|
|
61
|
+
|---|---|---|---|---|---|
|
|
62
|
+
|
|
63
|
+
<!-- external.md drops `Whose`: sitting in that file already says who acts. Its shape is
|
|
64
|
+
| id | Question | Waiting on | Since | -->
|
|
65
|
+
|
|
66
|
+
<!-- list: assumptions — keep this shape instead
|
|
67
|
+
| id | Assumption | Cost if wrong | Whose | Taken | By |
|
|
68
|
+
|---|---|---|---|---|---|
|
|
69
|
+
-->
|
|
70
|
+
|
|
71
|
+
<!-- `Whose` says who acts, and whether anyone may act yet. Three values, and no others:
|
|
72
|
+
|
|
73
|
+
owner a judgement only the owner can make, and it can be made NOW
|
|
74
|
+
run: <what> the answer comes from running or measuring something — the AGENT's, not the
|
|
75
|
+
owner's. It MUST name what to run; "needs testing" is not a value
|
|
76
|
+
frozen: DEC-NNN an applied decision forbids answering it yet, planning included. When that
|
|
77
|
+
DEC- lifts or is superseded, the row becomes `owner` with no re-triage
|
|
78
|
+
|
|
79
|
+
Without this column the four files still hand the owner one flat pile: in one real corpus, 25 open
|
|
80
|
+
lines of which only 6 were the owner's and answerable. wdi-question MUST report only `owner` rows
|
|
81
|
+
to the owner, and the rest as counts. -->
|
|
82
|
+
|
|
83
|
+
<!-- An empty list is a legitimate state and MUST be written as one, with the date and one line
|
|
84
|
+
saying why. An empty table with no sentence reads as an unfinished file. -->
|
|
85
|
+
|
|
86
|
+
## Answered
|
|
87
|
+
|
|
88
|
+
<!-- list: answered only.
|
|
89
|
+
|
|
90
|
+
| id | Question | Answer | Date | By |
|
|
91
|
+
|
|
92
|
+
The answer is written beside the question, not in place of it. The record of what was once
|
|
93
|
+
uncertain is what stops the same question being asked again in three months.
|
|
94
|
+
|
|
95
|
+
An answer amounting to a decision that is expensive to reverse MUST also go to wdi-decision. This
|
|
96
|
+
list records that an answer arrived; a DEC- records what was chosen and what it cost.
|
|
97
|
+
|
|
98
|
+
A FOSSIL IS CLOSED, NOT ANSWERED. A row questioning a rule, a layer, or a validator that has since
|
|
99
|
+
been repealed cannot bite again — it moves here with the repeal as its answer, and it MUST NOT be
|
|
100
|
+
put to the owner as a decision. Check for these FIRST when a list has grown long; they are free. -->
|
|
@@ -1,47 +1,46 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: rules
|
|
3
|
-
scope: global # global · component — decides the home and the id prefix
|
|
4
|
-
component: '{pc}' # omit entirely when scope: global
|
|
5
|
-
status: draft # draft · reviewed · locked · superseded
|
|
6
|
-
created: '{YYYY-MM-DD}'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
scope:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
holding. This section MAY be absent until the first rule retires. -->
|
|
1
|
+
---
|
|
2
|
+
type: rules
|
|
3
|
+
scope: global # global · component — decides the home and the id prefix
|
|
4
|
+
component: '{pc}' # omit entirely when scope: global
|
|
5
|
+
status: draft # draft · reviewed · locked · superseded
|
|
6
|
+
created: '{YYYY-MM-DD}'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Business Rules — {the product | Product Component}
|
|
10
|
+
|
|
11
|
+
<!-- TEMPLATE GUIDE — act on these comments, then delete them.
|
|
12
|
+
|
|
13
|
+
ONE template, two scopes, and the scope decides everything about where this file lives:
|
|
14
|
+
|
|
15
|
+
scope: global -> .what/business-rules.md born at G3, by wdi-blueprint
|
|
16
|
+
scope: component -> .what/<pc>/02-rules/rules-<pc>.md born at G4, from mode: outline up
|
|
17
|
+
|
|
18
|
+
THE TEST IS REACH, NOT IMPORTANCE. A rule binding more than one Product Component is global; a
|
|
19
|
+
rule binding only one is that component's. A rule written locally that turns out to bind a
|
|
20
|
+
second component MUST be PROMOTED to the global file, never copied. Two copies of one rule is
|
|
21
|
+
how components start disagreeing about the same policy.
|
|
22
|
+
|
|
23
|
+
A rule MUST be checkable. If a reviewer cannot tell whether the behaviour obeys it, it is not a
|
|
24
|
+
rule yet — it is an intention, and it belongs in the SRS prose.
|
|
25
|
+
|
|
26
|
+
A rule MUST NOT state a mechanism. "The turn is not consumed until commitment" is a rule; "a
|
|
27
|
+
row is written to the queue table" is a mechanism and belongs to .how/.
|
|
28
|
+
|
|
29
|
+
Ids are allocated GLOBALLY and never restart. A retired rule keeps its id and is marked retired
|
|
30
|
+
with what replaced it — never deleted, because documents still cite it. -->
|
|
31
|
+
|
|
32
|
+
## Rules
|
|
33
|
+
|
|
34
|
+
| id | Rule | Binds | Source | Status |
|
|
35
|
+
| --- | --- | --- | --- | --- |
|
|
36
|
+
| BR-{n} | {one checkable sentence, present tense} | {which components, or `all`} | {FR-n · DEC-n · UC-n · a person and a date} | active |
|
|
37
|
+
|
|
38
|
+
<!-- `Source` MUST name where the rule came from. A rule with no source is an assumption in
|
|
39
|
+
disguise, and it goes through wdi-question instead.
|
|
40
|
+
|
|
41
|
+
`Status`: active · retired. A retired row states what replaced it in the Rule column. -->
|
|
42
|
+
|
|
43
|
+
## Retired
|
|
44
|
+
|
|
45
|
+
<!-- Rows moved here keep their ids. Each MUST name what replaced it and the date it stopped
|
|
46
|
+
holding. This section MAY be absent until the first rule retires. -->
|
|
@@ -3,10 +3,9 @@ type: sdd
|
|
|
3
3
|
component: '{pc}'
|
|
4
4
|
status: draft # draft · reviewed · locked · superseded
|
|
5
5
|
created: '{YYYY-MM-DD}'
|
|
6
|
-
updated: '{YYYY-MM-DD}'
|
|
7
6
|
realizes: [] # UC ids this design realizes, from usecases.yaml
|
|
8
7
|
binds: [] # AD ids from the spine that bind here
|
|
9
|
-
reviewed: #
|
|
8
|
+
reviewed: # `review-trace`. Filled only after wdi-review has actually run
|
|
10
9
|
date: '' # '{YYYY-MM-DD}'
|
|
11
10
|
sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
|
|
12
11
|
lenses: [] # the set risk_accepted names — NOT a fixed list
|
|
@@ -19,7 +18,7 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
19
18
|
|
|
20
19
|
<!-- NOT an HLD, and NOT a one-shot LLD. What the system consists of belongs to C4 L1-L2; architecture
|
|
21
20
|
constraints belong to ARCHITECTURE-SPINE.md; deployment topology belongs to the devops repository.
|
|
22
|
-
This document is LIVING: one per Product Component, amended every
|
|
21
|
+
This document is LIVING: one per Product Component, amended every spec. -->
|
|
23
22
|
|
|
24
23
|
<!-- EVERY SECTION MARKS THE MINIMUM `mode` THAT DEMANDS IT. Below that minimum it MUST NOT be written
|
|
25
24
|
to fill a slot; above it, it is required. Read the component's mode from its row in
|
|
@@ -29,13 +28,21 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
29
28
|
That is a FINISHED state, not an unfinished one: G4 is skipped at catalog, and the code is written
|
|
30
29
|
from the use case catalogue, the three inventories, and C4.
|
|
31
30
|
|
|
31
|
+
`reviewed.lenses` carries what ACTUALLY ran at that sha. The risk-mandated set applies to a first
|
|
32
|
+
review and a gate-opening review; a re-review runs the lighter set over the delta only.
|
|
33
|
+
|
|
32
34
|
`reviewed.lenses` MUST match what risk_accepted names, NOT what `mode` says. One component MAY sit
|
|
33
35
|
at catalog and still be reviewed the hardest. -->
|
|
34
36
|
|
|
35
37
|
## Decision Summary · [outline]
|
|
36
38
|
|
|
37
39
|
<!-- <=1 page, business language. What this component is built as, and the one or two choices that cost
|
|
38
|
-
the most to reverse. This is what the Product Owner reads at G4.
|
|
40
|
+
the most to reverse. This is what the Product Owner reads at G4.
|
|
41
|
+
|
|
42
|
+
NO DERIVED FACT. `mode`, `risk_accepted`, which `DEC-` bind this file — "none yet" included —
|
|
43
|
+
how many UC or FR there are, and which slots exist are all held elsewhere and MUST NOT be
|
|
44
|
+
stated here. `corpus-guide.md` § A derived fact has exactly one home says where each lives, and
|
|
45
|
+
that the remedy for one already written is DELETION, not correction. -->
|
|
39
46
|
|
|
40
47
|
## Structure · [outline]
|
|
41
48
|
|
|
@@ -43,7 +50,7 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
43
50
|
rule, not decoration.
|
|
44
51
|
|
|
45
52
|
Every LC named here MUST be registered in .control/registry/components.yaml, and the registration
|
|
46
|
-
is checked WHEN THE
|
|
53
|
+
is checked WHEN THE SPEC CLOSES — `lc-registered` — not before a ticket is picked up. The old timing
|
|
47
54
|
demanded the answer at the moment the information was thinnest. -->
|
|
48
55
|
|
|
49
56
|
| LC | type | Responsibility |
|
|
@@ -51,15 +58,18 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
51
58
|
|
|
52
59
|
## Inherited Constraints · [guarded]
|
|
53
60
|
|
|
54
|
-
<!--
|
|
55
|
-
|
|
61
|
+
<!-- The AD-N ids from ARCHITECTURE-SPINE.md that reach this component, and how each lands HERE.
|
|
62
|
+
IDS ONLY — never the rule's text. `AD-` is a living rule edited in place, so a copy of its text
|
|
63
|
+
goes stale the moment the spine changes and nothing sees it. The rendered SDD
|
|
64
|
+
(`.how-rendered/<pc>/SDD-<pc>.md`) shows every invariant with its current text, pulled from the
|
|
65
|
+
spine, and marks which ones bind this component.
|
|
56
66
|
|
|
57
67
|
A local choice contradicting one is a conflict to surface through wdi-decision, never an override
|
|
58
68
|
made here. Below `guarded` this section is absent and the AD-N still binds — an invariant does not
|
|
59
69
|
stop holding because a document is thin. -->
|
|
60
70
|
|
|
61
|
-
| AD |
|
|
62
|
-
| --- | --- |
|
|
71
|
+
| AD | How it lands here |
|
|
72
|
+
| --- | --- |
|
|
63
73
|
|
|
64
74
|
## Failure Behaviour · [guarded]
|
|
65
75
|
|
|
@@ -139,8 +149,13 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
139
149
|
a third party. Lane order is fixed once for the project in
|
|
140
150
|
../../../project/codebase-conventions-guide.md; the No-op lane rule is REPEALED
|
|
141
151
|
|
|
142
|
-
supplements/ is REPEALED along with the ANX- concept it existed for.
|
|
152
|
+
supplements/ is REPEALED along with the ANX- concept it existed for.
|
|
153
|
+
|
|
154
|
+
THIS SECTION EXPLAINS THE CLASSIFICATION, NOT THE CONTENTS. It MUST NOT say which slots exist,
|
|
155
|
+
which are empty, or which are "not written yet" — that is `.control/structure-document.md`,
|
|
156
|
+
derived from the tree on disk. -->
|
|
143
157
|
|
|
144
158
|
## Open Items
|
|
145
159
|
|
|
146
|
-
<!--
|
|
160
|
+
<!-- A POINTER, not a copy: ids only. Whether an OQ- is still open is held by .control/questions/,
|
|
161
|
+
and restating its status here creates a second answer on a slower clock. -->
|
|
@@ -3,9 +3,8 @@ type: srs
|
|
|
3
3
|
component: '{pc}'
|
|
4
4
|
status: draft # draft · reviewed · locked · superseded
|
|
5
5
|
created: '{YYYY-MM-DD}'
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
reviewed: # V13. Filled only after wdi-review has actually run
|
|
6
|
+
satisfies: [] # FR / NFR ids this component carries, from requirements-<slug>.yaml
|
|
7
|
+
reviewed: # `review-trace`. Filled only after wdi-review has actually run
|
|
9
8
|
date: '' # '{YYYY-MM-DD}'
|
|
10
9
|
sha: '' # commit it was reviewed at; without the SHA, staleness cannot be measured
|
|
11
10
|
lenses: [] # the set risk_accepted names — NOT a fixed list
|
|
@@ -18,7 +17,7 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
18
17
|
left in English per the controlled vocabulary. -->
|
|
19
18
|
|
|
20
19
|
<!-- NOT a one-shot document. Despite the IEEE name, this SRS is LIVING: one per Product Component,
|
|
21
|
-
amended every
|
|
20
|
+
amended every spec, never signed off and frozen. -->
|
|
22
21
|
|
|
23
22
|
<!-- TWO SKILLS WRITE IT, AT TWO GATES, and every section below says which:
|
|
24
23
|
[G3] wdi-blueprint intent `catalog`. Exists at EVERY mode, including catalog
|
|
@@ -28,12 +27,21 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
28
27
|
what is absent there is 04-usecases/UC-<n>-<slug>.md — the step-by-step flows.
|
|
29
28
|
|
|
30
29
|
`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`.
|
|
30
|
+
edge-case-hunter at low and medium, structure + prose at high. It is NOT read off `mode`.
|
|
31
|
+
|
|
32
|
+
That set is what a FIRST review and a gate-opening review carry. A later re-review runs
|
|
33
|
+
structure + prose, covers only the delta since `sha`, and puts edge-case-hunter back when that
|
|
34
|
+
delta touches money, personal data, an irreversible action, or a third party. wdi-review owns it. -->
|
|
32
35
|
|
|
33
36
|
## Decision Summary · [G3]
|
|
34
37
|
|
|
35
38
|
<!-- <=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.
|
|
39
|
+
A summary that cannot be read inside the gate's time budget IS the finding.
|
|
40
|
+
|
|
41
|
+
NO DERIVED FACT. `mode`, `risk_accepted`, which `DEC-` bind this file — "none yet" included —
|
|
42
|
+
how many UC or FR there are, and which slots exist are all held elsewhere and MUST NOT be
|
|
43
|
+
stated here. `corpus-guide.md` § A derived fact has exactly one home says where each lives, and
|
|
44
|
+
that the remedy for one already written is DELETION, not correction. -->
|
|
37
45
|
|
|
38
46
|
## Why · [G3]
|
|
39
47
|
|
|
@@ -52,21 +60,17 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
52
60
|
|
|
53
61
|
## UC Catalogue · [G3]
|
|
54
62
|
|
|
55
|
-
|
|
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.
|
|
63
|
+
UC Catalogue — see `.control/registry/usecases.yaml`, rows where `component: {pc}`.
|
|
60
64
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
<!-- A POINTER, not a table. The catalogue's one home is `usecases.yaml`; this section used to carry a
|
|
66
|
+
second copy, and `uc-catalogue-matches` existed only to keep the two agreeing — it once caught 26
|
|
67
|
+
rows that had drifted. The rendered SRS (`.what-rendered/<pc>/SRS-<pc>.md`) and the blueprint
|
|
68
|
+
both show the table, from the registry.
|
|
64
69
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
| UC-{n} | {a sentence a user would say} | {from the Actor Register} | {FR-n} | no |
|
|
70
|
+
What is still decided HERE, when wdi-blueprint lands the rows: a title MUST be a sentence a user
|
|
71
|
+
would say, never a system term — G3 asks this as a starred question. `critical` is yes ONLY when
|
|
72
|
+
the use case touches money, personal data, or an irreversible action; more than a third marked
|
|
73
|
+
means the definition was misapplied. -->
|
|
70
74
|
|
|
71
75
|
## Constraints · [G3]
|
|
72
76
|
|
|
@@ -108,12 +112,21 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
108
112
|
|
|
109
113
|
<!-- The gate questions as they apply to THIS component, answered yes / no / change. The full list
|
|
110
114
|
lives in delivery-flow-guide.md and MUST NOT be copied here. At mode: catalog only the starred
|
|
111
|
-
questions are asked.
|
|
115
|
+
questions are asked.
|
|
116
|
+
|
|
117
|
+
An answer MUST NOT carry a COUNT of registry rows — "all four use cases are covered" is a claim
|
|
118
|
+
about usecases.yaml that a fifth UC falsifies without touching this file. Answer the question. -->
|
|
112
119
|
|
|
113
120
|
## Design Reference · [G3]
|
|
114
121
|
|
|
115
|
-
<!-- One line pointing at the paired SDD, plus any AD-N
|
|
116
|
-
|
|
122
|
+
<!-- One line pointing at the paired SDD, plus any AD-N that binds this component — the spine's
|
|
123
|
+
`binds:` is authored, not derived, so an AD-N citation belongs here.
|
|
124
|
+
|
|
125
|
+
APPLIED `DEC-` DO NOT. They are derived from `touches:` and live in .control/generated/decisions.md;
|
|
126
|
+
point at it. A line saying "no applied DEC- binds this component yet" is the worst version — true
|
|
127
|
+
the day it is written, silently false forever after, and it looks like diligence.
|
|
128
|
+
|
|
129
|
+
Nothing else: solution shape MUST NOT appear in this document — no framework, no table, no
|
|
117
130
|
endpoint, no class, no queue, no file path. -->
|
|
118
131
|
|
|
119
132
|
---
|
|
@@ -141,9 +154,17 @@ reviewed: # V13. Filled only after wdi-review has actually run
|
|
|
141
154
|
05-scenarios/ SCN-<nn>-<slug>.md, long branches hanging off one UC. From mode: deep only
|
|
142
155
|
|
|
143
156
|
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.
|
|
157
|
+
PRD and this document cites them by id. The second existed for the ANX- concept, which is gone.
|
|
158
|
+
|
|
159
|
+
THIS SECTION EXPLAINS THE SHAPE, NOT THE CONTENTS. It MUST NOT say which slots exist, which are
|
|
160
|
+
empty, or which are "not written yet". That is `.control/structure-document.md`, derived from the
|
|
161
|
+
tree on disk. One real SDD claimed four of its five slots unwritten while one of them held 223
|
|
162
|
+
lines. -->
|
|
145
163
|
|
|
146
164
|
## Open Items
|
|
147
165
|
|
|
148
|
-
<!--
|
|
149
|
-
|
|
166
|
+
<!-- A POINTER, not a copy. Ids only, and the id is enough: whether an OQ- is still open is held by
|
|
167
|
+
.control/questions/, so restating its status here creates a second answer on a slower clock.
|
|
168
|
+
|
|
169
|
+
An assumption left here with no id is the failure wdi-question exists to prevent. An id listed
|
|
170
|
+
here that has been answered for weeks is the failure this rule exists to prevent. -->
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
type: uc
|
|
3
3
|
id: UC-{NN} # allocated from .control/registry/usecases.yaml
|
|
4
4
|
component: '{pc}'
|
|
5
|
-
satisfies: [] # FR ids —
|
|
5
|
+
satisfies: [] # FR ids — `fr-has-uc` checks every FR has at least one UC
|
|
6
6
|
critical: false # true ONLY when it touches money, personal data, or an irreversible
|
|
7
7
|
# action. Nothing else — the two elastic criteria are repealed
|
|
8
8
|
created: '{YYYY-MM-DD}'
|