agile-context-engineering 0.2.2 → 0.5.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 (146) hide show
  1. package/.claude-plugin/plugin.json +10 -0
  2. package/CHANGELOG.md +82 -0
  3. package/README.md +27 -18
  4. package/agents/ace-product-owner.md +1 -1
  5. package/agents/ace-technical-application-architect.md +28 -0
  6. package/agents/ace-wiki-mapper.md +144 -29
  7. package/bin/install.js +67 -63
  8. package/hooks/ace-check-update.js +17 -9
  9. package/package.json +7 -5
  10. package/shared/lib/ace-core.js +308 -0
  11. package/shared/lib/ace-core.test.js +308 -0
  12. package/shared/lib/ace-github.js +753 -0
  13. package/shared/lib/ace-story.js +400 -0
  14. package/shared/lib/ace-story.test.js +250 -0
  15. package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
  16. package/skills/execute-story/SKILL.md +110 -0
  17. package/skills/execute-story/script.js +305 -0
  18. package/skills/execute-story/script.test.js +261 -0
  19. package/skills/execute-story/walkthrough-template.xml +255 -0
  20. package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +83 -9
  21. package/skills/help/SKILL.md +69 -0
  22. package/skills/help/script.js +318 -0
  23. package/skills/help/script.test.js +183 -0
  24. package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +8 -8
  25. package/skills/init-coding-standards/SKILL.md +72 -0
  26. package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +38 -0
  27. package/skills/init-coding-standards/script.js +59 -0
  28. package/skills/init-coding-standards/script.test.js +70 -0
  29. package/{agile-context-engineering/workflows/init-coding-standards.xml → skills/init-coding-standards/workflow.xml} +4 -9
  30. package/skills/map-cross-cutting/SKILL.md +89 -0
  31. package/skills/map-cross-cutting/workflow.xml +330 -0
  32. package/skills/map-guide/SKILL.md +89 -0
  33. package/skills/map-guide/workflow.xml +320 -0
  34. package/skills/map-pattern/SKILL.md +89 -0
  35. package/skills/map-pattern/workflow.xml +331 -0
  36. package/skills/map-story/SKILL.md +127 -0
  37. package/skills/map-story/templates/guide.xml +137 -0
  38. package/skills/map-story/templates/pattern.xml +159 -0
  39. package/skills/map-story/templates/system-cross-cutting.xml +197 -0
  40. package/skills/map-story/templates/walkthrough.xml +255 -0
  41. package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +258 -9
  42. package/skills/map-subsystem/SKILL.md +111 -0
  43. package/skills/map-subsystem/script.js +60 -0
  44. package/skills/map-subsystem/script.test.js +68 -0
  45. package/skills/map-subsystem/templates/decizions.xml +115 -0
  46. package/skills/map-subsystem/templates/guide.xml +137 -0
  47. package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/module-discovery.xml +3 -3
  48. package/skills/map-subsystem/templates/pattern.xml +159 -0
  49. package/skills/map-subsystem/templates/system-cross-cutting.xml +197 -0
  50. package/skills/map-subsystem/templates/system.xml +381 -0
  51. package/skills/map-subsystem/templates/walkthrough.xml +255 -0
  52. package/{agile-context-engineering/workflows/map-subsystem.xml → skills/map-subsystem/workflow.xml} +17 -21
  53. package/skills/map-sys-doc/SKILL.md +90 -0
  54. package/skills/map-sys-doc/system.xml +381 -0
  55. package/skills/map-sys-doc/workflow.xml +336 -0
  56. package/skills/map-system/SKILL.md +85 -0
  57. package/skills/map-system/script.js +84 -0
  58. package/skills/map-system/script.test.js +73 -0
  59. package/skills/map-system/templates/wiki-readme.xml +297 -0
  60. package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +11 -16
  61. package/skills/map-walkthrough/SKILL.md +92 -0
  62. package/skills/map-walkthrough/walkthrough.xml +255 -0
  63. package/skills/map-walkthrough/workflow.xml +457 -0
  64. package/skills/plan-backlog/SKILL.md +75 -0
  65. package/skills/plan-backlog/script.js +136 -0
  66. package/skills/plan-backlog/script.test.js +83 -0
  67. package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +13 -21
  68. package/skills/plan-feature/SKILL.md +76 -0
  69. package/skills/plan-feature/script.js +148 -0
  70. package/skills/plan-feature/script.test.js +80 -0
  71. package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +21 -29
  72. package/skills/plan-product-vision/SKILL.md +75 -0
  73. package/skills/plan-product-vision/script.js +60 -0
  74. package/skills/plan-product-vision/script.test.js +69 -0
  75. package/{agile-context-engineering/workflows/plan-product-vision.xml → skills/plan-product-vision/workflow.xml} +4 -9
  76. package/skills/plan-story/SKILL.md +116 -0
  77. package/skills/plan-story/script.js +326 -0
  78. package/skills/plan-story/script.test.js +240 -0
  79. package/skills/plan-story/story-template.xml +451 -0
  80. package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1285 -909
  81. package/skills/research-external-solution/SKILL.md +107 -0
  82. package/skills/research-external-solution/script.js +238 -0
  83. package/skills/research-external-solution/script.test.js +134 -0
  84. package/{agile-context-engineering/workflows/research-external-solution.xml → skills/research-external-solution/workflow.xml} +4 -6
  85. package/skills/research-integration-solution/SKILL.md +98 -0
  86. package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1 -0
  87. package/skills/research-integration-solution/script.js +231 -0
  88. package/skills/research-integration-solution/script.test.js +134 -0
  89. package/{agile-context-engineering/workflows/research-integration-solution.xml → skills/research-integration-solution/workflow.xml} +4 -5
  90. package/skills/research-story-wiki/SKILL.md +92 -0
  91. package/skills/research-story-wiki/script.js +231 -0
  92. package/skills/research-story-wiki/script.test.js +138 -0
  93. package/{agile-context-engineering/templates/product/story-wiki.xml → skills/research-story-wiki/story-wiki-template.xml} +4 -0
  94. package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +5 -6
  95. package/skills/research-technical-solution/SKILL.md +103 -0
  96. package/skills/research-technical-solution/script.js +231 -0
  97. package/skills/research-technical-solution/script.test.js +134 -0
  98. package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +4 -5
  99. package/skills/review-story/SKILL.md +100 -0
  100. package/skills/review-story/script.js +257 -0
  101. package/skills/review-story/script.test.js +169 -0
  102. package/skills/review-story/story-template.xml +451 -0
  103. package/{agile-context-engineering/workflows/review-story.xml → skills/review-story/workflow.xml} +1 -3
  104. package/skills/update/SKILL.md +53 -0
  105. package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +237 -207
  106. package/agile-context-engineering/src/ace-tools.js +0 -2881
  107. package/agile-context-engineering/src/ace-tools.test.js +0 -1089
  108. package/agile-context-engineering/templates/_command.md +0 -54
  109. package/agile-context-engineering/templates/_workflow.xml +0 -17
  110. package/agile-context-engineering/templates/config.json +0 -0
  111. package/agile-context-engineering/templates/product/integration-solution.xml +0 -0
  112. package/agile-context-engineering/templates/wiki/wiki-readme.xml +0 -276
  113. package/commands/ace/execute-story.md +0 -137
  114. package/commands/ace/help.md +0 -93
  115. package/commands/ace/init-coding-standards.md +0 -83
  116. package/commands/ace/map-story.md +0 -156
  117. package/commands/ace/map-subsystem.md +0 -138
  118. package/commands/ace/map-system.md +0 -92
  119. package/commands/ace/plan-backlog.md +0 -83
  120. package/commands/ace/plan-feature.md +0 -89
  121. package/commands/ace/plan-product-vision.md +0 -81
  122. package/commands/ace/plan-story.md +0 -145
  123. package/commands/ace/research-external-solution.md +0 -138
  124. package/commands/ace/research-integration-solution.md +0 -135
  125. package/commands/ace/research-story-wiki.md +0 -116
  126. package/commands/ace/research-technical-solution.md +0 -147
  127. package/commands/ace/review-story.md +0 -109
  128. package/commands/ace/update.md +0 -54
  129. /package/{agile-context-engineering → shared}/utils/questioning.xml +0 -0
  130. /package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +0 -0
  131. /package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +0 -0
  132. /package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +0 -0
  133. /package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +0 -0
  134. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +0 -0
  135. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +0 -0
  136. /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +0 -0
  137. /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +0 -0
  138. /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +0 -0
  139. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +0 -0
  140. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +0 -0
  141. /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +0 -0
  142. /package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +0 -0
  143. /package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +0 -0
  144. /package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +0 -0
  145. /package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +0 -0
  146. /package/{agile-context-engineering/templates/product/story-technical-solution.xml → skills/research-technical-solution/technical-solution-template.xml} +0 -0
@@ -5,11 +5,12 @@
5
5
  exists (file mode), then create or update topic-scoped documents in
6
6
  `.docs/wiki/subsystems/[subsystem-name]/`.
7
7
 
8
- Produces documents across five categories:
8
+ Produces documents across six categories:
9
9
  - systems/ — WHAT exists (domain subsystems and their current state)
10
10
  - patterns/ — HOW things work (reusable implementation patterns)
11
11
  - cross-cutting/ — concerns spanning multiple systems
12
12
  - guides/ — step-by-step recipes for common implementation tasks
13
+ - walkthroughs/ — deep tutorial-style flow explanations with actual code snippets
13
14
  - decisions/ — WHY significant choices were made (ADRs)
14
15
 
15
16
  Two input modes that converge into ONE execution flow:
@@ -199,6 +200,153 @@
199
200
  </variant>
200
201
  </substep>
201
202
 
203
+ <substep order="2e" name="detect-new-subsystems">
204
+ Detect whether any subsystems in `subsystem_work` are NEW (not yet documented
205
+ in system-structure.md). If found, offer to run full subsystem mapping via
206
+ /ace:map-subsystem before proceeding with per-change documentation.
207
+
208
+ Only runs in story mode. Naturally skipped when map-story is invoked as a
209
+ background agent (e.g., from execute-story) because the required tools —
210
+ Agent, AskUserQuestion — are unavailable to ace-wiki-mapper agents.
211
+
212
+ <substep order="2e.1" name="check-system-structure">
213
+ Check if `.docs/wiki/system-wide/system-structure.md` exists.
214
+
215
+ <variant condition="file does not exist">
216
+ Display:
217
+ ```
218
+ i system-structure.md not found — skipping new subsystem detection.
219
+ Run /ace:map-system first to create system-wide documentation.
220
+ ```
221
+ Skip the rest of substep 2e.
222
+ </variant>
223
+
224
+ <variant condition="file exists">
225
+ Read `.docs/wiki/system-wide/system-structure.md`.
226
+ Parse the **Subsystem Index** table to extract known subsystem
227
+ directory paths (the Directory column values).
228
+ Store as `known_subsystems`.
229
+ </variant>
230
+ </substep>
231
+
232
+ <substep order="2e.2" name="identify-new-subsystems">
233
+ For each subsystem key in `subsystem_work`, determine its source
234
+ directory path from the changed file paths (the common parent
235
+ directory at the subsystem root level).
236
+
237
+ Compare against `known_subsystems`. Any subsystem whose directory
238
+ path is NOT in the list → add to `new_subsystems` with name and path.
239
+
240
+ <variant condition="new_subsystems is empty">
241
+ No new subsystems detected — skip the rest of substep 2e.
242
+ </variant>
243
+ </substep>
244
+
245
+ <substep order="2e.3" name="ask-user-approval">
246
+ Display:
247
+ ```
248
+ ! New subsystem(s) detected — not yet in system-structure.md:
249
+
250
+ [For each new subsystem:]
251
+ - [subsystem-name] at [path] ([N] changed files)
252
+ ```
253
+
254
+ Use AskUserQuestion:
255
+ - header: "New Subsystem"
256
+ - question: "This story added files in [count] subsystem(s) not yet
257
+ documented in system-structure.md:\n\n[list: name at path]\n\nFull
258
+ mapping creates structure.md, architecture.md, module discovery, and
259
+ all knowledge docs (systems/, patterns/, cross-cutting/, guides/,
260
+ decisions/). It also updates system-structure.md and
261
+ system-architecture.md.\n\nShould I run full subsystem mapping?"
262
+ - options:
263
+ - "Yes, map new subsystem(s)" — Run /ace:map-subsystem for each
264
+ new subsystem, then continue with remaining work
265
+ - "No, just document the changes" — Treat them like existing
266
+ subsystems (lightweight per-change docs only)
267
+
268
+ <option value="No, just document the changes">
269
+ Skip the rest of substep 2e — new subsystems stay in
270
+ `subsystem_work` for normal step 3 processing.
271
+ </option>
272
+ </substep>
273
+
274
+ <substep order="2e.4" name="run-map-subsystem" condition="user approved">
275
+ For each subsystem in `new_subsystems`, run map-subsystem SEQUENTIALLY
276
+ (each spawns many internal sub-agents — parallel would be too heavy).
277
+
278
+ Store results in `new_subsystem_reports` list.
279
+
280
+ <loop for-each="subsystem in new_subsystems">
281
+ Display:
282
+ ```
283
+ ┌──────────────────────────────────────────────────┐
284
+ │ ACE > Map Story > New Subsystem Mapping │
285
+ └──────────────────────────────────────────────────┘
286
+
287
+ Mapping [subsystem.name] at [subsystem.path]...
288
+ ([index] of [total] new subsystems)
289
+ ```
290
+
291
+ ```
292
+ Agent(
293
+ prompt="/ace:map-subsystem subsystem=\"[subsystem.path]\"
294
+
295
+ Execute the map-subsystem workflow end-to-end.
296
+ This is a NEW subsystem — no existing docs to triage
297
+ (all documents will be created fresh).
298
+
299
+ **Return format — ONLY this, nothing else:**
300
+ MAP-SUBSYSTEM COMPLETE
301
+ Subsystem: [subsystem.name]
302
+ - Structure: created ([N] lines)
303
+ - Architecture: created ([N] lines)
304
+ - Modules discovered: [count]
305
+ - Knowledge docs created: [count]
306
+ - system-structure.md: updated
307
+ - system-architecture.md: updated",
308
+ subagent_type="general-purpose",
309
+ description="Map new subsystem [subsystem.name]"
310
+ )
311
+ ```
312
+
313
+ Parse the agent's return and add to `new_subsystem_reports`.
314
+
315
+ Display:
316
+ ```
317
+ + [subsystem.name] mapping complete — [count] docs created
318
+ ```
319
+ </loop>
320
+ </substep>
321
+
322
+ <substep order="2e.5" name="prune-work-map" condition="user approved">
323
+ Remove all `new_subsystems` entries from `subsystem_work` to prevent
324
+ duplicate documentation in step 3 (map-subsystem already created full
325
+ structure, architecture, module discovery, AND all knowledge docs).
326
+
327
+ Display:
328
+ ```
329
+ i Removed [count] fully-mapped subsystem(s) from work queue.
330
+ Remaining for per-change documentation: [list remaining, or "none"]
331
+ ```
332
+
333
+ <variant condition="subsystem_work is now empty AND tech_debt_items exist for new subsystems">
334
+ map-subsystem does NOT handle tech debt integration. Spawn a
335
+ lightweight ace-wiki-mapper agent per new subsystem that has
336
+ tech_debt_items, with instructions to ONLY add ## Tech Debt
337
+ sections to the docs that map-subsystem just created.
338
+ </variant>
339
+
340
+ <variant condition="subsystem_work is now empty AND no tech debt">
341
+ Skip steps 3-4, jump to step 5 (tech debt index update).
342
+ </variant>
343
+
344
+ <variant condition="subsystem_work still has entries">
345
+ Continue to step 3 normally with the reduced work map.
346
+ </variant>
347
+ </substep>
348
+ </substep>
349
+
202
350
  </mode>
203
351
 
204
352
  <!-- ── File Mode ──────────────────────────────────────────────── -->
@@ -339,11 +487,12 @@
339
487
  <instruction order="0" name="read-templates">
340
488
  TEMPLATES — Read ALL of these before writing ANY docs:
341
489
 
342
- - System docs: .claude/templates/system.xml
343
- - Pattern docs: .claude/templates/pattern.xml
344
- - Cross-cutting docs: .claude/templates/system-cross-cutting.xml
345
- - Guide docs: .claude/templates/guide.xml
346
- - Decision docs: .claude/templates/decizions.xml
490
+ - System docs: ${CLAUDE_SKILL_DIR}/templates/system.xml
491
+ - Pattern docs: ${CLAUDE_SKILL_DIR}/templates/pattern.xml
492
+ - Cross-cutting docs: ${CLAUDE_SKILL_DIR}/templates/system-cross-cutting.xml
493
+ - Guide docs: ${CLAUDE_SKILL_DIR}/templates/guide.xml
494
+ - Walkthrough docs: ${CLAUDE_SKILL_DIR}/templates/walkthrough.xml
495
+ - Decision docs: ${CLAUDE_SKILL_DIR}/templates/decizions.xml
347
496
  </instruction>
348
497
 
349
498
  <instruction order="0" name="inputs">
@@ -417,6 +566,7 @@
417
566
  <item>patterns/*.md — every pattern document, complete</item>
418
567
  <item>cross-cutting/*.md — every cross-cutting document, complete</item>
419
568
  <item>guides/*.md — every guide document, complete</item>
569
+ <item>walkthroughs/*.md — every walkthrough document, complete</item>
420
570
  <item>decisions/*.md — every ADR, complete</item>
421
571
  </checklist>
422
572
  </substep>
@@ -428,6 +578,7 @@
428
578
  <item>Which patterns are already documented? What implementations are listed?</item>
429
579
  <item>Which cross-cutting concerns are documented? What registrations are listed?</item>
430
580
  <item>Which guides exist? Are the steps still accurate?</item>
581
+ <item>Which walkthroughs exist? Are the code snippets still accurate? Which flows do they cover?</item>
431
582
  <item>Which decisions are recorded?</item>
432
583
  </checklist>
433
584
  </substep>
@@ -437,7 +588,7 @@
437
588
 
438
589
  If the wiki directory does not exist:
439
590
  ```bash
440
- mkdir -p .docs/wiki/subsystems/[subsystem_name]/{systems,patterns,cross-cutting,guides,decisions}
591
+ mkdir -p .docs/wiki/subsystems/[subsystem_name]/{systems,patterns,cross-cutting,guides,walkthroughs,decisions}
441
592
  ```
442
593
  </instruction>
443
594
 
@@ -453,6 +604,7 @@
453
604
  <rule pattern="Reusable structural pattern (2+ similar)" target="patterns/" />
454
605
  <rule pattern="Shared infrastructure (DI, events, registry)" target="cross-cutting/" />
455
606
  <rule pattern="Common repeatable task recipe" target="guides/" />
607
+ <rule pattern="Complex multi-class flow with framework involvement" target="walkthroughs/" />
456
608
  <rule pattern="Significant architectural 'why' decision" target="decisions/" />
457
609
  </categorization-rules>
458
610
  </substep>
@@ -595,7 +747,26 @@
595
747
  Include tech debt integration in your report.
596
748
  </instruction>
597
749
 
598
- <instruction order="F" name="report">
750
+ <instruction order="F" name="walkthrough-suggestions">
751
+ WALKTHROUGH SUGGESTIONS
752
+
753
+ After documenting, analyze the code you just read for potential
754
+ walkthrough candidates. A flow is a walkthrough candidate when:
755
+ - It spans 3+ classes across multiple layers (handler -> service -> repository -> db)
756
+ - External frameworks/libraries are involved (SignalR, EF Core, gRPC, Microsoft Agent Framework etc.)
757
+ - The flow is complex enough that an intern couldn't follow it from code alone
758
+ - No existing walkthrough already covers this flow
759
+
760
+ Check `.docs/wiki/subsystems/[subsystem_name]/walkthroughs/` for existing
761
+ walkthroughs. Do NOT suggest flows already covered.
762
+
763
+ For each candidate, identify:
764
+ - A natural language flow description (start -> end)
765
+ - Which emphasis-frameworks would be valuable (if any)
766
+ - Why this flow deserves a walkthrough (1 line)
767
+ </instruction>
768
+
769
+ <instruction order="G" name="report">
599
770
  YOUR REPORT (return this)
600
771
 
601
772
  Return a structured report:
@@ -613,6 +784,16 @@
613
784
 
614
785
  Issues found (if any):
615
786
  - [description of any problems encountered]
787
+
788
+ Walkthrough suggestions:
789
+ - FLOW: [natural language flow description]
790
+ SUBSYSTEM: [subsystem_name]
791
+ EMPHASIS: [framework1, framework2, or "none"]
792
+ REASON: [why this deserves a walkthrough]
793
+ - FLOW: ...
794
+
795
+ [If no walkthrough candidates found:]
796
+ Walkthrough suggestions: none
616
797
  </instruction>
617
798
 
618
799
  </agent-instructions>
@@ -729,7 +910,14 @@
729
910
  **Story**: [story name from artifacts, or "Git changes"]
730
911
  **Affected Subsystems**: [list]
731
912
 
732
- [For each subsystem, include the agent's report:]
913
+ [If new_subsystem_reports is not empty:]
914
+
915
+ ### New Subsystems Mapped (via map-subsystem)
916
+ [For each new subsystem report:]
917
+ - **[subsystem.name]** at `[subsystem.path]` — [modules] modules, [docs] knowledge docs
918
+ Docs: `.docs/wiki/subsystems/[subsystem.name]/`
919
+
920
+ [For each remaining subsystem, include the agent's report:]
733
921
 
734
922
  ### [subsystem_name]
735
923
 
@@ -748,9 +936,66 @@
748
936
  ### Failures
749
937
  - [subsystem]: [error]
750
938
 
939
+ [If any agent reports contain walkthrough suggestions:]
940
+
941
+ ### Walkthrough Suggestions
942
+
943
+ [For each suggestion, numbered:]
944
+ [N]. [flow description]
945
+ Subsystem: [subsystem] | Emphasis: [frameworks or "none"]
946
+ [reason]
947
+ ```
948
+
949
+ **If walkthrough suggestions exist:**
950
+ Use AskUserQuestion:
951
+ - header: "Walkthroughs"
952
+ - question: "Would you like to create any of these walkthroughs?\nYou can also describe your own."
953
+ - options:
954
+ - "Create [numbers]" — e.g., "Create 1,3" or "Create all"
955
+ - "Custom" — user describes their own walkthrough
956
+ - "Skip" — no walkthroughs
957
+
958
+ **If "Skip":** Display next steps and end.
959
+
960
+ **If "Create [numbers]" or "Create all":**
961
+ For each selected suggestion, spawn a background agent:
962
+
963
+ ```
964
+ Agent(
965
+ prompt="/ace:map-walkthrough flow=\"{suggestion.flow}\" subsystem=\"{suggestion.subsystem}\" emphasis-frameworks=\"{suggestion.emphasis}\"
966
+
967
+ Execute the map-walkthrough workflow end-to-end.",
968
+ subagent_type="ace-wiki-mapper",
969
+ run_in_background=true,
970
+ description="Walkthrough: {short flow name}"
971
+ )
972
+ ```
973
+
974
+ **If "Custom":**
975
+ Ask the user for their flow description, subsystem, and optional emphasis-frameworks.
976
+ Spawn a background agent for that walkthrough too.
977
+
978
+ Wait for all walkthrough agents to complete.
979
+
980
+ Display:
981
+ ```
982
+ + [N] walkthrough(s) created.
983
+ [For each: path and line count]
984
+ ```
985
+
986
+ Stage and commit walkthrough files:
987
+ ```bash
988
+ git add .docs/wiki/subsystems/*/walkthroughs/
989
+ git commit -m "docs: add walkthroughs from map-story suggestions"
990
+ ```
991
+
992
+ **After walkthroughs (or if no suggestions):**
993
+
994
+ ```
751
995
  Next > `/clear` first for a fresh context window, then:
752
996
 
753
997
  /ace:map-story — document another story
998
+ /ace:map-walkthrough — create another walkthrough
754
999
  /ace:map-subsystem [subsystem] — map or refresh an entire subsystem
755
1000
  Review files in .docs/wiki/subsystems/
756
1001
  ```
@@ -792,6 +1037,10 @@
792
1037
  <criterion>Tech debt index updated with new items and recalculated counts (if provided)</criterion>
793
1038
  <criterion>Security scan passed (no secrets in generated docs)</criterion>
794
1039
  <criterion>Clear structured report from each agent, merged into final report</criterion>
1040
+ <criterion>New subsystems detected by comparing subsystem_work against system-structure.md Subsystem Index (story mode only)</criterion>
1041
+ <criterion>User approval required before running map-subsystem on new subsystems</criterion>
1042
+ <criterion>New subsystems removed from subsystem_work after map-subsystem to prevent duplicate docs</criterion>
1043
+ <criterion>New subsystem mapping results included in final report</criterion>
795
1044
  </success_criteria>
796
1045
 
797
1046
  </workflow>
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: map-subsystem
3
+ description: Map a subsystem's structure, architecture, and knowledge docs into .docs/wiki/subsystems/[name]/
4
+ argument-hint: "subsystem='src/api' (or subsystem name) existing-docs=comma separated paths | directory"
5
+ disable-model-invocation: true
6
+ allowed-tools: Read, Bash, Glob, Grep, Write, Task, AskUserQuestion
7
+ model: opus
8
+ effort: max
9
+ ---
10
+
11
+ # Map Subsystem
12
+
13
+ Map a subsystem's structure, architecture, and knowledge docs into .docs/wiki/subsystems/[name]/.
14
+
15
+ ## When to Use
16
+
17
+ - After `/ace:map-system` — drill into individual subsystems
18
+ - Anytime to refresh an existing subsystem's wiki documents
19
+ - When a new subsystem is added and needs to be documented
20
+ - A subsystem has not yet been documented in `.docs/wiki/subsystems/`
21
+ - An existing subsystem's docs are stale after a significant refactor
22
+ - You want a deep-dive view of a specific subsystem's internals (components, flows, data)
23
+
24
+ ## Input
25
+
26
+ ### Required
27
+
28
+ - **`subsystem`** — Path to the subsystem (e.g., `src/api`) or its name. If not provided, pause execution and ask the user for it. If provided but ambiguous, or not found in the codebase, ask clarifying questions.
29
+
30
+ ### Optional
31
+
32
+ - **`existing-docs`** — Pre-existing documentation relevant to this subsystem. Accepts file paths, directory paths, or a mix of both. When a directory is provided, recursively discover all files within it (including nested subdirectories). All resolved file paths are passed through to every map-story invocation (file mode) alongside any per-module docs discovered during module-discovery. Use this when the caller already knows about documentation that should inform knowledge-doc generation.
33
+
34
+ ## Environment Context (preprocessed)
35
+
36
+ !`node "${CLAUDE_SKILL_DIR}/script.js" init "$ARGUMENTS" 2>/dev/null`
37
+
38
+ ## Supporting Resources
39
+
40
+ Read ALL of these before starting the workflow:
41
+
42
+ - **Workflow**: Read [workflow.xml](workflow.xml) — complete orchestration process with all steps
43
+ - **Subsystem structure template**: Read [templates/subsystem-structure.xml](templates/subsystem-structure.xml) — output format for subsystem structure
44
+ - **Subsystem architecture template**: Read [templates/subsystem-architecture.xml](templates/subsystem-architecture.xml) — output format for subsystem architecture
45
+ - **Module discovery template**: Read [templates/module-discovery.xml](templates/module-discovery.xml) — format for module discovery artifact
46
+ - **System template**: Read [templates/system.xml](templates/system.xml) — format for system documents
47
+ - **Pattern template**: Read [templates/pattern.xml](templates/pattern.xml) — format for pattern documents
48
+ - **Cross-cutting template**: Read [templates/system-cross-cutting.xml](templates/system-cross-cutting.xml) — format for cross-cutting concern documents
49
+ - **Guide template**: Read [templates/guide.xml](templates/guide.xml) — format for guide documents
50
+ - **Walkthrough template**: Read [templates/walkthrough.xml](templates/walkthrough.xml) — format for walkthrough documents
51
+ - **Decisions template**: Read [templates/decizions.xml](templates/decizions.xml) — format for decision documents
52
+ - **Questioning guide**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/questioning.xml` — deep questioning techniques
53
+ - **UI formatting**: Read `${CLAUDE_SKILL_DIR}/../../shared/utils/ui-formatting.md` — ACE output formatting rules
54
+
55
+ ## Process
56
+
57
+ Use the `ace-wiki-mapper` agent for codebase analysis and document generation.
58
+
59
+ The Environment Context above contains the preprocessed INIT JSON — use it directly instead of running the init script manually. The workflow's step 1 setup can skip the init bash call since that data is already available.
60
+
61
+ Read all supporting resources listed above, then execute the workflow defined in [workflow.xml](workflow.xml) end-to-end. Preserve all workflow gates (validation, user questions, commits).
62
+
63
+ The workflow has 13 steps:
64
+ 1-5: Setup, context loading, subsystem resolution, document triage, directory creation
65
+ 6-8: Structure + architecture agents (parallel) + collect results
66
+ 9: Update system-wide docs (system-structure.md, system-architecture.md)
67
+ 10: Module discovery (3 parallel discovery agents + 1 synthesis agent)
68
+ 11: Knowledge documentation — run map-story for EACH discovered module (sequential)
69
+ 12: Verify and commit all documents
70
+ 13: Completion report
71
+
72
+ Steps 10-11 are CRITICAL — they produce the knowledge docs (systems/, patterns/, cross-cutting/, guides/, walkthroughs/, decisions/) that AI agents need for future implementations. Do NOT skip them.
73
+
74
+ ## Artifacts
75
+
76
+ ```
77
+ .docs/wiki/subsystems/[subsystem-name]/structure.md
78
+ .docs/wiki/subsystems/[subsystem-name]/architecture.md
79
+ .docs/wiki/subsystems/[subsystem-name]/systems/*.md
80
+ .docs/wiki/subsystems/[subsystem-name]/patterns/*.md
81
+ .docs/wiki/subsystems/[subsystem-name]/cross-cutting/*.md
82
+ .docs/wiki/subsystems/[subsystem-name]/guides/*.md
83
+ .docs/wiki/subsystems/[subsystem-name]/walkthroughs/*.md
84
+ .docs/wiki/subsystems/[subsystem-name]/decisions/*.md
85
+ .ace/artifacts/subsystems/[subsystem-name]/module-discovery/module-discovery.md
86
+ .ace/artifacts/subsystems/[subsystem-name]/module-discovery/existing-docs-inventory.md
87
+ .docs/wiki/system-wide/system-structure.md (subsystem entry added if new)
88
+ .docs/wiki/system-wide/system-architecture.md (subsystem responsibility matrix updated)
89
+ ```
90
+
91
+ ## Example Usage
92
+
93
+ ```
94
+ # Map a subsystem by path
95
+ /ace:map-subsystem subsystem="src/api"
96
+
97
+ # Map a subsystem with existing docs
98
+ /ace:map-subsystem subsystem="src/auth" existing-docs="docs/auth-design.md,docs/auth/"
99
+
100
+ # Map a subsystem by name
101
+ /ace:map-subsystem subsystem="authentication"
102
+ ```
103
+
104
+ ## Next Steps
105
+
106
+ After this command, `/clear` first for a fresh context window, then:
107
+
108
+ - `/ace:map-subsystem subsystem="src/other"` — Map another subsystem
109
+ - `/ace:init-coding-standards` — Define prescriptive coding standards
110
+ - `/ace:help` — Check project initialization status and next steps
111
+ - Review and edit files in `.docs/wiki/subsystems/` anytime
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * map-subsystem skill script — Entry point for ace-tools operations
5
+ * needed by the map-subsystem skill.
6
+ *
7
+ * Subcommands:
8
+ * init [args] Environment detection for map-subsystem workflow
9
+ *
10
+ * Usage: node script.js <subcommand> [args] [--raw]
11
+ */
12
+
13
+ const {
14
+ loadConfig, pathExists, resolveModel,
15
+ detectBrownfieldStatus, output, error,
16
+ } = require('../../shared/lib/ace-core');
17
+
18
+ // ─── CLI Dispatch ────────────────────────────────────────────────────────────
19
+
20
+ const cwd = process.cwd();
21
+ const args = process.argv.slice(2);
22
+ const raw = args.includes('--raw');
23
+ const cmd = args[0];
24
+
25
+ switch (cmd) {
26
+ case 'init':
27
+ cmdInit(cwd, raw, args.slice(1).filter(a => a !== '--raw'));
28
+ break;
29
+ default:
30
+ error(`Unknown command: ${cmd}\nAvailable: init`);
31
+ }
32
+
33
+ // ─── Init: Map Subsystem ────────────────────────────────────────────────────
34
+
35
+ function cmdInit(cwd, raw) {
36
+ const config = loadConfig(cwd);
37
+ const brownfield = detectBrownfieldStatus(cwd);
38
+
39
+ const wikiDir = '.docs/wiki/subsystems';
40
+ const wikiDirExists = pathExists(cwd, wikiDir);
41
+
42
+ const result = {
43
+ // Models
44
+ mapper_model: resolveModel(cwd, 'ace-wiki-mapper'),
45
+
46
+ // Config
47
+ commit_docs: config.commit_docs,
48
+
49
+ // Brownfield detection
50
+ ...brownfield,
51
+
52
+ // Wiki directory state
53
+ wiki_dir_exists: wikiDirExists,
54
+
55
+ // Git state
56
+ has_git: pathExists(cwd, '.git'),
57
+ };
58
+
59
+ output(result, raw);
60
+ }
@@ -0,0 +1,68 @@
1
+ const { describe, it, before, after } = require('node:test');
2
+ const assert = require('node:assert');
3
+ const { execSync } = require('child_process');
4
+ const fs = require('fs');
5
+ const path = require('path');
6
+ const os = require('os');
7
+
8
+ const SCRIPT = path.join(__dirname, 'script.js');
9
+
10
+ function createTestProject() {
11
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ace-test-'));
12
+
13
+ const aceDir = path.join(tmpDir, '.ace');
14
+ fs.mkdirSync(aceDir, { recursive: true });
15
+ fs.writeFileSync(path.join(aceDir, 'config.json'), JSON.stringify({
16
+ version: '0.1.0',
17
+ projectName: 'test-project',
18
+ model_profile: 'quality',
19
+ commit_docs: true,
20
+ github: { enabled: false },
21
+ }, null, 2));
22
+
23
+ return tmpDir;
24
+ }
25
+
26
+ function runScript(subcommand, args, cwd) {
27
+ return execSync(`node "${SCRIPT}" ${subcommand} ${args}`, {
28
+ cwd,
29
+ encoding: 'utf-8',
30
+ timeout: 10000,
31
+ });
32
+ }
33
+
34
+ function cleanup(tmpDir) {
35
+ fs.rmSync(tmpDir, { recursive: true, force: true });
36
+ }
37
+
38
+ describe('map-subsystem script', () => {
39
+ it('errors on unknown command', () => {
40
+ assert.throws(() => {
41
+ execSync(`node "${SCRIPT}" bogus`, { encoding: 'utf-8', stdio: 'pipe' });
42
+ });
43
+ });
44
+
45
+ describe('init', () => {
46
+ let tmpDir;
47
+
48
+ before(() => { tmpDir = createTestProject(); });
49
+ after(() => { cleanup(tmpDir); });
50
+
51
+ it('init returns valid JSON', () => {
52
+ const result = JSON.parse(runScript('init', '', tmpDir));
53
+ assert.ok(typeof result === 'object');
54
+ assert.ok(result.mapper_model, 'should have mapper_model');
55
+ assert.strictEqual(typeof result.commit_docs, 'boolean');
56
+ assert.strictEqual(typeof result.has_git, 'boolean');
57
+ assert.strictEqual(typeof result.is_brownfield, 'boolean');
58
+ assert.strictEqual(typeof result.wiki_dir_exists, 'boolean');
59
+ });
60
+
61
+ it('returns brownfield detection fields', () => {
62
+ const result = JSON.parse(runScript('init', '', tmpDir));
63
+ assert.strictEqual(typeof result.is_brownfield, 'boolean');
64
+ assert.strictEqual(typeof result.is_greenfield, 'boolean');
65
+ assert.strictEqual(result.is_brownfield, !result.is_greenfield);
66
+ });
67
+ });
68
+ });