wdi-method 0.3.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/LICENSE +21 -0
- package/README.md +203 -0
- package/bin/wdi-method.js +906 -0
- package/kit/.constitution/README.md +66 -0
- package/kit/.constitution/codebase/brownfield-guide.md +18 -0
- package/kit/.constitution/codebase/conventions-guide.md +18 -0
- package/kit/.constitution/codebase/stack-guide.md +18 -0
- package/kit/.constitution/constitution.md +135 -0
- package/kit/.constitution/document/architecture-guide.md +209 -0
- package/kit/.constitution/document/bmad-guide.md +151 -0
- package/kit/.constitution/document/bmad-skill-register.md +71 -0
- package/kit/.constitution/document/brief-guide.md +94 -0
- package/kit/.constitution/document/corpus-guide.md +341 -0
- package/kit/.constitution/document/decision-guide.md +134 -0
- package/kit/.constitution/document/delivery-flow-guide.md +338 -0
- package/kit/.constitution/document/prd-guide.md +202 -0
- package/kit/.constitution/document/sdd-guide.md +206 -0
- package/kit/.constitution/document/srs-guide.md +147 -0
- package/kit/.constitution/document/templates/addendum.md +71 -0
- package/kit/.constitution/document/templates/architecture-spine.md +100 -0
- package/kit/.constitution/document/templates/brief.md +110 -0
- package/kit/.constitution/document/templates/c4.md +77 -0
- package/kit/.constitution/document/templates/contract.md +52 -0
- package/kit/.constitution/document/templates/cross-cutting.md +80 -0
- package/kit/.constitution/document/templates/decision.md +64 -0
- package/kit/.constitution/document/templates/design-system.md +67 -0
- package/kit/.constitution/document/templates/flow.md +51 -0
- package/kit/.constitution/document/templates/integration.md +69 -0
- package/kit/.constitution/document/templates/inventory.md +69 -0
- package/kit/.constitution/document/templates/lc.md +47 -0
- package/kit/.constitution/document/templates/lifecycle.md +52 -0
- package/kit/.constitution/document/templates/meeting.md +47 -0
- package/kit/.constitution/document/templates/model.md +55 -0
- package/kit/.constitution/document/templates/oq.md +45 -0
- package/kit/.constitution/document/templates/prd.md +226 -0
- package/kit/.constitution/document/templates/questions.md +75 -0
- package/kit/.constitution/document/templates/rtr.md +61 -0
- package/kit/.constitution/document/templates/rules.md +47 -0
- package/kit/.constitution/document/templates/scn.md +40 -0
- package/kit/.constitution/document/templates/sdd.md +146 -0
- package/kit/.constitution/document/templates/srs.md +149 -0
- package/kit/.constitution/document/templates/structure-codebase.md +129 -0
- package/kit/.constitution/document/templates/structure-document.md +90 -0
- package/kit/.constitution/document/templates/uc.md +69 -0
- package/kit/.constitution/document/templates/ux.md +77 -0
- package/kit/.constitution/document/ux-guide.md +99 -0
- package/kit/.constitution/language-guide.md +69 -0
- package/kit/.constitution/method/README.md +169 -0
- package/kit/.constitution/method/artifact-map.md +155 -0
- package/kit/.constitution/method/portability.md +91 -0
- package/kit/.constitution/method/rationale.md +246 -0
- package/kit/.constitution/method-glossary.md +169 -0
- package/kit/.constitution/project/README.md +68 -0
- package/kit/.constitution/repo-guide.md +97 -0
- package/kit/.constitution/scripts/inventory.py +527 -0
- package/kit/.constitution/scripts/timeline.py +665 -0
- package/kit/.constitution/scripts/validate.py +1579 -0
- package/kit/.constitution/structure-guide.md +202 -0
- package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -0
- package/kit/assets/bmad-custom/bmad-architecture.toml +31 -0
- package/kit/assets/bmad-custom/bmad-build-auto.toml +10 -0
- package/kit/assets/bmad-custom/bmad-build.toml +52 -0
- package/kit/assets/bmad-custom/bmad-code-review.toml +12 -0
- package/kit/assets/bmad-custom/bmad-correct-course.toml +27 -0
- package/kit/assets/bmad-custom/bmad-deep-recon.toml +11 -0
- package/kit/assets/bmad-custom/bmad-prd.toml +42 -0
- package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -0
- package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -0
- package/kit/assets/bmad-custom/bmad-spec.toml +15 -0
- package/kit/assets/bmad-custom/bmad-ux.toml +19 -0
- package/kit/assets/bmad-custom/config.toml +6 -0
- package/kit/skills/wdi-blueprint/SKILL.md +203 -0
- package/kit/skills/wdi-build/SKILL.md +244 -0
- package/kit/skills/wdi-component/SKILL.md +172 -0
- package/kit/skills/wdi-decision/.gitkeep +0 -0
- package/kit/skills/wdi-decision/SKILL.md +183 -0
- package/kit/skills/wdi-help/.gitkeep +0 -0
- package/kit/skills/wdi-help/SKILL.md +98 -0
- package/kit/skills/wdi-init/SKILL.md +149 -0
- package/kit/skills/wdi-log/SKILL.md +107 -0
- package/kit/skills/wdi-problem/SKILL.md +90 -0
- package/kit/skills/wdi-product/SKILL.md +127 -0
- package/kit/skills/wdi-question/.gitkeep +0 -0
- package/kit/skills/wdi-question/SKILL.md +88 -0
- package/kit/skills/wdi-reconcile/.gitkeep +0 -0
- package/kit/skills/wdi-reconcile/SKILL.md +146 -0
- package/kit/skills/wdi-report/SKILL.md +205 -0
- package/kit/skills/wdi-review/SKILL.md +118 -0
- package/kit/skills/wdi-systematic-debugging/SKILL.md +193 -0
- package/kit/skills/wdi-systematic-debugging/references/condition-based-waiting.md +115 -0
- package/kit/skills/wdi-systematic-debugging/references/defense-in-depth.md +122 -0
- package/kit/skills/wdi-systematic-debugging/references/find-polluter.sh +72 -0
- package/kit/skills/wdi-systematic-debugging/references/root-cause-tracing.md +169 -0
- package/kit/skills/wdi-ux/SKILL.md +145 -0
- package/kit-overlay/AGENTS.md +196 -0
- package/kit-overlay/README.md +66 -0
- package/kit-overlay/constitution.md +135 -0
- package/kit-overlay/portability.md +91 -0
- package/kit-overlay/repo-guide.md +97 -0
- package/lib/agents-block.mjs +52 -0
- package/lib/identity.mjs +65 -0
- package/package.json +37 -0
- package/scaffold/.control/decisions/.gitkeep +0 -0
- package/scaffold/.control/generated/.gitkeep +2 -0
- package/scaffold/.control/meetings/.gitkeep +0 -0
- package/scaffold/.control/memlog/.gitkeep +0 -0
- package/scaffold/.control/product-glossary.md +21 -0
- package/scaffold/.control/project-non-technical-log.md +23 -0
- package/scaffold/.control/questions/answered.md +11 -0
- package/scaffold/.control/questions/assumptions.md +15 -0
- package/scaffold/.control/questions/blocking.md +21 -0
- package/scaffold/.control/questions/external.md +11 -0
- package/scaffold/.control/registry/components.yaml +21 -0
- package/scaffold/.control/registry/decisions.yaml +6 -0
- package/scaffold/.control/registry/defects.yaml +3 -0
- package/scaffold/.control/registry/index.yaml +46 -0
- package/scaffold/.control/registry/requirements.yaml +15 -0
- package/scaffold/.control/registry/risks.yaml +5 -0
- package/scaffold/.control/registry/usecases.yaml +6 -0
- package/scaffold/.control/registry/waves.yaml +5 -0
- package/scaffold/.control/structure-codebase.md +19 -0
- package/scaffold/.control/structure-document.md +25 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: Accepted
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Structure Guide
|
|
6
|
+
|
|
7
|
+
**Loaded when:** writing, reading, or refreshing a structure map — `.control/structure-codebase.md`
|
|
8
|
+
or `.control/structure-document.md`.
|
|
9
|
+
|
|
10
|
+
## Two maps
|
|
11
|
+
|
|
12
|
+
| Map | Describes | Derived | Refreshed by |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| `.control/structure-codebase.md` | The code tree: what runs, what it is built from, where new code goes | `wdi-init` intent `structure` | `wdi-init` intent `structure` |
|
|
15
|
+
| `.control/structure-document.md` | The corpus tree: which layers and slots actually carry content today | `wdi-init` intent `structure` | `wdi-init` intent `structure` |
|
|
16
|
+
|
|
17
|
+
Both ship as empty skeletons, so the slot is taken from day one. The first run replaces a skeleton
|
|
18
|
+
**wholesale** rather than filling it in; a half-derived map that still carries skeleton headings
|
|
19
|
+
cannot be told apart from a stale one. The intent MAY be run read-only — derive, report the drift,
|
|
20
|
+
write nothing — and that is the right mode when the caller is unsure.
|
|
21
|
+
|
|
22
|
+
**The maps live in `.control/`, this guide lives here, and the split is deliberate.** A guide states
|
|
23
|
+
a rule that holds before the thing exists; a map states what is currently true. That is the same
|
|
24
|
+
line the kit already draws between `decision-guide.md` and `.control/decisions/`, and between
|
|
25
|
+
`corpus-guide.md` and `.control/registry/`. The two MUST NOT be merged, and a map MUST NOT be moved
|
|
26
|
+
into `.constitution/` because it happens to be read alongside these guides.
|
|
27
|
+
|
|
28
|
+
Consequence worth knowing: `.control/` is `{project_knowledge}`, so both maps are visible to the
|
|
29
|
+
BMad skills that read it. That is intended — a builder that knows where code goes is the point.
|
|
30
|
+
|
|
31
|
+
## Descriptive, not prescriptive — the line that MUST hold
|
|
32
|
+
|
|
33
|
+
This is the whole reason the maps can exist without colliding with the guides already in
|
|
34
|
+
`.constitution/`.
|
|
35
|
+
|
|
36
|
+
| Question | Answered by |
|
|
37
|
+
|---|---|
|
|
38
|
+
| Where does this live, and what is already there? | **structure map** |
|
|
39
|
+
| Which layer owns it, and what is it named? | `document/corpus-guide.md` |
|
|
40
|
+
| How is code named, and which patterns apply? | `codebase/conventions-guide.md` |
|
|
41
|
+
| What is it built with, and on which version? | `codebase/stack-guide.md` |
|
|
42
|
+
| Which legacy shapes are ratified rather than fixed? | `codebase/brownfield-guide.md` |
|
|
43
|
+
|
|
44
|
+
- A structure map MUST NOT restate a naming rule, a layer rule, or a version. It MUST reference the
|
|
45
|
+
guide that owns it.
|
|
46
|
+
- A guide MUST NOT carry a directory tree. A tree in a guide goes stale silently, because nothing
|
|
47
|
+
refreshes it.
|
|
48
|
+
- Where a map and a guide disagree, the **guide** wins on the rule and the **map** wins on the fact.
|
|
49
|
+
The disagreement itself MUST be reported, not smoothed over — one of the two is lying.
|
|
50
|
+
|
|
51
|
+
## What a map MUST contain
|
|
52
|
+
|
|
53
|
+
1. A **Verified** line: date plus the commit the tree was read at.
|
|
54
|
+
2. A **top-level tree**: every base folder in the root, complete, one annotated line each.
|
|
55
|
+
3. A **section per unit**, each carrying its folder convention as an annotated tree.
|
|
56
|
+
4. **Key files marked `★` inline**, inside those trees.
|
|
57
|
+
|
|
58
|
+
Nothing else. A map that also explains how the system works has become an architecture document,
|
|
59
|
+
and `.how/` already owns that.
|
|
60
|
+
|
|
61
|
+
The form is an **annotated tree**, not prose and not a file table. A tree shows convention and
|
|
62
|
+
location in the same glance, and a `★` next to a filename is read at the moment it matters. Both
|
|
63
|
+
maps MUST close with the one-line legend for `★`.
|
|
64
|
+
|
|
65
|
+
## How units are split
|
|
66
|
+
|
|
67
|
+
Each map splits its sections along the axis its reader is lost on, and the two axes differ:
|
|
68
|
+
|
|
69
|
+
| Map | Sections | Split by |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| `structure-codebase.md` | Containers · Libraries · the non-unit sections below | **Deployability** |
|
|
72
|
+
| `structure-document.md` | One per layer that carries content | **Layer** |
|
|
73
|
+
|
|
74
|
+
For the codebase map the distinction is exact and MUST NOT be softened:
|
|
75
|
+
|
|
76
|
+
- A **container** runs its own code or stores its own data, and can be replaced without rebuilding
|
|
77
|
+
another one. `architecture-guide.md` owns the two-question test; this map only applies it. The term
|
|
78
|
+
MUST NOT be renamed to "application", "service", or "app" here — a synonym for a term that already
|
|
79
|
+
has a glossary entry is drift, and `wdi-reconcile` hunts for it. It does not mean a Docker image.
|
|
80
|
+
- A **library** is an includable artifact — compiled into or imported by something else, never run
|
|
81
|
+
on its own. A library with an entry point is a container wearing the wrong label, and a library
|
|
82
|
+
MUST NOT appear at C4 L2.
|
|
83
|
+
- Anything that is neither is not a unit. It stays a line in the top-level tree, or in one of the
|
|
84
|
+
non-unit sections below.
|
|
85
|
+
- A unit that stops being separately deployable MUST move sections, not keep its old heading.
|
|
86
|
+
|
|
87
|
+
### The registry match is one-directional
|
|
88
|
+
|
|
89
|
+
**Every container heading MUST be a container registered in `components.yaml`. Not every registered
|
|
90
|
+
container gets a heading.** Reading it both ways makes the rule unsatisfiable: a `built: false` container
|
|
91
|
+
— a database, a web server — MUST be registered, because it runs inside the boundary and carries NFRs,
|
|
92
|
+
and MUST NOT get a heading, because no code of ours lives there. So the check is **heading = exactly the
|
|
93
|
+
`built: true` containers**, and V25 runs it. `c4-l2-containers.md` still owns the list itself.
|
|
94
|
+
|
|
95
|
+
### Sections that are not units
|
|
96
|
+
|
|
97
|
+
Containers and Libraries are the unit sections. A map MAY also carry sections for what is not a unit at
|
|
98
|
+
all, and these MUST NOT be dressed up as containers to earn a place:
|
|
99
|
+
|
|
100
|
+
| Section | Holds |
|
|
101
|
+
|---|---|
|
|
102
|
+
| **Tooling** | Scripts run by a human or by CI, never deployed |
|
|
103
|
+
| **Generated** | Output, named with its generator — that is what makes a hand edit visible |
|
|
104
|
+
| **Unclaimed** | A folder that exists with no stated purpose. A finding, not a category |
|
|
105
|
+
|
|
106
|
+
The list is open, the test is not: a section that is neither a unit nor one of these MUST say in one line
|
|
107
|
+
why it exists.
|
|
108
|
+
|
|
109
|
+
## Base folders — complete
|
|
110
|
+
|
|
111
|
+
- MUST list every base folder that exists, including the ones that look uninteresting. An unlisted
|
|
112
|
+
folder is the one people misuse, because nothing told them what it was for.
|
|
113
|
+
- MUST descend only until directories stop carrying distinct roles. A shape that repeats MUST be
|
|
114
|
+
described once, generically, rather than enumerated per instance.
|
|
115
|
+
- MUST mark a folder that exists but has no stated purpose as unclaimed instead of inventing one.
|
|
116
|
+
An unclaimed folder is a finding, and `wdi-init` MUST report it.
|
|
117
|
+
- MUST NOT list a folder that the architecture implies but no file has created yet.
|
|
118
|
+
|
|
119
|
+
## Key files — selective
|
|
120
|
+
|
|
121
|
+
A file earns a `★` only if it passes one of these:
|
|
122
|
+
|
|
123
|
+
- It is an entry point, a composition root, or where dependencies get wired.
|
|
124
|
+
- It is the single place a rule is enforced for the whole tree below it.
|
|
125
|
+
- An agent asked to change behaviour in that folder would have to open it first.
|
|
126
|
+
- Removing it would change what the folder *is*, not merely what it does.
|
|
127
|
+
|
|
128
|
+
Everything else MUST be left out. Completeness at file level is what killed every source-tree
|
|
129
|
+
document that came before: it is impossible to keep true, so it stops being read.
|
|
130
|
+
|
|
131
|
+
A folder with no key file MUST still appear in the tree. Folders are complete; files are not.
|
|
132
|
+
|
|
133
|
+
## Freshness — this is a living document
|
|
134
|
+
|
|
135
|
+
- The **Verified** line MUST carry a date and a commit SHA. Without the SHA, staleness cannot be
|
|
136
|
+
measured, only felt.
|
|
137
|
+
- A map MUST be refreshed when a base folder is born or removed, when a key file moves or is
|
|
138
|
+
renamed, when a project or container is added, or when a key file's role changes.
|
|
139
|
+
- **Wave close** carries this hook — it left the story-closing checklist along with four other items,
|
|
140
|
+
because a structural change is visible at the end of a wave and guessed at the end of a story.
|
|
141
|
+
- A map MUST NOT be edited by hand. `wdi-init` intent `structure` re-derives it from the actual tree;
|
|
142
|
+
a hand edit records what someone remembers, and memory is exactly what the map exists to replace.
|
|
143
|
+
- A map whose **Verified** commit is no longer an ancestor of `HEAD` SHOULD be treated as stale, and
|
|
144
|
+
MUST be refreshed before a gate that reads it.
|
|
145
|
+
|
|
146
|
+
## `structure-codebase.md` — specifics
|
|
147
|
+
|
|
148
|
+
- Born as a skeleton listing only what exists. On an empty repo that is almost nothing, and that is
|
|
149
|
+
correct: writing the tree the spine implies means guessing.
|
|
150
|
+
- Each unit's tree MUST show its **folder convention** — including the shape a feature repeats,
|
|
151
|
+
written once with a placeholder, never enumerated per feature.
|
|
152
|
+
- Each container MUST mark its entry point and its composition root with `★`. A container whose
|
|
153
|
+
tree has neither has not been read properly.
|
|
154
|
+
- Each container SHOULD carry one **Flow** line: the authoritative call direction through its
|
|
155
|
+
folders. A builder who gets that wrong writes code that works and is still wrong. MUST NOT be
|
|
156
|
+
invented where none exists.
|
|
157
|
+
- Each library MUST state who consumes it. A library nobody consumes is a finding.
|
|
158
|
+
- Generated output MUST be named with its generator, even when it looks like ordinary source — that
|
|
159
|
+
is what makes a hand edit visible.
|
|
160
|
+
- MUST NOT carry framework versions, and MUST NOT repeat the suffix list from
|
|
161
|
+
`conventions-guide.md`. Where new code goes is answered by the convention tree itself; how it is
|
|
162
|
+
named is not this file's question.
|
|
163
|
+
|
|
164
|
+
## `structure-document.md` — specifics
|
|
165
|
+
|
|
166
|
+
- The four layers and the workspace are fixed by `corpus-guide.md`. This map records which of them
|
|
167
|
+
actually carry content: which Product Component folders exist, which slots have been split out of
|
|
168
|
+
a kernel, which registries are populated.
|
|
169
|
+
- MUST reference the placement test rather than restating it, and MUST NOT explain slot numbering —
|
|
170
|
+
`corpus-guide.md` owns both.
|
|
171
|
+
- MUST list every Product Component folder that exists in `.what/` or `.how/`, and MUST flag any
|
|
172
|
+
that exists on one side only. A PC with an SRS and no SDD is drift, not layout.
|
|
173
|
+
- Product Component folders MUST live in the table, and MUST NOT also be expanded in the per-layer
|
|
174
|
+
trees. Maintaining the same fact in two places is how one of them starts lying.
|
|
175
|
+
|
|
176
|
+
## File names MUST survive every OS the repo is cloned on
|
|
177
|
+
|
|
178
|
+
This is the one structural rule that is not about where a file sits but about whether it can exist at
|
|
179
|
+
all. It applies to every file any skill in this method creates — corpus documents, generated tables,
|
|
180
|
+
spec folders, and code alike.
|
|
181
|
+
|
|
182
|
+
| Rule | Detail |
|
|
183
|
+
|---|---|
|
|
184
|
+
| Forbidden characters | `\ / : * ? " < > \|` MUST NOT appear in a file or folder name |
|
|
185
|
+
| Substitution | A forbidden character MUST be replaced by `-` or dropped, and the substitution MUST be consistent across the repo |
|
|
186
|
+
| Trailing characters | A name MUST NOT end in a space or a `.` — Windows strips both silently, and the read path then no longer matches the write path |
|
|
187
|
+
| Length | A single path segment SHOULD stay under 255 characters |
|
|
188
|
+
|
|
189
|
+
The failure this prevents is not cosmetic. A repository whose branches carry `:` in a filename
|
|
190
|
+
**cannot be checked out on Windows at all** — `git checkout` fails outright, and recovering the
|
|
191
|
+
content takes per-blob extraction plus a rename map. That has happened in a sibling repo, which is
|
|
192
|
+
why this is stated as a rule rather than left to taste.
|
|
193
|
+
|
|
194
|
+
A name derived from something else — an endpoint path, a URL, a title — MUST be sanitised at the
|
|
195
|
+
moment it becomes a filename, and the mapping SHOULD be recorded when it is not reversible by
|
|
196
|
+
inspection.
|
|
197
|
+
|
|
198
|
+
## Writing rules
|
|
199
|
+
|
|
200
|
+
Inherited from `.constitution/`: normative keyword on every instruction, concise, no duplication,
|
|
201
|
+
English, SHOULD stay under 200 lines. A map that outgrows 200 lines is marking files that never
|
|
202
|
+
earned a `★` — cut those, never the folders.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Skill ini tidak punya key `persistent_facts`, jadi aturan rumah tidak bisa disuntikkan lewat
|
|
2
|
+
# jalur biasa. `preferences` adalah tuas setaranya: kalimat literal yang dipatuhi perefine tiap
|
|
3
|
+
# sesi.
|
|
4
|
+
#
|
|
5
|
+
# Hanya aturan rumah yang mengubah CARA sebuah kritik mendarat yang pantas di sini — metode
|
|
6
|
+
# lengkapnya tetap di .constitution/document/delivery-flow-guide.md.
|
|
7
|
+
|
|
8
|
+
[workflow]
|
|
9
|
+
|
|
10
|
+
preferences = [
|
|
11
|
+
"Honor AGENTS.md dan .constitution/document/ sebagai aturan yang sedang berlaku di repo ini.",
|
|
12
|
+
"Nilai artefak G1-G4 terutama dari Decision Summary-nya: satu halaman, bahasa bisnis, tanpa jargon yang belum punya entri Glossary. Ringkasan yang tidak bisa dibaca habis dalam time budget gate-nya adalah temuan itu sendiri.",
|
|
13
|
+
"Kata normatif hanya lima — MUST, MUST NOT, SHOULD, SHOULD NOT, MAY — dalam bahasa Inggris dan huruf besar; prosanya tetap Bahasa Indonesia. Tandai sebagai cacat: penanda imperatif lain dalam bahasa apa pun, istilah metode yang diterjemahkan, dan karangan padanan Indonesia untuk istilah teknis yang lazim ditulis dalam bahasa Inggris.",
|
|
14
|
+
"Pushback MUST menyebut keputusan yang sedang dipertaruhkan dan ongkosnya bila salah, bukan sekadar menilai tulisannya.",
|
|
15
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Kelas A — altitude initiative saja.
|
|
2
|
+
# Spine memuat invariant yang mencegah unit yang dibangun terpisah jadi divergen.
|
|
3
|
+
# Struktur (stack, tree, data shape) diperlakukan sebagai seed, bukan kontrak.
|
|
4
|
+
#
|
|
5
|
+
# Urutan mengikat: spine lebih dulu, bmad-spec membacanya sebagai companion — bukan sebaliknya.
|
|
6
|
+
|
|
7
|
+
[workflow]
|
|
8
|
+
|
|
9
|
+
spine_template = "{project-root}/.constitution/document/templates/architecture-spine.md"
|
|
10
|
+
spine_output_path = "{project-root}/.how/_platform"
|
|
11
|
+
run_folder_pattern = "architecture"
|
|
12
|
+
|
|
13
|
+
# architecture-guide.md MUST NOT dipasang sebagai doc_standards, meski itu tempat lazimnya
|
|
14
|
+
# bagi guide dokumen. Skill ini mengecualikan spine dari doc_standards secara sengaja —
|
|
15
|
+
# customize.toml bawaannya menyebut "never to the spine", dan langkah 5 SKILL.md mengulanginya:
|
|
16
|
+
# "apply {workflow.doc_standards} polish to that prose only, never to the spine".
|
|
17
|
+
# Dipasang di sana, aturan AD-N cuma memoles deck dan C4 — dokumen yang tidak punya AD-N —
|
|
18
|
+
# sementara spine ditulis tanpa guide-nya. Karena itu ia jadi fakta yang dipegang sejak
|
|
19
|
+
# aktivasi, bukan poles di akhir.
|
|
20
|
+
#
|
|
21
|
+
# doc_standards sengaja tidak diisi. Default BMad `skill:bmad-review lenses=structure,prose`
|
|
22
|
+
# tetap berlaku untuk rendering, dan array ini append — mengosongkannya tidak mencabut default.
|
|
23
|
+
#
|
|
24
|
+
# Akibatnya spine tidak punya review otomatis. `bmad-review` atasnya MUST dipanggil manual
|
|
25
|
+
# sebelum G4 — lihat tabel "Siapa memanggil bmad-review" di 05-gates.md.
|
|
26
|
+
|
|
27
|
+
persistent_facts = [
|
|
28
|
+
"file:{project-root}/.constitution/document/architecture-guide.md",
|
|
29
|
+
"file:{project-root}/.constitution/document/decision-guide.md",
|
|
30
|
+
"Seluruh panggilan memlog.py MUST memakai --path {project-root}/.control/memlog/spine.md. --workspace MUST NOT dipakai.",
|
|
31
|
+
]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Satu iterasi loop tanpa interaksi manusia. Dispatch lewat {spec_folder} + {story_id}.
|
|
2
|
+
|
|
3
|
+
[workflow]
|
|
4
|
+
|
|
5
|
+
persistent_facts = [
|
|
6
|
+
"Repo ini berjalan di stories mode. sprint-status.yaml tidak ada dan MUST NOT dibuat.",
|
|
7
|
+
"Disiplin test-first mengikat: test MUST gagal lebih dulu, dan MUST gagal karena alasan yang diharapkan.",
|
|
8
|
+
"Worker MUST NOT mengubah apa pun di luar story yang didispatch. Perubahan yang dinilai perlu di luar itu MUST dinyatakan di hasil akhir, tidak pernah dilakukan diam-diam.",
|
|
9
|
+
"Saat test atau build gagal dan sebabnya belum diketahui, wdi-systematic-debugging MUST dijalankan sebelum perbaikan apa pun diusulkan. Percobaan perbaikan ketiga yang gagal adalah tanda untuk berhenti dan melapor, bukan untuk mencoba keempat.",
|
|
10
|
+
]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# G5 — satu-satunya pelaksana, dan wdi-build yang mendispatch-nya. Pelaksana MUST NOT merakit
|
|
2
|
+
# rantai sendiri.
|
|
3
|
+
#
|
|
4
|
+
# Memasok disiplin test-first yang bmad-build tidak punya: ia mengaudit test SETELAH implementasi
|
|
5
|
+
# (Matrix Test Audit di step-03), tetapi tidak pernah mewajibkan sebuah test gagal lebih dulu.
|
|
6
|
+
#
|
|
7
|
+
# Aturan merge: string mengganti, list menambah, tabel merge per key.
|
|
8
|
+
# .claude/skills/bmad-build/customize.toml MUST NOT diedit — ia ditimpa tiap update.
|
|
9
|
+
|
|
10
|
+
[workflow]
|
|
11
|
+
|
|
12
|
+
# Mengganti handoff step-03 bawaan. Semua yang dibawa bawaan tetap ada (subagent tanpa konteks
|
|
13
|
+
# percakapan, spec sebagai satu-satunya sumber kebenaran, memuat berkas `context:`, laporan
|
|
14
|
+
# penutup); siklus test-first inilah yang ditambahkan override ini.
|
|
15
|
+
#
|
|
16
|
+
# Sengaja memuat METODE saja. Pernyataan ulang tujuan, daftar berkas, acceptance criteria, dan
|
|
17
|
+
# aturan gaya rumah TIDAK masuk dispatch — semuanya sudah ada di spec, dan step-03 melarang
|
|
18
|
+
# menggandakannya di sini.
|
|
19
|
+
|
|
20
|
+
implementation_handoff = """
|
|
21
|
+
Launch a subagent with no prior conversation context, with this prompt:
|
|
22
|
+
|
|
23
|
+
> Read {spec_file} fully and implement it — the spec is the sole source of truth. Load every file listed in its frontmatter `context:` before you start.
|
|
24
|
+
>
|
|
25
|
+
> Work test-first, one task at a time:
|
|
26
|
+
>
|
|
27
|
+
> 1. Write the smallest test that expresses the next unmet acceptance criterion.
|
|
28
|
+
> 2. Run it. Confirm it fails, and confirm it fails for the reason you expect — a test that errors on a typo or a missing import has proven nothing.
|
|
29
|
+
> 3. Write the minimum code that makes it pass. No extra scope, no "while I'm here" refactoring.
|
|
30
|
+
> 4. Run the test plus the surrounding suite. Both must be green before you start the next task.
|
|
31
|
+
>
|
|
32
|
+
> If a criterion genuinely cannot be expressed as a test — pure configuration, a docs change, a visual-only tweak — say so explicitly in your report and state how you verified it instead. Never invent a test that asserts nothing in order to satisfy the cycle, and never write the implementation first and the test afterwards to make it look followed.
|
|
33
|
+
>
|
|
34
|
+
> When done, report what you changed, how you verified it, and anything left incomplete or risky. Include the actual command output for the final test run — a claim of green without the output does not count as verification.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
persistent_facts = [
|
|
38
|
+
"Repo ini berjalan di stories mode. sprint-status.yaml tidak ada dan MUST NOT dibuat; status story tinggal di frontmatter story file.",
|
|
39
|
+
"Satu Logical Component MUST terdaftar di components.yaml sebelum story yang menyentuhnya dikerjakan.",
|
|
40
|
+
"Saat ada yang rusak dan sebabnya belum diketahui, wdi-systematic-debugging MUST dijalankan sebelum perbaikan apa pun diusulkan.",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
# Tidak dioverride, dan itu disengaja:
|
|
44
|
+
#
|
|
45
|
+
# - review_layers — tiga layer bawaan (blind-hunter, edge-case-hunter, verification-gap) plus
|
|
46
|
+
# Review Panel dua keluarga CLI yang dijalankan bmad-code-review sesudahnya sudah menutup
|
|
47
|
+
# kebutuhan review repo ini. Menambah layer keempat memakan token tanpa menutup celah.
|
|
48
|
+
#
|
|
49
|
+
# - on_complete — pembaruan registry setelah story selesai adalah tugas wdi-build dan skill pemilik
|
|
50
|
+
# lapisannya,
|
|
51
|
+
# bukan bmad-build. Menaruhnya di sini membuat dua penulis untuk satu berkas.
|
|
52
|
+
# Checklist penutup story ada di 05-gates.md.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Review Panel: dua peninjau dari dua keluarga CLI berbeda, dan tidak boleh dari keluarga yang
|
|
2
|
+
# menjalankan implementasinya.
|
|
3
|
+
#
|
|
4
|
+
# PERINGATAN: lensa adversarial dan edge-case di sini dibaca dari salinan bundel review-prompts/,
|
|
5
|
+
# BUKAN dari skill bmad-review. Override pada bmad-review tidak akan terlihat di jalur ini.
|
|
6
|
+
|
|
7
|
+
[workflow]
|
|
8
|
+
|
|
9
|
+
persistent_facts = [
|
|
10
|
+
"file:{project-root}/.constitution/codebase/conventions-guide.md",
|
|
11
|
+
"Temuan yang berulang lintas story MUST dicatat lewat bmad-project-context intent record, bukan diperbaiki diam-diam tiap kali muncul.",
|
|
12
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Kelas B — tidak ada knob path sama sekali.
|
|
2
|
+
#
|
|
3
|
+
# customize.toml bawaan bmad-correct-course hanya membuka activation_steps, persistent_facts, dan
|
|
4
|
+
# on_complete. Tidak ada *_output_path, jadi proposalnya tetap mendarat di
|
|
5
|
+
# _bmad-output/planning-artifacts/sprint-change-proposal-{date}.md dan MUST didaratkan ulang oleh
|
|
6
|
+
# wdi-decision sebagai `DEC-` bertipe course-correction. Kode `SCP-` dan folder
|
|
7
|
+
# .control/supplements/ SUDAH DICABUT — koreksi arah adalah keputusan, dan tidak ada kode kedua yang
|
|
8
|
+
# menamai hal yang sama.
|
|
9
|
+
#
|
|
10
|
+
# Bahaya utamanya bukan path, melainkan kebiasaan skill ini menyunting langsung: default-nya
|
|
11
|
+
# "direct updates to epics, stories, or PRD sections". Di repo ini itu MUST NOT terjadi — perubahan
|
|
12
|
+
# dokumen lewat wdi-decision intent `apply`, isi wave lewat wdi-build. Karena itu larangannya
|
|
13
|
+
# dipasang sebagai persistent_facts, yang dipegang sejak aktivasi, bukan sebagai poles di akhir.
|
|
14
|
+
|
|
15
|
+
[workflow]
|
|
16
|
+
|
|
17
|
+
persistent_facts = [
|
|
18
|
+
"file:{project-root}/.constitution/document/delivery-flow-guide.md",
|
|
19
|
+
"file:{project-root}/.constitution/document/corpus-guide.md",
|
|
20
|
+
"Skill ini MUST NOT menulis atau menyunting apa pun di {project-root}/.what/ maupun {project-root}/.how/. Keluarannya adalah proposal; perubahan dokumen dikerjakan wdi-decision intent `apply` setelah `DEC-`-nya accepted, dan isi wave oleh wdi-build.",
|
|
21
|
+
"epics.md dan sprint-status.yaml TIDAK dipakai di repo ini — kita menjalankan stories route. Keduanya MUST NOT dibaca sebagai sumber, dan MUST NOT dibuat.",
|
|
22
|
+
"Pemindaian impak MUST mencakup .what/_prd/, .what/<pc>/, .how/_platform/, .how/<pc>/, SPEC.md, .control/registry/waves.yaml, dan berkas story. .what/<pc>/ tidak dikenal skill ini sama sekali dan tanpa ini akan basi diam-diam.",
|
|
23
|
+
"Setiap perubahan rencana yang mahal dibalik MUST menjadi `DEC-` lewat wdi-decision, bukan paragraf di dalam proposal. Koreksi arah sendiri adalah satu `DEC-` bertipe course-correction.",
|
|
24
|
+
"Sebuah koreksi yang membatalkan lebih dari 30% story sebuah wave MUST NOT ditangani sebagai tambalan. Katakan begitu, dan biarkan wave-nya dipotong ulang lewat wdi-build.",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
on_complete = "Serahkan pendaratan ke wdi-decision: seluruh proposal jadi satu `DEC-` bertipe course-correction, dan folder run-nya MUST NOT dihapus. MUST NOT menempatkan sendiri, MUST NOT menyunting .what/ atau .how/."
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Skill ini dikirim dengan `persistent_facts = []`, jadi tidak seperti 41 skill lain ia tidak
|
|
2
|
+
# memungut konteks proyek sendiri. Berkas ini menutup celah itu; tanpanya riset menjelang G1 berjalan
|
|
3
|
+
# tanpa kosakata dan aturan repo, dan hasilnya memakai istilah yang tidak ada di Glossary.
|
|
4
|
+
|
|
5
|
+
[workflow]
|
|
6
|
+
|
|
7
|
+
persistent_facts = [
|
|
8
|
+
"file:{project-root}/.control/product-glossary.md",
|
|
9
|
+
"Laporan riset mendarat di _bmad-output/ dan tinggal di sana selamanya. Ia MUST NOT dipromosikan ke .what/ dan MUST NOT dilebur ke brief maupun PRD; `DEC-` dan PRD merujuknya lewat path. Folder run-nya MUST NOT dihapus — intent Update membacanya kembali sebagai original inputs.",
|
|
10
|
+
"Istilah domain MUST memakai entri Glossary apa adanya. Istilah baru yang muncul dari riset MUST diusulkan sebagai entri Glossary, bukan dipakai diam-diam.",
|
|
11
|
+
]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Kelas A — menulis langsung ke korpus.
|
|
2
|
+
#
|
|
3
|
+
# Satu PRD per **inisiatif / area fungsi**, bukan per rilis. Ia living document:
|
|
4
|
+
# perubahan perilaku masuk lewat intent Update ke PRD yang sama, bukan PRD baru.
|
|
5
|
+
# Rilis dibawa registry lewat target_release, bukan oleh nama folder.
|
|
6
|
+
#
|
|
7
|
+
# run_folder_pattern MUST diisi slug inisiatif dan MUST NOT memakai {date}.
|
|
8
|
+
# Saat inisiatif baru dibuka, DUA baris MUST diubah bersamaan:
|
|
9
|
+
# 1. run_folder_pattern -> slug inisiatif berikutnya
|
|
10
|
+
# 2. --path .../prd-<slug>.md -> memlog inisiatif berikutnya
|
|
11
|
+
# Mengubah salah satu saja menghasilkan PRD baru yang menempel pada memlog lama.
|
|
12
|
+
#
|
|
13
|
+
# Nilai bawaan di bawah sengaja tidak bisa dipakai apa adanya — ia MUST diganti
|
|
14
|
+
# di langkah 4 runbook. PRD yang mendarat di folder bernama ISI-slug-inisiatif
|
|
15
|
+
# adalah tanda langkah itu terlewat.
|
|
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 = "ISI-slug-inisiatif"
|
|
22
|
+
|
|
23
|
+
doc_standards = ["file:{project-root}/.constitution/document/prd-guide.md"]
|
|
24
|
+
|
|
25
|
+
# Fakta di bawah sengaja mengulang sebagian prd-guide.md. Sebabnya waktu: doc_standards baru
|
|
26
|
+
# menyala di langkah Polish, sedangkan deteksi intent Create-versus-Update terjadi di aktivasi.
|
|
27
|
+
# Yang otoritatif tetap prd-guide.md; kalau keduanya berselisih, guide yang menang dan baris di
|
|
28
|
+
# sini MUST diperbaiki.
|
|
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, dan CAP-N MUST dialokasikan dari requirements.yaml dan MUST NOT dimulai ulang dari 1. PRD inisiatif berikutnya melanjutkan deret PRD sebelumnya — deretnya global, satu produk satu deret.",
|
|
34
|
+
|
|
35
|
+
"PRD ini living document. Perubahan perilaku, penambahan fitur yang erat kaitannya, maupun koreksi janji MUST masuk lewat intent Update ke PRD yang sama. PRD baru MUST NOT dibuat hanya karena rilisnya berganti; ia dibuat hanya saat area fungsinya benar-benar berbeda dan tidak enak dibaca kalau digabung.",
|
|
36
|
+
|
|
37
|
+
"Tiap run intent Update MUST menambah tepat satu baris di tabel Revision History PRD: tanggal, apa yang berubah dalam bahasa pembaca luar, dan sebabnya. Tabel itu untuk pembaca; memlog untuk audit. Keduanya MUST NOT saling menggantikan.",
|
|
38
|
+
|
|
39
|
+
"Rilis MUST NOT dinyatakan lewat nama folder PRD maupun judulnya. Ia dibawa field target_release di requirements.yaml dan waves.yaml. Menyebut nomor rilis di dalam prosa PRD MAY dilakukan sebagai konteks, tetapi yang mengikat tetap registry.",
|
|
40
|
+
|
|
41
|
+
"Seluruh panggilan memlog.py — init, append, set, dan pembacaan saat resume atau intent Update — MUST memakai --path {project-root}/.control/memlog/prd-ISI-slug-inisiatif.md. Slug-nya MUST sama dengan run_folder_pattern di atas, dan kedua baris MUST diubah bersamaan saat inisiatif berganti. --workspace MUST NOT dipakai.",
|
|
42
|
+
]
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Kelas A — menulis langsung ke korpus.
|
|
2
|
+
# Singleton: satu produk, satu brief, lintas rilis. Produk kedua MUST dapat repo sendiri.
|
|
3
|
+
#
|
|
4
|
+
# Dipanggil lewat `wdi-problem`, bukan langsung. Override di sini yang menentukan
|
|
5
|
+
# ke mana artefaknya mendarat; skill wrapper yang memeriksa isinya.
|
|
6
|
+
|
|
7
|
+
[workflow]
|
|
8
|
+
|
|
9
|
+
brief_template = "{project-root}/.constitution/document/templates/brief.md"
|
|
10
|
+
|
|
11
|
+
# run_folder_pattern MUST konstan — tanpa {project_name} dan tanpa {date}.
|
|
12
|
+
# Itu yang memaksa singleton: tiap run jatuh ke folder yang sama, jadi run kedua
|
|
13
|
+
# terdeteksi sebagai resume/update, bukan folder sebelah.
|
|
14
|
+
# Hasilnya .what/_product-brief/brief.md dan .what/_product-brief/addendum.md;
|
|
15
|
+
# kedua nama berkas itu di-hardcode di SKILL.md dan tidak bisa diatur.
|
|
16
|
+
brief_output_path = "{project-root}/.what"
|
|
17
|
+
run_folder_pattern = "_product-brief"
|
|
18
|
+
|
|
19
|
+
# Append-only terhadap default `skill:bmad-review lenses=structure,prose`.
|
|
20
|
+
doc_standards = ["file:{project-root}/.constitution/document/brief-guide.md"]
|
|
21
|
+
|
|
22
|
+
persistent_facts = [
|
|
23
|
+
"Seluruh panggilan memlog.py — init, append, set, dan pembacaan saat resume atau intent Update — MUST memakai --path {project-root}/.control/memlog/brief.md. --workspace MUST NOT dipakai; ia akan menaruh .memlog.md di dalam .what/, dan tidak ada memlog yang boleh tinggal di korpus.",
|
|
24
|
+
|
|
25
|
+
"Template brief membuka dengan izin membuang section yang tidak layak. Izin itu MUST NOT diterapkan pada delapan section wajib: The Problem, Who This Serves, Goals, Success Criteria, Scope In, Scope Out, Constraints, Assumptions — beserta Prerequisites. Section template lain MAY dibuang.",
|
|
26
|
+
|
|
27
|
+
"Goals MUST bernomor BG-1, BG-2, dan seterusnya. MUST NOT bernomor G1, G2 — G1 sampai G5 adalah nama lima gate di metode ini, dan BG adalah mata rantai pertama rantai traceability BG -> CAP -> FR/NFR -> UC -> Story -> Test.",
|
|
28
|
+
|
|
29
|
+
"Tabel Who This Serves MUST memuat tepat satu baris bertanda primary, dan MUST memuat seluruh stakeholder termasuk yang tidak pernah membuka produknya.",
|
|
30
|
+
|
|
31
|
+
"Brief MUST NOT memuat daftar Product Component dan MUST NOT mengisi product_components maupun logical_components. Slicing lahir di EKOR G2 lewat wdi-init intent `component`, dibaca dari brief plus seluruh PRD.",
|
|
32
|
+
|
|
33
|
+
"Keluaran riset, brainstorming, forge, dan PRFAQ MUST tetap di _bmad-output/. Ia MUST NOT dilebur ke dalam brief dan MUST NOT dipromosikan ke .what/; `DEC-` atau PRD merujuknya lewat path. Folder run itu MUST NOT dihapus — intent Update membacanya kembali sebagai original inputs.",
|
|
34
|
+
]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Berjalan di stories mode: membaca SPEC.md + stories.yaml + stories/<id>-*.md, bukan
|
|
2
|
+
# sprint-status.yaml. Keluarannya RETROSPECTIVE.md di dalam folder spec — yang fana.
|
|
3
|
+
|
|
4
|
+
[workflow]
|
|
5
|
+
|
|
6
|
+
persistent_facts = [
|
|
7
|
+
"Repo ini berjalan di stories mode. RETROSPECTIVE.md MUST diarsipkan jadi RTR-<wave> di .control/reports/ oleh wdi-build sebelum wave ditutup. Ia WAJIB pada wave `L` dan advisory pada `S` dan `M` — V19 diikatkan ke ukuran wave, bukan ke `mode`, dan melewatinya MUST dinyatakan alih-alih didiamkan.",
|
|
8
|
+
"Seluruh baris tabel distilasi di .constitution/document/bmad-guide.md MUST tuntas sebelum wave dinyatakan tertutup.",
|
|
9
|
+
]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Kelas C — satu run per (wave x Product Component), habis setelah G5.
|
|
2
|
+
#
|
|
3
|
+
# Slug menentukan apakah spec fana atau hidup: slug yang sama mendarat di folder yang sama dan
|
|
4
|
+
# mempertahankan capability ID. Slug per-PC saja akan membuat SPEC.md jadi dokumen hidup per PC —
|
|
5
|
+
# saingan langsung SRS. Slug w<N>-<pc> menjaga spec tetap fana, dan CAP-N tetap terjaga karena
|
|
6
|
+
# dialokasikan dari registry, bukan dari mekanisme internal BMad.
|
|
7
|
+
|
|
8
|
+
[workflow]
|
|
9
|
+
|
|
10
|
+
persistent_facts = [
|
|
11
|
+
"Slug spec MUST berbentuk w<N>-<pc>, satu run per pasangan wave x Product Component.",
|
|
12
|
+
"SPEC.md MUST NOT memuat apa pun yang tidak berasal dari SRS, SDD, atau PRD. Temuan baru MUST didaratkan ke korpus oleh skill pemilik lapisannya — tabel kepemilikan di .constitution/document/corpus-guide.md — sebelum wave ditutup, bukan dibiarkan tinggal di spec.",
|
|
13
|
+
"CAP-N MUST dialokasikan dari {project-root}/.control/registry/requirements.yaml.",
|
|
14
|
+
"file:{project-root}/.control/product-glossary.md",
|
|
15
|
+
]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Kelas B — path bisa dikonfigurasi, granularitas per-PC tidak.
|
|
2
|
+
#
|
|
3
|
+
# bmad-ux hanya mengenal {project_name} dan {date}, tidak ada {slug}, jadi ia tidak bisa mendarat
|
|
4
|
+
# sendiri ke .how/<pc>/. Landing zone-nya dibuat NETRAL di _bmad-output/ karena keluarannya
|
|
5
|
+
# membelah dua lapisan: DESIGN.md milik .how/, EXPERIENCE.md milik .what/. Mendarat lebih dulu di
|
|
6
|
+
# salah satunya adalah pelanggaran lapisan yang hidup selama satu 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
|
+
"Seluruh panggilan memlog.py MUST memakai --path {project-root}/.control/memlog/ux.md. --workspace MUST NOT dipakai.",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
on_complete = "Serahkan pendaratan ke wdi-ux: DESIGN.md ke .how/<pc>/01-ux/, token dan komponen dasar ke .how/_platform/design-system.md, EXPERIENCE.md ke .what/<pc>/04-usecases/, tiap layar didaftarkan sebagai LC ui-screen di components.yaml. MUST NOT menempatkan sendiri."
|