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.
- package/bin/wdi-method.js +17 -0
- package/kit/.constitution/method/README.md +5 -3
- package/kit/.constitution/method/document/architecture-guide.md +209 -209
- package/kit/.constitution/method/document/corpus-guide.md +2 -2
- package/kit/.constitution/method/document/sdd-guide.md +3 -2
- package/kit/.constitution/method/document/templates/architecture-spine.md +100 -100
- package/kit/.constitution/method/document/templates/inventory.md +2 -2
- package/kit/.constitution/method/document/templates/sdd.md +1 -1
- package/kit/.constitution/method/document/templates/srs.md +149 -149
- package/kit/.constitution/method/document/templates/uc.md +69 -69
- package/kit/.constitution/method/scripts/inventory.py +99 -293
- package/kit/.constitution/method/scripts/validate.py +1676 -1648
- package/kit/.constitution/method/why/portability.md +8 -1
- package/kit/.constitution/project/README.md +8 -0
- package/kit/.constitution/project/inventory-readers.py +85 -0
- package/kit/skills/wdi-blueprint/SKILL.md +203 -203
- package/kit/skills/wdi-build/SKILL.md +4 -2
- package/kit/skills/wdi-init/SKILL.md +38 -4
- package/kit/skills/wdi-log/SKILL.md +107 -107
- package/kit/skills/wdi-report/SKILL.md +6 -6
- package/kit-overlay/README.md +5 -3
- package/kit-overlay/portability.md +8 -1
- package/package.json +1 -1
- package/scaffold/.control/registry/decisions.yaml +3 -3
|
@@ -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.
|
|
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
|
|
35
|
-
|
|
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.
|
|
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.
|
|
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. -->
|