@event4u/agent-config 10.3.0 → 11.0.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 (107) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze.md +2 -1
  5. package/dist/agent-src/commands/council/debate.md +13 -4
  6. package/dist/agent-src/commands/council/default.md +26 -11
  7. package/dist/agent-src/commands/council.md +1 -1
  8. package/dist/agent-src/commands/design-system/capture.md +44 -0
  9. package/dist/agent-src/commands/design-system/generate.md +75 -0
  10. package/dist/agent-src/commands/design-system/import.md +63 -0
  11. package/dist/agent-src/commands/design-system.md +66 -0
  12. package/dist/agent-src/commands/pr/create.md +51 -26
  13. package/dist/agent-src/commands/worktree/create.md +5 -3
  14. package/dist/agent-src/rules/settings-ask-protocol.md +14 -9
  15. package/dist/agent-src/skills/ai-council/SKILL.md +24 -6
  16. package/dist/agent-src/skills/corpus-grounding/SKILL.md +12 -1
  17. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +215 -7
  18. package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +39 -1
  19. package/dist/agent-src/skills/design-intelligence/ATTRIBUTION.md +19 -2
  20. package/dist/agent-src/skills/design-intelligence/data/manifest.json +36 -1
  21. package/dist/agent-src/skills/design-intelligence/data/motion.csv +17 -0
  22. package/dist/agent-src/skills/design-system-capture/SKILL.md +9 -0
  23. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +70 -0
  24. package/dist/agent-src/skills/git-workflow/SKILL.md +9 -3
  25. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +9 -6
  26. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +25 -21
  27. package/dist/agent-src/templates/agent-settings.md +0 -1
  28. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  29. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +4 -1
  30. package/dist/cli-delegate/{chunk-BV3WR67D.js → chunk-55WZN5VF.js} +3 -6
  31. package/dist/cli-delegate/{chunk-X3VOARZD.js → chunk-L565YFXH.js} +3 -3
  32. package/dist/cli-delegate/{chunk-JMQZ7MM5.js → chunk-MNWRDMR5.js} +1 -1
  33. package/dist/cli-delegate/{chunk-IR3IVRVC.js → chunk-NLP54U3J.js} +2 -1
  34. package/dist/cli-delegate/{chunk-FV34EGEX.js → chunk-NN4KW4HZ.js} +1 -1
  35. package/dist/cli-delegate/{chunk-6ENSXSBW.js → chunk-PPQO4NGR.js} +1 -1
  36. package/dist/cli-delegate/chunk-RLN73PR5.js +157 -0
  37. package/dist/cli-delegate/{chunk-6LOPHJLD.js → chunk-RYNADUFG.js} +1 -1
  38. package/dist/cli-delegate/{chunk-I5EAFRII.js → chunk-ZPSXJTLI.js} +2 -154
  39. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  40. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  41. package/dist/cli-delegate/cmd_conformance.js +673 -215
  42. package/dist/cli-delegate/cmd_doctor.js +2 -2
  43. package/dist/cli-delegate/cmd_explain.js +2 -2
  44. package/dist/cli-delegate/cmd_export.js +4 -4
  45. package/dist/cli-delegate/cmd_handoff.js +10 -8
  46. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  47. package/dist/cli-delegate/cmd_migrate.js +2 -2
  48. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  49. package/dist/cli-delegate/cmd_prune.js +4 -4
  50. package/dist/cli-delegate/cmd_route_audit.js +2 -2
  51. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  52. package/dist/cli-delegate/cmd_session_recycle.js +6 -4
  53. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  54. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  55. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  56. package/dist/cli-delegate/cmd_sync.js +4 -4
  57. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  58. package/dist/cli-delegate/cmd_update.js +1 -1
  59. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  60. package/dist/cli-delegate/cmd_validate.js +4 -4
  61. package/dist/cli-delegate/cmd_versions.js +1 -1
  62. package/dist/discovery/deprecation-report.md +1 -1
  63. package/dist/discovery/discovery-manifest.json +127 -22
  64. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  65. package/dist/discovery/discovery-manifest.summary.md +3 -3
  66. package/dist/discovery/dormancy-report.md +1 -1
  67. package/dist/discovery/orphan-report.md +1 -1
  68. package/dist/discovery/packs.json +9 -5
  69. package/dist/discovery/trust-report.md +2 -2
  70. package/dist/discovery/workspaces.json +8 -4
  71. package/dist/hooks/dispatch.js +994 -399
  72. package/dist/install/install.mjs +5 -7
  73. package/dist/mcp/registry-manifest.json +2 -2
  74. package/dist/mcp/server.json +2 -2
  75. package/dist/mcp/server.mjs +1104 -593
  76. package/dist/scripts/_lib/agent_settings.js +8 -0
  77. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  78. package/dist/server/schemas/settings.js +3 -4
  79. package/dist/server/schemas/settings.js.map +1 -1
  80. package/dist/ui/assets/{index-5fXOHoVh.js → index-B0aMJnuz.js} +2 -2
  81. package/dist/ui/assets/{index-5fXOHoVh.js.map → index-B0aMJnuz.js.map} +1 -1
  82. package/dist/ui/index.html +1 -1
  83. package/docs/contracts/settings-classes.md +12 -9
  84. package/package.json +1 -1
  85. package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +4 -1
  86. package/src/config/agent-settings.template.yml +15 -18
  87. package/src/config/gate-coverage.yml +33 -2
  88. package/src/config/gate-violation-baselines.json +2 -2
  89. package/src/config/pack-size-budget.json +3 -2
  90. package/src/scripts/_lib/agent_settings.ts +8 -0
  91. package/src/scripts/_lib/design_system_import.ts +987 -0
  92. package/src/scripts/check_branch_freshness.ts +238 -6
  93. package/src/scripts/design_system_import.ts +264 -0
  94. package/src/scripts/external_sources_denylist.json +7 -2
  95. package/src/scripts/hook_manifest.yaml +71 -2
  96. package/src/scripts/hooks/concern_registry.ts +4 -0
  97. package/src/scripts/hooks/dispatch_hook.ts +10 -0
  98. package/src/scripts/hooks/host_semantics.ts +2 -0
  99. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +212 -0
  100. package/src/scripts/hooks/subagent_ledger_hook.ts +723 -0
  101. package/src/scripts/hooks/turn_end_gate_hook.ts +39 -2
  102. package/src/scripts/lint_hook_manifest.ts +2 -0
  103. package/src/scripts/lint_rule_skill_pack_reach.ts +194 -13
  104. package/src/scripts/session_register_hook.ts +120 -10
  105. package/src/server/schemas/settings.ts +3 -6
  106. package/tests/fixtures/hooks/subagent_start.json +7 -0
  107. package/tests/fixtures/hooks/subagent_stop.json +8 -0
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
9
- "version": "10.3.0",
9
+ "version": "11.0.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -348,6 +348,153 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
348
348
  > that forces a new era split (`# Era: 10.4.x`, etc.) — see
349
349
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
350
350
 
351
+ ## [11.0.0](https://github.com/event4u-app/agent-config/compare/10.4.0...11.0.0) (2026-08-13)
352
+
353
+ ### Release highlights
354
+
355
+ <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
356
+ - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 7d4af2c, 9e4cc35.
357
+ - **Default changes + migration:** _none_
358
+ - **Security and correctness:** _none_
359
+ - **Honest nulls:** _none_
360
+ - **Known limitations:** _none_
361
+
362
+ ### BREAKING CHANGES
363
+
364
+ * **settings:** delete worktrees.mode — worktree creation is instruction-only ([9e4cc35](https://github.com/event4u-app/agent-config/commit/9e4cc35513a69b9e107b639ff9dc78622d42b09e))
365
+
366
+ ### Features
367
+
368
+ * **council:** replace the per-run spend confirmation with a ceiling ([945d6c0](https://github.com/event4u-app/agent-config/commit/945d6c08b6e9a5519858fa6f4bb6ddece461621b))
369
+ * **gates:** resolve the PR base before judging branch freshness ([f77da9a](https://github.com/event4u-app/agent-config/commit/f77da9a6618d0ef982cd4b9bb83201179e26e818))
370
+ * **grounding:** the three 1-10 design dials, re-derived not ported ([1516fa8](https://github.com/event4u-app/agent-config/commit/1516fa8adda1c772a71062fb1950598f336b1c5e))
371
+ * **corpus:** vendor motion.csv and a gsap search domain; decline the rest ([0a82fa2](https://github.com/event4u-app/agent-config/commit/0a82fa2128ffdbc3273b85efd83152ead8e1da28))
372
+
373
+ ### Bug Fixes
374
+
375
+ * **settings:** correct the class-count summaries after the deletion ([b1cf141](https://github.com/event4u-app/agent-config/commit/b1cf1419366bd1a8bc338ce4a11e310724143627))
376
+ * **session-register:** gate the context block on a real collision ([c1dcf0e](https://github.com/event4u-app/agent-config/commit/c1dcf0e599e709f465903805a3f8147cc079fecd))
377
+ * **council:** align the command surfaces with the ceiling bound ([2e3ad3f](https://github.com/event4u-app/agent-config/commit/2e3ad3f74947fba2ff73c2017515e5954b19cefb))
378
+ * **session-register:** anchor the record on the session checkout, not the chdir target ([7b64d4e](https://github.com/event4u-app/agent-config/commit/7b64d4e3d0db42e6f177692cdf2c47eba3634d72))
379
+ * **review:** put the skip declaration on one line ([d6d3736](https://github.com/event4u-app/agent-config/commit/d6d3736fef1509eda589dbb8f36a3b806f30bcf3))
380
+ * **docs:** drop maintainer-only invocations from the shipped surfaces ([4e89881](https://github.com/event4u-app/agent-config/commit/4e8988172a773be43b8a9b3d93d3676f76fc5adf))
381
+ * **roadmap:** relocate distillation's two maintainer-gated items and archive it ([c19fcf6](https://github.com/event4u-app/agent-config/commit/c19fcf6072f499a5e0b5149985e238ee8eb5511e))
382
+ * **corpus:** advance last_checked in the manifest too, not only in ATTRIBUTION ([ca40b92](https://github.com/event4u-app/agent-config/commit/ca40b92b83db4a1951b4dc1328b21ecfdf7919f4))
383
+ * **provenance:** correct a falsified compliance record, and shrink two diffs ([88e095d](https://github.com/event4u-app/agent-config/commit/88e095d8342106111bd36d69f410f39646deb558))
384
+ * **grounding:** make the dials reach a reader, and make the variance claim true ([af919d3](https://github.com/event4u-app/agent-config/commit/af919d30d91a2c379819135fa7e34446a7da33a3))
385
+ * **gates:** carve out the two license-attribution surfaces for code borrows ([2a969a0](https://github.com/event4u-app/agent-config/commit/2a969a0c4835e9a4db031d01e70ebcb5e0bb051d))
386
+ * **records:** close all seven R2 findings, including a false claim of mine ([5ca4290](https://github.com/event4u-app/agent-config/commit/5ca4290795560d4fca8a054db6439e39e5bb6b42))
387
+
388
+ ### Documentation
389
+
390
+ * **skills:** hardcode the instruction-only worktree rule across every surface ([7d4af2c](https://github.com/event4u-app/agent-config/commit/7d4af2c9b51714fe3a6ae636b379f835f7dc0cbc))
391
+ * **adr:** record ADR-229 — worktree creation is instruction-only ([b20e3a5](https://github.com/event4u-app/agent-config/commit/b20e3a56a05402d95f88a66ade4075b3d211e53d))
392
+ * **adr:** record ADR-230 — the council spend bound is a ceiling ([1f35330](https://github.com/event4u-app/agent-config/commit/1f35330a6203c336a9ddced6593cf7f8e09fdbdc))
393
+ * **review:** declare the completion-review skip for a docs-only branch ([3ad11bf](https://github.com/event4u-app/agent-config/commit/3ad11bf5109088bca10a80954dffbd280e2586c1))
394
+ * **roadmap:** close Phase 0 Step 3 and re-scope Phases 1 and 2 on the measurement ([d9a888e](https://github.com/event4u-app/agent-config/commit/d9a888e793977be05af7c2c2b345655956e3eb8e))
395
+ * **evidence:** reproduce #58109 and record what the ledger cannot see ([21b8d2d](https://github.com/event4u-app/agent-config/commit/21b8d2dfbcd0dff415bfda7306788a86f3b3809b))
396
+ * **review:** re-bind the skip declaration after merging main ([3e03c75](https://github.com/event4u-app/agent-config/commit/3e03c75c4465ceac9d02bdfb76e8ad0091387965))
397
+ * **git:** route the pre-PR freshness check through the gate ([c0edb1f](https://github.com/event4u-app/agent-config/commit/c0edb1f36c001087d1118ef1fac3e7cb5e10f333))
398
+ * **review:** re-scope the skip declaration after the main merge ([7184ae8](https://github.com/event4u-app/agent-config/commit/7184ae89ec9e9385aca59ecba9bdd2eacc336c08))
399
+ * **review:** re-bind the findings artefact after the corpus-staleness fix ([47131d4](https://github.com/event4u-app/agent-config/commit/47131d403539cdaebf67e7b514267562835ae5c1))
400
+ * **review:** re-bind the findings artefact to the post-fix scope ([6a48f11](https://github.com/event4u-app/agent-config/commit/6a48f11ba78b1086209dfa06928bfe1f7addc743))
401
+ * **roadmap:** correct three overclaims, re-depth the archive links, stale watchlist ([c4e95d3](https://github.com/event4u-app/agent-config/commit/c4e95d36a6efcaf44f1aa693816806111e823165))
402
+ * **review:** bind the R2 findings for feat-design-system-onramp-blockers ([2092734](https://github.com/event4u-app/agent-config/commit/2092734d3438ac2647bdcdde5faf05be49b7b0dc))
403
+ * **review:** re-bind the artefact after the third main merge ([3b4bdb6](https://github.com/event4u-app/agent-config/commit/3b4bdb6a08f46181d869a2d4bd4dfb16af3e4349))
404
+ * **review:** re-bind the R2 artefact after the fix pass ([5bfc84c](https://github.com/event4u-app/agent-config/commit/5bfc84c8bfea61a9522f21f8cbb7f72acdcc7450))
405
+ * **council:** record the two unblocking decisions, and their honest standing ([8cd7182](https://github.com/event4u-app/agent-config/commit/8cd71823c1b1ce3c6002d16cb444d1b96b70f3fa))
406
+ * **review:** the real R2 review, replacing the skip — 7 findings ([834e7f1](https://github.com/event4u-app/agent-config/commit/834e7f10f26e0d93911f0c92d0720f72c8ee0fc2))
407
+
408
+ ### Tests
409
+
410
+ * **settings:** re-point two vacuous assertions and assert the deletion ([933f320](https://github.com/event4u-app/agent-config/commit/933f3208efd38a22854e147e7d3c7ddee2bacde1))
411
+
412
+ ### Chores
413
+
414
+ * **roadmap:** regenerate the dashboard after the main merge ([2653222](https://github.com/event4u-app/agent-config/commit/26532222c07d0784f1f608a0fc4185ed9b02274b))
415
+ * **roadmap:** regenerate the dashboard after the third main merge ([b271d07](https://github.com/event4u-app/agent-config/commit/b271d078b70d3c177571fc152cc00315b5780aba))
416
+ * **roadmap:** close design-system-onramp at 12/12 and archive it ([14bce9c](https://github.com/event4u-app/agent-config/commit/14bce9c59b193631737f7b2a19157fd53d4e6de4))
417
+
418
+ Tests: 13818 (+50 since 10.4.0)
419
+
420
+ ## [10.4.0](https://github.com/event4u-app/agent-config/compare/10.3.0...10.4.0) (2026-08-13)
421
+
422
+ ### Release highlights
423
+
424
+ <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
425
+ - **Behaviour changes:** _none_
426
+ - **Default changes + migration:** _none_
427
+ - **Security and correctness:** _none_
428
+ - **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 5a9f530.
429
+ - **Known limitations:** _none_
430
+
431
+ ### Features
432
+
433
+ * **commands:** /design-system cluster — three doors onto machinery that already ships ([e56eaf4](https://github.com/event4u-app/agent-config/commit/e56eaf4a5496bed575e421df997ad60bd2cfac08))
434
+ * **scripts:** three-lane adapter into the design-system.json contract ([d1dd006](https://github.com/event4u-app/agent-config/commit/d1dd00610d4c2c97aa5adf0fa7baa120167b6aa2))
435
+ * **hooks:** an open subagent dispatch is an explicit turn-end allow ([39daf4e](https://github.com/event4u-app/agent-config/commit/39daf4e2c3ba70fa4e43b57fc82bc1bf9eb5b613))
436
+ * **hooks:** ship Phase 3 runaway containment in shadow posture ([b9efa4e](https://github.com/event4u-app/agent-config/commit/b9efa4ec618b3f26c1c07a8eb335866545c4274c))
437
+ * **hooks:** register subagent lifecycle events and bind the ledger ([a6a4023](https://github.com/event4u-app/agent-config/commit/a6a4023529074069f03f8542d0513ee77f3adfde))
438
+ * **hooks:** add the capture-only subagent-ledger concern ([f393ec4](https://github.com/event4u-app/agent-config/commit/f393ec4686422d247bc5862cf13e04459d64ace5))
439
+ * **gates:** adopt the self-test harness in lint_rule_skill_pack_reach ([a758153](https://github.com/event4u-app/agent-config/commit/a7581533b8d5ed8672f985337dc87d21508fa451))
440
+
441
+ ### Bug Fixes
442
+
443
+ * **design-system:** drop maintainer-only invocations from shipped surfaces ([122760a](https://github.com/event4u-app/agent-config/commit/122760aad5f2a6f4a19c7571da5fcfb732e5e1a8))
444
+ * **scripts:** close nine silent-loss paths in the design-system import adapter ([ed4c7e3](https://github.com/event4u-app/agent-config/commit/ed4c7e39ad3bd732b034c24952460332bb7cb503))
445
+ * **docs:** regenerate proof.md after the command-count change ([c5cb075](https://github.com/event4u-app/agent-config/commit/c5cb07529d8e1903ad15bbf300ce4156fb5a11b2))
446
+ * **ci:** wire check_gate_coverage locally too, and correct three numbers ([a62745c](https://github.com/event4u-app/agent-config/commit/a62745cea249ace8e89a453e9f5950e7179721ce))
447
+ * **ci:** wire the two meta-gates, re-anchor the parity floor ([ea13fc7](https://github.com/event4u-app/agent-config/commit/ea13fc77f2cceecc127933b7f56a5fbcc5a07709))
448
+ * **commands:** register analyze:conformance in the table it already belonged in ([2c307f3](https://github.com/event4u-app/agent-config/commit/2c307f392061eb4ff24a15b1c29b7ddc5c162b71))
449
+ * **hooks:** close the round-2 completion-review findings ([a3de33b](https://github.com/event4u-app/agent-config/commit/a3de33beacff72725b48e4ebdd0bb58b4258bee1))
450
+ * **contracts:** drop the roadmap link from the activation policy ([4d49029](https://github.com/event4u-app/agent-config/commit/4d49029266a04d8d025e110be0a574553634acea))
451
+ * **roadmap:** sync the Phase 2 record with the shipped floors, and own the red ([f98d9d5](https://github.com/event4u-app/agent-config/commit/f98d9d52998c016ad865334ffdf3964b4e01a8e3))
452
+ * **hooks:** close the twelve R2 completion-review findings in the subagent ledger ([4415ff5](https://github.com/event4u-app/agent-config/commit/4415ff54c2e8f47375aeeada5e5d9776eccefa86))
453
+ * **gates:** emit a parseable scan line, and refuse a valueless --root ([8ec2334](https://github.com/event4u-app/agent-config/commit/8ec2334a526572dd549b571f40bf9a24928dbd35))
454
+ * **refs:** re-point the archived roadmap and record a two-gate contradiction ([9671002](https://github.com/event4u-app/agent-config/commit/9671002114d27fcbd112d3f77d79dfaacc94c821))
455
+ * **roadmap:** tag the corpus-scoping roadmap lightweight, not standard ([b6676b0](https://github.com/event4u-app/agent-config/commit/b6676b09f87c48aa083feb98f2ff7343c837bd18))
456
+
457
+ ### Documentation
458
+
459
+ * **review:** re-bind the findings artefact after the consumer-path fix ([fcb8ab4](https://github.com/event4u-app/agent-config/commit/fcb8ab408c9b2fbfd51d98e261ead5c572e5cf7a))
460
+ * **review:** re-bind the findings artefact after the second main merge ([cfd2695](https://github.com/event4u-app/agent-config/commit/cfd2695162708c3db80b699667dbc7108c9e057c))
461
+ * **review:** re-bind the findings artefact to the post-fix scope ([2674827](https://github.com/event4u-app/agent-config/commit/267482700c5d00db465722005888f823d50acc4c))
462
+ * **review:** re-bind the skip declaration to the merged scope ([6518a6a](https://github.com/event4u-app/agent-config/commit/6518a6a12a69bc640c70febcf36d176ae05b8992))
463
+ * **design-system:** correct two claims the review showed were too broad ([49b6e47](https://github.com/event4u-app/agent-config/commit/49b6e4741aa21a18c72c3f51f9775981f980bb1f))
464
+ * **review:** bind the R2 completion-review findings for feat-design-system-onramp ([3be0b77](https://github.com/event4u-app/agent-config/commit/3be0b771bf99816ab4b0a7d9d69c51ea8e41a848))
465
+ * **roadmap:** close road-to-local-only-gate-reds and archive it ([cfeeacc](https://github.com/event4u-app/agent-config/commit/cfeeacc81c2b09f18d7e5fcfd7a312b05dd0b209))
466
+ * **roadmap:** archive road-to-august-program on its own falsifier ([3fd5a77](https://github.com/event4u-app/agent-config/commit/3fd5a776750447e6967137be31ee76a6e1c7b4b4))
467
+ * **roadmap:** resolve the three release-integrity blockers and archive it ([9d66d73](https://github.com/event4u-app/agent-config/commit/9d66d73f45b28ed8c17b842ca0f730cf11ca614d))
468
+ * **contract:** publish the curated-head recurrence rate, (b) stands ([310b49b](https://github.com/event4u-app/agent-config/commit/310b49b1d4b5f8fe7a12d6199c84429257cc4e0c))
469
+ * **adr:** ADR-228 — the global install does not emit paths: ([d9bcbf5](https://github.com/event4u-app/agent-config/commit/d9bcbf5c46e7d4c100f1bceabe429c0df6b42990))
470
+ * **adr:** accept ADR-221, the host-native-first ladder ([a55a37f](https://github.com/event4u-app/agent-config/commit/a55a37f6f88eb08326d56a0562c22324fa1746dc))
471
+ * **review:** re-bind the round-2 findings after the fix pass ([f1403f1](https://github.com/event4u-app/agent-config/commit/f1403f1896b4570b6eb83c9ac0f1c28b1d504914))
472
+ * **review:** bind round 2 of the completion review, and keep round 1 ([7914694](https://github.com/event4u-app/agent-config/commit/7914694b9055c4b47caf5c01c49699cb1aa77f01))
473
+ * **design-system:** name the supply path where the contract is refused ([0bef92d](https://github.com/event4u-app/agent-config/commit/0bef92d6314c82978bce578effaff7e43e24ea6c))
474
+ * **roadmap:** record the Phase 3 council pass and flip its three steps ([e1c99ad](https://github.com/event4u-app/agent-config/commit/e1c99ad25ece149cd80c0879957b01702148cc00))
475
+ * **contracts:** write the concern activation policy three roadmaps cited and none wrote ([130a9d9](https://github.com/event4u-app/agent-config/commit/130a9d98ad691888a3d41bec71f170e8e6d853c3))
476
+ * **review:** re-bind the round-2 artefact to the fixed scope ([1cba2b1](https://github.com/event4u-app/agent-config/commit/1cba2b111a3759d565ec0071ee1607c7c0d6bbec))
477
+ * **review:** round 2 of the completion review, over the merged scope ([57e4fc5](https://github.com/event4u-app/agent-config/commit/57e4fc58491b80ce70f994963fbcaa6fbe972be4))
478
+ * **review:** re-bind the findings artefact after the fix pass ([b58fcd5](https://github.com/event4u-app/agent-config/commit/b58fcd59ea10b899d6feaa1b7afa632c437f3d77))
479
+ * **review:** bind the R2 completion-review findings for feat-subagent-lifecycle-integrity ([79b7c8e](https://github.com/event4u-app/agent-config/commit/79b7c8eb27f114ae6d40d6c168fa5c992be1b650))
480
+ * **review:** re-bind the completion-review artefact to the fixed scope ([c714668](https://github.com/event4u-app/agent-config/commit/c71466897e1053bc28387d3da1240a3773534a0b))
481
+ * **review:** R2 completion review for feat-local-only-gate-reds ([3c87378](https://github.com/event4u-app/agent-config/commit/3c87378c83b36da10a82af729ffa224d506716a8))
482
+ * **roadmap:** record the Phase 0/1/5 findings and the Phase 3 stop ([3fc4332](https://github.com/event4u-app/agent-config/commit/3fc433269cc36520bb10e5f08f302cdfdffc5d5a))
483
+ * **review:** declare the completion-review skip for a zero-code-path branch ([ac92f16](https://github.com/event4u-app/agent-config/commit/ac92f1686a44ca8d52cf652fb3c35ec71224d800))
484
+ * **adr:** record that paths scoping is saturated, not a corpus lever ([6c062d9](https://github.com/event4u-app/agent-config/commit/6c062d9d57e290a50b0eb544448e83b8ec03c396))
485
+ * **roadmap:** record the four closed steps, and a fifth red the repair left ([637c009](https://github.com/event4u-app/agent-config/commit/637c00913b9936d5ceb8fe5cdffa8eddd610ef47))
486
+
487
+ ### Chores
488
+
489
+ * **dist:** re-project the design-system doc and halt-text changes ([070f4ce](https://github.com/event4u-app/agent-config/commit/070f4ce7b48ca0f206b6fae413a8f529d3f5bf0b))
490
+ * **roadmap:** regenerate the dashboard after the main merge ([54250e3](https://github.com/event4u-app/agent-config/commit/54250e3f6de110ba8881386e6e8c95be38b9b8d4))
491
+ * **roadmap:** close design-system-onramp Phases 1, 2 and 4; file two blockers ([80573dd](https://github.com/event4u-app/agent-config/commit/80573dd7d75ab27d026138e54ef06119daec59e8))
492
+ * **roadmaps:** regenerate the dashboard after the main merge ([d54aba9](https://github.com/event4u-app/agent-config/commit/d54aba956229302c3bc7323ddf8cafd7bd4ccb3c))
493
+ * **roadmap:** regenerate the dashboard after the second main merge ([b1a283b](https://github.com/event4u-app/agent-config/commit/b1a283bb04d9a881aa13495c28f0779557792670))
494
+ * **roadmap:** close always-loaded-corpus-scoping on its honest null ([5a9f530](https://github.com/event4u-app/agent-config/commit/5a9f53009a920ff16b9cc92e39167497a51d92ab))
495
+
496
+ Tests: 13768 (+89 since 10.3.0)
497
+
351
498
  ## [10.3.0](https://github.com/event4u-app/agent-config/compare/10.2.0...10.3.0) (2026-08-13)
352
499
 
353
500
  ### Release highlights
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config) [![MCP Toplist](https://mcptoplist.com/badge/glama%2Fevent4u-app%2Fagent-config.svg)](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-289-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-116-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-196-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-105-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
7
+ [![Skills](https://img.shields.io/badge/Skills-289-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-116-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-200-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-105-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
8
 
9
9
  **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
10
10
 
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  argument-hint: "[postmortem|premortem|decision|near-miss|incident|reference-repo|inbox] [subject]"
6
6
  pack: analysis-workbench
7
7
  intent: "Analysis dispatcher — classify input by keywords, propose a weighted framework path, let the user pick"
8
- routes_to: [analyze-postmortem, analyze-premortem, analyze-decision, analyze-near-miss, analyze-incident, analyze-reference-repo, analyze-inbox]
8
+ routes_to: [analyze-postmortem, analyze-premortem, analyze-decision, analyze-near-miss, analyze-incident, analyze-reference-repo, analyze-inbox, analyze-conformance]
9
9
  replaces: []
10
10
  tier: 1
11
11
  visibility: advanced
@@ -40,6 +40,7 @@ to the chosen sub-command. Never auto-selects silently.
40
40
  | `/analyze:incident` | `analyze/incident/command.md` | Full incident flow: commander → RCA → post-mortem → memory candidate |
41
41
  | `/analyze:reference-repo` | `analyze/reference-repo/command.md` | Deep-dive an external reference repo (competitor, inspiration, peer) → structured comparison + adoption plan |
42
42
  | `/analyze:inbox` | `analyze/inbox/command.md` | Deep-dive a LOCAL artifact dropped in `agents/tmp/` (review, prompt, spec, transcript) → claim verification against the current tree + artefact mapping + roadmap |
43
+ | `/analyze:conformance` | `analyze/conformance/command.md` | Audit recent local sessions for rule violations → deterministic scan + subagent passes, root-caused per class, and a roadmap for what is mechanisable |
43
44
 
44
45
  ## Dispatch
45
46
 
@@ -68,11 +68,20 @@ this automatically when invoked via `debate`). The estimate covers
68
68
  projection. Surface the projection to the user with a clear note that
69
69
  progressive disclosure may stop the debate early.
70
70
 
71
- ### 4. Cost confirmation (ALWAYS ASK)
71
+ ### 4. Spend bound (ask when a billable member has no ceiling)
72
72
 
73
- Per [`ai-council` skill § cost gate](../../skills/ai-council/SKILL.md),
74
- always surface the projected total spend and ask for explicit consent
75
- before invoking. Numbered options:
73
+ Per [`ai-council` skill § Procedure 3](../../skills/ai-council/SKILL.md)
74
+ and ADR-230, surface the projected total spend in every case, and ask
75
+ only when a billable member is in the fan-out AND both
76
+ `cost_budget.max_total_usd` and `daily_limit_usd` are `0`.
77
+
78
+ A debate multiplies the per-round cost by `N`, so quote the worst case,
79
+ not one round — that is what a ceiling has to cover. The between-rounds
80
+ confirmation gate is unaffected: it is a separate, per-round control and
81
+ it still fires, which is where a debate that turns out expensive gets
82
+ stopped.
83
+
84
+ Numbered options, when the ask applies:
76
85
 
77
86
  > The debate is projected to cost **$X.XXXX** ($Y.YYYY × N rounds, worst case).
78
87
  >
@@ -152,11 +152,22 @@ Construct each member from the resolved mode:
152
152
  - `manual` → `ManualClient` from `scripts.ai_council.clients`
153
153
  (`billable=False`, no API key, no SDK call).
154
154
 
155
- ### 3. Cost confirmation — ALWAYS ASK for billable members
155
+ ### 3. Spend bound — ASK when a billable member has no ceiling
156
156
 
157
- Council calls to billable members spend money. Even under
158
- `personal.autonomy: on`, the agent **must** ask before invoking any
159
- billable member.
157
+ Council calls to billable members spend money, so a bound is mandatory.
158
+ Per ADR-230 the bound is a **ceiling**, not a per-invocation approval —
159
+ the same three cases the `ai-council` skill resolves in its Procedure § 3:
160
+
161
+ | Situation | Behaviour |
162
+ |---|---|
163
+ | No billable member (all `mode: cli`, subscription auth) | No gate. Estimate is information; go to Step 4. Spend is $0. |
164
+ | Billable member **with** `cost_budget.max_total_usd` or `daily_limit_usd` non-zero | No per-run ask. The ceiling is the authorization the user already gave; `on_overrun` still pauses per member on breach. |
165
+ | Billable member with **both** caps `0` | **Ask.** Nothing bounds the spend, so the user must. |
166
+
167
+ `personal.autonomy` neither creates nor lifts that bound — autonomy is
168
+ not a ceiling. Consumers who want a per-invocation gate set a small
169
+ `cost_budget.max_total_usd`; every call then breaches and `on_overrun`
170
+ asks per member.
160
171
 
161
172
  Run the CLI in **estimate** mode first — it bundles the artefact, runs
162
173
  redaction, and prints the per-member preview without spending:
@@ -182,17 +193,21 @@ roadmap file with `--input-mode roadmap`. `diff` and `files` modes
182
193
  remain Phase 4 — for now ask the user to convert into a `prompt`.
183
194
 
184
195
  The CLI prints a `council:estimate · members=N (billable=M)` line
185
- followed by per-member projected USD and a TOTAL. Render that to the
186
- user inside the cost-confirmation numbered-options block per the
187
- `ai-council` skill (§ Pre-call estimate format) — then `1. Run /
188
- 2. Cancel`. If the billable count is `0`, skip the gate entirely
189
- (spend = $0) and proceed directly to Step 4.
196
+ followed by per-member projected USD and a TOTAL. Render that table per
197
+ the `ai-council` skill (§ Pre-call estimate format) in every case — it is
198
+ what makes the spend legible whether or not it is being asked about.
199
+
200
+ Then read `billable=M` together with the two caps:
190
201
 
191
- Wait for the user's pick. `1` proceeds; anything else aborts.
202
+ - `M == 0` → no gate. Proceed to Step 4.
203
+ - `M > 0` and a cap is set → no gate. Proceed to Step 4; `on_overrun`
204
+ handles a breach per member.
205
+ - `M > 0` and both caps are `0` → render the table inside a numbered-options
206
+ block (`1. Run / 2. Cancel`) and wait. `1` proceeds; anything else aborts.
192
207
 
193
208
  ### 4. Run the CLI
194
209
 
195
- Once the user picks `1`, invoke the same arguments with `run` plus
210
+ Invoke the same arguments with `run` plus
196
211
  `--confirm` and an output path under `agents/runtime/council/sessions/`:
197
212
 
198
213
  ```bash
@@ -35,7 +35,7 @@ sub-command swaps the mode-specific addendum.
35
35
 
36
36
  1. Resolve the target + capture the original ask.
37
37
  2. Check the council is configured + price table fresh.
38
- 3. Cost confirmation (ALWAYS ASK for billable members).
38
+ 3. Spend bound (ask only when a billable member has no ceiling — ADR-230).
39
39
  4. Run the CLI.
40
40
  5. Render the report (5 / 5a / 5b — render → critical lens → user options).
41
41
  6. Hard floor — text only.
@@ -0,0 +1,44 @@
1
+ ---
2
+ model_tier: medium
3
+ name: design-system-capture
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: design-system
8
+ sub: capture
9
+ skills: [existing-ui-audit, design-system-capture]
10
+ description: Inventory this repo's own components and tokens and emit them in the design-system.json shape, so the import path is identical to an external extraction.
11
+ argument-hint: "[path]"
12
+ suggestion:
13
+ eligible: false
14
+ rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
15
+ workspaces:
16
+ - engineering
17
+ packs:
18
+ - frontend-design
19
+ ---
20
+
21
+ # /design-system:capture
22
+
23
+ Run [`existing-ui-audit`](../../skills/existing-ui-audit/SKILL.md) over the
24
+ current repo and emit its inventory as a `design-system.json` artifact — the
25
+ same shape an external extraction tool produces, so the import path is identical
26
+ either way. Args: optional `[path]` to narrow the scan.
27
+
28
+ Two sources, one shape: use this for **this** repo, and
29
+ [`/design-system:import`](../import/command.md) for a site or repo you do not
30
+ own.
31
+
32
+ ## Then hand it over
33
+
34
+ Pass the emitted artifact to [`design-system-capture`](../../skills/design-system-capture/SKILL.md)'s
35
+ import step, which confirms it per field into `DESIGN.md`.
36
+
37
+ ## Rules
38
+
39
+ - **Set `source` honestly** — `kind: dir`, `ref` = the scanned path,
40
+ `captured_at` = now. An artifact with no provenance is rejected downstream.
41
+ - **Observation is not a token.** Anything the audit *noticed* rather than
42
+ *decided* belongs under `_meta`, per the contract's field rules.
43
+ - **The audit's own grouping is not the contract's shape.** Map it deliberately;
44
+ do not rename the audit's output keys and call it done.
@@ -0,0 +1,75 @@
1
+ ---
2
+ model_tier: high
3
+ name: design-system-generate
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: design-system
8
+ sub: generate
9
+ skills: [corpus-grounding, design-intelligence, design-system-capture]
10
+ description: Ground a design system in the curated design corpus from a product or industry brief, then optionally persist it as MASTER.md or seed DESIGN.md.
11
+ argument-hint: "<product / industry / keywords>"
12
+ suggestion:
13
+ eligible: false
14
+ rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
15
+ workspaces:
16
+ - engineering
17
+ packs:
18
+ - frontend-design
19
+ ---
20
+
21
+ # /design-system:generate
22
+
23
+ Run the grounded one-shot over the curated corpus and print the full
24
+ recommendation. Args: `"<product / industry / keywords>"`.
25
+
26
+ ```bash
27
+ npx tsx node_modules/@event4u/agent-config/src/skills/corpus-grounding/scripts/ground.ts \
28
+ ground "<query>" \
29
+ --manifest node_modules/@event4u/agent-config/src/skills/design-intelligence/data/manifest.json \
30
+ [--variance 1-10] [--motion 1-10] [--density 1-10]
31
+ ```
32
+
33
+ Add `--persist <dir> --project-name <name>` to write
34
+ `design-system/<slug>/MASTER.md`, and `--page <name>` for a page-override stub
35
+ alongside it. The engine is read-only without `--persist`.
36
+
37
+ ## The three dials — optional, and unset means unset
38
+
39
+ Each takes an integer 1-10. A dial you do not pass changes nothing at all, so
40
+ the no-flag result is exactly what it was before dials existed.
41
+
42
+ | Dial | 1-3 | 4-7 | 8-10 | What it touches |
43
+ |---|---|---|---|---|
44
+ | `--variance` | Centered / Minimal | Balanced / Modern | Bold / Asymmetric | Biases which style is **selected** from the rows the corpus returned |
45
+ | `--motion` | Subtle | Standard | Complex | Pulls a motion recipe at that intensity tier |
46
+ | `--density` | Spacious | Standard | Dense / Dashboard | Overrides the spacing scale |
47
+
48
+ **`--variance` biases selection, never retrieval.** The rows that come back from
49
+ the corpus are the same with or without it; the dial only changes which of those
50
+ rows is picked. And when it changes the pick away from what the grounding rule's
51
+ own keywords would have chosen, the run **says so in its evidence gaps** — a
52
+ preference is allowed to win, but never quietly.
53
+
54
+ `--motion` needs the `gsap` domain (`motion.csv`) in the manifest. Without it,
55
+ or when no row matches the requested tier, the run reports that rather than
56
+ returning an empty block.
57
+
58
+ ## After the recommendation
59
+
60
+ Offer both destinations, and let the human pick — they are different artifacts,
61
+ not two spellings of one:
62
+
63
+ - **`MASTER.md` + page overrides** (`--persist`) — the interchange format, good
64
+ for handing a system to another tool or to a designer.
65
+ - **`DESIGN.md`** via [`design-system-capture`](../../skills/design-system-capture/SKILL.md)
66
+ — this package's canonical design memory, the file every later design task
67
+ reads. Seed it when the system is for *this* repo's own work.
68
+
69
+ ## Rules
70
+
71
+ - **Generated output is a proposal.** A provided artifact, registered brand
72
+ tokens, and a confirmed `DESIGN.md` outrank it — never overwrite a confirmed
73
+ decision with a generated default.
74
+ - **Never persist silently.** `--persist` is the human's choice, and `DESIGN.md`
75
+ is seeded per field, not written wholesale.
@@ -0,0 +1,63 @@
1
+ ---
2
+ model_tier: medium
3
+ name: design-system-import
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: design-system
8
+ sub: import
9
+ skills: [design-system-capture]
10
+ description: Run an extraction tool's output through the three-lane adapter into the design-system.json contract, then hand it to the per-field confirmation import.
11
+ argument-hint: "<file>"
12
+ suggestion:
13
+ eligible: false
14
+ rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
15
+ workspaces:
16
+ - engineering
17
+ packs:
18
+ - frontend-design
19
+ ---
20
+
21
+ # /design-system:import
22
+
23
+ Transform an extracted design system into the `design-system.json` contract,
24
+ then import it per field. Args: `<file>`.
25
+
26
+ ```bash
27
+ npx tsx node_modules/@event4u/agent-config/src/scripts/design_system_import.ts <file> \
28
+ [--lane native|dtcg|dembrandt] \
29
+ [--source-kind url|repo|dir --source-ref <ref>] [--captured-at <ISO>] \
30
+ [--format json|summary]
31
+ ```
32
+
33
+ The lane is detected from the file's own shape; `--lane` only forces which
34
+ mapper runs and never reshapes the input. Lane behaviour, the documented
35
+ producers, and the never-force-a-lane degradation are specified in
36
+ [`design-system-json.md`](../../skills/design-system-capture/references/design-system-json.md)
37
+ § Extractor compatibility.
38
+
39
+ ## The easy path, in two lines
40
+
41
+ 1. Connect an extractor once — e.g.
42
+ `claude mcp add --transport stdio dembrandt -- npx -y --package dembrandt dembrandt-mcp`.
43
+ 2. Run `/design-system:import` over its output.
44
+
45
+ No extractor available? Skip step 1 and use
46
+ [`/design-system:generate`](../generate/command.md) from the corpus instead, or
47
+ [`/design-system:capture`](../capture/command.md) for this repo.
48
+
49
+ ## Then hand it over
50
+
51
+ Pass the result to [`design-system-capture`](../../skills/design-system-capture/SKILL.md)'s
52
+ import step. Do not write `DESIGN.md` from here.
53
+
54
+ ## Rules
55
+
56
+ - **Provenance is mandatory.** A file with no `source` and no `--source-ref` is
57
+ rejected — you cannot confirm what you cannot trace. Supplying it by flag is
58
+ recorded as caller-asserted, not extracted.
59
+ - **The artifact is observed, not authoritative.** Every field is confirmed by
60
+ the human; a value conflicting with a registered brand token is flagged, never
61
+ auto-applied.
62
+ - **The adapter is offline.** It reads a file and writes the contract shape — it
63
+ never fetches, crawls, or launches a browser.
@@ -0,0 +1,66 @@
1
+ ---
2
+ model_tier: inherit
3
+ name: design-system
4
+ pack: engineering-base
5
+ tier: 2
6
+ visibility: internal
7
+ cluster: design-system
8
+ type: orchestrator
9
+ description: Design-system onramp — generate one from the corpus, import an extractor's output, or capture the current repo's. Three doors onto machinery that already ships.
10
+ argument-hint: "[generate|import|capture] [args]"
11
+ suggestion:
12
+ eligible: true
13
+ trigger_description: "generate a design system, import extracted design tokens, capture this repo's design system, seed DESIGN.md from a site"
14
+ trigger_context: "user explicitly wants a design system produced, imported, or captured — never suggested for ordinary UI work"
15
+ workspaces:
16
+ - engineering
17
+ packs:
18
+ - frontend-design
19
+ ---
20
+
21
+ # /design-system
22
+
23
+ Three doors onto machinery this package already ships and nothing could reach.
24
+ The grounded generator, its `MASTER.md` persistence, the `design-system.json`
25
+ import contract, and the current-repo inventory all existed before this cluster;
26
+ what was missing was a way in. So every sub-command below is an entry point, not
27
+ a new subsystem.
28
+
29
+ **Optional means invoked or not invoked.** This cluster adds no settings key, no
30
+ always-on rule, and no auto-trigger. It is suggestion-eligible only when a
31
+ design-system question is explicit, and otherwise silent.
32
+
33
+ ## Sub-commands
34
+
35
+ | Sub-command | Routes to | Purpose |
36
+ |---|---|---|
37
+ | `/design-system:generate "<product / industry / keywords>"` | `commands/design-system/generate.md` | Ground a design system in the curated corpus; optionally persist `MASTER.md` + page overrides, or seed `DESIGN.md` |
38
+ | `/design-system:import <file>` | `commands/design-system/import.md` | Run an extractor's output through the three-lane adapter, then the per-field confirmation import |
39
+ | `/design-system:capture` | `commands/design-system/capture.md` | Inventory *this* repo's components and tokens and emit the same `design-system.json` shape |
40
+
41
+ ## Dispatch
42
+
43
+ 1. Parse `/design-system <sub-command> [args]`. Sub-command = first token; match
44
+ against the table's exact names only.
45
+ 2. Look up the sub-command and execute its file verbatim with the remaining args.
46
+ 3. Unknown / missing sub-command → print the table and ask which door to take.
47
+
48
+ ## Rules
49
+
50
+ - **Do NOT commit, push, or open a PR** — subcommands never do this.
51
+ - **Do NOT chain subcommands.** One `/design-system <sub>` per turn.
52
+ - **Generated and imported output is a proposal.** A provided artifact,
53
+ registered brand tokens, and a confirmed `DESIGN.md` all outrank it; a value
54
+ that conflicts with a registered brand token is flagged, never auto-applied
55
+ (per [`brand-source-of-truth`](../rules/brand-source-of-truth.md)).
56
+ - **No crawler, browser runtime, or font-bundler is shipped.** Extraction tools
57
+ are user-installed and user-connected; this package's share is the adapter,
58
+ the instructions, and the validation.
59
+ - **Edit `src/` only.** Generated mirrors regenerate.
60
+
61
+ ## See also
62
+
63
+ - [`design-system-capture`](../../skills/design-system-capture/SKILL.md) — owns `DESIGN.md` and the per-field-confirmation import.
64
+ - [`corpus-grounding`](../../skills/corpus-grounding/SKILL.md) · [`design-intelligence`](../../skills/design-intelligence/SKILL.md) — the grounded generator behind `:generate`.
65
+ - [`existing-ui-audit`](../../skills/existing-ui-audit/SKILL.md) — the current-repo inventory behind `:capture`.
66
+ - [`docs/contracts/command-clusters.md`](../docs/contracts/command-clusters.md) — `design-system` cluster registration.