wdi-method 0.4.3 → 0.4.6

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.
Files changed (37) hide show
  1. package/README.md +252 -222
  2. package/bin/wdi-method.js +1030 -1029
  3. package/kit/.constitution/document/delivery-flow-guide.md +1 -1
  4. package/kit/.constitution/document/templates/cross-cutting.md +4 -4
  5. package/kit/.constitution/document/templates/model.md +2 -2
  6. package/kit/.constitution/document/templates/questions.md +10 -9
  7. package/kit/.constitution/document/templates/srs.md +2 -2
  8. package/kit/.constitution/scripts/inventory.py +102 -100
  9. package/kit/.constitution/scripts/timeline.py +665 -665
  10. package/kit/.constitution/scripts/validate.py +314 -312
  11. package/kit/assets/bmad-custom/bmad-advanced-elicitation.toml +15 -15
  12. package/kit/assets/bmad-custom/bmad-architecture.toml +17 -15
  13. package/kit/assets/bmad-custom/bmad-build-auto.toml +5 -5
  14. package/kit/assets/bmad-custom/bmad-build.toml +52 -52
  15. package/kit/assets/bmad-custom/bmad-code-review.toml +6 -5
  16. package/kit/assets/bmad-custom/bmad-correct-course.toml +28 -27
  17. package/kit/assets/bmad-custom/bmad-deep-recon.toml +12 -11
  18. package/kit/assets/bmad-custom/bmad-prd.toml +22 -22
  19. package/kit/assets/bmad-custom/bmad-product-brief.toml +34 -34
  20. package/kit/assets/bmad-custom/bmad-retrospective.toml +9 -9
  21. package/kit/assets/bmad-custom/bmad-spec.toml +9 -8
  22. package/kit/assets/bmad-custom/bmad-ux.toml +7 -7
  23. package/kit/assets/bmad-custom/config.toml +3 -3
  24. package/kit/skills/wdi-report/SKILL.md +5 -5
  25. package/package.json +2 -2
  26. package/scaffold/.control/product-glossary.md +21 -21
  27. package/scaffold/.control/project-non-technical-log.md +23 -23
  28. package/scaffold/.control/questions/answered.md +11 -11
  29. package/scaffold/.control/questions/assumptions.md +15 -15
  30. package/scaffold/.control/questions/blocking.md +21 -21
  31. package/scaffold/.control/questions/external.md +11 -11
  32. package/scaffold/.control/registry/components.yaml +21 -21
  33. package/scaffold/.control/registry/defects.yaml +3 -3
  34. package/scaffold/.control/registry/index.yaml +46 -46
  35. package/scaffold/.control/registry/requirements.yaml +15 -15
  36. package/scaffold/.control/registry/risks.yaml +5 -5
  37. package/scaffold/.control/registry/usecases.yaml +6 -6
@@ -1,15 +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
- ]
1
+ # This skill has no `persistent_facts` key, so house rules cannot be injected through the usual
2
+ # path. `preferences` is the equivalent lever: literal sentences a reviewer follows every
3
+ # session.
4
+ #
5
+ # Only a house rule that changes HOW a critique lands belongs herethe full method stays in
6
+ # .constitution/document/delivery-flow-guide.md.
7
+
8
+ [workflow]
9
+
10
+ preferences = [
11
+ "Honor AGENTS.md and .constitution/document/ as the rules currently in force in this repo.",
12
+ "Judge a G1-G4 artifact chiefly by its Decision Summary: one page, business language, no jargon that lacks a Glossary entry. A summary that cannot be read in full within its gate's time budget is the finding itself.",
13
+ "There are only five normative words — MUST, MUST NOT, SHOULD, SHOULD NOT, MAY — in English and uppercase; the surrounding prose follows the product's chosen `doc_language`. Flag as a defect: any other imperative marker in any language, a translated method term, or an invented equivalent for a technical term the industry writes in English.",
14
+ "Pushback MUST name the decision actually at stake and its cost if wrong, not merely grade the writing.",
15
+ ]
@@ -1,8 +1,9 @@
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.
1
+ # Class A — initiative altitude only.
2
+ # The spine holds the invariants that keep separately built units from diverging.
3
+ # Structure (stack, tree, data shapes) is treated as a seed, not a contract.
4
4
  #
5
- # Urutan mengikat: spine lebih dulu, bmad-spec membacanya sebagai companion — bukan sebaliknya.
5
+ # Order binds: the spine comes first, and bmad-spec reads it as a companion — never the other
6
+ # way round.
6
7
 
7
8
  [workflow]
8
9
 
@@ -10,22 +11,23 @@ spine_template = "{project-root}/.constitution/document/templates/architectu
10
11
  spine_output_path = "{project-root}/.how/_platform"
11
12
  run_folder_pattern = "architecture"
12
13
 
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:
14
+ # architecture-guide.md MUST NOT be installed as doc_standards, even though that is the usual
15
+ # place for a document guide. This skill deliberately excludes the spine from doc_standards —
16
+ # its own default customize.toml says "never to the spine", and SKILL.md step 5 repeats it:
16
17
  # "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.
18
+ # Installed there, the AD-N rule would only polish the deck and C4 — documents that carry no
19
+ # AD-N — while the spine itself gets written with no guide at all. So it is installed as a
20
+ # persistent fact, held from activation, rather than as end-of-run polish.
20
21
  #
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.
22
+ # doc_standards is deliberately left empty. BMad's own default
23
+ # `skill:bmad-review lenses=structure,prose` still applies to rendering, and this array appends
24
+ # emptying it does not remove the default.
23
25
  #
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
+ # The consequence is that the spine gets no automatic review. `bmad-review` on it MUST be called
27
+ # manually before G4 — see the "Who calls bmad-review" table in 05-gates.md.
26
28
 
27
29
  persistent_facts = [
28
30
  "file:{project-root}/.constitution/document/architecture-guide.md",
29
31
  "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.",
32
+ "Every memlog.py call MUST use --path {project-root}/.control/memlog/spine.md. --workspace MUST NOT be used.",
31
33
  ]
@@ -1,10 +1,10 @@
1
- # Satu iterasi loop tanpa interaksi manusia. Dispatch lewat {spec_folder} + {story_id}.
1
+ # One loop iteration with no human in it. Dispatched through {spec_folder} + {story_id}.
2
2
 
3
3
  [workflow]
4
4
 
5
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.",
6
+ "This repo runs in stories mode. sprint-status.yaml does not exist and MUST NOT be created.",
7
+ "Test-first discipline binds: a test MUST fail first, and MUST fail for the expected reason.",
8
+ "A worker MUST NOT change anything outside the story it was dispatched. A change it judges necessary beyond that MUST be stated in the final report, never made silently.",
9
+ "When a test or build fails and the cause is not yet known, wdi-systematic-debugging MUST run before any fix is proposed. A third failed fix attempt is the signal to stop and report, not to try a fourth.",
10
10
  ]
@@ -1,52 +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.
1
+ # G5 — the only executor, dispatched by wdi-build. An executor MUST NOT assemble its own chain.
2
+ #
3
+ # Supplies the test-first discipline bmad-build lacks on its own: it audits tests AFTER
4
+ # implementation (Matrix Test Audit in step-03), but never requires a test to fail first.
5
+ #
6
+ # Merge rule: a string replaces, a list appends, a table merges per key.
7
+ # .claude/skills/bmad-build/customize.toml MUST NOT be edited it is overwritten on every update.
8
+
9
+ [workflow]
10
+
11
+ # Replaces the default step-03 handoff. Everything the default carries stays (a subagent with no
12
+ # conversation context, the spec as the sole source of truth, loading the files listed in
13
+ # `context:`, a closing report); this override adds the test-first cycle on top.
14
+
15
+ #
16
+ # Deliberately carries METHOD only. Restating the goal, the file list, the acceptance criteria,
17
+ # and house style rules does NOT belong in the dispatch — all of it is already in the spec, and
18
+ # step-03 forbids duplicating it here.
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
+ "This repo runs in stories mode. sprint-status.yaml does not exist and MUST NOT be created; story status lives in the story file's own frontmatter.",
39
+ "A Logical Component MUST be registered in components.yaml before the story touching it is worked.",
40
+ "When something breaks and the cause is not yet known, wdi-systematic-debugging MUST run before any fix is proposed.",
41
+ ]
42
+
43
+ # Not overridden, and deliberately so:
44
+ #
45
+ # - review_layers — the three default layers (blind-hunter, edge-case-hunter,
46
+ # verification-gap) plus the two-CLI-family Review Panel that bmad-code-review runs afterward
47
+ # already cover this repo's review needs. A fourth layer would spend tokens without closing a
48
+ # gap.
49
+ #
50
+ # - on_complete — updating the registry once a story is done belongs to wdi-build and the skill
51
+ # that owns that layer, not to bmad-build. Putting it here would give one file two writers.
52
+ # The story-closing checklist lives in 05-gates.md.
@@ -1,12 +1,13 @@
1
- # Review Panel: dua peninjau dari dua keluarga CLI berbeda, dan tidak boleh dari keluarga yang
2
- # menjalankan implementasinya.
1
+ # Review Panel: two reviewers from two different CLI families, and neither may come from the
2
+ # family that ran the implementation.
3
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.
4
+ # WARNING: the adversarial and edge-case lenses here are read from the bundled copy of
5
+ # review-prompts/, NOT from the bmad-review skill. An override on bmad-review will not be visible
6
+ # on this path.
6
7
 
7
8
  [workflow]
8
9
 
9
10
  persistent_facts = [
10
11
  "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
+ "A finding that repeats across stories MUST be recorded through bmad-project-context intent record, not fixed silently every time it recurs.",
12
13
  ]
@@ -1,27 +1,28 @@
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/."
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,11 +1,12 @@
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
- ]
1
+ # This skill ships with `persistent_facts = []`, so unlike the other 41 skills it picks up no
2
+ # project context of its own. This file closes that gap; without it, research ahead of G1 runs
3
+ # with no vocabulary and no repo rules, and its output uses terms that don't exist in the
4
+ # Glossary.
5
+
6
+ [workflow]
7
+
8
+ persistent_facts = [
9
+ "file:{project-root}/.control/product-glossary.md",
10
+ "A research report lands in _bmad-output/ and stays there permanently. It MUST NOT be promoted into .what/ and MUST NOT be folded into the brief or a PRD; a `DEC-` or PRD references it by path instead. Its run folder MUST NOT be deleted intent Update reads it back as original inputs.",
11
+ "A domain term MUST use the Glossary entry as written. A new term surfacing from research MUST be proposed as a Glossary entry, not used silently.",
12
+ ]
@@ -1,42 +1,42 @@
1
- # Kelas A — menulis langsung ke korpus.
1
+ # Class A — writes straight into the corpus.
2
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.
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
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.
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
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.
13
+ # The default value below is deliberately unusable as-isit 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
16
 
17
17
  [workflow]
18
18
 
19
19
  prd_template = "{project-root}/.constitution/document/templates/prd.md"
20
20
  prd_output_path = "{project-root}/.what/_prd"
21
- run_folder_pattern = "ISI-slug-inisiatif"
21
+ run_folder_pattern = "FILL-initiative-slug"
22
22
 
23
23
  doc_standards = ["file:{project-root}/.constitution/document/prd-guide.md"]
24
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.
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
29
  persistent_facts = [
30
30
  "file:{project-root}/.control/registry/requirements.yaml",
31
31
  "file:{project-root}/.constitution/document/prd-guide.md",
32
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 sebelumnyaderetnya global, satu produk satu deret.",
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 sequencethe sequence is global, one product, one sequence.",
34
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.",
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
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.",
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
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.",
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
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.",
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
42
  ]
@@ -1,34 +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 konstantanpa {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
- ]
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,9 +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
- ]
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,15 +1,16 @@
1
- # Kelas C — satu run per (wave x Product Component), habis setelah G5.
1
+ # Class C — one run per (wave x Product Component), spent once G5 closes.
2
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.
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.
7
8
 
8
9
  [workflow]
9
10
 
10
11
  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 lapisannyatabel 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.",
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.",
14
15
  "file:{project-root}/.control/product-glossary.md",
15
16
  ]
@@ -1,9 +1,9 @@
1
- # Kelas B — path bisa dikonfigurasi, granularitas per-PC tidak.
1
+ # Class B — the path is configurable, per-PC granularity is not.
2
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.
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
7
 
8
8
  [workflow]
9
9
 
@@ -13,7 +13,7 @@ run_folder_pattern = "ux"
13
13
  doc_standards = ["file:{project-root}/.constitution/document/ux-guide.md"]
14
14
 
15
15
  persistent_facts = [
16
- "Seluruh panggilan memlog.py MUST memakai --path {project-root}/.control/memlog/ux.md. --workspace MUST NOT dipakai.",
16
+ "Every memlog.py call MUST use --path {project-root}/.control/memlog/ux.md. --workspace MUST NOT be used.",
17
17
  ]
18
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."
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,6 +1,6 @@
1
- # Dipasang di langkah 1 runbook — MUST lebih dulu dari yang lain.
1
+ # Installed at runbook step 1 — MUST come before anything else.
2
2
  #
3
- # bmad-help dan bmad-correct-course membaca {project_knowledge}. Selama ia menunjuk docs/,
4
- # keduanya membaca folder yang sudah dibubarkan.
3
+ # bmad-help and bmad-correct-course read {project_knowledge}. As long as it points at docs/,
4
+ # both read a folder that has already been dissolved.
5
5
 
6
6
  project_knowledge = "{project-root}/.control"