@event4u/agent-config 4.7.2 → 4.9.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.
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Shared agent configuration \u2014 skills for AI coding tools (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI).",
9
- "version": "4.7.2",
9
+ "version": "4.9.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -802,6 +802,43 @@ our recommendation order, not its support status.
802
802
  > that forces a new era split (`# Era: 4.6.x`, etc.) — see
803
803
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
804
804
 
805
+ ## [4.9.0](https://github.com/event4u-app/agent-config/compare/4.8.0...4.9.0) (2026-05-28)
806
+
807
+ ### Features
808
+
809
+ * **scripts:** inventory abstraction-budget classes via grep-backed audit ([bf4de06](https://github.com/event4u-app/agent-config/commit/bf4de06d12908281e7a657cab8783c3cdae39a2e))
810
+
811
+ ### Documentation
812
+
813
+ * **roadmaps:** close discovery, charter scoped reduction follow-up ([f749c77](https://github.com/event4u-app/agent-config/commit/f749c778ae02f6718c9d499213c8781392e95b3e))
814
+ * **evidence:** abstraction-budget Phase-1 inventory + frontmatter audit ([178c0b6](https://github.com/event4u-app/agent-config/commit/178c0b605085801282c7f61c2b01d6d8dc83396e))
815
+
816
+ Tests: 5078 (+0 since 4.8.0)
817
+
818
+ ## [4.8.0](https://github.com/event4u-app/agent-config/compare/4.7.2...4.8.0) (2026-05-28)
819
+
820
+ ### Features
821
+
822
+ * **install:** close Claude Code global distribution gap ([aa15db9](https://github.com/event4u-app/agent-config/commit/aa15db9651c4fd21f8bd30ef88e3aeeb1eb31e22))
823
+
824
+ ### Bug Fixes
825
+
826
+ * **maintainer:** align .claude/settings.json plugin id ([b59e080](https://github.com/event4u-app/agent-config/commit/b59e0804e874e9c7c95cfc821a31746e4241f61c))
827
+
828
+ ### Documentation
829
+
830
+ * **adr:** record claude-code command-projection strategy (ADR-030) ([706dedb](https://github.com/event4u-app/agent-config/commit/706dedb54f5792a2cf5b7c2401054b30490edeec))
831
+
832
+ ### Tests
833
+
834
+ * **install:** regression coverage for global distribution heal ([bfdbc90](https://github.com/event4u-app/agent-config/commit/bfdbc9053d9032ffd10248835ba03f276631c7b3))
835
+
836
+ ### Chores
837
+
838
+ * gitignore install-time artefacts in maintainer repo ([d75aeac](https://github.com/event4u-app/agent-config/commit/d75aeac4ed8858d2cddc7e3534eeff6bfb1ab036))
839
+
840
+ Tests: 5078 (+14 since 4.7.2)
841
+
805
842
  ## [4.7.2](https://github.com/event4u-app/agent-config/compare/4.7.1...4.7.2) (2026-05-28)
806
843
 
807
844
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-05-28T06:18:52Z`
3
+ - Generated: `2026-05-28T13:27:08Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -9543,7 +9543,7 @@
9543
9543
  "reason": "scaffold for new SKILL.md authoring"
9544
9544
  }
9545
9545
  ],
9546
- "generated_at": "2026-05-28T06:18:52Z",
9546
+ "generated_at": "2026-05-28T13:27:08Z",
9547
9547
  "packs": [
9548
9548
  {
9549
9549
  "artefact_count": 84,
@@ -1 +1 @@
1
- b1be210896960f4ef344298e27481e6fc8b98055d6694aa89ad2184e4d4c4e26 discovery-manifest.json
1
+ 02075520b8ccb3025ec9d54d7ec0585f26f09c3c947d3c696f3ef4328aa04e74 discovery-manifest.json
@@ -1,6 +1,6 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-05-28T06:18:52Z`
3
+ - Generated: `2026-05-28T13:27:08Z`
4
4
  - Scanner: `d75eba636abb`
5
5
  - Artefacts: **432**
6
6
  - Unassigned: **0**
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-05-28T06:18:52Z`
3
+ - Generated: `2026-05-28T13:27:08Z`
4
4
  - Orphan artefacts: **0**
5
5
 
6
6
  > An orphan is an artefact whose declared pack has no other members.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "checksum": "sha256:eb7494e53428947d792e0377cb59e043457819ad3fff0b7ff6bc1011134be766",
3
- "generated_at": "2026-05-28T06:18:52Z",
3
+ "generated_at": "2026-05-28T13:27:08Z",
4
4
  "packs": [
5
5
  {
6
6
  "artefact_count": 84,
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-05-28T06:18:52Z`
3
+ - Generated: `2026-05-28T13:27:08Z`
4
4
  - Workspaces tracked: **8**
5
5
  - Human-review-required artefacts: **2**
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "checksum": "sha256:eb7494e53428947d792e0377cb59e043457819ad3fff0b7ff6bc1011134be766",
3
- "generated_at": "2026-05-28T06:18:52Z",
3
+ "generated_at": "2026-05-28T13:27:08Z",
4
4
  "scanner_version": "d75eba636abb",
5
5
  "workspaces": [
6
6
  {
@@ -62,6 +62,14 @@ export const USER_SCOPE_PATHS = {
62
62
  const CLAUDE_SKILL_BUNDLE = [
63
63
  ['.agent-src/rules', 'rules'],
64
64
  ['.agent-src/skills', 'skills'],
65
+ // Commands ship to ~/.claude/commands/ — native Claude Code slash-
66
+ // command surface. Verified empirically 2026-05-28: rich frontmatter
67
+ // (disable-model-invocation, custom fields) tolerated; nested
68
+ // subdirs route as `/<cluster>:<sub>`. Council session 2026-05-28
69
+ // converged on Option B (native slash-only) — see
70
+ // agents/runtime/council/responses/claude-code-distribution.json
71
+ // and scripts/install.py:_CLAUDE_SKILL_BUNDLE for the Python mirror.
72
+ ['.agent-src/commands', 'commands'],
65
73
  ['.agent-src/personas', 'personas'],
66
74
  ];
67
75
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wizard-plan.js","sourceRoot":"","sources":["../../src/install/wizard-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAC9D,aAAa,EAAK,YAAY;IAC9B,gBAAgB,EAAE,uCAAuC;IACzD,MAAM,EAAY,YAAY;IAC9B,QAAQ,EAAU,sBAAsB;IACxC,KAAK,EAAa,0BAA0B;IAC5C,YAAY,EAAM,YAAY;IAC9B,OAAO,EAAW,aAAa;IAC/B,OAAO,EAAW,aAAa;IAC/B,KAAK,EAAa,mBAAmB;IACrC,KAAK,EAAa,WAAW;IAC7B,OAAO,EAAW,SAAS;IAC3B,QAAQ,EAAU,cAAc;IAChC,QAAQ,EAAU,cAAc;IAChC,GAAG,EAAe,gBAAgB;IAClC,SAAS,EAAS,sBAAsB;IACxC,IAAI,EAAc,UAAU;IAC5B,KAAK,EAAa,WAAW;IAC7B,QAAQ,EAAU,cAAc;IAChC,IAAI,EAAc,UAAU;IAC5B,WAAW,EAAO,YAAY;IAC9B,SAAS,EAAS,eAAe;IACjC,KAAK,EAAa,aAAa;IAC/B,IAAI,EAAc,UAAU;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAA6C;IAClE,CAAC,kBAAkB,EAAK,OAAO,CAAC;IAChC,CAAC,mBAAmB,EAAI,QAAQ,CAAC;IACjC,CAAC,qBAAqB,EAAE,UAAU,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAuE;IACrG,aAAa,EAAE,mBAAmB;IAClC,OAAO,EAAE;QACL,CAAC,kBAAkB,EAAM,OAAO,CAAC;QACjC,CAAC,mBAAmB,EAAK,QAAQ,CAAC;QAClC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,sBAAsB,EAAE,WAAW,CAAC;KACxC;IACD,MAAM,EAAE;QACJ,CAAC,kBAAkB,EAAK,OAAO,CAAC;QAChC,CAAC,qBAAqB,EAAE,UAAU,CAAC;QACnC,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACtC;IACD,QAAQ,EAAE;QACN,CAAC,kBAAkB,EAAE,OAAO,CAAC;KAChC;IACD,KAAK,EAAE;QACH,CAAC,kBAAkB,EAAE,EAAE,CAAC;KAC3B;IACD,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,OAAO,EAAO,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,IAAI,EAAU,mBAAmB;IACjC,WAAW,EAAG,mBAAmB;IACjC,SAAS,EAAK,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,IAAI,EAAU,mBAAmB;IACjC,IAAI,EAAE;QACF,CAAC,kBAAkB,EAAK,OAAO,CAAC;QAChC,CAAC,mBAAmB,EAAI,UAAU,CAAC;QACnC,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACtC;CACJ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAa;IACtD,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAYD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC9C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,SAAS;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IACxD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,gBAAgB,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"wizard-plan.js","sourceRoot":"","sources":["../../src/install/wizard-plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAC9D,aAAa,EAAK,YAAY;IAC9B,gBAAgB,EAAE,uCAAuC;IACzD,MAAM,EAAY,YAAY;IAC9B,QAAQ,EAAU,sBAAsB;IACxC,KAAK,EAAa,0BAA0B;IAC5C,YAAY,EAAM,YAAY;IAC9B,OAAO,EAAW,aAAa;IAC/B,OAAO,EAAW,aAAa;IAC/B,KAAK,EAAa,mBAAmB;IACrC,KAAK,EAAa,WAAW;IAC7B,OAAO,EAAW,SAAS;IAC3B,QAAQ,EAAU,cAAc;IAChC,QAAQ,EAAU,cAAc;IAChC,GAAG,EAAe,gBAAgB;IAClC,SAAS,EAAS,sBAAsB;IACxC,IAAI,EAAc,UAAU;IAC5B,KAAK,EAAa,WAAW;IAC7B,QAAQ,EAAU,cAAc;IAChC,IAAI,EAAc,UAAU;IAC5B,WAAW,EAAO,YAAY;IAC9B,SAAS,EAAS,eAAe;IACjC,KAAK,EAAa,aAAa;IAC/B,IAAI,EAAc,UAAU;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAA6C;IAClE,CAAC,kBAAkB,EAAK,OAAO,CAAC;IAChC,CAAC,mBAAmB,EAAI,QAAQ,CAAC;IACjC,mEAAmE;IACnE,qEAAqE;IACrE,8DAA8D;IAC9D,kEAAkE;IAClE,kDAAkD;IAClD,iEAAiE;IACjE,qEAAqE;IACrE,CAAC,qBAAqB,EAAE,UAAU,CAAC;IACnC,CAAC,qBAAqB,EAAE,UAAU,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAuE;IACrG,aAAa,EAAE,mBAAmB;IAClC,OAAO,EAAE;QACL,CAAC,kBAAkB,EAAM,OAAO,CAAC;QACjC,CAAC,mBAAmB,EAAK,QAAQ,CAAC;QAClC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,qBAAqB,EAAG,UAAU,CAAC;QACpC,CAAC,sBAAsB,EAAE,WAAW,CAAC;KACxC;IACD,MAAM,EAAE;QACJ,CAAC,kBAAkB,EAAK,OAAO,CAAC;QAChC,CAAC,qBAAqB,EAAE,UAAU,CAAC;QACnC,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACtC;IACD,QAAQ,EAAE;QACN,CAAC,kBAAkB,EAAE,OAAO,CAAC;KAChC;IACD,KAAK,EAAE;QACH,CAAC,kBAAkB,EAAE,EAAE,CAAC;KAC3B;IACD,YAAY,EAAE,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,OAAO,EAAO,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,QAAQ,EAAM,mBAAmB;IACjC,IAAI,EAAU,mBAAmB;IACjC,WAAW,EAAG,mBAAmB;IACjC,SAAS,EAAK,mBAAmB;IACjC,KAAK,EAAS,mBAAmB;IACjC,IAAI,EAAU,mBAAmB;IACjC,IAAI,EAAE;QACF,CAAC,kBAAkB,EAAK,OAAO,CAAC;QAChC,CAAC,mBAAmB,EAAI,UAAU,CAAC;QACnC,CAAC,qBAAqB,EAAE,UAAU,CAAC;KACtC;CACJ,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAa;IACtD,MAAM,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IAC5B,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAYD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC1D,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAC9C,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,SAAS;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IACxD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO,gBAAgB,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;KACxB,CAAC,CAAC;AACP,CAAC"}
@@ -9,7 +9,7 @@
9
9
  "homepage": "https://github.com/event4u-app/agent-config#readme",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "4.7.2"
12
+ "version": "4.9.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -0,0 +1,147 @@
1
+ ---
2
+ adr: 030
3
+ status: accepted
4
+ date: 2026-05-28
5
+ decision: claude-code-command-projection
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: road-to-claude-code-global-distribution Phase 3
9
+ type: structural
10
+ review_date: 2026-06-11
11
+ ---
12
+
13
+ # ADR-030 — Claude Code command-projection strategy: native slash-only
14
+
15
+ ## Status
16
+
17
+ **Accepted** · 2026-05-28. Three conditions enumerated below; all three
18
+ verified empirically in the same session, so the decision lands
19
+ **without** soak. The 14-day kill-switch keeps the revert path one
20
+ commit away; review date 2026-06-11 closes the window.
21
+
22
+ ## Context
23
+
24
+ The package ships commands as `.agent-src/commands/<cluster>/<sub>.md`
25
+ (canonical source) and projects them per-tool through
26
+ `scripts/condense.py`. Pre-2026-05-28 the Claude Code projection was a
27
+ single path: `generate_claude_commands` rewrote each command into
28
+ `.claude/skills/<flat-slug>/SKILL.md` with
29
+ `disable-model-invocation: true` in the source frontmatter.
30
+
31
+ The 2026-05-28 diagnostic surfaced the failure mode:
32
+
33
+ - `.claude/commands/` was never populated — commands carried no
34
+ filesystem channel into Claude Code's native slash router.
35
+ - The skills-projection target was filtered out of the
36
+ model-invokable skill list (`disable-model-invocation: true`).
37
+ - `_CLAUDE_SKILL_BUNDLE` shipped `rules` / `skills` / `personas` but
38
+ **no** `commands` subtree.
39
+
40
+ Net result: Claude Code received zero command surface from the package
41
+ outside the cwd-local repo install. Augment Code and Cursor bundles
42
+ already shipped `commands/`; Claude Code was the outlier.
43
+
44
+ ## Decision
45
+
46
+ Adopt **Option B (native slash-only)**:
47
+
48
+ 1. Ship `.agent-src/commands/` directly into Claude Code's native
49
+ slash-command surface at `~/.claude/commands/` via the global
50
+ deploy bundle (`_CLAUDE_SKILL_BUNDLE` in `scripts/install.py` and
51
+ its TypeScript mirror in `src/install/wizard-plan.ts`).
52
+ Subdirectory layout maps 1:1 to the `/<cluster>:<sub>` namespace
53
+ per Claude Code's filesystem-channel convention. No separate
54
+ `condense.py` projector — the source tree already follows the
55
+ target layout, so the global-install copy is the projection.
56
+ 2. Keep `condense.py::generate_claude_commands` (skills-list
57
+ projection at `.claude/skills/`) unchanged **for now** —
58
+ backwards compat for any consumer already discovering commands
59
+ via `.claude/skills/`. Retirement deferred to a separate roadmap
60
+ if needed.
61
+
62
+ Rejected alternatives:
63
+
64
+ - **Option A — dual projection (slash + skills, both active).**
65
+ Conservative, but doubles maintenance surface and keeps the
66
+ filter-out-of-skill-list semantics. Verdict: only useful if Option B
67
+ fails the kill-switch window.
68
+ - **Option C — commands_unsupported (no Claude Code command
69
+ surface).** Eliminates the bug class by removing the feature.
70
+ Verdict: regression in product surface; Claude Code consumers lose
71
+ parity with Augment / Cursor.
72
+
73
+ ### Council convergence
74
+
75
+ Session 2026-05-28, design mode, 2 rounds, $0.06 actual.
76
+ Members: `claude-sonnet-4-5` + `gpt-4o`. Both converged on Option B,
77
+ CONDITIONAL on the three verifications below. Responses captured at
78
+ `agents/runtime/council/responses/claude-code-distribution.json`.
79
+
80
+ ### Three conditions (all verified 2026-05-28)
81
+
82
+ 1. **Plugin loader reads `.claude/commands/` for globally-installed
83
+ plugins (not just cwd-local).**
84
+ Verified empirically: `~/.claude/commands/probe/sub.md` →
85
+ `/probe:sub` routed successfully via
86
+ `echo '' | claude --print "/probe:sub"`. Native filesystem channel
87
+ works for user-scope at top-level AND in subdirectories.
88
+ 2. **Command parser tolerates `disable-model-invocation: true` in
89
+ frontmatter (or strip during projection).**
90
+ Verified empirically: probe command carrying the package's full
91
+ rich frontmatter routed successfully. Subtle behaviour:
92
+ `disable-model-invocation: true` hides the command from `/help`
93
+ listing but keeps it slash-invokable when typed directly — the
94
+ desired UX for heavyweight commands. No frontmatter-strip step
95
+ required.
96
+ 3. **Kill-switch defined: if native slash doesn't resolve in
97
+ production within 14 days, fall back to dual-projection with
98
+ deprecation timeline.**
99
+ The kill-switch is the inverse of Phase 4 Step 1 — remove
100
+ `(".agent-src/commands", "commands")` from `_CLAUDE_SKILL_BUNDLE`
101
+ in `scripts/install.py` and `src/install/wizard-plan.ts`. One-line
102
+ revert per file. Tracked by review date 2026-06-11.
103
+
104
+ ## Consequences
105
+
106
+ **Positive:**
107
+
108
+ - `~/.claude/commands/<cluster>/<sub>.md` lands the package's full
109
+ command surface natively in Claude Code, matching Augment and
110
+ Cursor parity.
111
+ - `disable-model-invocation: true` semantics preserved — heavyweight
112
+ commands stay invokable but hidden from auto-complete, the intended
113
+ UX.
114
+ - No frontmatter mangling — the source command file is the artifact
115
+ that ships, no projection transform needed.
116
+
117
+ **Negative / accepted:**
118
+
119
+ - Two projection paths coexist (`.claude/commands/` for slash routing
120
+ + `.claude/skills/` for the legacy skills-projection list). Cost is
121
+ one extra subtree per install; benefit is no consumer-breaking
122
+ during the 14-day kill-switch window. Retirement of the skills
123
+ projection is a separate decision.
124
+ - Frontmatter shipped to Claude Code carries package-internal fields
125
+ (`tier`, `cluster`, `sub`, `lifecycle`, `trust`, `install`, etc.)
126
+ the runtime ignores. Empirically tolerated; documented as
127
+ belt-and-braces against future runtime tightening.
128
+
129
+ ## Alternatives considered
130
+
131
+ See § Decision above — Option A (dual projection) and Option C
132
+ (commands_unsupported) explicitly rejected with stated rationale.
133
+
134
+ ## References
135
+
136
+ - Roadmap:
137
+ `agents/roadmaps/road-to-claude-code-global-distribution.md` Phase 3.
138
+ - Council session responses:
139
+ `agents/runtime/council/responses/claude-code-distribution.json`.
140
+ - Empirical verification: `~/.claude/commands/probe/sub.md` route
141
+ test, 2026-05-28 (Condition 1 + Condition 2).
142
+ - Mirror implementation: `scripts/install.py::_CLAUDE_SKILL_BUNDLE`
143
+ and `src/install/wizard-plan.ts::CLAUDE_SKILL_BUNDLE` — both
144
+ include `(".agent-src/commands", "commands")` so a global install
145
+ drops `~/.claude/commands/<cluster>/<sub>.md` directly.
146
+ - Predecessor projection: `scripts/condense.py::generate_claude_commands`
147
+ (skills-list, retained pending separate retirement decision).
@@ -33,6 +33,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
33
33
  | [ADR-027](ADR-027-changelog-machine-vs-manual.md) | Changelog Machine Vs Manual | accepted | 2026-05-25 | — |
34
34
  | [ADR-028](ADR-028-root-layout.md) | Root Layout | accepted | 2026-05-25 | — |
35
35
  | [ADR-029](ADR-029-multi-workspace-deferred.md) | Multi Workspace Deferred | accepted | 2026-05-25 | — |
36
+ | [ADR-030](ADR-030-claude-code-command-projection.md) | Claude Code Command Projection | accepted | 2026-05-28 | — |
36
37
 
37
38
  ## Unnumbered (legacy)
38
39
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "4.7.2",
3
+ "version": "4.9.0",
4
4
  "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -198,6 +198,50 @@ def check_version(
198
198
  return (recorded == installed_version, recorded)
199
199
 
200
200
 
201
+ _SEMVER_RE = re.compile(r"^\s*v?(\d+)\.(\d+)\.(\d+)")
202
+
203
+
204
+ def _parse_semver(version: str) -> Optional[tuple[int, int, int]]:
205
+ """Parse ``X.Y.Z[-suffix]`` into a ``(major, minor, patch)`` tuple.
206
+
207
+ Returns ``None`` when the leading three numeric segments cannot be
208
+ extracted. Suffixes (``-rc1``, ``+build.5``) are ignored: the
209
+ classification only needs the numeric prefix to decide upgrade vs
210
+ downgrade.
211
+ """
212
+ match = _SEMVER_RE.match(version)
213
+ if not match:
214
+ return None
215
+ return int(match.group(1)), int(match.group(2)), int(match.group(3))
216
+
217
+
218
+ def classify_mismatch(
219
+ installed_version: str, recorded: Optional[str],
220
+ ) -> str:
221
+ """Classify the relationship between recorded and installed versions.
222
+
223
+ Returns one of:
224
+ * ``"none"`` — no lockfile yet; install proceeds clean.
225
+ * ``"match"`` — recorded equals installed.
226
+ * ``"upgrade"`` — recorded < installed; auto-heal allowed.
227
+ * ``"downgrade"`` — recorded > installed; refuse without ``--force``.
228
+ * ``"unparseable"`` — recorded shape unrecognizable (pre-1.0, 1.x
229
+ legacy formats from the namespace migration); treated as
230
+ upgrade by the install path.
231
+ """
232
+ if recorded is None:
233
+ return "none"
234
+ if recorded == installed_version:
235
+ return "match"
236
+ rec = _parse_semver(recorded)
237
+ inst = _parse_semver(installed_version)
238
+ if rec is None or inst is None:
239
+ return "unparseable"
240
+ if rec < inst:
241
+ return "upgrade"
242
+ return "downgrade"
243
+
244
+
201
245
  def current_package_version(repo_root: Optional[Path] = None) -> str:
202
246
  """Read ``version`` from the package's own ``package.json``."""
203
247
  if repo_root is None: