wdi-method 0.4.6 → 0.5.2
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 +271 -252
- package/bin/wdi-method.js +1221 -1030
- package/kit/.constitution/method/README.md +73 -169
- package/kit/.constitution/{constitution.md → method/constitution.md} +10 -56
- package/kit/.constitution/{document → method/document}/architecture-guide.md +209 -209
- package/kit/.constitution/{document → method/document}/corpus-guide.md +4 -4
- package/kit/.constitution/{document → method/document}/delivery-flow-guide.md +338 -338
- package/kit/.constitution/{document → method/document}/sdd-guide.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/cross-cutting.md +2 -2
- package/kit/.constitution/{document → method/document}/templates/design-system.md +67 -67
- package/kit/.constitution/{document → method/document}/templates/inventory.md +69 -69
- package/kit/.constitution/{document → method/document}/templates/sdd.md +1 -1
- package/kit/.constitution/{document → method/document}/templates/structure-codebase.md +129 -129
- package/kit/.constitution/{document → method/document}/templates/structure-document.md +90 -90
- package/kit/.constitution/{language-guide.md → method/language-guide.md} +2 -2
- package/kit/.constitution/{method-glossary.md → method/method-glossary.md} +169 -169
- package/kit/.constitution/{repo-guide.md → method/repo-guide.md} +120 -97
- package/kit/.constitution/method/scripts/__pycache__/validate.cpython-314.pyc +0 -0
- package/kit/.constitution/{scripts → method/scripts}/timeline.py +2 -2
- package/kit/.constitution/{scripts → method/scripts}/validate.py +1648 -1581
- package/kit/.constitution/{structure-guide.md → method/structure-guide.md} +3 -3
- package/kit/.constitution/method/why/README.md +169 -0
- package/kit/.constitution/method/{artifact-map.md → why/artifact-map.md} +5 -5
- package/kit/.constitution/method/{portability.md → why/portability.md} +6 -6
- package/kit/.constitution/method/{rationale.md → why/rationale.md} +5 -5
- package/kit/.constitution/project/README.md +68 -68
- package/kit/.constitution/project/constitution.md +64 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
- package/kit/assets/bmad-custom/bmad-architecture.toml +33 -33
- package/kit/assets/bmad-custom/bmad-code-review.toml +13 -13
- package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -28
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -42
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
- package/kit/assets/bmad-custom/bmad-spec.toml +16 -16
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -19
- package/kit/skills/wdi-blueprint/SKILL.md +203 -203
- package/kit/skills/wdi-build/SKILL.md +244 -244
- package/kit/skills/wdi-component/SKILL.md +1 -1
- package/kit/skills/wdi-help/SKILL.md +98 -98
- package/kit/skills/wdi-init/SKILL.md +1 -1
- package/kit/skills/wdi-problem/SKILL.md +90 -90
- package/kit/skills/wdi-product/SKILL.md +127 -127
- package/kit/skills/wdi-reconcile/SKILL.md +2 -2
- package/kit/skills/wdi-report/SKILL.md +205 -205
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -193
- package/kit/skills/wdi-ux/SKILL.md +145 -145
- package/kit-overlay/AGENTS.md +215 -212
- package/kit-overlay/README.md +24 -17
- package/kit-overlay/constitution.md +10 -56
- package/kit-overlay/portability.md +6 -6
- package/kit-overlay/repo-guide.md +120 -97
- package/package.json +4 -2
- package/scaffold/.control/questions/blocking.md +1 -1
- package/kit/.constitution/README.md +0 -66
- /package/kit/.constitution/{document → method/document}/bmad-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/bmad-skill-register.md +0 -0
- /package/kit/.constitution/{document → method/document}/brief-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/decision-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/prd-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/srs-guide.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/addendum.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/architecture-spine.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/brief.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/c4.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/contract.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/decision.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/flow.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/integration.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/lifecycle.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/meeting.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/model.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/oq.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/prd.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/questions.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rtr.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/rules.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/scn.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/srs.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/uc.md +0 -0
- /package/kit/.constitution/{document → method/document}/templates/ux.md +0 -0
- /package/kit/.constitution/{document → method/document}/ux-guide.md +0 -0
- /package/kit/.constitution/{scripts → method/scripts}/inventory.py +0 -0
- /package/kit/.constitution/{codebase/brownfield-guide.md → project/codebase-brownfield-guide.md} +0 -0
- /package/kit/.constitution/{codebase/conventions-guide.md → project/codebase-conventions-guide.md} +0 -0
- /package/kit/.constitution/{codebase/stack-guide.md → project/codebase-stack-guide.md} +0 -0
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
# Class B — no path knob at all.
|
|
2
|
-
#
|
|
3
|
-
# bmad-correct-course's own default customize.toml only opens activation_steps, persistent_facts,
|
|
4
|
-
# and on_complete. There is no *_output_path, so its proposal still lands at
|
|
5
|
-
# _bmad-output/planning-artifacts/sprint-change-proposal-{date}.md and MUST be landed again by
|
|
6
|
-
# wdi-decision as a `DEC-` of type course-correction. The `SCP-` code and the
|
|
7
|
-
# .control/supplements/ folder have ALREADY BEEN RETIRED — a course correction is a decision, and
|
|
8
|
-
# there is no second code naming the same thing.
|
|
9
|
-
#
|
|
10
|
-
# The main danger is not the path but this skill's habit of editing directly: its default is
|
|
11
|
-
# "direct updates to epics, stories, or PRD sections". In this repo that MUST NOT happen —
|
|
12
|
-
# document changes go through wdi-decision intent `apply`, and wave content through wdi-build.
|
|
13
|
-
# That is why the prohibition is installed as a persistent fact, held from activation, rather than
|
|
14
|
-
# as end-of-run polish.
|
|
15
|
-
|
|
16
|
-
[workflow]
|
|
17
|
-
|
|
18
|
-
persistent_facts = [
|
|
19
|
-
"file:{project-root}/.constitution/document/delivery-flow-guide.md",
|
|
20
|
-
"file:{project-root}/.constitution/document/corpus-guide.md",
|
|
21
|
-
"This skill MUST NOT write or edit anything in {project-root}/.what/ or {project-root}/.how/. Its output is a proposal; document changes are made by wdi-decision intent `apply` once the `DEC-` is accepted, and wave content by wdi-build.",
|
|
22
|
-
"epics.md and sprint-status.yaml are NOT used in this repo — we run the stories route. Neither MUST be read as a source, and neither MUST be created.",
|
|
23
|
-
"The impact scan MUST cover .what/_prd/, .what/<pc>/, .how/_platform/, .how/<pc>/, SPEC.md, .control/registry/waves.yaml, and the story files. .what/<pc>/ is unknown to this skill entirely, and without this it goes stale silently.",
|
|
24
|
-
"Every plan change that is expensive to reverse MUST become a `DEC-` through wdi-decision, not a paragraph inside the proposal. A course correction is itself one `DEC-` of type course-correction.",
|
|
25
|
-
"A correction that voids more than 30% of a wave's stories MUST NOT be handled as a patch. Say so, and let the wave be re-cut through wdi-build.",
|
|
26
|
-
]
|
|
27
|
-
|
|
28
|
-
on_complete = "Hand the landing to wdi-decision: the whole proposal becomes one `DEC-` of type course-correction, and its run folder MUST NOT be deleted. MUST NOT land itself, MUST NOT edit .what/ or .how/."
|
|
1
|
+
# Class B — no path knob at all.
|
|
2
|
+
#
|
|
3
|
+
# bmad-correct-course's own default customize.toml only opens activation_steps, persistent_facts,
|
|
4
|
+
# and on_complete. There is no *_output_path, so its proposal still lands at
|
|
5
|
+
# _bmad-output/planning-artifacts/sprint-change-proposal-{date}.md and MUST be landed again by
|
|
6
|
+
# wdi-decision as a `DEC-` of type course-correction. The `SCP-` code and the
|
|
7
|
+
# .control/supplements/ folder have ALREADY BEEN RETIRED — a course correction is a decision, and
|
|
8
|
+
# there is no second code naming the same thing.
|
|
9
|
+
#
|
|
10
|
+
# The main danger is not the path but this skill's habit of editing directly: its default is
|
|
11
|
+
# "direct updates to epics, stories, or PRD sections". In this repo that MUST NOT happen —
|
|
12
|
+
# document changes go through wdi-decision intent `apply`, and wave content through wdi-build.
|
|
13
|
+
# That is why the prohibition is installed as a persistent fact, held from activation, rather than
|
|
14
|
+
# as end-of-run polish.
|
|
15
|
+
|
|
16
|
+
[workflow]
|
|
17
|
+
|
|
18
|
+
persistent_facts = [
|
|
19
|
+
"file:{project-root}/.constitution/method/document/delivery-flow-guide.md",
|
|
20
|
+
"file:{project-root}/.constitution/method/document/corpus-guide.md",
|
|
21
|
+
"This skill MUST NOT write or edit anything in {project-root}/.what/ or {project-root}/.how/. Its output is a proposal; document changes are made by wdi-decision intent `apply` once the `DEC-` is accepted, and wave content by wdi-build.",
|
|
22
|
+
"epics.md and sprint-status.yaml are NOT used in this repo — we run the stories route. Neither MUST be read as a source, and neither MUST be created.",
|
|
23
|
+
"The impact scan MUST cover .what/_prd/, .what/<pc>/, .how/_platform/, .how/<pc>/, SPEC.md, .control/registry/waves.yaml, and the story files. .what/<pc>/ is unknown to this skill entirely, and without this it goes stale silently.",
|
|
24
|
+
"Every plan change that is expensive to reverse MUST become a `DEC-` through wdi-decision, not a paragraph inside the proposal. A course correction is itself one `DEC-` of type course-correction.",
|
|
25
|
+
"A correction that voids more than 30% of a wave's stories MUST NOT be handled as a patch. Say so, and let the wave be re-cut through wdi-build.",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
on_complete = "Hand the landing to wdi-decision: the whole proposal becomes one `DEC-` of type course-correction, and its run folder MUST NOT be deleted. MUST NOT land itself, MUST NOT edit .what/ or .how/."
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
# Class A — writes straight into the corpus.
|
|
2
|
-
#
|
|
3
|
-
# One PRD per **initiative / functional area**, not per release. It is a living document:
|
|
4
|
-
# a behaviour change goes through intent Update on the same PRD, never a new one.
|
|
5
|
-
# A release is carried by the registry through target_release, not by the folder name.
|
|
6
|
-
#
|
|
7
|
-
# run_folder_pattern MUST be filled with the initiative slug and MUST NOT use {date}.
|
|
8
|
-
# When a new initiative opens, TWO lines MUST change together:
|
|
9
|
-
# 1. run_folder_pattern -> the next initiative's slug
|
|
10
|
-
# 2. --path .../prd-<slug>.md -> the next initiative's memlog
|
|
11
|
-
# Changing only one produces a new PRD stuck to the old memlog.
|
|
12
|
-
#
|
|
13
|
-
# The default value below is deliberately unusable as-is — it MUST be replaced at runbook
|
|
14
|
-
# step 4. A PRD landing in a folder literally named FILL-initiative-slug is the sign that step
|
|
15
|
-
# was skipped.
|
|
16
|
-
|
|
17
|
-
[workflow]
|
|
18
|
-
|
|
19
|
-
prd_template = "{project-root}/.constitution/document/templates/prd.md"
|
|
20
|
-
prd_output_path = "{project-root}/.what/_prd"
|
|
21
|
-
run_folder_pattern = "FILL-initiative-slug"
|
|
22
|
-
|
|
23
|
-
doc_standards = ["file:{project-root}/.constitution/document/prd-guide.md"]
|
|
24
|
-
|
|
25
|
-
# The facts below deliberately repeat part of prd-guide.md. The reason is timing: doc_standards
|
|
26
|
-
# only activates at the Polish step, while Create-versus-Update intent detection happens at
|
|
27
|
-
# activation. prd-guide.md remains authoritative; where the two disagree, the guide wins and the
|
|
28
|
-
# line here MUST be fixed.
|
|
29
|
-
persistent_facts = [
|
|
30
|
-
"file:{project-root}/.control/registry/requirements.yaml",
|
|
31
|
-
"file:{project-root}/.constitution/document/prd-guide.md",
|
|
32
|
-
|
|
33
|
-
"FR-N, NFR-N, UJ-N, and CAP-N MUST be allocated from requirements.yaml and MUST NOT restart from 1. The next initiative's PRD continues the previous PRD's sequence — the sequence is global, one product, one sequence.",
|
|
34
|
-
|
|
35
|
-
"This PRD is a living document. A behaviour change, a closely related feature addition, or a promise correction MUST go through intent Update on the same PRD. A new PRD MUST NOT be created just because the release changed; it is created only when the functional area is genuinely different and reads badly if merged.",
|
|
36
|
-
|
|
37
|
-
"Every intent Update run MUST add exactly one row to the PRD's Revision History table: the date, what changed in language an outside reader understands, and why. That table is for the reader; the memlog is for the audit. Neither MUST substitute for the other.",
|
|
38
|
-
|
|
39
|
-
"A release MUST NOT be stated through the PRD's folder name or its title. It is carried by the target_release field in requirements.yaml and waves.yaml. Naming a release number inside the PRD's prose MAY be done as context, but the registry remains what binds.",
|
|
40
|
-
|
|
41
|
-
"Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/prd-FILL-initiative-slug.md. The slug MUST match run_folder_pattern above, and both lines MUST change together when the initiative changes. --workspace MUST NOT be used.",
|
|
42
|
-
]
|
|
1
|
+
# Class A — writes straight into the corpus.
|
|
2
|
+
#
|
|
3
|
+
# One PRD per **initiative / functional area**, not per release. It is a living document:
|
|
4
|
+
# a behaviour change goes through intent Update on the same PRD, never a new one.
|
|
5
|
+
# A release is carried by the registry through target_release, not by the folder name.
|
|
6
|
+
#
|
|
7
|
+
# run_folder_pattern MUST be filled with the initiative slug and MUST NOT use {date}.
|
|
8
|
+
# When a new initiative opens, TWO lines MUST change together:
|
|
9
|
+
# 1. run_folder_pattern -> the next initiative's slug
|
|
10
|
+
# 2. --path .../prd-<slug>.md -> the next initiative's memlog
|
|
11
|
+
# Changing only one produces a new PRD stuck to the old memlog.
|
|
12
|
+
#
|
|
13
|
+
# The default value below is deliberately unusable as-is — it MUST be replaced at runbook
|
|
14
|
+
# step 4. A PRD landing in a folder literally named FILL-initiative-slug is the sign that step
|
|
15
|
+
# was skipped.
|
|
16
|
+
|
|
17
|
+
[workflow]
|
|
18
|
+
|
|
19
|
+
prd_template = "{project-root}/.constitution/method/document/templates/prd.md"
|
|
20
|
+
prd_output_path = "{project-root}/.what/_prd"
|
|
21
|
+
run_folder_pattern = "FILL-initiative-slug"
|
|
22
|
+
|
|
23
|
+
doc_standards = ["file:{project-root}/.constitution/method/document/prd-guide.md"]
|
|
24
|
+
|
|
25
|
+
# The facts below deliberately repeat part of prd-guide.md. The reason is timing: doc_standards
|
|
26
|
+
# only activates at the Polish step, while Create-versus-Update intent detection happens at
|
|
27
|
+
# activation. prd-guide.md remains authoritative; where the two disagree, the guide wins and the
|
|
28
|
+
# line here MUST be fixed.
|
|
29
|
+
persistent_facts = [
|
|
30
|
+
"file:{project-root}/.control/registry/requirements.yaml",
|
|
31
|
+
"file:{project-root}/.constitution/method/document/prd-guide.md",
|
|
32
|
+
|
|
33
|
+
"FR-N, NFR-N, UJ-N, and CAP-N MUST be allocated from requirements.yaml and MUST NOT restart from 1. The next initiative's PRD continues the previous PRD's sequence — the sequence is global, one product, one sequence.",
|
|
34
|
+
|
|
35
|
+
"This PRD is a living document. A behaviour change, a closely related feature addition, or a promise correction MUST go through intent Update on the same PRD. A new PRD MUST NOT be created just because the release changed; it is created only when the functional area is genuinely different and reads badly if merged.",
|
|
36
|
+
|
|
37
|
+
"Every intent Update run MUST add exactly one row to the PRD's Revision History table: the date, what changed in language an outside reader understands, and why. That table is for the reader; the memlog is for the audit. Neither MUST substitute for the other.",
|
|
38
|
+
|
|
39
|
+
"A release MUST NOT be stated through the PRD's folder name or its title. It is carried by the target_release field in requirements.yaml and waves.yaml. Naming a release number inside the PRD's prose MAY be done as context, but the registry remains what binds.",
|
|
40
|
+
|
|
41
|
+
"Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/prd-FILL-initiative-slug.md. The slug MUST match run_folder_pattern above, and both lines MUST change together when the initiative changes. --workspace MUST NOT be used.",
|
|
42
|
+
]
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# Class A — writes straight into the corpus.
|
|
2
|
-
# Singleton: one product, one brief, across releases. A second product MUST get its own repo.
|
|
3
|
-
#
|
|
4
|
-
# Called through `wdi-problem`, never directly. The override here decides where the artifact
|
|
5
|
-
# lands; the wrapper skill checks its content.
|
|
6
|
-
|
|
7
|
-
[workflow]
|
|
8
|
-
|
|
9
|
-
brief_template = "{project-root}/.constitution/document/templates/brief.md"
|
|
10
|
-
|
|
11
|
-
# run_folder_pattern MUST be constant — no {project_name}, no {date}.
|
|
12
|
-
# That is what forces the singleton: every run lands in the same folder, so a second run is
|
|
13
|
-
# detected as a resume/update, not a sibling folder.
|
|
14
|
-
# The result is .what/_product-brief/brief.md and .what/_product-brief/addendum.md; both
|
|
15
|
-
# filenames are hardcoded in SKILL.md and cannot be configured.
|
|
16
|
-
brief_output_path = "{project-root}/.what"
|
|
17
|
-
run_folder_pattern = "_product-brief"
|
|
18
|
-
|
|
19
|
-
# Append-only against the default `skill:bmad-review lenses=structure,prose`.
|
|
20
|
-
doc_standards = ["file:{project-root}/.constitution/document/brief-guide.md"]
|
|
21
|
-
|
|
22
|
-
persistent_facts = [
|
|
23
|
-
"Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/brief.md. --workspace MUST NOT be used; it would place a .memlog.md inside .what/, and no memlog is allowed to live in the corpus.",
|
|
24
|
-
|
|
25
|
-
"The brief template opens with permission to drop a section that does not fit. That permission MUST NOT apply to the eight mandatory sections: The Problem, Who This Serves, Goals, Success Criteria, Scope In, Scope Out, Constraints, Assumptions — plus Prerequisites. Other template sections MAY be dropped.",
|
|
26
|
-
|
|
27
|
-
"Goals MUST be numbered BG-1, BG-2, and so on. They MUST NOT be numbered G1, G2 — G1 through G5 are the names of this method's five gates, and BG is the first link in the BG -> CAP -> FR/NFR -> UC -> Story -> Test traceability chain.",
|
|
28
|
-
|
|
29
|
-
"The Who This Serves table MUST carry exactly one row marked primary, and MUST cover every stakeholder including one who never opens the product.",
|
|
30
|
-
|
|
31
|
-
"The brief MUST NOT carry a Product Component list, and MUST NOT fill product_components or logical_components. The slicing is born at the TAIL of G2 through wdi-init intent `component`, read from the brief plus every PRD.",
|
|
32
|
-
|
|
33
|
-
"Output from research, brainstorming, forge, and PRFAQ MUST stay in _bmad-output/. It MUST NOT be folded into the brief and MUST NOT be promoted into .what/; a `DEC-` or PRD references it by path. That run folder MUST NOT be deleted — intent Update reads it back as original inputs.",
|
|
34
|
-
]
|
|
1
|
+
# Class A — writes straight into the corpus.
|
|
2
|
+
# Singleton: one product, one brief, across releases. A second product MUST get its own repo.
|
|
3
|
+
#
|
|
4
|
+
# Called through `wdi-problem`, never directly. The override here decides where the artifact
|
|
5
|
+
# lands; the wrapper skill checks its content.
|
|
6
|
+
|
|
7
|
+
[workflow]
|
|
8
|
+
|
|
9
|
+
brief_template = "{project-root}/.constitution/method/document/templates/brief.md"
|
|
10
|
+
|
|
11
|
+
# run_folder_pattern MUST be constant — no {project_name}, no {date}.
|
|
12
|
+
# That is what forces the singleton: every run lands in the same folder, so a second run is
|
|
13
|
+
# detected as a resume/update, not a sibling folder.
|
|
14
|
+
# The result is .what/_product-brief/brief.md and .what/_product-brief/addendum.md; both
|
|
15
|
+
# filenames are hardcoded in SKILL.md and cannot be configured.
|
|
16
|
+
brief_output_path = "{project-root}/.what"
|
|
17
|
+
run_folder_pattern = "_product-brief"
|
|
18
|
+
|
|
19
|
+
# Append-only against the default `skill:bmad-review lenses=structure,prose`.
|
|
20
|
+
doc_standards = ["file:{project-root}/.constitution/method/document/brief-guide.md"]
|
|
21
|
+
|
|
22
|
+
persistent_facts = [
|
|
23
|
+
"Every memlog.py call — init, append, set, and the read on resume or intent Update — MUST use --path {project-root}/.control/memlog/brief.md. --workspace MUST NOT be used; it would place a .memlog.md inside .what/, and no memlog is allowed to live in the corpus.",
|
|
24
|
+
|
|
25
|
+
"The brief template opens with permission to drop a section that does not fit. That permission MUST NOT apply to the eight mandatory sections: The Problem, Who This Serves, Goals, Success Criteria, Scope In, Scope Out, Constraints, Assumptions — plus Prerequisites. Other template sections MAY be dropped.",
|
|
26
|
+
|
|
27
|
+
"Goals MUST be numbered BG-1, BG-2, and so on. They MUST NOT be numbered G1, G2 — G1 through G5 are the names of this method's five gates, and BG is the first link in the BG -> CAP -> FR/NFR -> UC -> Story -> Test traceability chain.",
|
|
28
|
+
|
|
29
|
+
"The Who This Serves table MUST carry exactly one row marked primary, and MUST cover every stakeholder including one who never opens the product.",
|
|
30
|
+
|
|
31
|
+
"The brief MUST NOT carry a Product Component list, and MUST NOT fill product_components or logical_components. The slicing is born at the TAIL of G2 through wdi-init intent `component`, read from the brief plus every PRD.",
|
|
32
|
+
|
|
33
|
+
"Output from research, brainstorming, forge, and PRFAQ MUST stay in _bmad-output/. It MUST NOT be folded into the brief and MUST NOT be promoted into .what/; a `DEC-` or PRD references it by path. That run folder MUST NOT be deleted — intent Update reads it back as original inputs.",
|
|
34
|
+
]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# Runs in stories mode: reads SPEC.md + stories.yaml + stories/<id>-*.md, not
|
|
2
|
-
# sprint-status.yaml. Its output is RETROSPECTIVE.md inside the spec folder — which is ephemeral.
|
|
3
|
-
|
|
4
|
-
[workflow]
|
|
5
|
-
|
|
6
|
-
persistent_facts = [
|
|
7
|
-
"This repo runs in stories mode. RETROSPECTIVE.md MUST be archived as RTR-<wave> in .control/reports/ by wdi-build before the wave closes. It is REQUIRED on a wave `L` and advisory on `S` and `M` — V19 is tied to wave size, not to `mode`, and skipping it MUST be stated rather than left silent.",
|
|
8
|
-
"Every row of the distillation table in .constitution/document/bmad-guide.md MUST be complete before a wave is declared closed.",
|
|
9
|
-
]
|
|
1
|
+
# Runs in stories mode: reads SPEC.md + stories.yaml + stories/<id>-*.md, not
|
|
2
|
+
# sprint-status.yaml. Its output is RETROSPECTIVE.md inside the spec folder — which is ephemeral.
|
|
3
|
+
|
|
4
|
+
[workflow]
|
|
5
|
+
|
|
6
|
+
persistent_facts = [
|
|
7
|
+
"This repo runs in stories mode. RETROSPECTIVE.md MUST be archived as RTR-<wave> in .control/reports/ by wdi-build before the wave closes. It is REQUIRED on a wave `L` and advisory on `S` and `M` — V19 is tied to wave size, not to `mode`, and skipping it MUST be stated rather than left silent.",
|
|
8
|
+
"Every row of the distillation table in .constitution/method/document/bmad-guide.md MUST be complete before a wave is declared closed.",
|
|
9
|
+
]
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Class C — one run per (wave x Product Component), spent once G5 closes.
|
|
2
|
-
#
|
|
3
|
-
# The slug decides whether a spec is ephemeral or lives on: the same slug lands in the same
|
|
4
|
-
# folder and keeps its capability ID. A slug per-PC alone would turn SPEC.md into a living
|
|
5
|
-
# document per PC — a direct rival to the SRS. The slug w<N>-<pc> keeps the spec ephemeral, and
|
|
6
|
-
# CAP-N stays sound because it is allocated from the registry, not from BMad's own internal
|
|
7
|
-
# mechanism.
|
|
8
|
-
|
|
9
|
-
[workflow]
|
|
10
|
-
|
|
11
|
-
persistent_facts = [
|
|
12
|
-
"A spec slug MUST take the shape w<N>-<pc>, one run per (wave x Product Component) pair.",
|
|
13
|
-
"SPEC.md MUST NOT carry anything that did not come from the SRS, SDD, or PRD. A new finding MUST be landed in the corpus by the skill that owns that layer — the ownership table in .constitution/document/corpus-guide.md — before the wave closes, never left sitting in the spec.",
|
|
14
|
-
"CAP-N MUST be allocated from {project-root}/.control/registry/requirements.yaml.",
|
|
15
|
-
"file:{project-root}/.control/product-glossary.md",
|
|
16
|
-
]
|
|
1
|
+
# Class C — one run per (wave x Product Component), spent once G5 closes.
|
|
2
|
+
#
|
|
3
|
+
# The slug decides whether a spec is ephemeral or lives on: the same slug lands in the same
|
|
4
|
+
# folder and keeps its capability ID. A slug per-PC alone would turn SPEC.md into a living
|
|
5
|
+
# document per PC — a direct rival to the SRS. The slug w<N>-<pc> keeps the spec ephemeral, and
|
|
6
|
+
# CAP-N stays sound because it is allocated from the registry, not from BMad's own internal
|
|
7
|
+
# mechanism.
|
|
8
|
+
|
|
9
|
+
[workflow]
|
|
10
|
+
|
|
11
|
+
persistent_facts = [
|
|
12
|
+
"A spec slug MUST take the shape w<N>-<pc>, one run per (wave x Product Component) pair.",
|
|
13
|
+
"SPEC.md MUST NOT carry anything that did not come from the SRS, SDD, or PRD. A new finding MUST be landed in the corpus by the skill that owns that layer — the ownership table in .constitution/method/document/corpus-guide.md — before the wave closes, never left sitting in the spec.",
|
|
14
|
+
"CAP-N MUST be allocated from {project-root}/.control/registry/requirements.yaml.",
|
|
15
|
+
"file:{project-root}/.control/product-glossary.md",
|
|
16
|
+
]
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# Class B — the path is configurable, per-PC granularity is not.
|
|
2
|
-
#
|
|
3
|
-
# bmad-ux only knows {project_name} and {date}, no {slug}, so it cannot land directly into
|
|
4
|
-
# .how/<pc>/. Its landing zone is made NEUTRAL in _bmad-output/ because its output splits across
|
|
5
|
-
# two layers: DESIGN.md belongs to .how/, EXPERIENCE.md belongs to .what/. Landing in either one
|
|
6
|
-
# first would be a layer violation that lives for the length of one run.
|
|
7
|
-
|
|
8
|
-
[workflow]
|
|
9
|
-
|
|
10
|
-
ux_output_path = "{project-root}/_bmad-output/ux"
|
|
11
|
-
run_folder_pattern = "ux"
|
|
12
|
-
|
|
13
|
-
doc_standards = ["file:{project-root}/.constitution/document/ux-guide.md"]
|
|
14
|
-
|
|
15
|
-
persistent_facts = [
|
|
16
|
-
"Every memlog.py call MUST use --path {project-root}/.control/memlog/ux.md. --workspace MUST NOT be used.",
|
|
17
|
-
]
|
|
18
|
-
|
|
19
|
-
on_complete = "Hand the landing to wdi-ux: DESIGN.md to .how/<pc>/01-ux/, tokens and base components to .how/_platform/design-system.md, EXPERIENCE.md to .what/<pc>/04-usecases/, every screen registered as an LC ui-screen in components.yaml. MUST NOT land itself."
|
|
1
|
+
# Class B — the path is configurable, per-PC granularity is not.
|
|
2
|
+
#
|
|
3
|
+
# bmad-ux only knows {project_name} and {date}, no {slug}, so it cannot land directly into
|
|
4
|
+
# .how/<pc>/. Its landing zone is made NEUTRAL in _bmad-output/ because its output splits across
|
|
5
|
+
# two layers: DESIGN.md belongs to .how/, EXPERIENCE.md belongs to .what/. Landing in either one
|
|
6
|
+
# first would be a layer violation that lives for the length of one run.
|
|
7
|
+
|
|
8
|
+
[workflow]
|
|
9
|
+
|
|
10
|
+
ux_output_path = "{project-root}/_bmad-output/ux"
|
|
11
|
+
run_folder_pattern = "ux"
|
|
12
|
+
|
|
13
|
+
doc_standards = ["file:{project-root}/.constitution/method/document/ux-guide.md"]
|
|
14
|
+
|
|
15
|
+
persistent_facts = [
|
|
16
|
+
"Every memlog.py call MUST use --path {project-root}/.control/memlog/ux.md. --workspace MUST NOT be used.",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
on_complete = "Hand the landing to wdi-ux: DESIGN.md to .how/<pc>/01-ux/, tokens and base components to .how/_platform/design-system.md, EXPERIENCE.md to .what/<pc>/04-usecases/, every screen registered as an LC ui-screen in components.yaml. MUST NOT land itself."
|