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.
- package/.claude-plugin/plugin.json +10 -0
- package/CHANGELOG.md +82 -0
- package/README.md +27 -18
- package/agents/ace-product-owner.md +1 -1
- package/agents/ace-technical-application-architect.md +28 -0
- package/agents/ace-wiki-mapper.md +144 -29
- package/bin/install.js +67 -63
- package/hooks/ace-check-update.js +17 -9
- package/package.json +7 -5
- package/shared/lib/ace-core.js +308 -0
- package/shared/lib/ace-core.test.js +308 -0
- package/shared/lib/ace-github.js +753 -0
- package/shared/lib/ace-story.js +400 -0
- package/shared/lib/ace-story.test.js +250 -0
- package/{agile-context-engineering → shared}/utils/ui-formatting.md +299 -299
- package/skills/execute-story/SKILL.md +110 -0
- package/skills/execute-story/script.js +305 -0
- package/skills/execute-story/script.test.js +261 -0
- package/skills/execute-story/walkthrough-template.xml +255 -0
- package/{agile-context-engineering/workflows/execute-story.xml → skills/execute-story/workflow.xml} +83 -9
- package/skills/help/SKILL.md +69 -0
- package/skills/help/script.js +318 -0
- package/skills/help/script.test.js +183 -0
- package/{agile-context-engineering/workflows/help.xml → skills/help/workflow.xml} +8 -8
- package/skills/init-coding-standards/SKILL.md +72 -0
- package/{agile-context-engineering/templates/wiki/coding-standards.xml → skills/init-coding-standards/coding-standards-template.xml} +38 -0
- package/skills/init-coding-standards/script.js +59 -0
- package/skills/init-coding-standards/script.test.js +70 -0
- package/{agile-context-engineering/workflows/init-coding-standards.xml → skills/init-coding-standards/workflow.xml} +4 -9
- package/skills/map-cross-cutting/SKILL.md +89 -0
- package/skills/map-cross-cutting/workflow.xml +330 -0
- package/skills/map-guide/SKILL.md +89 -0
- package/skills/map-guide/workflow.xml +320 -0
- package/skills/map-pattern/SKILL.md +89 -0
- package/skills/map-pattern/workflow.xml +331 -0
- package/skills/map-story/SKILL.md +127 -0
- package/skills/map-story/templates/guide.xml +137 -0
- package/skills/map-story/templates/pattern.xml +159 -0
- package/skills/map-story/templates/system-cross-cutting.xml +197 -0
- package/skills/map-story/templates/walkthrough.xml +255 -0
- package/{agile-context-engineering/workflows/map-story.xml → skills/map-story/workflow.xml} +258 -9
- package/skills/map-subsystem/SKILL.md +111 -0
- package/skills/map-subsystem/script.js +60 -0
- package/skills/map-subsystem/script.test.js +68 -0
- package/skills/map-subsystem/templates/decizions.xml +115 -0
- package/skills/map-subsystem/templates/guide.xml +137 -0
- package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/module-discovery.xml +3 -3
- package/skills/map-subsystem/templates/pattern.xml +159 -0
- package/skills/map-subsystem/templates/system-cross-cutting.xml +197 -0
- package/skills/map-subsystem/templates/system.xml +381 -0
- package/skills/map-subsystem/templates/walkthrough.xml +255 -0
- package/{agile-context-engineering/workflows/map-subsystem.xml → skills/map-subsystem/workflow.xml} +17 -21
- package/skills/map-sys-doc/SKILL.md +90 -0
- package/skills/map-sys-doc/system.xml +381 -0
- package/skills/map-sys-doc/workflow.xml +336 -0
- package/skills/map-system/SKILL.md +85 -0
- package/skills/map-system/script.js +84 -0
- package/skills/map-system/script.test.js +73 -0
- package/skills/map-system/templates/wiki-readme.xml +297 -0
- package/{agile-context-engineering/workflows/map-system.xml → skills/map-system/workflow.xml} +11 -16
- package/skills/map-walkthrough/SKILL.md +92 -0
- package/skills/map-walkthrough/walkthrough.xml +255 -0
- package/skills/map-walkthrough/workflow.xml +457 -0
- package/skills/plan-backlog/SKILL.md +75 -0
- package/skills/plan-backlog/script.js +136 -0
- package/skills/plan-backlog/script.test.js +83 -0
- package/{agile-context-engineering/workflows/plan-backlog.xml → skills/plan-backlog/workflow.xml} +13 -21
- package/skills/plan-feature/SKILL.md +76 -0
- package/skills/plan-feature/script.js +148 -0
- package/skills/plan-feature/script.test.js +80 -0
- package/{agile-context-engineering/workflows/plan-feature.xml → skills/plan-feature/workflow.xml} +21 -29
- package/skills/plan-product-vision/SKILL.md +75 -0
- package/skills/plan-product-vision/script.js +60 -0
- package/skills/plan-product-vision/script.test.js +69 -0
- package/{agile-context-engineering/workflows/plan-product-vision.xml → skills/plan-product-vision/workflow.xml} +4 -9
- package/skills/plan-story/SKILL.md +116 -0
- package/skills/plan-story/script.js +326 -0
- package/skills/plan-story/script.test.js +240 -0
- package/skills/plan-story/story-template.xml +451 -0
- package/{agile-context-engineering/workflows/plan-story.xml → skills/plan-story/workflow.xml} +1285 -909
- package/skills/research-external-solution/SKILL.md +107 -0
- package/skills/research-external-solution/script.js +238 -0
- package/skills/research-external-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-external-solution.xml → skills/research-external-solution/workflow.xml} +4 -6
- package/skills/research-integration-solution/SKILL.md +98 -0
- package/{agile-context-engineering/templates/product/story-integration-solution.xml → skills/research-integration-solution/integration-solution-template.xml} +1 -0
- package/skills/research-integration-solution/script.js +231 -0
- package/skills/research-integration-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-integration-solution.xml → skills/research-integration-solution/workflow.xml} +4 -5
- package/skills/research-story-wiki/SKILL.md +92 -0
- package/skills/research-story-wiki/script.js +231 -0
- package/skills/research-story-wiki/script.test.js +138 -0
- package/{agile-context-engineering/templates/product/story-wiki.xml → skills/research-story-wiki/story-wiki-template.xml} +4 -0
- package/{agile-context-engineering/workflows/research-story-wiki.xml → skills/research-story-wiki/workflow.xml} +5 -6
- package/skills/research-technical-solution/SKILL.md +103 -0
- package/skills/research-technical-solution/script.js +231 -0
- package/skills/research-technical-solution/script.test.js +134 -0
- package/{agile-context-engineering/workflows/research-technical-solution.xml → skills/research-technical-solution/workflow.xml} +4 -5
- package/skills/review-story/SKILL.md +100 -0
- package/skills/review-story/script.js +257 -0
- package/skills/review-story/script.test.js +169 -0
- package/skills/review-story/story-template.xml +451 -0
- package/{agile-context-engineering/workflows/review-story.xml → skills/review-story/workflow.xml} +1 -3
- package/skills/update/SKILL.md +53 -0
- package/{agile-context-engineering/workflows/update.xml → skills/update/workflow.xml} +237 -207
- package/agile-context-engineering/src/ace-tools.js +0 -2881
- package/agile-context-engineering/src/ace-tools.test.js +0 -1089
- package/agile-context-engineering/templates/_command.md +0 -54
- package/agile-context-engineering/templates/_workflow.xml +0 -17
- package/agile-context-engineering/templates/config.json +0 -0
- package/agile-context-engineering/templates/product/integration-solution.xml +0 -0
- package/agile-context-engineering/templates/wiki/wiki-readme.xml +0 -276
- package/commands/ace/execute-story.md +0 -137
- package/commands/ace/help.md +0 -93
- package/commands/ace/init-coding-standards.md +0 -83
- package/commands/ace/map-story.md +0 -156
- package/commands/ace/map-subsystem.md +0 -138
- package/commands/ace/map-system.md +0 -92
- package/commands/ace/plan-backlog.md +0 -83
- package/commands/ace/plan-feature.md +0 -89
- package/commands/ace/plan-product-vision.md +0 -81
- package/commands/ace/plan-story.md +0 -145
- package/commands/ace/research-external-solution.md +0 -138
- package/commands/ace/research-integration-solution.md +0 -135
- package/commands/ace/research-story-wiki.md +0 -116
- package/commands/ace/research-technical-solution.md +0 -147
- package/commands/ace/review-story.md +0 -109
- package/commands/ace/update.md +0 -54
- /package/{agile-context-engineering → shared}/utils/questioning.xml +0 -0
- /package/{agile-context-engineering/templates/product/story.xml → skills/execute-story/story-template.xml} +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-cross-cutting}/system-cross-cutting.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-guide}/guide.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-pattern}/pattern.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/decizions.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/system.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-story/templates}/tech-debt-index.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-architecture.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-subsystem/templates}/subsystem-structure.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-architecture.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/system-structure.xml +0 -0
- /package/{agile-context-engineering/templates/wiki → skills/map-system/templates}/testing-framework.xml +0 -0
- /package/{agile-context-engineering/templates/product/product-backlog.xml → skills/plan-backlog/product-backlog-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/feature.xml → skills/plan-feature/feature-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/product-vision.xml → skills/plan-product-vision/product-vision-template.xml} +0 -0
- /package/{agile-context-engineering/templates/product/external-solution.xml → skills/research-external-solution/external-solution-template.xml} +0 -0
- /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
|
|
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:
|
|
343
|
-
- Pattern docs:
|
|
344
|
-
- Cross-cutting docs:
|
|
345
|
-
- Guide docs:
|
|
346
|
-
-
|
|
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="
|
|
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
|
-
[
|
|
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
|
+
});
|