@event4u/agent-config 5.7.0 → 5.8.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 (162) hide show
  1. package/.agent-src/commands/agent-handoff.md +1 -1
  2. package/.agent-src/commands/agent-status.md +1 -1
  3. package/.agent-src/commands/agents/audit.md +1 -1
  4. package/.agent-src/commands/agents/init.md +1 -1
  5. package/.agent-src/commands/agents/user/accept.md +3 -3
  6. package/.agent-src/commands/agents/user/init.md +4 -4
  7. package/.agent-src/commands/agents/user/show.md +3 -3
  8. package/.agent-src/commands/agents/user/update.md +3 -3
  9. package/.agent-src/commands/agents/user.md +1 -1
  10. package/.agent-src/commands/agents.md +1 -1
  11. package/.agent-src/commands/analytics/prune.md +1 -1
  12. package/.agent-src/commands/analytics/show.md +1 -1
  13. package/.agent-src/commands/analytics.md +1 -1
  14. package/.agent-src/commands/bug-fix.md +1 -1
  15. package/.agent-src/commands/challenge-me.md +1 -1
  16. package/.agent-src/commands/chat-history/import.md +1 -1
  17. package/.agent-src/commands/chat-history/learn.md +1 -1
  18. package/.agent-src/commands/chat-history/show.md +1 -1
  19. package/.agent-src/commands/chat-history.md +1 -1
  20. package/.agent-src/commands/check-current-md.md +1 -1
  21. package/.agent-src/commands/condense.md +1 -1
  22. package/.agent-src/commands/context.md +1 -1
  23. package/.agent-src/commands/cost-report.md +1 -1
  24. package/.agent-src/commands/council.md +3 -3
  25. package/.agent-src/commands/create-pr/description-only.md +1 -1
  26. package/.agent-src/commands/create-pr.md +1 -1
  27. package/.agent-src/commands/e2e-heal.md +1 -1
  28. package/.agent-src/commands/e2e-plan.md +1 -1
  29. package/.agent-src/commands/feature.md +1 -1
  30. package/.agent-src/commands/fix/ci.md +1 -1
  31. package/.agent-src/commands/fix/portability.md +1 -1
  32. package/.agent-src/commands/fix/pr-bot-comments.md +1 -1
  33. package/.agent-src/commands/fix/pr-comments.md +1 -1
  34. package/.agent-src/commands/fix/pr-developer-comments.md +1 -1
  35. package/.agent-src/commands/fix/refs.md +1 -1
  36. package/.agent-src/commands/fix/seeder.md +1 -1
  37. package/.agent-src/commands/fix.md +1 -1
  38. package/.agent-src/commands/judge.md +1 -1
  39. package/.agent-src/commands/knowledge/cross-repo.md +1 -1
  40. package/.agent-src/commands/knowledge/forget.md +1 -1
  41. package/.agent-src/commands/knowledge/ingest.md +1 -1
  42. package/.agent-src/commands/knowledge/list.md +1 -1
  43. package/.agent-src/commands/knowledge.md +1 -1
  44. package/.agent-src/commands/memory/add.md +1 -1
  45. package/.agent-src/commands/memory/learn-low-impact.md +1 -1
  46. package/.agent-src/commands/memory/load.md +1 -1
  47. package/.agent-src/commands/memory/mine-session.md +1 -1
  48. package/.agent-src/commands/memory/promote.md +1 -1
  49. package/.agent-src/commands/memory/propose.md +1 -1
  50. package/.agent-src/commands/memory.md +1 -1
  51. package/.agent-src/commands/mode.md +1 -1
  52. package/.agent-src/commands/optimize/agents-dir.md +1 -1
  53. package/.agent-src/commands/optimize/augmentignore.md +1 -1
  54. package/.agent-src/commands/optimize/rtk.md +1 -1
  55. package/.agent-src/commands/optimize/skills.md +1 -1
  56. package/.agent-src/commands/optimize.md +1 -1
  57. package/.agent-src/commands/orchestrate.md +1 -1
  58. package/.agent-src/commands/override/create.md +1 -1
  59. package/.agent-src/commands/override/manage.md +1 -1
  60. package/.agent-src/commands/override.md +1 -1
  61. package/.agent-src/commands/package-reset.md +1 -1
  62. package/.agent-src/commands/prediction-pool.md +31 -12
  63. package/.agent-src/commands/profile/activate.md +81 -0
  64. package/.agent-src/commands/profile/deactivate.md +68 -0
  65. package/.agent-src/commands/profile/show.md +70 -0
  66. package/.agent-src/commands/profile.md +68 -0
  67. package/.agent-src/commands/project-health.md +1 -1
  68. package/.agent-src/commands/quality-fix.md +1 -1
  69. package/.agent-src/commands/roadmap/process-full.md +1 -1
  70. package/.agent-src/commands/roadmap/process-phase.md +1 -1
  71. package/.agent-src/commands/roadmap/process-step.md +1 -1
  72. package/.agent-src/commands/roadmap.md +1 -1
  73. package/.agent-src/commands/set-cost-profile.md +1 -1
  74. package/.agent-src/commands/skill/preview.md +3 -3
  75. package/.agent-src/commands/skill.md +1 -1
  76. package/.agent-src/commands/skills/discover.md +1 -1
  77. package/.agent-src/commands/skills.md +1 -1
  78. package/.agent-src/commands/sync-agent-settings.md +1 -1
  79. package/.agent-src/commands/sync-gitignore/fix.md +1 -1
  80. package/.agent-src/commands/sync-gitignore.md +1 -1
  81. package/.agent-src/commands/update-form-request-messages.md +1 -1
  82. package/.agent-src/skills/check-refs/SKILL.md +1 -1
  83. package/.agent-src/skills/finishing-a-development-branch/SKILL.md +1 -1
  84. package/.agent-src/skills/git-workflow/SKILL.md +1 -1
  85. package/.agent-src/skills/jira-integration/SKILL.md +1 -1
  86. package/.agent-src/skills/markitdown/SKILL.md +1 -1
  87. package/.agent-src/skills/prediction-pool-optimizer/SKILL.md +195 -77
  88. package/.agent-src/skills/prediction-pool-optimizer/evals/triggers.json +3 -1
  89. package/.agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +111 -16
  90. package/.agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +109 -0
  91. package/.agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
  92. package/.agent-src/skills/script-writing/SKILL.md +1 -1
  93. package/.agent-src/skills/token-optimizer/SKILL.md +1 -1
  94. package/.agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  95. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  96. package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +52 -5
  97. package/.claude-plugin/marketplace.json +370 -366
  98. package/CHANGELOG.md +60 -0
  99. package/README.md +2 -2
  100. package/config/discovery/session-profiles.yml +37 -0
  101. package/dist/discovery/deprecation-report.md +1 -1
  102. package/dist/discovery/discovery-manifest.json +183 -95
  103. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  104. package/dist/discovery/discovery-manifest.summary.md +3 -3
  105. package/dist/discovery/orphan-report.md +1 -1
  106. package/dist/discovery/packs.json +9 -5
  107. package/dist/discovery/trust-report.md +2 -2
  108. package/dist/discovery/workspaces.json +8 -4
  109. package/dist/mcp/registry-manifest.json +3 -3
  110. package/docs/architecture.md +1 -1
  111. package/docs/catalog.md +7 -3
  112. package/docs/contracts/command-clusters.md +2 -0
  113. package/docs/contracts/session-profile-overlay.md +120 -0
  114. package/docs/customization.md +26 -0
  115. package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +36 -0
  116. package/docs/decisions/ADR-038-canonical-settings-path.md +66 -0
  117. package/docs/decisions/ADR-039-claude-skills-untracked.md +139 -0
  118. package/docs/decisions/INDEX.md +2 -0
  119. package/docs/development.md +12 -0
  120. package/docs/getting-started.md +1 -1
  121. package/docs/guidelines/agent-infra/layered-settings.md +8 -2
  122. package/docs/skills-catalog.md +5 -1
  123. package/llms.txt +4 -0
  124. package/package.json +1 -1
  125. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  126. package/scripts/_cli/cmd_doctor.py +3 -2
  127. package/scripts/_cli/cmd_versions.py +2 -2
  128. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  129. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  130. package/scripts/_lib/agent_settings.py +52 -5
  131. package/scripts/_lib/agent_src.py +30 -0
  132. package/scripts/ai_council/session.py +5 -1
  133. package/scripts/audit_command_surface.py +7 -1
  134. package/scripts/audit_initial_context.py +10 -2
  135. package/scripts/check_gate_paths.py +117 -0
  136. package/scripts/check_references.py +51 -2
  137. package/scripts/check_test_coverage_diff.py +180 -0
  138. package/scripts/compile_router.py +5 -1
  139. package/scripts/condense.py +79 -2
  140. package/scripts/config/session_profiles.py +492 -0
  141. package/scripts/council_cli.py +5 -1
  142. package/scripts/hook_manifest.yaml +15 -7
  143. package/scripts/hooks/dispatch_hook.py +8 -0
  144. package/scripts/install-hooks.sh +2 -1
  145. package/scripts/install.py +76 -5
  146. package/scripts/inventory_abstraction_budget.py +6 -1
  147. package/scripts/lint_agents_md.py +11 -4
  148. package/scripts/lint_hook_concern_budget.py +5 -1
  149. package/scripts/lint_marketplace.py +18 -7
  150. package/scripts/lint_roadmap_ci_steps.py +5 -1
  151. package/scripts/lint_roadmap_complexity.py +5 -1
  152. package/scripts/mcp_server/prompts.py +5 -1
  153. package/scripts/prediction-pool/pool_winsim.py +236 -0
  154. package/scripts/prediction-pool/score_ev.py +188 -0
  155. package/scripts/profile_staleness_hook.py +69 -0
  156. package/scripts/roadmap_progress_hook.py +56 -6
  157. package/scripts/smoke_quickstart.py +3 -2
  158. package/scripts/sync_agent_settings.py +8 -3
  159. package/scripts/validate_agent_settings.py +5 -1
  160. package/scripts/validate_decision_engine.py +5 -1
  161. package/scripts/measure_roadmap_trajectory.py +0 -112
  162. package/scripts/verify_roadmap_closure.py +0 -327
@@ -1 +1 @@
1
- feb5aee058e611d4b90fc31f384f5f10b8df31306acadd27f9fd863941d01def discovery-manifest.json
1
+ a943cc6a13b848ee35ec40fcc64ca9cf0823fffdf944d3d15afa54535ca72d74 discovery-manifest.json
@@ -1,8 +1,8 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-06-01T14:03:17Z`
3
+ - Generated: `2026-06-02T02:48:57Z`
4
4
  - Scanner: `ca7acd2ec7af`
5
- - Artefacts: **449**
5
+ - Artefacts: **453**
6
6
  - Unassigned: **0**
7
7
 
8
8
  ## `engineering` — Engineering
@@ -90,5 +90,5 @@
90
90
 
91
91
  | Pack | Artefacts |
92
92
  |---|---|
93
- | `meta` — Meta | 263 |
93
+ | `meta` — Meta | 267 |
94
94
 
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-06-01T14:03:17Z`
3
+ - Generated: `2026-06-02T02:48:57Z`
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
- "checksum": "sha256:8efbf1568f8ccc06e87bdefcb41d2478cbfe08f576e9037e8f629d2697f4a267",
3
- "generated_at": "2026-06-01T14:03:17Z",
2
+ "checksum": "sha256:b55ddc4224e45ec7627ece7c2fd6f043df8c7030efbe50df87573f0da4de4173",
3
+ "generated_at": "2026-06-02T02:48:57Z",
4
4
  "packs": [
5
5
  {
6
6
  "artefact_count": 85,
@@ -784,7 +784,7 @@
784
784
  ]
785
785
  },
786
786
  {
787
- "artefact_count": 263,
787
+ "artefact_count": 267,
788
788
  "artefacts": [
789
789
  "packages/core/.agent-src.uncondensed/commands/agent-handoff.md",
790
790
  "packages/core/.agent-src.uncondensed/commands/agent-status.md",
@@ -894,6 +894,10 @@
894
894
  "packages/core/.agent-src.uncondensed/commands/post-as/ghostwriter.md",
895
895
  "packages/core/.agent-src.uncondensed/commands/post-as/me.md",
896
896
  "packages/core/.agent-src.uncondensed/commands/prepare-for-review.md",
897
+ "packages/core/.agent-src.uncondensed/commands/profile.md",
898
+ "packages/core/.agent-src.uncondensed/commands/profile/activate.md",
899
+ "packages/core/.agent-src.uncondensed/commands/profile/deactivate.md",
900
+ "packages/core/.agent-src.uncondensed/commands/profile/show.md",
897
901
  "packages/core/.agent-src.uncondensed/commands/project-analyze.md",
898
902
  "packages/core/.agent-src.uncondensed/commands/project-health.md",
899
903
  "packages/core/.agent-src.uncondensed/commands/quality-fix.md",
@@ -1051,14 +1055,14 @@
1051
1055
  "packages/core/.agent-src.uncondensed/templates/agents/proposal.example.md"
1052
1056
  ],
1053
1057
  "by_lifecycle": {
1054
- "active": 262,
1058
+ "active": 266,
1055
1059
  "archived": 0,
1056
1060
  "deprecated": 0,
1057
1061
  "experimental": 1
1058
1062
  },
1059
1063
  "by_trust_level": {
1060
1064
  "advisory": 0,
1061
- "core": 262,
1065
+ "core": 266,
1062
1066
  "experimental": 1,
1063
1067
  "professional": 0,
1064
1068
  "restricted": 0
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-06-01T14:03:17Z`
3
+ - Generated: `2026-06-02T02:48:57Z`
4
4
  - Workspaces tracked: **8**
5
5
  - Human-review-required artefacts: **2**
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  | Workspace | core | professional | experimental | advisory | restricted |
10
10
  |---|---|---|---|---|---|
11
- | `agent-config-maintainer` | 262 | 0 | 2 | 0 | 0 |
11
+ | `agent-config-maintainer` | 266 | 0 | 2 | 0 | 0 |
12
12
  | `engineering` | 86 | 41 | 1 | 0 | 0 |
13
13
  | `finance` | 2 | 3 | 0 | 1 | 0 |
14
14
  | `founder` | 7 | 0 | 0 | 1 | 0 |
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:8efbf1568f8ccc06e87bdefcb41d2478cbfe08f576e9037e8f629d2697f4a267",
3
- "generated_at": "2026-06-01T14:03:17Z",
2
+ "checksum": "sha256:b55ddc4224e45ec7627ece7c2fd6f043df8c7030efbe50df87573f0da4de4173",
3
+ "generated_at": "2026-06-02T02:48:57Z",
4
4
  "scanner_version": "ca7acd2ec7af",
5
5
  "workspaces": [
6
6
  {
@@ -454,7 +454,7 @@
454
454
  ]
455
455
  },
456
456
  {
457
- "artefact_count": 263,
457
+ "artefact_count": 267,
458
458
  "default_packs": [
459
459
  "meta"
460
460
  ],
@@ -464,7 +464,7 @@
464
464
  "optional_packs": [],
465
465
  "packs": [
466
466
  {
467
- "artefact_count": 263,
467
+ "artefact_count": 267,
468
468
  "artefacts": [
469
469
  "packages/core/.agent-src.uncondensed/commands/agent-handoff.md",
470
470
  "packages/core/.agent-src.uncondensed/commands/agent-status.md",
@@ -574,6 +574,10 @@
574
574
  "packages/core/.agent-src.uncondensed/commands/post-as/ghostwriter.md",
575
575
  "packages/core/.agent-src.uncondensed/commands/post-as/me.md",
576
576
  "packages/core/.agent-src.uncondensed/commands/prepare-for-review.md",
577
+ "packages/core/.agent-src.uncondensed/commands/profile.md",
578
+ "packages/core/.agent-src.uncondensed/commands/profile/activate.md",
579
+ "packages/core/.agent-src.uncondensed/commands/profile/deactivate.md",
580
+ "packages/core/.agent-src.uncondensed/commands/profile/show.md",
577
581
  "packages/core/.agent-src.uncondensed/commands/project-analyze.md",
578
582
  "packages/core/.agent-src.uncondensed/commands/project-health.md",
579
583
  "packages/core/.agent-src.uncondensed/commands/quality-fix.md",
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "discovery": {
3
- "artefact_count": 449,
3
+ "artefact_count": 453,
4
4
  "scanner_version": "ca7acd2ec7af"
5
5
  },
6
- "generated_at": "2026-06-01",
6
+ "generated_at": "2026-06-02",
7
7
  "package": {
8
8
  "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
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": "5.7.0"
12
+ "version": "5.8.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -148,7 +148,7 @@ note, package-internal path-swap, description budget, and the
148
148
  |---|---|---|
149
149
  | **Skills** | 223 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
150
150
  | **Rules** | 79 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
151
- | **Commands** | 146 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/condense`, … |
151
+ | **Commands** | 150 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/condense`, … |
152
152
  | **Guidelines** | 73 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
153
153
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
154
154
  | **Contexts** | 5 | Shared knowledge about the system itself |
package/docs/catalog.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **520 public artefacts** shipped by
3
+ Consumer-facing catalog of all **524 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
@@ -157,7 +157,7 @@ are excluded.
157
157
  | skill | [`playwright-testing`](../.agent-src/skills/playwright-testing/SKILL.md) | | Use when writing Playwright E2E tests — browser automation, visual regression testing, Page Objects, fixtures, and reliable test patterns. |
158
158
  | skill | [`po-discovery`](../.agent-src/skills/po-discovery/SKILL.md) | | Use when shaping a fuzzy product ask into a refined backlog item — problem framing, user-story rewrite, AC tightening — even if the user just says 'help me write this ticket'. |
159
159
  | skill | [`positioning-strategy`](../.agent-src/skills/positioning-strategy/SKILL.md) | | Use when locking the market frame — category, segment, alternative, point-of-view — before messaging, launch, or pricing rides on it. Triggers on 'who are we for', 'opposable audit'. |
160
- | skill | [`prediction-pool-optimizer`](../.agent-src/skills/prediction-pool-optimizer/SKILL.md) | | Optimize prediction-pool tips (kicktipp etc.): pool rules + market odds → the expected-points-maximizing tip per match. Triggers 'optimize my pool tips', 'best kicktipp picks', 'predict'. |
160
+ | skill | [`prediction-pool-optimizer`](../.agent-src/skills/prediction-pool-optimizer/SKILL.md) | | Optimize prediction-pool tips (kicktipp etc.): rules + multi-book consensus odds → expected-points-max answer for every question, scores AND bonus. Triggers 'optimize my pool tips', 'predict'. |
161
161
  | skill | [`privacy-review`](../.agent-src/skills/privacy-review/SKILL.md) | | Use when reviewing data flows, support macros, refund templates for GDPR/CCPA/HIPAA fit — regime, consent, PII redaction (email, order-id), breach triage. Triggers 'is this GDPR-safe', 'PII redact'. |
162
162
  | skill | [`project-analysis-core`](../.agent-src/skills/project-analysis-core/SKILL.md) | | Raw discovery primitives — project discovery, version resolution, docs loading, architecture mapping, execution flow. Called by `universal-project-analysis`. Single-pass scan → `project-analyzer`. |
163
163
  | skill | [`project-analysis-hypothesis-driven`](../.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md) | | Use when a bug has multiple plausible causes across layers — competing hypotheses, validation loops, evidence-based conclusions — even when the user just says 'why is this happening?'. |
@@ -318,7 +318,7 @@ are excluded.
318
318
  | rule | [`user-interrupt-priority`](../.agent-src/rules/user-interrupt-priority.md) | always | User interrupts override the current task — STOP, complete new task in full, then ASK before resuming; never silently return to prior work |
319
319
  | rule | [`verify-before-complete`](../.agent-src/rules/verify-before-complete.md) | always | Verify before completion — run tests and quality tools before claiming done |
320
320
 
321
- ## Commands (146)
321
+ ## Commands (150)
322
322
 
323
323
  | kind | name | cluster | description |
324
324
  |---|---|---|---|
@@ -431,6 +431,10 @@ are excluded.
431
431
  | command | [`post-as:me`](../.agent-src/commands/post-as/me.md) | cluster: post-as | Draft a copyable markdown post in the maintainer's own voice (style source = .agent-user.md.voice_sample). No disclosure footer — the user is the author. |
432
432
  | command | [`prediction-pool`](../.agent-src/commands/prediction-pool.md) | | Fill a prediction pool (kicktipp, football/basketball WM): optimize expected points under the rules, enter tips via Playwright. Triggers 'Tippspiel', 'kicktipp', 'predict the pool'. |
433
433
  | command | [`prepare-for-review`](../.agent-src/commands/prepare-for-review.md) | | Prepare a PR branch for local review — updates main and merges the full branch chain so the branch is up to date |
434
+ | command | [`profile`](../.agent-src/commands/profile.md) | cluster: profile | Session-profile orchestrator — activate / deactivate / show the active packs for this session (recommendation-bias surface filter, no persistence) |
435
+ | command | [`profile:activate`](../.agent-src/commands/profile/activate.md) | cluster: profile | Activate a session profile — surface only the named profile/pack closure plus core artefacts, no persistence |
436
+ | command | [`profile:deactivate`](../.agent-src/commands/profile/deactivate.md) | cluster: profile | Deactivate the session profile — clear the overlay (or drop named packs) so the full surface returns |
437
+ | command | [`profile:show`](../.agent-src/commands/profile/show.md) | cluster: profile | Show the active session profile — active packs and surfaced/hidden command+skill counts (observability surface) |
434
438
  | command | [`project-analyze`](../.agent-src/commands/project-analyze.md) | | Full project analysis — detect stack, inventory modules, audit docs, create missing contexts |
435
439
  | command | [`project-health`](../.agent-src/commands/project-health.md) | | Quick project health check — show status of docs, modules, contexts, and roadmaps without creating anything |
436
440
  | command | [`quality-fix`](../.agent-src/commands/quality-fix.md) | | Run quality pipeline (PHP and/or JS/TS) and fix all errors — auto-detects language from changed files |
@@ -55,6 +55,8 @@ column 1 of this table.
55
55
  | `skill` | — | `preview` | new cluster 2026-05-30 (`road-to-leaner-core-and-discovery` Phase 5) — non-destructive skill/command preview: surfaces the declared steps + files/commands a skill would touch before it runs, per [`skill-dry-run`](skill-dry-run.md). Singular `skill` (one target) vs plural `skills` (the catalog) by design. |
56
56
  | `image` | — | `analyse` · `create` · `verify` | new cluster 2026-05-31 (`road-to-character-image-fidelity` Phase 4) — character-image fidelity surface mirroring `/video:*`. `:analyse` extracts a per-feature spec from an image and diffs it against a Canon Spec down to the smallest mole (OCR for lettered tattoos, per-section severity scores, canon-breaking hard gate); `:create` assembles a max-fidelity anchors-first generation prompt from the Canon Spec, governance- + provider-gated, `AIV_DRYRUN=true` default; `:verify` runs the analyser in loop mode against a candidate and reports the gate verdict + remaining diff with plateau/oscillation/budget stop conditions. Skills: [`image-analyser`](../../skills/image-analyser/SKILL.md) + [`image-creator`](../../skills/image-creator/SKILL.md); schema/rubric/loop in [`canon-spec.md`](../../skills/image-analyser/canon-spec.md). |
57
57
 
58
+ | `profile` | — | `activate` · `deactivate` · `show` | new cluster 2026-06-02 (`road-to-session-profile-activation`) — session-profile activation: an ephemeral `runtime.active_packs` overlay that biases the surfaced command/skill set to the active pack closure, with no persistence and no execution-gating (recommendation-bias MVP). `:activate <name…>` resolves an alias (`config/discovery/session-profiles.yml`) or a raw pack id, fails fast on a not-installed pack, expands the `requires_hint` closure, and writes the overlay atomically to `agents/settings/.agent-settings.local.yml`; `:deactivate [name…]` clears it (or drops named packs, keeping deps a still-active pack needs); `:show` is the observability surface (active packs + surfaced/hidden counts). Overlay = runtime modulation of the existing `pack` axis, not a fifth axis (ADR-010 addendum). Library: `scripts/config/session_profiles.py`; schema in [`session-profile-overlay`](session-profile-overlay.md). |
59
+
58
60
  **Net change:** Phase 1 collapsed 15 atomics → 3 clusters; Phase 2
59
61
  collapses 26 atomics → 11 sub-command clusters. Sub-commands use
60
62
  colon syntax (`/cluster:sub`) so Claude Code's command palette can
@@ -0,0 +1,120 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-09-02
4
+ ---
5
+
6
+ # Session-profile overlay — contract
7
+
8
+ > **Status:** beta · **Owner:** package maintainer · **Last reviewed:** 2026-06-02
9
+ >
10
+ > Schema and semantics for the `runtime.active_packs` overlay shipped by the
11
+ > `/profile` command cluster. The overlay lets a developer activate a
12
+ > profile for the **current session** so only the matching packs'
13
+ > commands/skills are the surfaced set, then switch freely without
14
+ > persisting the choice. Locked decisions: the session-profile-activation
15
+ > roadmap Phase 0. Axis boundary: the
16
+ > [ADR-010 addendum](../decisions/ADR-010-profile-pack-preset-boundary.md).
17
+
18
+ ## Decision
19
+
20
+ The overlay is an **ephemeral, runtime modulation of the `pack` axis** — an
21
+ instance of the resolution chain's existing
22
+ `… → user/env/runtime overrides` link. It is **not** a fifth axis.
23
+
24
+ It selects which already-installed packs are *surfaced* this session; it
25
+ never installs, never persists, never gates execution.
26
+
27
+ ## On-disk shape
28
+
29
+ Written to `agents/settings/.agent-settings.local.yml` (gitignored,
30
+ deepest-winning cascade layer) — **never** the committed `.agent-settings.yml`.
31
+
32
+ ```yaml
33
+ runtime:
34
+ active_packs: [engineering-base, laravel, php] # expanded closure, sorted
35
+ ```
36
+
37
+ - `runtime.active_packs` — a list of installed pack ids: the transitive
38
+ `requires_hint` closure of the activated profile/pack seed set.
39
+ - Absent / empty / wrong-type → **no overlay** (full surface).
40
+
41
+ ## Activatable tokens
42
+
43
+ `/profile activate <name…>` accepts, for each name:
44
+
45
+ 1. a **session-profile alias** from `config/discovery/session-profiles.yml`
46
+ (`developer`, `po`, `finance`, `gtm`, `content`) → its seed pack list, or
47
+ 2. a **raw pack id** from `config/discovery/packs.yml` (`laravel`, `php`, …).
48
+
49
+ Multiple names union their closures. The seed set's transitive
50
+ `requires_hint` closure is expanded before writing. **Only installed packs
51
+ are activatable** — a not-installed seed pack fails fast (exit 2). Installed
52
+ set = the top-level `packs:` block in settings, or the full vocabulary when
53
+ no block is present (maintainer repo / base-only install).
54
+
55
+ ## Surface filter (recommendation-bias)
56
+
57
+ For each `command` / `skill` artefact in `dist/discovery/discovery-manifest.json`:
58
+
59
+ - **always surfaced** when it is **core-trust** (`trust.level == "core"`) or
60
+ unscoped (no `packs`);
61
+ - otherwise **surfaced iff** `packs ∩ active_packs ≠ ∅`;
62
+ - **no overlay → everything surfaced.**
63
+
64
+ Execution is **never gated**: an inactive-pack artefact still runs, with a
65
+ one-line "from inactive pack X" notice. Hard execution-gating is deferred
66
+ (host-dependent — see
67
+ [`session-host-capability-audit`](../../agents/settings/contexts/session-host-capability-audit.md)).
68
+
69
+ ## Lifecycle (locked: option a)
70
+
71
+ - **Activate / switch / deactivate** are explicit `/profile` sub-commands.
72
+ - The overlay **survives an IDE restart** (task-scoped). A new session emits
73
+ a **staleness notice** via the `profile-staleness` `session_start` hook —
74
+ it never silently resets (the registry-refresh Catch-22).
75
+ - **Kill-switch:** delete `runtime.active_packs` (or the local file).
76
+
77
+ ## Robustness invariants
78
+
79
+ - **Fail-open read** — a corrupt / unparseable / schema-invalid overlay is
80
+ ignored; the full surface returns. A misconfigured overlay never hides
81
+ artefacts.
82
+ - **Atomic write** — the helper writes via a temp file + `os.replace`, so a
83
+ concurrent reader never sees a half-written overlay.
84
+ - **Closure self-heal** — a closure dependency that is not installed is
85
+ dropped from the written set with a note, never blocking activation.
86
+
87
+ ## Reconciliation with the existing `--profile=<id>` install flag
88
+
89
+ The install/CLI flag `--profile=<minimal|balanced|full>`
90
+ (`scripts/install.py`) is a **legacy alias for `rule_loading_tier`** — it
91
+ sets the rule-loading cost tier, not an audience profile. The word
92
+ "profile" is overloaded across three distinct, orthogonal things; this
93
+ command does **not** add a fourth meaning:
94
+
95
+ | Surface | What it sets | Axis | Persists? |
96
+ |---|---|---|---|
97
+ | `install --profile=<minimal\|balanced\|full>` | `rule_loading_tier` (cost tier) | rule_loading_tier | yes |
98
+ | `profile.id` in settings (`founder`/`developer`/…) | audience identity → default surface + personas ([`profile-system`](profile-system.md)) | profile | yes |
99
+ | **`/profile activate <name>`** (this command) | `runtime.active_packs` — which installed packs are *surfaced* this session | pack (runtime overlay) | **no** |
100
+
101
+ The session overlay answers *which installed packs are surfaced right now?*.
102
+ It does **not** change `rule_loading_tier`, does **not** change
103
+ `profile.id`, and writes only the gitignored local file. The naming
104
+ collision is pre-existing; the overlay deliberately keeps to the `pack`
105
+ axis (ADR-010 addendum) so it adds no new axis despite sharing the word.
106
+
107
+ ## Implementation
108
+
109
+ - Library + CLI: `scripts/config/session_profiles.py`
110
+ (`activate` · `deactivate` · `show` · `surface` · `stale-notice`).
111
+ - Aliases: `config/discovery/session-profiles.yml`.
112
+ - Hook: `scripts/profile_staleness_hook.py` (session_start staleness notice).
113
+ - Tests: `tests/test_session_profiles.py`.
114
+
115
+ ## See also
116
+
117
+ - [`ADR-010 addendum`](../decisions/ADR-010-profile-pack-preset-boundary.md) — overlay ≠ fifth axis.
118
+ - [`profile-system`](profile-system.md) — the profile (audience) axis the overlay is reconciled against.
119
+ - [`command-clusters`](command-clusters.md) — the `/profile` cluster registration.
120
+ - [`session-host-capability-audit`](../../agents/settings/contexts/session-host-capability-audit.md) — why hard-gating + true session-reset are deferred.
@@ -429,6 +429,32 @@ packs at install time via `npx @event4u/agent-config install` and the
429
429
  resulting `.agent-settings.yml` records which packs the project opted
430
430
  into.
431
431
 
432
+ ### Session profiles — surface one audience for the current session
433
+
434
+ Install every pack once, then **activate a profile per session** so only
435
+ the matching packs' commands/skills are the surfaced set:
436
+
437
+ - `/profile activate laravel` — surface the Laravel closure
438
+ (`laravel` + `php` + `engineering-base`) + core artefacts; everything
439
+ else is hidden from `/help` and the skill surface.
440
+ - `/profile activate po` — switch to the product-owner surface.
441
+ - `/profile show` — active packs + surfaced/hidden counts.
442
+ - `/profile deactivate` — full surface returns.
443
+
444
+ The activatable name is a session-profile alias
445
+ (`config/discovery/session-profiles.yml`: `developer`, `po`, `finance`,
446
+ `gtm`, `content`) or a raw pack id. It is **recommendation-bias only** —
447
+ an inactive-pack command still runs (with a one-line notice); execution is
448
+ never blocked. The choice is **ephemeral**: it writes
449
+ `runtime.active_packs` to the gitignored `agents/settings/.agent-settings.local.yml`,
450
+ never the committed config, and is cleared with `/profile deactivate`.
451
+ A new session emits a staleness reminder if a profile is still active.
452
+
453
+ This is a runtime view over the existing **pack** axis, not a new axis,
454
+ and is unrelated to the install `--profile=<minimal|balanced|full>` flag
455
+ (which sets `rule_loading_tier`). Full contract:
456
+ [`session-profile-overlay`](contracts/session-profile-overlay.md).
457
+
432
458
  ---
433
459
 
434
460
  ## Update check
@@ -125,8 +125,44 @@ DUPLICATION ACROSS AXES IS A CONTRACT VIOLATION.
125
125
  (Phase 1 item 4). Pack shape lives in `docs/contracts/workflow-packs.md`
126
126
  (Phase 2 item 7).
127
127
 
128
+ ## Addendum — runtime `active_packs` overlay is not a fifth axis (2026-06-02)
129
+
130
+ The session-profile-activation work introduces an **ephemeral
131
+ `runtime.active_packs` overlay**: a developer activates a profile for the
132
+ current session and only the matching packs' commands/skills are the
133
+ surfaced set. This addendum records that the overlay does **not** add a
134
+ fifth axis and does **not** violate the no-duplication rule above.
135
+
136
+ The resolution chain is
137
+ `pack → profile → preset → rule_loading_tier → user/env/runtime overrides`.
138
+ The `active_packs` overlay is an instance of the chain's **existing final
139
+ link** (`… → user/env/runtime overrides`): a runtime override that
140
+ **modulates the `pack` axis** for the duration of a session. It selects
141
+ which already-installed packs are *surfaced*; it does not create a new
142
+ knob, a new vocabulary, or a new ownership boundary.
143
+
144
+ - **Axis ownership unchanged.** The `pack` axis still owns "which bundle".
145
+ The overlay narrows the *active subset* of installed packs at runtime —
146
+ the same way the documented "runtime wins" rule lets a CLI flag
147
+ shadow-disable a pack-supplied skill (see Consequences § Negative). It
148
+ is the read-time companion of that write-time precedent.
149
+ - **No knob duplication.** The overlay stores only a list of pack ids
150
+ (`runtime.active_packs: [...]`), the closure of the activated
151
+ profile/pack. It never restates a `preset` knob or a `profile` default.
152
+ - **Governance stays on its own axis.** Profile activation **does not**
153
+ touch `rule_loading_tier`. Rules load by tier + trigger, never by pack
154
+ (session-profile work Phase 0.4). Letting a profile move the tier would
155
+ be the very axis-collision this ADR forbids.
156
+ - **Ephemeral + uncommitted.** The overlay lives in
157
+ `.agent-settings.local.yml` (gitignored, deepest-winning layer), never
158
+ the committed settings file — so it cannot drift into a persisted axis.
159
+
160
+ Net: the overlay is a session-scoped *view* over the `pack` axis, not a
161
+ new axis. ADR-010's orthogonality holds.
162
+
128
163
  ## See also
129
164
 
165
+ - [`agents/settings/contexts/session-host-capability-audit.md`](../../agents/settings/contexts/session-host-capability-audit.md) — host-capability facts that bound the overlay's lifecycle (addendum input).
130
166
  - [`docs/contracts/cost-profile-defaults.md`](../contracts/cost-profile-defaults.md) — the existing `rule_loading_tier` contract this ADR explicitly does **not** touch.
131
167
  - [`agents/roadmaps/step-15-product-refinement.md`](../../agents/roadmaps/step-15-product-refinement.md) — Phase 1 items 1, 4 and Phase 2 item 7.
132
168
  - [`agents/runtime/council/responses/2026-05-16-step-15-product-refinement-v3.json`](../../agents/runtime/council/responses/2026-05-16-step-15-product-refinement-v3.json) — Council v3 action #2 (origin). <!-- council-ref-allowed: ADR decision-trace to originating council response -->
@@ -0,0 +1,66 @@
1
+ # ADR-038: Canonical settings path is `agents/settings/.agent-settings.yml`
2
+
3
+ - **Status:** Accepted
4
+ - **Date:** 2026-06-01
5
+
6
+ ## Context
7
+
8
+ The project's settings *layer* lives under `agents/settings/` — it already
9
+ holds `contexts/`, `policies/`, and the per-machine override
10
+ `.agent-settings.local.yml` (relocated there by `4f887ae8`). The main
11
+ developer settings file, however, stayed at the repo root as
12
+ `./.agent-settings.yml`: `agent_settings.py` (`DEFAULT_PROJECT_FILE`),
13
+ `install.py` (`SETTINGS_FILE`), `sync_agent_settings.py` (`DEFAULT_SETTINGS`),
14
+ and ~30 reader scripts all hardcode the root path. The split is inconsistent —
15
+ the override sits in the settings layer while the file it overrides sits at the
16
+ root — and surfaced as a real defect: roadmaps and contributors referenced
17
+ `agents/settings/.agent-settings.yml` (the location they expected), which then
18
+ failed `check-references` because no such canonical file existed.
19
+
20
+ Both files are gitignored (`.gitignore` matches the `.agent-settings.yml`
21
+ basename anywhere) and per-machine; neither is ever committed.
22
+
23
+ ## Decision
24
+
25
+ The canonical project settings file is **`agents/settings/.agent-settings.yml`**,
26
+ co-located with the rest of the settings layer. The repo-root
27
+ `./.agent-settings.yml` becomes a **back-compat read-fallback only**.
28
+
29
+ - **Read precedence (deepest wins):** legacy root `.agent-settings.yml`
30
+ < canonical `agents/settings/.agent-settings.yml` < per-machine
31
+ `agents/settings/.agent-settings.local.yml`.
32
+ - **Write target:** always `agents/settings/.agent-settings.yml`
33
+ (`canonical_settings_write_path`). The legacy root file is migrated into
34
+ the canonical location, never written afresh.
35
+ - **Resolution helper:** `project_settings_path()` returns the canonical file
36
+ when present, else the legacy root file when present (back-compat), else the
37
+ canonical path (fresh repo). All direct readers route through it.
38
+ - **Migration:** `install` and the `migrate` command relocate an existing root
39
+ `./.agent-settings.yml` to `agents/settings/.agent-settings.yml` once; no
40
+ consumer install breaks because the fallback keeps the old location readable
41
+ until it is moved.
42
+
43
+ ## Consequences
44
+
45
+ - Settings layout is internally consistent: the main file and its override live
46
+ together under `agents/settings/`.
47
+ - Existing installs keep working unchanged until migrated (read-fallback).
48
+ - One-time cost: ~36 Python reader sites + the TS settings server/CLI route
49
+ through the helper; install/sync/migrate gain the relocation step; docs and
50
+ the gitignore-managed block name the canonical path.
51
+ - The `.gitignore` basename match already covers the canonical path — no new
52
+ ignore entry required.
53
+
54
+ ## Alternatives considered
55
+
56
+ - **Keep root canonical (status quo).** Rejected: leaves the override/main-file
57
+ split inconsistent and keeps surfacing as wrong-path references.
58
+ - **Hard cut, no fallback.** Rejected: breaks every existing install (and this
59
+ repo) until each re-runs setup; the fallback is cheap insurance.
60
+
61
+ ## References
62
+
63
+ - `scripts/_lib/agent_settings.py` — resolver cascade + `project_settings_path` / `canonical_settings_write_path`.
64
+ - `4f887ae8` — prior relocation of `.agent-settings.local.yml` into `agents/settings/`.
65
+ - `docs/guidelines/agent-infra/layered-settings.md` — precedence model.
66
+ - `docs/contracts/migrate-command.md` — migration surface.
@@ -0,0 +1,139 @@
1
+ ---
2
+ adr: 039
3
+ status: accepted
4
+ date: 2026-06-01
5
+ decision: claude-skills-untracked
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: road-to-claude-skills-untrack
9
+ type: structural
10
+ review_date: 2026-06-15
11
+ ---
12
+
13
+ # ADR-039 — `.claude/skills/` is untracked; skills resolve from committed canonical sources
14
+
15
+ ## Status
16
+
17
+ **Accepted** · 2026-06-01. Decision lands **without** soak — all binding
18
+ conditions were verified empirically against a real Claude Code instance
19
+ (v2.1.159) in the same session. Review date 2026-06-15 keeps the revert path
20
+ open; reverting is one `git rm`-reversing commit plus a generator repoint.
21
+
22
+ ## Context
23
+
24
+ `event4u/agent-config` distributes ~365 skills to Claude Code. Until
25
+ commit `c0e2d897` the package committed `.claude/skills/<name>/SKILL.md`
26
+ (symlinks) and the plugin marketplace (`.claude-plugin/marketplace.json`)
27
+ referenced those committed paths. ADR-030 had established `.claude/skills/`
28
+ as Claude Code's filesystem-channel convention, and the cleanup that
29
+ untracked `.claude/{rules,personas,user-types}/` deliberately **kept**
30
+ `.claude/skills/` tracked, flagging the question for a dedicated
31
+ investigation (`road-to-claude-skills-untrack`).
32
+
33
+ The question this ADR closes: can the package stop committing
34
+ `.claude/skills/` — so `.claude/` in git reduces to `settings.json` only —
35
+ without breaking skill resolution on any channel?
36
+
37
+ Three resolution channels exist:
38
+
39
+ 1. **Marketplace plugin** — Claude Code reads `.claude-plugin/marketplace.json`
40
+ `skills[]` and loads skills from the referenced source paths.
41
+ 2. **Consumer filesystem** — `scripts/install.sh` builds `~/.claude/skills/`
42
+ symlinks at install time.
43
+ 3. **Local dev** — `task generate-tools` rebuilds a gitignored local
44
+ `.claude/skills/` for in-repo auto-discovery.
45
+
46
+ Commit `c0e2d897` already repointed the marketplace generator (real skills →
47
+ `./.agent-src/skills/<name>` (223), command-as-skill entries →
48
+ `./.claude-plugin/skills/<slug>` (142), both committed), updated
49
+ `lint_marketplace.py` and the pre-commit hook, and gitignored
50
+ `/.claude/skills/`. This ADR is the decision-gate record that the
51
+ investigation reached, backed by a real-instance registration test rather
52
+ than reasoning alone.
53
+
54
+ ## Decision
55
+
56
+ **`.claude/skills/` stays untracked.** Skills resolve from the committed
57
+ canonical sources (`.agent-src/skills/` + `.claude-plugin/skills/`) for the
58
+ marketplace channel, and from locally-built trees for the consumer and dev
59
+ channels. `.claude/` in git is `settings.json` only.
60
+
61
+ ## Evidence (real Claude Code v2.1.159, this machine)
62
+
63
+ - **Marketplace manifest validates.** `claude plugin validate
64
+ .claude-plugin/marketplace.json` → "Validation passed" (sole warning:
65
+ `metadata.keywords` is ignored at load — cosmetic, see Consequences).
66
+ - **Marketplace registers + installs at runtime.** `claude plugin
67
+ marketplace add <repo>` → `claude plugin install
68
+ agent-config@event4u-agent-config` → **enabled**; `claude plugin details`
69
+ reports **Skills (365)** resolved from `./.agent-src/skills/` (223) +
70
+ `./.claude-plugin/skills/` (142), with **no committed `.claude/skills/`**.
71
+ - **Runtime execution without a committed tree.** This very session is a live
72
+ Claude Code runtime in which `git ls-files .claude/skills/` returns `0`
73
+ yet skills load **and execute** (the `roadmap:process-full` skill was
74
+ loaded and run from its SKILL.md). Registration → runtime is therefore
75
+ demonstrated, not inferred, for the filesystem channel.
76
+ - **Consumer filesystem channel.** `scripts/probe_skill_registration.py`
77
+ shows 365 skills register from user-scope `~/.claude/skills/`, built by
78
+ `install.sh`, independent of any committed project tree.
79
+ - **Lint green.** `python3 scripts/lint_marketplace.py` → 365 skills, no
80
+ issues (reverse-completeness scans the two committed sources).
81
+ - **Idempotent regen.** `task generate-tools` produces no tracked diff;
82
+ `.claude/skills/` stays gitignored (0 tracked files).
83
+
84
+ ## Council convergence
85
+
86
+ Cross-checked with the AI council (analysis mode, members
87
+ anthropic/claude-sonnet-4-5 + openai/gpt-4o, 2026-06-01). Both members
88
+ converged on a single strongest blind spot: `claude plugin details` proves
89
+ *registration metadata*, not *live runtime execution*, and asked for a live
90
+ session test before closing. That test was then run and is recorded above
91
+ (this session executes skills with zero committed `.claude/skills/`; the
92
+ marketplace plugin was installed + enabled and resolved all 365 skills).
93
+ The council's residual follow-ups are carried into Consequences.
94
+
95
+ ## Consequences
96
+
97
+ **Positive**
98
+
99
+ - `.claude/` in git is `settings.json` only — no per-skill-set PR churn from
100
+ the previously-committed 365 symlinks.
101
+ - Marketplace source paths (`.agent-src/skills/`, `.claude-plugin/skills/`)
102
+ are **committed**, so marketplace consumers cloning at a tag or with
103
+ `--depth=1` still resolve every referenced skill — a strict improvement
104
+ over the old gitignore-adjacent layout.
105
+
106
+ **Costs / residual risks (from council follow-ups)**
107
+
108
+ - **Consumer channel depends on `install.sh`.** A consumer who clones the
109
+ repo but never runs `install.sh` (and never installs the marketplace
110
+ plugin) gets no `~/.claude/skills/`. This is unchanged from before the
111
+ untracking and is the documented consumer contract; a CI smoke test
112
+ (`npm install` → `probe_skill_registration.py` → assert 365) is a sensible
113
+ follow-up but is out of this ADR's scope.
114
+ - **Channel precedence is undocumented.** When a dev has the repo open
115
+ (local `.claude/skills/`) *and* the marketplace plugin installed, the
116
+ precedence of local vs marketplace skills is not formally specified.
117
+ Day-to-day dev uses the local generate-tools tree; no conflict observed.
118
+ Follow-up only.
119
+ - **`metadata.keywords` validator warning.** The field holds generic terms
120
+ (tool names, `php`, `laravel`), not skill names, so it is safe to drop;
121
+ left in place here to keep this diff minimal (out of scope per
122
+ `minimal-safe-diff`).
123
+
124
+ ## Alternatives
125
+
126
+ - **Keep `.claude/skills/` tracked (ADR-030 convention).** Rejected: the
127
+ registration test shows the convention is satisfied by locally-built and
128
+ marketplace-resolved trees; committing 365 symlinks adds PR churn with no
129
+ resolution benefit.
130
+
131
+ ## References
132
+
133
+ - ADR-030 — Claude Code command-projection strategy (established the
134
+ `.claude/skills/` filesystem-channel convention this ADR revisits).
135
+ - `scripts/condense.py` — `generate_plugin_command_skills()` emits the
136
+ `.claude-plugin/skills/<slug>` projection.
137
+ - `scripts/lint_marketplace.py` — reverse-completeness over the two
138
+ committed sources.
139
+ - `scripts/probe_skill_registration.py` — live install-state probe.
@@ -41,6 +41,8 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
41
41
  | [ADR-035](ADR-035-model-capability-tiers.md) | Model Capability Tiers | accepted | 2026-05-30 | 034 |
42
42
  | [ADR-036](ADR-036-global-install-browser-wizard-handoff.md) | Global Install Browser Wizard Handoff | accepted | 2026-06-01 | — |
43
43
  | [ADR-037](ADR-037-cost-profile-untangle.md) | Cost Profile Untangle | accepted | 2026-06-01 | — |
44
+ | [ADR-038](ADR-038-canonical-settings-path.md) | Canonical Settings Path | — | — | — |
45
+ | [ADR-039](ADR-039-claude-skills-untracked.md) | Claude Skills Untracked | accepted | 2026-06-01 | — |
44
46
 
45
47
  ## Unnumbered (legacy)
46
48