@anhth2/spec-driven-dev-plugin 0.9.2 → 0.10.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.
Files changed (94) hide show
  1. package/ARCHITECTURE.md +20 -9
  2. package/commands/debug.md +12 -12
  3. package/commands/define-product.md +11 -11
  4. package/commands/{generate-tests.md → dev-gen-test.md} +47 -15
  5. package/commands/{generate-tests.tmpl → dev-gen-test.tmpl} +18 -4
  6. package/{core/commands/run-tests.md → commands/dev-run-test.md} +61 -13
  7. package/commands/{run-tests.tmpl → dev-run-test.tmpl} +32 -2
  8. package/{core/commands/smoke-test.md → commands/dev-smoke-test.md} +16 -16
  9. package/commands/{smoke-test.tmpl → dev-smoke-test.tmpl} +5 -5
  10. package/commands/fix-bug.md +12 -12
  11. package/commands/generate-bdd.md +38 -13
  12. package/commands/generate-bdd.tmpl +9 -2
  13. package/commands/generate-code.md +85 -15
  14. package/commands/generate-code.tmpl +56 -4
  15. package/commands/generate-design-spec.md +104 -39
  16. package/commands/generate-design-spec.tmpl +93 -28
  17. package/commands/generate-prd.md +11 -11
  18. package/commands/generate-spec-manifest.md +11 -11
  19. package/commands/generate-tech-docs.md +12 -12
  20. package/commands/generate-tech-docs.tmpl +1 -1
  21. package/commands/learn.md +12 -12
  22. package/commands/propose-scenario.md +12 -12
  23. package/commands/propose-scenario.tmpl +1 -1
  24. package/commands/refine-prd.md +165 -16
  25. package/commands/refine-prd.tmpl +16 -5
  26. package/commands/report-bug.md +11 -11
  27. package/commands/review-code.md +13 -13
  28. package/commands/review-code.tmpl +1 -1
  29. package/commands/review-context.md +160 -12
  30. package/commands/review-context.tmpl +11 -1
  31. package/commands/review-tech-docs.md +11 -11
  32. package/commands/setup-ai-first.md +7 -7
  33. package/commands/sync.md +23 -20
  34. package/commands/sync.tmpl +16 -13
  35. package/commands/update-framework.md +7 -7
  36. package/commands/validate-traces.md +56 -37
  37. package/commands/validate-traces.tmpl +45 -26
  38. package/core/FRAMEWORK_VERSION +1 -1
  39. package/core/commands/debug.md +12 -12
  40. package/core/commands/define-product.md +11 -11
  41. package/core/commands/{generate-tests.md → dev-gen-test.md} +47 -15
  42. package/{commands/run-tests.md → core/commands/dev-run-test.md} +61 -13
  43. package/{commands/smoke-test.md → core/commands/dev-smoke-test.md} +16 -16
  44. package/core/commands/fix-bug.md +12 -12
  45. package/core/commands/generate-bdd.md +38 -13
  46. package/core/commands/generate-code.md +85 -15
  47. package/core/commands/generate-design-spec.md +104 -39
  48. package/core/commands/generate-prd.md +11 -11
  49. package/core/commands/generate-spec-manifest.md +11 -11
  50. package/core/commands/generate-tech-docs.md +12 -12
  51. package/core/commands/learn.md +12 -12
  52. package/core/commands/propose-scenario.md +12 -12
  53. package/core/commands/refine-prd.md +165 -16
  54. package/core/commands/report-bug.md +11 -11
  55. package/core/commands/review-code.md +13 -13
  56. package/core/commands/review-context.md +160 -12
  57. package/core/commands/review-tech-docs.md +11 -11
  58. package/core/commands/setup-ai-first.md +7 -7
  59. package/core/commands/sync.md +23 -20
  60. package/core/commands/update-framework.md +7 -7
  61. package/core/commands/validate-traces.md +56 -37
  62. package/core/skills/code/SKILL.md +18 -18
  63. package/core/skills/debug/SKILL.md +26 -26
  64. package/core/skills/design-spec/SKILL.md +11 -11
  65. package/core/skills/discovery/SKILL.md +11 -11
  66. package/core/skills/prd/SKILL.md +14 -14
  67. package/core/skills/setup-ai-first/SKILL.md +7 -7
  68. package/core/skills/spec/SKILL.md +14 -14
  69. package/core/skills/test/SKILL.md +38 -38
  70. package/core/steps/capture-lesson.md +1 -1
  71. package/core/steps/context-loader.md +4 -4
  72. package/core/steps/report-footer.md +7 -7
  73. package/core/steps/review-fanout.md +138 -0
  74. package/core/steps/spawn-agent.md +1 -1
  75. package/core/steps/trace-mirror.md +18 -0
  76. package/core/templates/design-spec.template.md +16 -8
  77. package/package.json +1 -1
  78. package/skills/code/SKILL.md +18 -18
  79. package/skills/debug/SKILL.md +26 -26
  80. package/skills/debug/SKILL.tmpl +1 -1
  81. package/skills/design-spec/SKILL.md +11 -11
  82. package/skills/discovery/SKILL.md +11 -11
  83. package/skills/prd/SKILL.md +14 -14
  84. package/skills/setup-ai-first/SKILL.md +7 -7
  85. package/skills/spec/SKILL.md +14 -14
  86. package/skills/test/SKILL.md +38 -38
  87. package/skills/test/SKILL.tmpl +9 -9
  88. package/steps/capture-lesson.md +1 -1
  89. package/steps/context-loader.md +4 -4
  90. package/steps/report-footer.md +7 -7
  91. package/steps/review-fanout.md +138 -0
  92. package/steps/spawn-agent.md +1 -1
  93. package/steps/trace-mirror.md +18 -0
  94. package/templates/design-spec.template.md +16 -8
@@ -165,7 +165,7 @@ If `services` section is present:
165
165
 
166
166
  **2. Route to service** — if active domain matches a key in `services`:
167
167
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
168
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
168
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
169
169
  - Store `active_service` = `services.{domain}.path`
170
170
  - Store `active_service_module` = `services.{domain}.module`
171
171
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -177,7 +177,7 @@ If `services` section is present:
177
177
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
178
178
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
179
179
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
180
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
180
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
181
181
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
182
182
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
183
183
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -208,7 +208,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
208
208
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
209
209
 
210
210
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
211
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
211
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
212
212
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
213
213
 
214
214
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -301,7 +301,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
301
301
 
302
302
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
303
303
 
304
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
304
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
305
305
 
306
306
  ---
307
307
 
@@ -376,8 +376,12 @@ Check whether `services` array exists in `project-context.yaml`.
376
376
  - Use `services[N].trace_dir` if explicitly set
377
377
  - Otherwise default to `{services[N].path}/.trace`
378
378
  - Set `all_trace_dirs = [ dir1, dir2, ... ]` — one per service
379
- - Set `umbrella_root_trace = ".trace"` (at umbrella workspace root)
380
379
  - Step 1 will read TSVs from ALL dirs in `all_trace_dirs`, tagged by service name
380
+ - **Resolve the Living Docs home (canonical report location):**
381
+ - If `setup.spec_source` is set → `living_docs_dir = {spec_source}/.living-docs`
382
+ *(the shared specs module — mounted inside every service/umbrella workspace, so the panel resolves it no matter which submodule the dev is standing in)*
383
+ - Else (umbrella without a separate spec repo) → `living_docs_dir = .living-docs` at umbrella root
384
+ - **Resolve the panel mirror:** `panel_mirror = ./.trace` at the **current workspace root** (wherever this command runs). The VS Code panel reads `.trace/trace-report.json` from the open workspace — writing the merged report here is what makes the view non-empty when a dev opens a service submodule directly.
381
385
 
382
386
  **If no `services` key (single-service mode):**
383
387
  - Set `all_trace_dirs = [ {paths.trace_dir} ]`
@@ -440,6 +444,7 @@ If code was generated from an older revision → flag `TECHDOC_DRIFT`.
440
444
  *Skip this step if no TSV files existed (handled by Step 1 no-TSV path).*
441
445
 
442
446
  For each `.tsv` file processed: write updated `spec_ver`, `status`, `last_updated` back to disk.
447
+ Do **not** modify `dev_selftest` or `dev_selftest_at` — those are owned by `/dev-run-test`; this command only reads them for the report.
443
448
 
444
449
  ### Step 7 — Compute dashboard aggregates
445
450
 
@@ -455,6 +460,11 @@ test_coverage = rows where test_count > 0 / total_scs
455
460
  drift_count = rows where status == DRIFT
456
461
  untracked_count = rows where status == UNTRACKED
457
462
  gap_count = rows where status == GAP
463
+ dev_selftest_passing = rows where dev_selftest == pass
464
+ dev_selftest_failing = rows where dev_selftest == fail
465
+ dev_selftest_not_run = rows where dev_selftest in (not_run, —)
466
+ # NOTE: this is the DEV self-check signal (did the dev run their own smoke tests),
467
+ # NOT official QC/dev-team coverage — keep it labeled as such on the dashboard.
458
468
  tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/
459
469
  ```
460
470
 
@@ -482,6 +492,9 @@ Schema:
482
492
  "drift_count": 0,
483
493
  "gap_count": 0,
484
494
  "untracked_count": 0,
495
+ "dev_selftest_passing": 0,
496
+ "dev_selftest_failing": 0,
497
+ "dev_selftest_not_run": 0,
485
498
  "tech_docs_count": 0
486
499
  },
487
500
  "prds": [
@@ -507,6 +520,8 @@ Schema:
507
520
  "implemented_by": "<ClassName.method or null>",
508
521
  "test_count": 0,
509
522
  "test_classes": ["<TestClass1>", "<TestClass2>"],
523
+ "dev_selftest": "pass | fail | not_run",
524
+ "dev_selftest_at": "<YYYY-MM-DD or null>",
510
525
  "prd_version": "<prd version when BDD was generated>",
511
526
  "bdd_version": "<bdd version when code was generated>",
512
527
  "tech_doc_revision": 0,
@@ -533,7 +548,7 @@ Schema:
533
548
  "sc_id": "<SC-ID>",
534
549
  "sc_title": "<title>",
535
550
  "implemented_by": "<method>",
536
- "fix": "/generate-tests <UC-ID>"
551
+ "fix": "/dev-gen-test <UC-ID>"
537
552
  }
538
553
  ],
539
554
  "untracked": [
@@ -571,37 +586,40 @@ Schema:
571
586
  - `tech_doc_revision`: use integer; `0` if not yet generated
572
587
  - `code_coverage_pct` / `test_coverage_pct`: round to nearest integer (0–100)
573
588
  - Always write to `{paths.trace_dir}/trace-report.json` regardless of domain filter — if a domain filter was applied, include only those PRDs in `prds[]` but note the domain in the `domain` field
574
- - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`
589
+ - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`; `dev_selftest: "—"` → `"not_run"`; `dev_selftest_at: "—"` → `null`
575
590
 
576
- ### Step 8b — Umbrella Living Docs Sync *(umbrella mode only)*
591
+ ### Step 8b — Living Docs Sync *(umbrella mode only)*
577
592
 
578
593
  *Skip this step in single-service mode.*
579
594
 
580
- After writing each service's `trace-report.json`, sync trace files to the umbrella root so the Living Docs VS Code panel (opened at umbrella root) can read them:
595
+ Authoritative trace state stays in each service submodule's `.trace/` (committed there).
596
+ This step publishes the merged report to the **canonical Living Docs home** (the specs
597
+ module) and drops a local mirror so the panel is never empty.
581
598
 
582
- 1. Create directory `{umbrella_root_trace}/` if it does not exist (`mkdir -p .trace`).
599
+ 1. **Write canonical merged report** to `{living_docs_dir}/` (`mkdir -p` it first):
600
+ - `{living_docs_dir}/trace-report.json` — merge every per-service `trace-report.json`
601
+ into one document, add a `"service"` field per scenario row, recalc summary aggregates.
602
+ - `{living_docs_dir}/{service-name}/{UC-ID}.tsv` — copy each service's TSVs, namespaced
603
+ by service. Overwrite; don't delete TSVs whose service source is gone (prior runs).
583
604
 
584
- 2. **Copy TSV files** from each service trace dir to umbrella trace dir with service namespace:
585
- ```
586
- {service.path}/.trace/{UC-ID}.tsv .trace/{service-name}/{UC-ID}.tsv
587
- ```
588
- Overwrite if exists. Do not delete files in `.trace/` that no longer have a service source — they may be from a previous run.
589
-
590
- 3. **Write aggregated `trace-report.json`** to `{umbrella_root_trace}/trace-report.json`:
591
- - Merge all per-service `trace-report.json` data into one document
592
- - Add `"service"` field to each scenario row
593
- - Recalculate summary aggregates across all services
605
+ 2. **Mirror to the panel location** `{panel_mirror}` (`./.trace` at the current workspace
606
+ root) so a dev who opened *this* repo (umbrella **or** a single service submodule) sees
607
+ data immediately: copy `{living_docs_dir}/trace-report.json` `{panel_mirror}/trace-report.json`
608
+ (and the namespaced TSVs). If `panel_mirror` already resolves to `living_docs_dir`, skip.
594
609
 
595
- 4. **Print sync summary:**
610
+ 3. **Print sync summary:**
596
611
  ```
597
- Umbrella sync.trace/
598
- user-service : {N} TSV files copied
599
- order-service : {N} TSV files copied
612
+ Living Docs{living_docs_dir}/ (canonical, in specs module)
613
+ user-service : {N} TSV files
614
+ order-service : {N} TSV files
600
615
  trace-report.json: merged ({total} scenarios across {S} services)
601
- Living Docs panel will reflect this data immediately.
616
+ Panel mirror {panel_mirror}/trace-report.json (current workspace)
602
617
  ```
603
618
 
604
- > **Note:** `.trace/` at umbrella root is a **read-only mirror** do NOT commit it to the umbrella repo. Add `.trace/` to the umbrella's `.gitignore`. Authoritative trace state lives in each service submodule's `.trace/` dir and is committed there.
619
+ > **Note — both locations are generated, gitignored mirrors.** Add `.living-docs/` to the
620
+ > **specs module's** `.gitignore` and `.trace/` to the current repo's `.gitignore`. The only
621
+ > committed, authoritative trace state is each service submodule's own `.trace/`. The report
622
+ > is regenerated by `/validate-traces` or `/sync` — never commit it.
605
623
 
606
624
  ## Output
607
625
 
@@ -643,13 +661,13 @@ Suggest the logical next command based on workflow phase:
643
661
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
644
662
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
645
663
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
646
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
647
- | /generate-tests | `/run-tests {UC-ID}` |
648
- | /run-tests (passing) | `/review-code {UC-ID}` |
649
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
650
- | /review-code | `/smoke-test {UC-ID}` or create PR |
651
- | /smoke-test | Create PR and link to ticket |
652
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
664
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
665
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
666
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
667
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
668
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
669
+ | /dev-smoke-test | Create PR and link to ticket |
670
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
653
671
  | /fix-bug | Create PR and link to ticket |
654
672
  | /debug | `/fix-bug {ticket-id}` if fix needed |
655
673
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -702,11 +720,12 @@ Tech-Doc Revision Drift:
702
720
 
703
721
  Recommendations:
704
722
  - /generate-code {UC-ID} for DRIFT and UNTRACKED scenarios
705
- - /generate-tests {UC-ID} for GAP (missing tests)
723
+ - /dev-gen-test {UC-ID} for GAP (missing tests)
706
724
  - /generate-bdd {prd-file} for PRD version drift
707
725
 
708
726
  [Umbrella mode only]
709
- Living Docs synced.trace/ (umbrella root)
710
- Tip: run /validate-traces after each codegen session to refresh the panel.
711
- .trace/ at umbrella root is a mirror do not commit it (add to .gitignore).
727
+ Living Docs canonical{living_docs_dir}/ (specs module — shared, gitignored)
728
+ Panel mirror → {panel_mirror}/trace-report.json (current workspace)
729
+ Tip: run /validate-traces (or /sync) after each codegen session to refresh the panel.
730
+ Both are generated mirrors — do not commit (.living-docs/ + .trace/ in .gitignore).
712
731
  ```
@@ -23,8 +23,12 @@ Check whether `services` array exists in `project-context.yaml`.
23
23
  - Use `services[N].trace_dir` if explicitly set
24
24
  - Otherwise default to `{services[N].path}/.trace`
25
25
  - Set `all_trace_dirs = [ dir1, dir2, ... ]` — one per service
26
- - Set `umbrella_root_trace = ".trace"` (at umbrella workspace root)
27
26
  - Step 1 will read TSVs from ALL dirs in `all_trace_dirs`, tagged by service name
27
+ - **Resolve the Living Docs home (canonical report location):**
28
+ - If `setup.spec_source` is set → `living_docs_dir = {spec_source}/.living-docs`
29
+ *(the shared specs module — mounted inside every service/umbrella workspace, so the panel resolves it no matter which submodule the dev is standing in)*
30
+ - Else (umbrella without a separate spec repo) → `living_docs_dir = .living-docs` at umbrella root
31
+ - **Resolve the panel mirror:** `panel_mirror = ./.trace` at the **current workspace root** (wherever this command runs). The VS Code panel reads `.trace/trace-report.json` from the open workspace — writing the merged report here is what makes the view non-empty when a dev opens a service submodule directly.
28
32
 
29
33
  **If no `services` key (single-service mode):**
30
34
  - Set `all_trace_dirs = [ {paths.trace_dir} ]`
@@ -87,6 +91,7 @@ If code was generated from an older revision → flag `TECHDOC_DRIFT`.
87
91
  *Skip this step if no TSV files existed (handled by Step 1 no-TSV path).*
88
92
 
89
93
  For each `.tsv` file processed: write updated `spec_ver`, `status`, `last_updated` back to disk.
94
+ Do **not** modify `dev_selftest` or `dev_selftest_at` — those are owned by `/dev-run-test`; this command only reads them for the report.
90
95
 
91
96
  ### Step 7 — Compute dashboard aggregates
92
97
 
@@ -102,6 +107,11 @@ test_coverage = rows where test_count > 0 / total_scs
102
107
  drift_count = rows where status == DRIFT
103
108
  untracked_count = rows where status == UNTRACKED
104
109
  gap_count = rows where status == GAP
110
+ dev_selftest_passing = rows where dev_selftest == pass
111
+ dev_selftest_failing = rows where dev_selftest == fail
112
+ dev_selftest_not_run = rows where dev_selftest in (not_run, —)
113
+ # NOTE: this is the DEV self-check signal (did the dev run their own smoke tests),
114
+ # NOT official QC/dev-team coverage — keep it labeled as such on the dashboard.
105
115
  tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/
106
116
  ```
107
117
 
@@ -129,6 +139,9 @@ Schema:
129
139
  "drift_count": 0,
130
140
  "gap_count": 0,
131
141
  "untracked_count": 0,
142
+ "dev_selftest_passing": 0,
143
+ "dev_selftest_failing": 0,
144
+ "dev_selftest_not_run": 0,
132
145
  "tech_docs_count": 0
133
146
  },
134
147
  "prds": [
@@ -154,6 +167,8 @@ Schema:
154
167
  "implemented_by": "<ClassName.method or null>",
155
168
  "test_count": 0,
156
169
  "test_classes": ["<TestClass1>", "<TestClass2>"],
170
+ "dev_selftest": "pass | fail | not_run",
171
+ "dev_selftest_at": "<YYYY-MM-DD or null>",
157
172
  "prd_version": "<prd version when BDD was generated>",
158
173
  "bdd_version": "<bdd version when code was generated>",
159
174
  "tech_doc_revision": 0,
@@ -180,7 +195,7 @@ Schema:
180
195
  "sc_id": "<SC-ID>",
181
196
  "sc_title": "<title>",
182
197
  "implemented_by": "<method>",
183
- "fix": "/generate-tests <UC-ID>"
198
+ "fix": "/dev-gen-test <UC-ID>"
184
199
  }
185
200
  ],
186
201
  "untracked": [
@@ -218,37 +233,40 @@ Schema:
218
233
  - `tech_doc_revision`: use integer; `0` if not yet generated
219
234
  - `code_coverage_pct` / `test_coverage_pct`: round to nearest integer (0–100)
220
235
  - Always write to `{paths.trace_dir}/trace-report.json` regardless of domain filter — if a domain filter was applied, include only those PRDs in `prds[]` but note the domain in the `domain` field
221
- - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`
236
+ - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`; `dev_selftest: "—"` → `"not_run"`; `dev_selftest_at: "—"` → `null`
222
237
 
223
- ### Step 8b — Umbrella Living Docs Sync *(umbrella mode only)*
238
+ ### Step 8b — Living Docs Sync *(umbrella mode only)*
224
239
 
225
240
  *Skip this step in single-service mode.*
226
241
 
227
- After writing each service's `trace-report.json`, sync trace files to the umbrella root so the Living Docs VS Code panel (opened at umbrella root) can read them:
242
+ Authoritative trace state stays in each service submodule's `.trace/` (committed there).
243
+ This step publishes the merged report to the **canonical Living Docs home** (the specs
244
+ module) and drops a local mirror so the panel is never empty.
228
245
 
229
- 1. Create directory `{umbrella_root_trace}/` if it does not exist (`mkdir -p .trace`).
246
+ 1. **Write canonical merged report** to `{living_docs_dir}/` (`mkdir -p` it first):
247
+ - `{living_docs_dir}/trace-report.json` — merge every per-service `trace-report.json`
248
+ into one document, add a `"service"` field per scenario row, recalc summary aggregates.
249
+ - `{living_docs_dir}/{service-name}/{UC-ID}.tsv` — copy each service's TSVs, namespaced
250
+ by service. Overwrite; don't delete TSVs whose service source is gone (prior runs).
230
251
 
231
- 2. **Copy TSV files** from each service trace dir to umbrella trace dir with service namespace:
232
- ```
233
- {service.path}/.trace/{UC-ID}.tsv .trace/{service-name}/{UC-ID}.tsv
234
- ```
235
- Overwrite if exists. Do not delete files in `.trace/` that no longer have a service source — they may be from a previous run.
236
-
237
- 3. **Write aggregated `trace-report.json`** to `{umbrella_root_trace}/trace-report.json`:
238
- - Merge all per-service `trace-report.json` data into one document
239
- - Add `"service"` field to each scenario row
240
- - Recalculate summary aggregates across all services
252
+ 2. **Mirror to the panel location** `{panel_mirror}` (`./.trace` at the current workspace
253
+ root) so a dev who opened *this* repo (umbrella **or** a single service submodule) sees
254
+ data immediately: copy `{living_docs_dir}/trace-report.json` `{panel_mirror}/trace-report.json`
255
+ (and the namespaced TSVs). If `panel_mirror` already resolves to `living_docs_dir`, skip.
241
256
 
242
- 4. **Print sync summary:**
257
+ 3. **Print sync summary:**
243
258
  ```
244
- Umbrella sync.trace/
245
- user-service : {N} TSV files copied
246
- order-service : {N} TSV files copied
259
+ Living Docs{living_docs_dir}/ (canonical, in specs module)
260
+ user-service : {N} TSV files
261
+ order-service : {N} TSV files
247
262
  trace-report.json: merged ({total} scenarios across {S} services)
248
- Living Docs panel will reflect this data immediately.
263
+ Panel mirror {panel_mirror}/trace-report.json (current workspace)
249
264
  ```
250
265
 
251
- > **Note:** `.trace/` at umbrella root is a **read-only mirror** do NOT commit it to the umbrella repo. Add `.trace/` to the umbrella's `.gitignore`. Authoritative trace state lives in each service submodule's `.trace/` dir and is committed there.
266
+ > **Note — both locations are generated, gitignored mirrors.** Add `.living-docs/` to the
267
+ > **specs module's** `.gitignore` and `.trace/` to the current repo's `.gitignore`. The only
268
+ > committed, authoritative trace state is each service submodule's own `.trace/`. The report
269
+ > is regenerated by `/validate-traces` or `/sync` — never commit it.
252
270
 
253
271
  ## Output
254
272
 
@@ -289,11 +307,12 @@ Tech-Doc Revision Drift:
289
307
 
290
308
  Recommendations:
291
309
  - /generate-code {UC-ID} for DRIFT and UNTRACKED scenarios
292
- - /generate-tests {UC-ID} for GAP (missing tests)
310
+ - /dev-gen-test {UC-ID} for GAP (missing tests)
293
311
  - /generate-bdd {prd-file} for PRD version drift
294
312
 
295
313
  [Umbrella mode only]
296
- Living Docs synced.trace/ (umbrella root)
297
- Tip: run /validate-traces after each codegen session to refresh the panel.
298
- .trace/ at umbrella root is a mirror do not commit it (add to .gitignore).
314
+ Living Docs canonical{living_docs_dir}/ (specs module — shared, gitignored)
315
+ Panel mirror → {panel_mirror}/trace-report.json (current workspace)
316
+ Tip: run /validate-traces (or /sync) after each codegen session to refresh the panel.
317
+ Both are generated mirrors — do not commit (.living-docs/ + .trace/ in .gitignore).
299
318
  ```
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.10.0
@@ -166,7 +166,7 @@ If `services` section is present:
166
166
 
167
167
  **2. Route to service** — if active domain matches a key in `services`:
168
168
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
169
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
169
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
170
170
  - Store `active_service` = `services.{domain}.path`
171
171
  - Store `active_service_module` = `services.{domain}.module`
172
172
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -178,7 +178,7 @@ If `services` section is present:
178
178
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
179
179
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
180
180
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
181
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
181
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
182
182
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
183
183
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
184
184
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -209,7 +209,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
209
209
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
210
210
 
211
211
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
212
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
212
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
213
213
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
214
214
 
215
215
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -302,7 +302,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
302
302
 
303
303
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
304
304
 
305
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
305
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
306
306
 
307
307
  ---
308
308
 
@@ -606,13 +606,13 @@ Suggest the logical next command based on workflow phase:
606
606
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
607
607
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
608
608
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
609
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
610
- | /generate-tests | `/run-tests {UC-ID}` |
611
- | /run-tests (passing) | `/review-code {UC-ID}` |
612
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
613
- | /review-code | `/smoke-test {UC-ID}` or create PR |
614
- | /smoke-test | Create PR and link to ticket |
615
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
609
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
610
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
611
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
612
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
613
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
614
+ | /dev-smoke-test | Create PR and link to ticket |
615
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
616
616
  | /fix-bug | Create PR and link to ticket |
617
617
  | /debug | `/fix-bug {ticket-id}` if fix needed |
618
618
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -723,7 +723,7 @@ If `lessons_path` does not exist, create it with this header first:
723
723
  | code-gen | /generate-code output |
724
724
  | bdd | /generate-bdd output |
725
725
  | tech-docs | /generate-tech-docs output |
726
- | tests | /generate-tests output |
726
+ | tests | /dev-gen-test output |
727
727
  | prd | /generate-prd, /refine-prd output |
728
728
  | general | every command |
729
729
 
@@ -163,7 +163,7 @@ If `services` section is present:
163
163
 
164
164
  **2. Route to service** — if active domain matches a key in `services`:
165
165
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
166
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
166
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
167
167
  - Store `active_service` = `services.{domain}.path`
168
168
  - Store `active_service_module` = `services.{domain}.module`
169
169
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -175,7 +175,7 @@ If `services` section is present:
175
175
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
176
176
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
177
177
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
178
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
178
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
179
179
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
180
180
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
181
181
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -206,7 +206,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
206
206
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
207
207
 
208
208
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
209
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
209
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
210
210
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
211
211
 
212
212
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -299,7 +299,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
299
299
 
300
300
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
301
301
 
302
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
302
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
303
303
 
304
304
  ---
305
305
 
@@ -540,13 +540,13 @@ Suggest the logical next command based on workflow phase:
540
540
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
541
541
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
542
542
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
543
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
544
- | /generate-tests | `/run-tests {UC-ID}` |
545
- | /run-tests (passing) | `/review-code {UC-ID}` |
546
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
547
- | /review-code | `/smoke-test {UC-ID}` or create PR |
548
- | /smoke-test | Create PR and link to ticket |
549
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
543
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
544
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
545
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
546
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
547
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
548
+ | /dev-smoke-test | Create PR and link to ticket |
549
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
550
550
  | /fix-bug | Create PR and link to ticket |
551
551
  | /debug | `/fix-bug {ticket-id}` if fix needed |
552
552
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -1,4 +1,10 @@
1
- # /generate-tests — Generate Unit & Integration Tests
1
+ # /dev-gen-test — Generate Dev Self-Check Tests
2
+
3
+ > **Scope — dev self-check (smoke), not the official test suite.** These tests let the
4
+ > developer quickly verify their own generated code against the BDD scenarios. They are a
5
+ > developer self-check, **not** the QC/dev-team's authoritative test suite (that has its
6
+ > own separate flow, implemented elsewhere). Results surface to the Living Docs dashboard
7
+ > as a **dev self-test** signal so QC can see the dev already ran their own checks.
2
8
 
3
9
  ## Gate
4
10
  # Gate — Universal Entry Procedure
@@ -163,7 +169,7 @@ If `services` section is present:
163
169
 
164
170
  **2. Route to service** — if active domain matches a key in `services`:
165
171
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
166
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
172
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
167
173
  - Store `active_service` = `services.{domain}.path`
168
174
  - Store `active_service_module` = `services.{domain}.module`
169
175
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -175,7 +181,7 @@ If `services` section is present:
175
181
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
176
182
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
177
183
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
178
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
184
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
179
185
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
180
186
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
181
187
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -206,7 +212,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
206
212
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
207
213
 
208
214
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
209
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
215
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
210
216
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
211
217
 
212
218
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -299,7 +305,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
299
305
 
300
306
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
301
307
 
302
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
308
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
303
309
 
304
310
  ---
305
311
 
@@ -810,9 +816,33 @@ After generating all test files, update `{paths.trace_dir}/{UC-ID}.tsv` — for
810
816
  |--------|-------|
811
817
  | `test_count` | number of test methods covering this SC |
812
818
  | `test_classes` | comma-separated test class / describe-block names |
819
+ | `dev_selftest` | `not_run` (tests now exist but have not been executed — `/dev-run-test` sets pass/fail) |
813
820
  | `last_updated` | today `YYYY-MM-DD` |
814
821
 
815
- Leave all other columns unchanged.
822
+ Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns).
823
+
824
+ ---
825
+
826
+ ## Refresh Panel Mirror
827
+ # Refresh Living Docs panel mirror *(local, umbrella mode)*
828
+
829
+ *Skip entirely in single-service mode (no `services` and no `setup.spec_source`) — there
830
+ the service `.trace/` IS the panel location, so nothing to mirror.*
831
+
832
+ After updating the authoritative service TSV(s) at `{paths.trace_dir}`:
833
+
834
+ 1. Resolve `panel_mirror = ./.trace` at the **current workspace root** (where this command runs).
835
+ 2. If `panel_mirror` resolves to a different path than `{paths.trace_dir}`, copy each
836
+ just-updated `{UC-ID}.tsv` → `{panel_mirror}/{service-name}/{UC-ID}.tsv`
837
+ (create the dir; overwrite). Use `active_service` for `{service-name}`.
838
+
839
+ This keeps the open workspace's Living Docs panel current **between syncs** — it is a
840
+ **local convenience mirror only**. The *canonical* report in the spec module
841
+ (`{spec_source}/.living-docs/`) and the merged `trace-report.json` are rebuilt by
842
+ `/sync` or `/validate-traces` (those need every service's data, so a single per-UC
843
+ command cannot produce them). For orchestrated commands, do this once in the orchestrator
844
+ after all sub-agents return — not inside each sub-agent.
845
+
816
846
 
817
847
  ---
818
848
 
@@ -856,13 +886,13 @@ Suggest the logical next command based on workflow phase:
856
886
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
857
887
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
858
888
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
859
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
860
- | /generate-tests | `/run-tests {UC-ID}` |
861
- | /run-tests (passing) | `/review-code {UC-ID}` |
862
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
863
- | /review-code | `/smoke-test {UC-ID}` or create PR |
864
- | /smoke-test | Create PR and link to ticket |
865
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
889
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
890
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
891
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
892
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
893
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
894
+ | /dev-smoke-test | Create PR and link to ticket |
895
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
866
896
  | /fix-bug | Create PR and link to ticket |
867
897
  | /debug | `/fix-bug {ticket-id}` if fix needed |
868
898
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -881,9 +911,11 @@ Next : {suggested command with example arguments}
881
911
 
882
912
 
883
913
  ```
884
- /generate-tests Complete — {UC-ID} ({active_module})
914
+ /dev-gen-test Complete — {UC-ID} ({active_module})
885
915
  ✅ {TestClass1} ({N} tests)
886
916
  ✅ {TestClass2} ({N} tests)
887
917
  Trace: {paths.trace_dir}/{UC-ID}.tsv updated
888
- Next: /run-tests {UC-ID}
918
+ Next: /dev-run-test {UC-ID}
919
+
920
+ 📊 Living Docs: run /validate-traces (or /sync) to push this trace to the spec-module dashboard.
889
921
  ```