@anhth2/spec-driven-dev-plugin 0.6.0 → 0.7.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 (73) hide show
  1. package/bin/index.js +180 -11
  2. package/commands/debug.md +196 -10
  3. package/commands/debug.tmpl +170 -6
  4. package/commands/define-product.md +31 -5
  5. package/commands/define-product.tmpl +5 -1
  6. package/commands/fix-bug.md +74 -10
  7. package/commands/fix-bug.tmpl +48 -6
  8. package/commands/generate-bdd.md +49 -8
  9. package/commands/generate-bdd.tmpl +23 -4
  10. package/commands/generate-code.md +109 -18
  11. package/commands/generate-code.tmpl +83 -14
  12. package/commands/generate-prd.md +33 -6
  13. package/commands/generate-prd.tmpl +7 -2
  14. package/commands/generate-tech-docs.md +85 -8
  15. package/commands/generate-tech-docs.tmpl +59 -4
  16. package/commands/generate-tests.md +454 -36
  17. package/commands/generate-tests.tmpl +428 -32
  18. package/commands/refine-prd.md +39 -7
  19. package/commands/refine-prd.tmpl +13 -3
  20. package/commands/review-code.md +57 -5
  21. package/commands/review-code.tmpl +31 -1
  22. package/commands/review-context.md +41 -11
  23. package/commands/review-context.tmpl +15 -7
  24. package/commands/review-tech-docs.md +39 -8
  25. package/commands/review-tech-docs.tmpl +13 -4
  26. package/commands/run-tests.md +159 -17
  27. package/commands/run-tests.tmpl +133 -13
  28. package/commands/setup-ai-first.md +61 -3
  29. package/commands/setup-ai-first.tmpl +6 -2
  30. package/commands/smoke-test.md +191 -21
  31. package/commands/smoke-test.tmpl +165 -17
  32. package/commands/validate-traces.md +40 -7
  33. package/commands/validate-traces.tmpl +14 -3
  34. package/core/FRAMEWORK_VERSION +1 -1
  35. package/core/commands/debug.md +196 -10
  36. package/core/commands/define-product.md +31 -5
  37. package/core/commands/fix-bug.md +74 -10
  38. package/core/commands/generate-bdd.md +49 -8
  39. package/core/commands/generate-code.md +109 -18
  40. package/core/commands/generate-prd.md +33 -6
  41. package/core/commands/generate-tech-docs.md +85 -8
  42. package/core/commands/generate-tests.md +454 -36
  43. package/core/commands/refine-prd.md +39 -7
  44. package/core/commands/review-code.md +57 -5
  45. package/core/commands/review-context.md +41 -11
  46. package/core/commands/review-tech-docs.md +39 -8
  47. package/core/commands/run-tests.md +159 -17
  48. package/core/commands/setup-ai-first.md +61 -3
  49. package/core/commands/smoke-test.md +191 -21
  50. package/core/commands/validate-traces.md +40 -7
  51. package/core/skills/code/SKILL.md +29 -6
  52. package/core/skills/debug/SKILL.md +31 -7
  53. package/core/skills/discovery/SKILL.md +25 -3
  54. package/core/skills/prd/SKILL.md +8 -6
  55. package/core/skills/setup-ai-first/SKILL.md +3 -2
  56. package/core/skills/spec/SKILL.md +7 -5
  57. package/core/skills/test/SKILL.md +54 -9
  58. package/core/steps/context-loader.md +22 -1
  59. package/core/steps/gate.md +1 -1
  60. package/core/steps/report-footer.md +3 -2
  61. package/core/steps/spawn-agent.md +3 -1
  62. package/package.json +1 -1
  63. package/skills/code/SKILL.md +29 -6
  64. package/skills/debug/SKILL.md +31 -7
  65. package/skills/discovery/SKILL.md +25 -3
  66. package/skills/prd/SKILL.md +8 -6
  67. package/skills/setup-ai-first/SKILL.md +3 -2
  68. package/skills/spec/SKILL.md +7 -5
  69. package/skills/test/SKILL.md +54 -9
  70. package/steps/context-loader.md +22 -1
  71. package/steps/gate.md +1 -1
  72. package/steps/report-footer.md +3 -2
  73. package/steps/spawn-agent.md +3 -1
@@ -33,7 +33,7 @@ Display and wait for response:
33
33
  ```
34
34
  ⚙️ MODEL CHECK
35
35
  ──────────────────────────────────────────────────────────────────
36
- Recommended : claude-opus-4-5 (or claude-opus-4)
36
+ Recommended : claude-opus-4 (or latest Opus model)
37
37
  Why needed : Spec analysis, architecture review, code generation
38
38
  require deep reasoning. Smaller models miss edge cases.
39
39
 
@@ -142,7 +142,7 @@ If `paths` section is absent, use these defaults:
142
142
  - `domain_knowledge_dir` = `specs/domain-knowledge`
143
143
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
144
144
  - `core_entities` = `specs/domain-knowledge/core-entities.md`
145
- - `tech_docs_dir` = `tech-docs`
145
+ - `tech_docs_dir` = `specs/tech-docs`
146
146
  - `trace_dir` = `.trace`
147
147
 
148
148
  If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
@@ -219,6 +219,26 @@ If the file does not exist → skip silently.
219
219
 
220
220
  ---
221
221
 
222
+ ## Step 6.5 — [PLATFORM] Derive active_module and platform_type
223
+
224
+ Using `tech_stack.module` loaded in Step 1, derive and store two variables for use by all downstream commands:
225
+
226
+ ```
227
+ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
228
+ ```
229
+
230
+ | `platform_type` | Modules |
231
+ |---|---|
232
+ | `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
233
+ | `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
234
+ | `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
235
+
236
+ If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
237
+
238
+ 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).
239
+
240
+ ---
241
+
222
242
  ## Step 7 — [RECAP] Working Memory Recap (anti-lost-in-middle)
223
243
 
224
244
  After loading all context, synthesize and output a compact summary block.
@@ -229,6 +249,7 @@ Output exactly this block:
229
249
  ```
230
250
  [CTX LOADED]
231
251
  Stack : {language} / {framework} / {database}
252
+ Platform : {active_module} ({platform_type})
232
253
  Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
233
254
  Ticket : {ticket_prefix}-
234
255
  Dict : {loaded — N canonical terms, M banned terms | missing}
@@ -263,6 +284,13 @@ Proceed to the next step of the calling command.
263
284
  Read all `{paths.trace_dir}/{UC-ID}.tsv` files matching the target domain (or all domains if no domain filter).
264
285
  Each file gives the persisted trace state for that UC.
265
286
 
287
+ **If no `.tsv` files found** in `{paths.trace_dir}`:
288
+ - Scan all `{paths.specs_dir}/**/*.feature` files in the target domain to build an in-memory list of all scenarios.
289
+ - Treat all scenarios as `UNTRACKED` (no code generated yet).
290
+ - Print: "⚠️ No trace files found. All {N} scenarios across {M} UCs are UNTRACKED."
291
+ - Suggest: "Run `/generate-bdd {prd-file}` to initialize trace state, or `/generate-code {feature-file}` to generate code."
292
+ - **Skip Steps 2–6 entirely.** Proceed directly to Step 7 using this in-memory state — do NOT abort.
293
+
266
294
  ### Step 2 — Reconcile with current `.feature` files
267
295
 
268
296
  For each `.tsv` row, read the corresponding `.feature` file and get the **current** `@trace.sc_version` for that SC.
@@ -300,6 +328,8 @@ If code was generated from an older revision → flag `TECHDOC_DRIFT`.
300
328
 
301
329
  ### Step 6 — Write status back to TSV
302
330
 
331
+ *Skip this step if no TSV files existed (handled by Step 1 no-TSV path).*
332
+
303
333
  For each `.tsv` file processed: write updated `spec_ver`, `status`, `last_updated` back to disk.
304
334
 
305
335
  ### Step 7 — Compute dashboard aggregates
@@ -309,6 +339,7 @@ total_prds = count distinct PRD files in {paths.prd_dir}/{domain}/
309
339
  approved_prds = PRDs with | Status | approved
310
340
  total_ucs = count distinct UC-IDs across all .tsv files
311
341
  approved_ucs = UCs with uc_status == approved
342
+ draft_ucs = UCs with uc_status == draft
312
343
  total_scs = total rows across all .tsv files
313
344
  code_coverage = rows where implemented_by != — / total_scs
314
345
  test_coverage = rows where test_count > 0 / total_scs
@@ -320,7 +351,7 @@ tech_docs_count = count .md files in {paths.tech_docs_dir}/{domain}/
320
351
 
321
352
  ### Step 8 — Write JSON report
322
353
 
323
- Write `.trace/trace-report.json` (overwrite if exists). This file is the single source of truth for web dashboards — it contains the full snapshot at the time `/validate-traces` was last run.
354
+ Write `{paths.trace_dir}/trace-report.json` (overwrite if exists). This file is the single source of truth for web dashboards — it contains the full snapshot at the time `/validate-traces` was last run.
324
355
 
325
356
  Schema:
326
357
 
@@ -430,7 +461,8 @@ Schema:
430
461
  - `test_classes`: use `[]` (not `"—"`) when no test classes
431
462
  - `tech_doc_revision`: use integer; `0` if not yet generated
432
463
  - `code_coverage_pct` / `test_coverage_pct`: round to nearest integer (0–100)
433
- - Always write to `.trace/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
464
+ - 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
465
+ - **TSV `"—"` mapping**: when reading TSV files, map dash values to JSON types: `implemented_by: "—"` → `null`; `test_count: "—"` → `0`; `test_classes: "—"` → `[]`; `tech_doc_revision: "—"` → `0`
434
466
 
435
467
  ## Output
436
468
 
@@ -462,6 +494,7 @@ Suggest the logical next command based on workflow phase:
462
494
 
463
495
  | Current command | Suggest next |
464
496
  |-------------------------|-----------------------------------------------|
497
+ | /setup-ai-first | `/define-product` to start your first feature |
465
498
  | /define-product | `/generate-prd {product-definition-file}` |
466
499
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
467
500
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -470,13 +503,13 @@ Suggest the logical next command based on workflow phase:
470
503
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
471
504
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
472
505
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
473
- | /generate-code | `/generate-tests {UC-ID}` |
506
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
474
507
  | /generate-tests | `/run-tests {UC-ID}` |
475
508
  | /run-tests (passing) | `/review-code {UC-ID}` |
476
509
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
477
510
  | /review-code | `/smoke-test {UC-ID}` or create PR |
478
511
  | /smoke-test | Create PR and link to ticket |
479
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
512
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
480
513
  | /fix-bug | Create PR and link to ticket |
481
514
  | /debug | `/fix-bug {ticket-id}` if fix needed |
482
515
 
@@ -492,7 +525,7 @@ Next : {suggested command with example arguments}
492
525
  ```
493
526
  /validate-traces — {domain}
494
527
 
495
- 📄 .trace/trace-report.json ← updated
528
+ 📄 {paths.trace_dir}/trace-report.json ← updated
496
529
 
497
530
  ┌─────────────────────────────────────────────────────────────────────────────────────┐
498
531
  │ PRDs Use Cases Scenarios Code Cov. Test Cov. Drift Untracked Gap │
@@ -43,7 +43,7 @@ Display and wait for response:
43
43
  ```
44
44
  ⚙️ MODEL CHECK
45
45
  ──────────────────────────────────────────────────────────────────
46
- Recommended : claude-opus-4-5 (or claude-opus-4)
46
+ Recommended : claude-opus-4 (or latest Opus model)
47
47
  Why needed : Spec analysis, architecture review, code generation
48
48
  require deep reasoning. Smaller models miss edge cases.
49
49
 
@@ -167,7 +167,7 @@ If `paths` section is absent, use these defaults:
167
167
  - `domain_knowledge_dir` = `specs/domain-knowledge`
168
168
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
169
169
  - `core_entities` = `specs/domain-knowledge/core-entities.md`
170
- - `tech_docs_dir` = `tech-docs`
170
+ - `tech_docs_dir` = `specs/tech-docs`
171
171
  - `trace_dir` = `.trace`
172
172
 
173
173
  If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
@@ -244,6 +244,26 @@ If the file does not exist → skip silently.
244
244
 
245
245
  ---
246
246
 
247
+ ## Step 6.5 — [PLATFORM] Derive active_module and platform_type
248
+
249
+ Using `tech_stack.module` loaded in Step 1, derive and store two variables for use by all downstream commands:
250
+
251
+ ```
252
+ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
253
+ ```
254
+
255
+ | `platform_type` | Modules |
256
+ |---|---|
257
+ | `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
258
+ | `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
259
+ | `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
260
+
261
+ If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
262
+
263
+ 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).
264
+
265
+ ---
266
+
247
267
  ## Step 7 — [RECAP] Working Memory Recap (anti-lost-in-middle)
248
268
 
249
269
  After loading all context, synthesize and output a compact summary block.
@@ -254,6 +274,7 @@ Output exactly this block:
254
274
  ```
255
275
  [CTX LOADED]
256
276
  Stack : {language} / {framework} / {database}
277
+ Platform : {active_module} ({platform_type})
257
278
  Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
258
279
  Ticket : {ticket_prefix}-
259
280
  Dict : {loaded — N canonical terms, M banned terms | missing}
@@ -387,6 +408,7 @@ Suggest the logical next command based on workflow phase:
387
408
 
388
409
  | Current command | Suggest next |
389
410
  |-------------------------|-----------------------------------------------|
411
+ | /setup-ai-first | `/define-product` to start your first feature |
390
412
  | /define-product | `/generate-prd {product-definition-file}` |
391
413
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
392
414
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -395,13 +417,13 @@ Suggest the logical next command based on workflow phase:
395
417
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
396
418
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
397
419
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
398
- | /generate-code | `/generate-tests {UC-ID}` |
420
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
399
421
  | /generate-tests | `/run-tests {UC-ID}` |
400
422
  | /run-tests (passing) | `/review-code {UC-ID}` |
401
423
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
402
424
  | /review-code | `/smoke-test {UC-ID}` or create PR |
403
425
  | /smoke-test | Create PR and link to ticket |
404
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
426
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
405
427
  | /fix-bug | Create PR and link to ticket |
406
428
  | /debug | `/fix-bug {ticket-id}` if fix needed |
407
429
 
@@ -498,6 +520,7 @@ Suggest the logical next command based on workflow phase:
498
520
 
499
521
  | Current command | Suggest next |
500
522
  |-------------------------|-----------------------------------------------|
523
+ | /setup-ai-first | `/define-product` to start your first feature |
501
524
  | /define-product | `/generate-prd {product-definition-file}` |
502
525
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
503
526
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -506,13 +529,13 @@ Suggest the logical next command based on workflow phase:
506
529
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
507
530
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
508
531
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
509
- | /generate-code | `/generate-tests {UC-ID}` |
532
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
510
533
  | /generate-tests | `/run-tests {UC-ID}` |
511
534
  | /run-tests (passing) | `/review-code {UC-ID}` |
512
535
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
513
536
  | /review-code | `/smoke-test {UC-ID}` or create PR |
514
537
  | /smoke-test | Create PR and link to ticket |
515
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
538
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
516
539
  | /fix-bug | Create PR and link to ticket |
517
540
  | /debug | `/fix-bug {ticket-id}` if fix needed |
518
541
 
@@ -82,7 +82,7 @@ If `paths` section is absent, use these defaults:
82
82
  - `domain_knowledge_dir` = `specs/domain-knowledge`
83
83
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
84
84
  - `core_entities` = `specs/domain-knowledge/core-entities.md`
85
- - `tech_docs_dir` = `tech-docs`
85
+ - `tech_docs_dir` = `specs/tech-docs`
86
86
  - `trace_dir` = `.trace`
87
87
 
88
88
  If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
@@ -159,6 +159,26 @@ If the file does not exist → skip silently.
159
159
 
160
160
  ---
161
161
 
162
+ ## Step 6.5 — [PLATFORM] Derive active_module and platform_type
163
+
164
+ Using `tech_stack.module` loaded in Step 1, derive and store two variables for use by all downstream commands:
165
+
166
+ ```
167
+ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
168
+ ```
169
+
170
+ | `platform_type` | Modules |
171
+ |---|---|
172
+ | `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
173
+ | `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
174
+ | `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
175
+
176
+ If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
177
+
178
+ 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).
179
+
180
+ ---
181
+
162
182
  ## Step 7 — [RECAP] Working Memory Recap (anti-lost-in-middle)
163
183
 
164
184
  After loading all context, synthesize and output a compact summary block.
@@ -169,6 +189,7 @@ Output exactly this block:
169
189
  ```
170
190
  [CTX LOADED]
171
191
  Stack : {language} / {framework} / {database}
192
+ Platform : {active_module} ({platform_type})
172
193
  Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
173
194
  Ticket : {ticket_prefix}-
174
195
  Dict : {loaded — N canonical terms, M banned terms | missing}
@@ -325,6 +346,7 @@ Suggest the logical next command based on workflow phase:
325
346
 
326
347
  | Current command | Suggest next |
327
348
  |-------------------------|-----------------------------------------------|
349
+ | /setup-ai-first | `/define-product` to start your first feature |
328
350
  | /define-product | `/generate-prd {product-definition-file}` |
329
351
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
330
352
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -333,13 +355,13 @@ Suggest the logical next command based on workflow phase:
333
355
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
334
356
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
335
357
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
336
- | /generate-code | `/generate-tests {UC-ID}` |
358
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
337
359
  | /generate-tests | `/run-tests {UC-ID}` |
338
360
  | /run-tests (passing) | `/review-code {UC-ID}` |
339
361
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
340
362
  | /review-code | `/smoke-test {UC-ID}` or create PR |
341
363
  | /smoke-test | Create PR and link to ticket |
342
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
364
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
343
365
  | /fix-bug | Create PR and link to ticket |
344
366
  | /debug | `/fix-bug {ticket-id}` if fix needed |
345
367
 
@@ -462,6 +484,7 @@ Suggest the logical next command based on workflow phase:
462
484
 
463
485
  | Current command | Suggest next |
464
486
  |-------------------------|-----------------------------------------------|
487
+ | /setup-ai-first | `/define-product` to start your first feature |
465
488
  | /define-product | `/generate-prd {product-definition-file}` |
466
489
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
467
490
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -470,13 +493,13 @@ Suggest the logical next command based on workflow phase:
470
493
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
471
494
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
472
495
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
473
- | /generate-code | `/generate-tests {UC-ID}` |
496
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
474
497
  | /generate-tests | `/run-tests {UC-ID}` |
475
498
  | /run-tests (passing) | `/review-code {UC-ID}` |
476
499
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
477
500
  | /review-code | `/smoke-test {UC-ID}` or create PR |
478
501
  | /smoke-test | Create PR and link to ticket |
479
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
502
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
480
503
  | /fix-bug | Create PR and link to ticket |
481
504
  | /debug | `/fix-bug {ticket-id}` if fix needed |
482
505
 
@@ -556,6 +579,7 @@ Suggest the logical next command based on workflow phase:
556
579
 
557
580
  | Current command | Suggest next |
558
581
  |-------------------------|-----------------------------------------------|
582
+ | /setup-ai-first | `/define-product` to start your first feature |
559
583
  | /define-product | `/generate-prd {product-definition-file}` |
560
584
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
561
585
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -564,13 +588,13 @@ Suggest the logical next command based on workflow phase:
564
588
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
565
589
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
566
590
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
567
- | /generate-code | `/generate-tests {UC-ID}` |
591
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
568
592
  | /generate-tests | `/run-tests {UC-ID}` |
569
593
  | /run-tests (passing) | `/review-code {UC-ID}` |
570
594
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
571
595
  | /review-code | `/smoke-test {UC-ID}` or create PR |
572
596
  | /smoke-test | Create PR and link to ticket |
573
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
597
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
574
598
  | /fix-bug | Create PR and link to ticket |
575
599
  | /debug | `/fix-bug {ticket-id}` if fix needed |
576
600
 
@@ -61,7 +61,7 @@ If `paths` section is absent, use these defaults:
61
61
  - `domain_knowledge_dir` = `specs/domain-knowledge`
62
62
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
63
63
  - `core_entities` = `specs/domain-knowledge/core-entities.md`
64
- - `tech_docs_dir` = `tech-docs`
64
+ - `tech_docs_dir` = `specs/tech-docs`
65
65
  - `trace_dir` = `.trace`
66
66
 
67
67
  If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
@@ -138,6 +138,26 @@ If the file does not exist → skip silently.
138
138
 
139
139
  ---
140
140
 
141
+ ## Step 6.5 — [PLATFORM] Derive active_module and platform_type
142
+
143
+ Using `tech_stack.module` loaded in Step 1, derive and store two variables for use by all downstream commands:
144
+
145
+ ```
146
+ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
147
+ ```
148
+
149
+ | `platform_type` | Modules |
150
+ |---|---|
151
+ | `backend` | `java-spring`, `golang`, `dotnet`, `php-laravel`, `context-engineering` |
152
+ | `web-frontend` | `react`, `nextjs`, `vue`, `nuxt`, `angular` |
153
+ | `mobile` | `flutter`, `react-native`, `ios-swiftui`, `android-compose` |
154
+
155
+ If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
156
+
157
+ 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).
158
+
159
+ ---
160
+
141
161
  ## Step 7 — [RECAP] Working Memory Recap (anti-lost-in-middle)
142
162
 
143
163
  After loading all context, synthesize and output a compact summary block.
@@ -148,6 +168,7 @@ Output exactly this block:
148
168
  ```
149
169
  [CTX LOADED]
150
170
  Stack : {language} / {framework} / {database}
171
+ Platform : {active_module} ({platform_type})
151
172
  Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
152
173
  Ticket : {ticket_prefix}-
153
174
  Dict : {loaded — N canonical terms, M banned terms | missing}
@@ -335,6 +356,7 @@ Suggest the logical next command based on workflow phase:
335
356
 
336
357
  | Current command | Suggest next |
337
358
  |-------------------------|-----------------------------------------------|
359
+ | /setup-ai-first | `/define-product` to start your first feature |
338
360
  | /define-product | `/generate-prd {product-definition-file}` |
339
361
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
340
362
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -343,13 +365,13 @@ Suggest the logical next command based on workflow phase:
343
365
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
344
366
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
345
367
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
346
- | /generate-code | `/generate-tests {UC-ID}` |
368
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
347
369
  | /generate-tests | `/run-tests {UC-ID}` |
348
370
  | /run-tests (passing) | `/review-code {UC-ID}` |
349
371
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
350
372
  | /review-code | `/smoke-test {UC-ID}` or create PR |
351
373
  | /smoke-test | Create PR and link to ticket |
352
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
374
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
353
375
  | /fix-bug | Create PR and link to ticket |
354
376
  | /debug | `/fix-bug {ticket-id}` if fix needed |
355
377
 
@@ -43,7 +43,7 @@ Display and wait for response:
43
43
  ```
44
44
  ⚙️ MODEL CHECK
45
45
  ──────────────────────────────────────────────────────────────────
46
- Recommended : claude-opus-4-5 (or claude-opus-4)
46
+ Recommended : claude-opus-4 (or latest Opus model)
47
47
  Why needed : Spec analysis, architecture review, code generation
48
48
  require deep reasoning. Smaller models miss edge cases.
49
49
 
@@ -186,6 +186,7 @@ Suggest the logical next command based on workflow phase:
186
186
 
187
187
  | Current command | Suggest next |
188
188
  |-------------------------|-----------------------------------------------|
189
+ | /setup-ai-first | `/define-product` to start your first feature |
189
190
  | /define-product | `/generate-prd {product-definition-file}` |
190
191
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
191
192
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -194,13 +195,13 @@ Suggest the logical next command based on workflow phase:
194
195
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
195
196
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
196
197
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
197
- | /generate-code | `/generate-tests {UC-ID}` |
198
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
198
199
  | /generate-tests | `/run-tests {UC-ID}` |
199
200
  | /run-tests (passing) | `/review-code {UC-ID}` |
200
201
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
201
202
  | /review-code | `/smoke-test {UC-ID}` or create PR |
202
203
  | /smoke-test | Create PR and link to ticket |
203
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
204
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
204
205
  | /fix-bug | Create PR and link to ticket |
205
206
  | /debug | `/fix-bug {ticket-id}` if fix needed |
206
207
 
@@ -252,7 +253,7 @@ Display and wait for response:
252
253
  ```
253
254
  ⚙️ MODEL CHECK
254
255
  ──────────────────────────────────────────────────────────────────
255
- Recommended : claude-opus-4-5 (or claude-opus-4)
256
+ Recommended : claude-opus-4 (or latest Opus model)
256
257
  Why needed : Spec analysis, architecture review, code generation
257
258
  require deep reasoning. Smaller models miss edge cases.
258
259
 
@@ -428,6 +429,7 @@ Suggest the logical next command based on workflow phase:
428
429
 
429
430
  | Current command | Suggest next |
430
431
  |-------------------------|-----------------------------------------------|
432
+ | /setup-ai-first | `/define-product` to start your first feature |
431
433
  | /define-product | `/generate-prd {product-definition-file}` |
432
434
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
433
435
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -436,13 +438,13 @@ Suggest the logical next command based on workflow phase:
436
438
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
437
439
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
438
440
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
439
- | /generate-code | `/generate-tests {UC-ID}` |
441
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
440
442
  | /generate-tests | `/run-tests {UC-ID}` |
441
443
  | /run-tests (passing) | `/review-code {UC-ID}` |
442
444
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
443
445
  | /review-code | `/smoke-test {UC-ID}` or create PR |
444
446
  | /smoke-test | Create PR and link to ticket |
445
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
447
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
446
448
  | /fix-bug | Create PR and link to ticket |
447
449
  | /debug | `/fix-bug {ticket-id}` if fix needed |
448
450
 
@@ -132,6 +132,7 @@ Suggest the logical next command based on workflow phase:
132
132
 
133
133
  | Current command | Suggest next |
134
134
  |-------------------------|-----------------------------------------------|
135
+ | /setup-ai-first | `/define-product` to start your first feature |
135
136
  | /define-product | `/generate-prd {product-definition-file}` |
136
137
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
137
138
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -140,13 +141,13 @@ Suggest the logical next command based on workflow phase:
140
141
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
141
142
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
142
143
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
143
- | /generate-code | `/generate-tests {UC-ID}` |
144
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
144
145
  | /generate-tests | `/run-tests {UC-ID}` |
145
146
  | /run-tests (passing) | `/review-code {UC-ID}` |
146
147
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
147
148
  | /review-code | `/smoke-test {UC-ID}` or create PR |
148
149
  | /smoke-test | Create PR and link to ticket |
149
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
150
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
150
151
  | /fix-bug | Create PR and link to ticket |
151
152
  | /debug | `/fix-bug {ticket-id}` if fix needed |
152
153
 
@@ -43,7 +43,7 @@ Display and wait for response:
43
43
  ```
44
44
  ⚙️ MODEL CHECK
45
45
  ──────────────────────────────────────────────────────────────────
46
- Recommended : claude-opus-4-5 (or claude-opus-4)
46
+ Recommended : claude-opus-4 (or latest Opus model)
47
47
  Why needed : Spec analysis, architecture review, code generation
48
48
  require deep reasoning. Smaller models miss edge cases.
49
49
 
@@ -203,6 +203,7 @@ Suggest the logical next command based on workflow phase:
203
203
 
204
204
  | Current command | Suggest next |
205
205
  |-------------------------|-----------------------------------------------|
206
+ | /setup-ai-first | `/define-product` to start your first feature |
206
207
  | /define-product | `/generate-prd {product-definition-file}` |
207
208
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
208
209
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -211,13 +212,13 @@ Suggest the logical next command based on workflow phase:
211
212
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
212
213
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
213
214
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
214
- | /generate-code | `/generate-tests {UC-ID}` |
215
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
215
216
  | /generate-tests | `/run-tests {UC-ID}` |
216
217
  | /run-tests (passing) | `/review-code {UC-ID}` |
217
218
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
218
219
  | /review-code | `/smoke-test {UC-ID}` or create PR |
219
220
  | /smoke-test | Create PR and link to ticket |
220
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
221
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
221
222
  | /fix-bug | Create PR and link to ticket |
222
223
  | /debug | `/fix-bug {ticket-id}` if fix needed |
223
224
 
@@ -333,6 +334,7 @@ Suggest the logical next command based on workflow phase:
333
334
 
334
335
  | Current command | Suggest next |
335
336
  |-------------------------|-----------------------------------------------|
337
+ | /setup-ai-first | `/define-product` to start your first feature |
336
338
  | /define-product | `/generate-prd {product-definition-file}` |
337
339
  | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
338
340
  | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
@@ -341,13 +343,13 @@ Suggest the logical next command based on workflow phase:
341
343
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
342
344
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
343
345
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
344
- | /generate-code | `/generate-tests {UC-ID}` |
346
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
345
347
  | /generate-tests | `/run-tests {UC-ID}` |
346
348
  | /run-tests (passing) | `/review-code {UC-ID}` |
347
349
  | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
348
350
  | /review-code | `/smoke-test {UC-ID}` or create PR |
349
351
  | /smoke-test | Create PR and link to ticket |
350
- | /validate-traces | `/generate-code {UC-ID}` for gaps |
352
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
351
353
  | /fix-bug | Create PR and link to ticket |
352
354
  | /debug | `/fix-bug {ticket-id}` if fix needed |
353
355