@event4u/agent-config 16.2.0 → 16.4.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 (651) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +337 -234
  5. package/README.md +15 -13
  6. package/agents/templates/.ai-council.yml.example +26 -8
  7. package/dist/agent-src/commands/analyze/inbox.md +11 -8
  8. package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
  9. package/dist/agent-src/commands/bug/fix.md +17 -2
  10. package/dist/agent-src/commands/bug/investigate.md +1 -1
  11. package/dist/agent-src/commands/commit/in-chunks.md +40 -31
  12. package/dist/agent-src/commands/commit.md +72 -33
  13. package/dist/agent-src/commands/condense.md +2 -8
  14. package/dist/agent-src/commands/council/debate.md +11 -7
  15. package/dist/agent-src/commands/council/default.md +10 -9
  16. package/dist/agent-src/commands/council.md +1 -1
  17. package/dist/agent-src/commands/estimate-ticket.md +1 -1
  18. package/dist/agent-src/commands/feature/explore.md +3 -3
  19. package/dist/agent-src/commands/feature/plan.md +2 -2
  20. package/dist/agent-src/commands/feature/roadmap.md +1 -1
  21. package/dist/agent-src/commands/fix/ci.md +18 -4
  22. package/dist/agent-src/commands/fix/commit-messages.md +48 -23
  23. package/dist/agent-src/commands/fix/pr-comments.md +3 -6
  24. package/dist/agent-src/commands/implement-ticket.md +4 -4
  25. package/dist/agent-src/commands/jira-ticket.md +1 -1
  26. package/dist/agent-src/commands/memory/add.md +4 -16
  27. package/dist/agent-src/commands/memory/load.md +5 -6
  28. package/dist/agent-src/commands/memory/promote.md +3 -16
  29. package/dist/agent-src/commands/mission/upgrade.md +3 -2
  30. package/dist/agent-src/commands/optimize/agents-dir.md +2 -2
  31. package/dist/agent-src/commands/optimize/deep.md +4 -2
  32. package/dist/agent-src/commands/optimize/rtk.md +4 -26
  33. package/dist/agent-src/commands/pr/create/description-only.md +18 -15
  34. package/dist/agent-src/commands/pr/create.md +42 -34
  35. package/dist/agent-src/commands/pr/merge.md +136 -9
  36. package/dist/agent-src/commands/prepare-for-review.md +13 -11
  37. package/dist/agent-src/commands/project/analyze.md +7 -35
  38. package/dist/agent-src/commands/refine-ticket.md +1 -1
  39. package/dist/agent-src/commands/review/changes.md +14 -19
  40. package/dist/agent-src/commands/roadmap/create.md +1 -1
  41. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  42. package/dist/agent-src/commands/roadmap/next.md +10 -1
  43. package/dist/agent-src/commands/roadmap/process-full.md +56 -42
  44. package/dist/agent-src/commands/roadmap/resolve-blockers.md +411 -0
  45. package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
  46. package/dist/agent-src/commands/roadmap.md +18 -4
  47. package/dist/agent-src/commands/tests/create.md +17 -3
  48. package/dist/agent-src/commands/tests/execute.md +22 -5
  49. package/dist/agent-src/commands/worktree/create.md +7 -3
  50. package/dist/agent-src/commands/worktree/verify.md +2 -1
  51. package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
  52. package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
  53. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +5 -3
  54. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +7 -9
  55. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -6
  56. package/dist/agent-src/contexts/contracts/frugality-charter.md +8 -5
  57. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +7 -7
  58. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +0 -1
  59. package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
  60. package/dist/agent-src/contexts/execution/non-interactive-contract.md +5 -8
  61. package/dist/agent-src/contexts/execution/rdp-gate.md +4 -4
  62. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +9 -8
  63. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +99 -54
  64. package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
  65. package/dist/agent-src/contexts/execution/subagent-routing.md +8 -8
  66. package/dist/agent-src/contexts/execution/subagent-steering.md +6 -4
  67. package/dist/agent-src/contexts/execution/terminal-states.md +2 -2
  68. package/dist/agent-src/contexts/execution/toolchain-resolver.md +95 -7
  69. package/dist/agent-src/contexts/subagent-configuration.md +1 -1
  70. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
  71. package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
  72. package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
  73. package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
  74. package/dist/agent-src/guidelines/agent-infra/layered-settings.md +13 -1
  75. package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  76. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
  77. package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +36 -0
  78. package/dist/agent-src/guidelines/php/git.md +15 -2
  79. package/dist/agent-src/rules/active-remediation.md +1 -2
  80. package/dist/agent-src/rules/analysis-skill-routing.md +0 -1
  81. package/dist/agent-src/rules/architecture.md +0 -1
  82. package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -1
  83. package/dist/agent-src/rules/artifact-engagement-recording.md +0 -1
  84. package/dist/agent-src/rules/augment-edit-discipline.md +0 -1
  85. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  86. package/dist/agent-src/rules/brand-consistency.md +0 -1
  87. package/dist/agent-src/rules/brand-source-of-truth.md +0 -1
  88. package/dist/agent-src/rules/broken-access-control.md +1 -1
  89. package/dist/agent-src/rules/cli-output-handling.md +0 -1
  90. package/dist/agent-src/rules/code-comment-discipline.md +0 -1
  91. package/dist/agent-src/rules/code-provenance.md +0 -1
  92. package/dist/agent-src/rules/command-suggestion-policy.md +1 -1
  93. package/dist/agent-src/rules/commit-conventions.md +1 -2
  94. package/dist/agent-src/rules/communication-through-line.md +1 -2
  95. package/dist/agent-src/rules/content-quoting-floor.md +1 -2
  96. package/dist/agent-src/rules/context-hygiene.md +6 -6
  97. package/dist/agent-src/rules/copilot-routing.md +1 -2
  98. package/dist/agent-src/rules/council-availability.md +4 -4
  99. package/dist/agent-src/rules/cross-source-consistency.md +4 -6
  100. package/dist/agent-src/rules/decision-revisit-gate.md +17 -35
  101. package/dist/agent-src/rules/delegation-policy.md +2 -3
  102. package/dist/agent-src/rules/design-fidelity.md +12 -16
  103. package/dist/agent-src/rules/design-review-after-ui-write.md +3 -3
  104. package/dist/agent-src/rules/devcontainer-routing.md +1 -2
  105. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
  106. package/dist/agent-src/rules/docker-commands.md +0 -1
  107. package/dist/agent-src/rules/domain-adoption-policy.md +0 -1
  108. package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -1
  109. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  110. package/dist/agent-src/rules/domain-safety-retention.md +1 -1
  111. package/dist/agent-src/rules/downstream-changes.md +0 -1
  112. package/dist/agent-src/rules/engineering-safety-floor.md +1 -1
  113. package/dist/agent-src/rules/evaluator-independence.md +3 -2
  114. package/dist/agent-src/rules/external-code-graph-interop.md +0 -1
  115. package/dist/agent-src/rules/external-reference-deep-dive.md +0 -1
  116. package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -2
  117. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  118. package/dist/agent-src/rules/fix-what-you-see.md +6 -32
  119. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +0 -1
  120. package/dist/agent-src/rules/git-history-discipline.md +2 -2
  121. package/dist/agent-src/rules/guidelines.md +0 -1
  122. package/dist/agent-src/rules/history-discipline.md +0 -1
  123. package/dist/agent-src/rules/icon-consistency.md +0 -1
  124. package/dist/agent-src/rules/image-likeness-and-rights.md +1 -1
  125. package/dist/agent-src/rules/improve-before-implement.md +0 -1
  126. package/dist/agent-src/rules/invite-challenge.md +0 -1
  127. package/dist/agent-src/rules/laravel-routing.md +1 -2
  128. package/dist/agent-src/rules/laravel-translations.md +0 -1
  129. package/dist/agent-src/rules/legal-safety-floor.md +3 -3
  130. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -1
  131. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
  132. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -1
  133. package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
  134. package/dist/agent-src/rules/media-governance-routing.md +13 -17
  135. package/dist/agent-src/rules/media-sync-ground-truth.md +0 -1
  136. package/dist/agent-src/rules/minimal-safe-diff.md +0 -1
  137. package/dist/agent-src/rules/missing-skill-recovery.md +0 -1
  138. package/dist/agent-src/rules/missing-tool-handling.md +0 -1
  139. package/dist/agent-src/rules/model-recommendation.md +0 -1
  140. package/dist/agent-src/rules/neighbour-precedence.md +64 -0
  141. package/dist/agent-src/rules/no-attribution-footers.md +0 -1
  142. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -1
  143. package/dist/agent-src/rules/no-pr-progress-comments.md +0 -1
  144. package/dist/agent-src/rules/no-roadmap-references.md +0 -1
  145. package/dist/agent-src/rules/notes-first-reasoning.md +0 -1
  146. package/dist/agent-src/rules/onboarding-gate.md +0 -1
  147. package/dist/agent-src/rules/output-discipline.md +0 -1
  148. package/dist/agent-src/rules/package-ci-checks.md +0 -1
  149. package/dist/agent-src/rules/persona-governance.md +4 -5
  150. package/dist/agent-src/rules/php-coding.md +0 -1
  151. package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -1
  152. package/dist/agent-src/rules/preservation-guard.md +0 -1
  153. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -4
  154. package/dist/agent-src/rules/question-not-instruction.md +1 -1
  155. package/dist/agent-src/rules/reviewer-awareness.md +0 -1
  156. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -1
  157. package/dist/agent-src/rules/roadmap-progress-sync.md +4 -7
  158. package/dist/agent-src/rules/role-mode-adherence.md +0 -1
  159. package/dist/agent-src/rules/rule-type-governance.md +0 -1
  160. package/dist/agent-src/rules/runtime-safety.md +1 -1
  161. package/dist/agent-src/rules/scale-discipline.md +0 -1
  162. package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
  163. package/dist/agent-src/rules/security-sensitive-stop.md +3 -3
  164. package/dist/agent-src/rules/self-repair-loop.md +0 -1
  165. package/dist/agent-src/rules/senior-engineering-discipline.md +0 -1
  166. package/dist/agent-src/rules/session-canary.md +7 -62
  167. package/dist/agent-src/rules/settings-ask-protocol.md +6 -6
  168. package/dist/agent-src/rules/size-enforcement.md +0 -1
  169. package/dist/agent-src/rules/skill-improvement-trigger.md +2 -3
  170. package/dist/agent-src/rules/skill-quality.md +0 -1
  171. package/dist/agent-src/rules/slash-command-routing-policy.md +0 -1
  172. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  173. package/dist/agent-src/rules/source-discovery-gate.md +0 -1
  174. package/dist/agent-src/rules/source-of-truth.md +0 -1
  175. package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -2
  176. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  177. package/dist/agent-src/rules/symfony-routing.md +1 -2
  178. package/dist/agent-src/rules/think-before-action.md +0 -1
  179. package/dist/agent-src/rules/token-budget-discipline.md +12 -46
  180. package/dist/agent-src/rules/token-efficiency.md +0 -1
  181. package/dist/agent-src/rules/token-optimizer-maintenance.md +0 -1
  182. package/dist/agent-src/rules/tool-safety.md +1 -1
  183. package/dist/agent-src/rules/ui-audit-gate.md +1 -2
  184. package/dist/agent-src/rules/untrusted-input-defense.md +1 -1
  185. package/dist/agent-src/rules/upstream-proposal.md +0 -1
  186. package/dist/agent-src/rules/user-interaction.md +0 -1
  187. package/dist/agent-src/rules/user-interrupt-priority.md +1 -1
  188. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  189. package/dist/agent-src/scripts/deferral_carry.ts +339 -0
  190. package/dist/agent-src/scripts/gate_budget.ts +47 -23
  191. package/dist/agent-src/scripts/gate_execute.ts +12 -4
  192. package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
  193. package/dist/agent-src/skills/ai-council/SKILL.md +7 -4
  194. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +21 -11
  195. package/dist/agent-src/skills/ai-council/references/procedure.md +12 -6
  196. package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
  197. package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
  198. package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
  199. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  200. package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
  201. package/dist/agent-src/skills/command-routing/SKILL.md +3 -4
  202. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +127 -139
  203. package/dist/agent-src/skills/corpus-grounding/ATTRIBUTION.md +39 -0
  204. package/dist/agent-src/skills/corpus-grounding/SKILL.md +8 -2
  205. package/dist/agent-src/skills/database/data/manifest.json +2 -2
  206. package/dist/agent-src/skills/database/data/query-tuning.csv +13 -13
  207. package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
  208. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
  209. package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
  210. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
  211. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  212. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  213. package/dist/agent-src/skills/git-workflow/SKILL.md +44 -44
  214. package/dist/agent-src/skills/git-workflow/references/branch-update.md +312 -0
  215. package/dist/agent-src/skills/git-workflow/references/commit-subject.md +205 -0
  216. package/dist/agent-src/skills/iconography/SKILL.md +1 -1
  217. package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
  218. package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
  219. package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
  220. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  221. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  222. package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
  223. package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
  224. package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
  225. package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
  226. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  227. package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
  228. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
  229. package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
  230. package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
  231. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +4 -2
  232. package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
  233. package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
  234. package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
  235. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  236. package/dist/agent-src/skills/ui-component-architect/SKILL.md +2 -2
  237. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  238. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  239. package/dist/agent-src/templates/AGENTS.md +1 -1
  240. package/dist/agent-src/templates/agent-settings.md +46 -129
  241. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
  242. package/dist/agent-src/templates/command.md +2 -2
  243. package/dist/agent-src/templates/roadmaps.md +6 -1
  244. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
  245. package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
  246. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  247. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
  248. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
  249. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
  250. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
  251. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
  252. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  253. package/dist/agent-src/templates/skill.md +1 -1
  254. package/dist/cli/registry.js +2 -1
  255. package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
  256. package/dist/cli-delegate/check_update_banner.js +207 -120
  257. package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
  258. package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-5GPULQBE.js} +2797 -338
  259. package/dist/cli-delegate/{chunk-IGD6ERX6.js → chunk-6SRJTYJS.js} +42 -176
  260. package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
  261. package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
  262. package/dist/cli-delegate/chunk-6YQC2HLF.js +415 -0
  263. package/dist/cli-delegate/{chunk-E4XIZDIB.js → chunk-7HKRE54K.js} +1 -64
  264. package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
  265. package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-AED2VQGM.js} +1245 -249
  266. package/dist/cli-delegate/{chunk-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
  267. package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
  268. package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
  269. package/dist/cli-delegate/chunk-F3QDG2GT.js +2569 -0
  270. package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-G5VVIZRC.js} +3 -3
  271. package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-H76PHZBI.js} +149 -61
  272. package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
  273. package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
  274. package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
  275. package/dist/cli-delegate/{chunk-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
  276. package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-KXXWJTDO.js} +6 -11
  277. package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
  278. package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-MDPPKQCQ.js} +58 -9
  279. package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-MSUL5NYP.js} +5 -5
  280. package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
  281. package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
  282. package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
  283. package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-PWX7CKMD.js} +4 -4
  284. package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
  285. package/dist/cli-delegate/{chunk-7XGBX6ZH.js → chunk-T7XSJSUQ.js} +1144 -589
  286. package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
  287. package/dist/cli-delegate/chunk-WQWXGIWB.js +1779 -0
  288. package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-XQTPXKFA.js} +1 -1
  289. package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
  290. package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
  291. package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
  292. package/dist/cli-delegate/cmd_analyze_session.js +223 -43
  293. package/dist/cli-delegate/cmd_brand_status.js +3 -2
  294. package/dist/cli-delegate/cmd_conformance.js +1252 -249
  295. package/dist/cli-delegate/cmd_converge.js +3 -3
  296. package/dist/cli-delegate/cmd_doctor.js +19 -9
  297. package/dist/cli-delegate/cmd_doctor_neighbours.js +30 -0
  298. package/dist/cli-delegate/cmd_explain.js +45 -21
  299. package/dist/cli-delegate/cmd_export.js +13 -10
  300. package/dist/cli-delegate/cmd_fleet.js +3 -3
  301. package/dist/cli-delegate/cmd_git_convention.js +1851 -0
  302. package/dist/cli-delegate/cmd_handoff.js +44 -22
  303. package/dist/cli-delegate/cmd_mcp_available.js +3 -2
  304. package/dist/cli-delegate/cmd_memory_get.js +3 -1
  305. package/dist/cli-delegate/cmd_migrate.js +3 -3
  306. package/dist/cli-delegate/cmd_packs_active.js +5 -4
  307. package/dist/cli-delegate/cmd_preflight.js +6 -6
  308. package/dist/cli-delegate/cmd_prune.js +14 -11
  309. package/dist/cli-delegate/cmd_refresh.js +2 -1
  310. package/dist/cli-delegate/cmd_route_audit.js +10 -8
  311. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  312. package/dist/cli-delegate/cmd_session_recycle.js +10 -7
  313. package/dist/cli-delegate/cmd_settings_check.js +54 -7
  314. package/dist/cli-delegate/cmd_settings_get.js +18 -8
  315. package/dist/cli-delegate/cmd_settings_migrate.js +13 -10
  316. package/dist/cli-delegate/cmd_settings_set.js +4 -4
  317. package/dist/cli-delegate/cmd_sync.js +14 -11
  318. package/dist/cli-delegate/cmd_uninstall.js +15 -12
  319. package/dist/cli-delegate/cmd_update.js +7 -7
  320. package/dist/cli-delegate/cmd_upgrade.js +9 -8
  321. package/dist/cli-delegate/cmd_validate.js +15 -12
  322. package/dist/cli-delegate/cmd_versions.js +5 -5
  323. package/dist/cli-delegate/deferral_carry.js +16 -0
  324. package/dist/cli-delegate/gate_budget.js +1 -1
  325. package/dist/cli-delegate/gate_execute.js +3 -3
  326. package/dist/cli-delegate/roadmap_gates.js +6 -6
  327. package/dist/cli-delegate/update_roadmap_progress.js +1 -1
  328. package/dist/discovery/deprecation-report.md +1 -1
  329. package/dist/discovery/discovery-manifest.json +232 -141
  330. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  331. package/dist/discovery/discovery-manifest.summary.md +3 -3
  332. package/dist/discovery/dormancy-report.md +1 -1
  333. package/dist/discovery/orphan-report.md +1 -1
  334. package/dist/discovery/packs.json +26 -9
  335. package/dist/discovery/trust-report.md +3 -3
  336. package/dist/discovery/workspaces.json +7 -4
  337. package/dist/hooks/dispatch.js +5655 -6623
  338. package/dist/hooks/dispatch.sha256 +1 -1
  339. package/dist/install/claudePathsPlan.js +47 -6
  340. package/dist/install/claudeRuleRewrite.js +7 -0
  341. package/dist/install/emit_host_rules_cli.js +39 -36
  342. package/dist/install/globalRuleScope.js +87 -0
  343. package/dist/install/host_rule_ownership.js +160 -0
  344. package/dist/install/install.mjs +2336 -1249
  345. package/dist/install/installThinLayer.js +289 -0
  346. package/dist/install/installedRuleLinks.js +262 -0
  347. package/dist/install/wizard-plan.js +24 -0
  348. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  349. package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
  350. package/dist/mcp/registry-manifest.json +5 -5
  351. package/dist/mcp/server.json +2 -2
  352. package/dist/mcp/server.mjs +36504 -30986
  353. package/dist/router.json +1 -1
  354. package/dist/scripts/_lib/agent_settings.js +26 -120
  355. package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
  356. package/dist/scripts/_lib/compile_time_toggles.js +12 -21
  357. package/dist/scripts/_lib/git_convention.js +232 -0
  358. package/dist/scripts/_lib/global_deploy_inventory.js +730 -0
  359. package/dist/scripts/_lib/installed_layer.js +704 -0
  360. package/dist/scripts/_lib/lean_projection_mode.js +218 -15
  361. package/dist/scripts/_lib/package_root.js +68 -0
  362. package/dist/scripts/_lib/rule_consequence_class.js +45 -0
  363. package/dist/scripts/_lib/rule_injection.js +67 -10
  364. package/dist/scripts/_lib/rule_law_section.js +122 -0
  365. package/dist/scripts/_lib/settings_removed_keys.js +168 -0
  366. package/dist/scripts/_lib/thin_rules.js +535 -0
  367. package/dist/scripts/_lib/windsurf_render.js +60 -0
  368. package/dist/scripts/condense.js +14 -26
  369. package/dist/scripts/project_thin_rules.js +14 -294
  370. package/dist/server/app.js +2 -1
  371. package/dist/server/gitKeysGate.js +105 -0
  372. package/dist/server/routes/settings.js +67 -8
  373. package/dist/server/routes/wizard.js +4 -0
  374. package/dist/server/schemas/settings.js +29 -81
  375. package/dist/shared/skillRanking.js +103 -16
  376. package/dist/ui/assets/{index-Cwq4d0hX.js → index-C3djEJah.js} +2 -2
  377. package/dist/ui/index.html +1 -1
  378. package/docs/MIGRATION.md +72 -1
  379. package/docs/contracts/settings-classes.md +39 -67
  380. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
  381. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
  382. package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
  383. package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
  384. package/docs/guidelines/agent-infra/layered-settings.md +13 -1
  385. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  386. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
  387. package/docs/guidelines/agent-infra/size-and-scope.md +36 -0
  388. package/docs/guidelines/php/git.md +15 -2
  389. package/package.json +1 -1
  390. package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  391. package/src/agent-src/scripts/deferral_carry.ts +339 -0
  392. package/src/agent-src/scripts/gate_budget.ts +47 -23
  393. package/src/agent-src/scripts/gate_execute.ts +12 -4
  394. package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
  395. package/src/agent-src/templates/AGENTS.md +1 -1
  396. package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
  397. package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
  398. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  399. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
  400. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
  401. package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
  402. package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
  403. package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
  404. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  405. package/src/config/agent-settings.template.yml +141 -334
  406. package/src/config/agents-paths.yml +16 -0
  407. package/src/config/assurance-capability-registry.json +7 -3
  408. package/src/config/ci-local-parity.yml +3 -0
  409. package/src/config/continuity-surface.json +10 -3
  410. package/src/config/discovery/packs.yml +17 -1
  411. package/src/config/evaluator-budgets.json +23 -10
  412. package/src/config/gate-coverage.yml +138 -3
  413. package/src/config/gate-violation-baselines.json +64 -16
  414. package/src/config/gitignore-block.txt +19 -0
  415. package/src/config/hook-bundle-budget.json +25 -0
  416. package/src/config/hook-token-budget.json +6 -1
  417. package/src/config/host-instruction-limits.json +33 -0
  418. package/src/config/release-gate-locality.yml +2 -1
  419. package/src/config/routing-coverage-seed.json +67 -4
  420. package/src/config/rule-activation-census.json +7 -3
  421. package/src/config/rule-consequence-class.json +161 -0
  422. package/src/config/rule-law-ceilings.json +105 -0
  423. package/src/config/rule-obligations.json +833 -0
  424. package/src/install/claudePathsPlan.ts +46 -4
  425. package/src/install/claudeRuleRewrite.ts +10 -1
  426. package/src/install/emit_host_rules_cli.ts +43 -34
  427. package/src/install/globalRuleScope.ts +109 -0
  428. package/src/install/host_rule_ownership.ts +170 -0
  429. package/src/install/installThinLayer.ts +378 -0
  430. package/src/install/installedRuleLinks.ts +308 -0
  431. package/src/install/wizard-plan.ts +24 -0
  432. package/src/scripts/_cli/cmd_analyze_session.ts +9 -15
  433. package/src/scripts/_cli/cmd_conformance.ts +13 -2
  434. package/src/scripts/_cli/cmd_doctor.ts +33 -81
  435. package/src/scripts/_cli/cmd_doctor_neighbours.ts +426 -0
  436. package/src/scripts/_cli/cmd_explain.ts +72 -14
  437. package/src/scripts/_cli/cmd_git_convention.ts +637 -0
  438. package/src/scripts/_cli/cmd_settings_check.ts +66 -8
  439. package/src/scripts/_cli/cmd_settings_get.ts +18 -3
  440. package/src/scripts/_cli/doctor_execution.ts +72 -1
  441. package/src/scripts/_dispatch.bash +53 -4
  442. package/src/scripts/_lib/agent_settings.ts +26 -124
  443. package/src/scripts/_lib/blocked_by_marker.ts +1 -1
  444. package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
  445. package/src/scripts/_lib/compile_time_toggles.ts +12 -21
  446. package/src/scripts/_lib/dispatch_import_closure.ts +163 -0
  447. package/src/scripts/_lib/estate_offsets.ts +241 -0
  448. package/src/scripts/_lib/exemption_shape.ts +143 -0
  449. package/src/scripts/_lib/fnv.ts +23 -0
  450. package/src/scripts/_lib/foreign_scan.ts +106 -0
  451. package/src/scripts/_lib/git_base_ref.ts +92 -0
  452. package/src/scripts/_lib/git_convention.ts +291 -0
  453. package/src/scripts/_lib/git_convention_carrier.ts +389 -0
  454. package/src/scripts/_lib/git_convention_grammar.ts +246 -0
  455. package/src/scripts/_lib/git_convention_measure.ts +344 -0
  456. package/src/scripts/_lib/gitignore_block.ts +314 -0
  457. package/src/scripts/_lib/global_deploy_inventory.ts +106 -0
  458. package/src/scripts/_lib/graph_feeder_record.ts +437 -0
  459. package/src/scripts/_lib/hook_settings.ts +73 -0
  460. package/src/scripts/_lib/host_capability.ts +40 -19
  461. package/src/scripts/_lib/host_hook_merge.ts +165 -0
  462. package/src/scripts/_lib/installed_layer.ts +963 -0
  463. package/src/scripts/_lib/json_merge.ts +82 -0
  464. package/src/scripts/_lib/json_pointers.ts +93 -11
  465. package/src/scripts/_lib/knowledge_global.ts +14 -1
  466. package/src/scripts/_lib/lean_projection_mode.ts +275 -15
  467. package/src/scripts/_lib/machine_wake.ts +16 -3
  468. package/src/scripts/_lib/module_reach.ts +456 -0
  469. package/src/scripts/_lib/neighbour_census.ts +760 -0
  470. package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
  471. package/src/scripts/_lib/neighbour_scan.ts +122 -0
  472. package/src/scripts/_lib/neighbour_tool_use.ts +187 -0
  473. package/src/scripts/_lib/prompt_shape.ts +46 -0
  474. package/src/scripts/_lib/ratification_artifact.ts +220 -1
  475. package/src/scripts/_lib/ratification_subject.ts +92 -0
  476. package/src/scripts/_lib/release_findings_ingest.ts +15 -7
  477. package/src/scripts/_lib/release_highlights.ts +5 -0
  478. package/src/scripts/_lib/release_migration_gate.ts +19 -3
  479. package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
  480. package/src/scripts/_lib/review_coverage.ts +134 -0
  481. package/src/scripts/_lib/rule_consequence_class.ts +71 -0
  482. package/src/scripts/_lib/rule_injection.ts +130 -10
  483. package/src/scripts/_lib/rule_law_section.ts +147 -0
  484. package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
  485. package/src/scripts/_lib/rule_obligations.ts +205 -0
  486. package/src/scripts/_lib/self_repair.ts +1 -1
  487. package/src/scripts/_lib/settings_removed_keys.ts +173 -0
  488. package/src/scripts/_lib/skill_origin.ts +254 -0
  489. package/src/scripts/_lib/structured_ask.ts +64 -21
  490. package/src/scripts/_lib/test_red_state.ts +5 -0
  491. package/src/scripts/_lib/thin_rules.ts +620 -0
  492. package/src/scripts/_lib/touched_file_quality.ts +570 -0
  493. package/src/scripts/_lib/turn_end_refusals.ts +77 -2
  494. package/src/scripts/_lib/windsurf_render.ts +63 -0
  495. package/src/scripts/_lib/worker_budget.ts +1 -1
  496. package/src/scripts/adr/regenerate_index.ts +16 -1
  497. package/src/scripts/ai_council/cli_call_budget.ts +13 -5
  498. package/src/scripts/ai_council/clients.ts +26 -57
  499. package/src/scripts/ai_council/config.ts +8 -8
  500. package/src/scripts/ai_council/modification_review.ts +100 -0
  501. package/src/scripts/ai_council/modification_review_questions.ts +90 -0
  502. package/src/scripts/ai_council/orchestrator.ts +5 -5
  503. package/src/scripts/ai_council/spend_gate.ts +18 -7
  504. package/src/scripts/ai_council/vendor_defaults.ts +45 -0
  505. package/src/scripts/ai_team/config.ts +11 -16
  506. package/src/scripts/audit_skill_overlap.ts +261 -0
  507. package/src/scripts/audit_user_type_axis.ts +20 -8
  508. package/src/scripts/before_complete_hook.ts +243 -12
  509. package/src/scripts/bench_ab_clone.ts +1 -2
  510. package/src/scripts/bench_concern_spawn_path.ts +129 -0
  511. package/src/scripts/bench_graph_feeder_latency.ts +584 -0
  512. package/src/scripts/bench_touched_file_quality.ts +238 -0
  513. package/src/scripts/check_agent_artifact_location.ts +36 -0
  514. package/src/scripts/check_branch_freshness.ts +147 -24
  515. package/src/scripts/check_enforcement_coverage.ts +130 -0
  516. package/src/scripts/check_enforcement_matrix.ts +377 -20
  517. package/src/scripts/check_estate_count.ts +130 -153
  518. package/src/scripts/check_evaluator_budgets.ts +4 -0
  519. package/src/scripts/check_finding_dispositions.ts +196 -21
  520. package/src/scripts/check_gate_coverage.ts +4 -3
  521. package/src/scripts/check_gate_reachability.ts +48 -1
  522. package/src/scripts/check_generator_sync.ts +48 -0
  523. package/src/scripts/check_hook_bundle_composition.ts +477 -0
  524. package/src/scripts/check_kernel_edit_ratified.ts +132 -14
  525. package/src/scripts/check_memory.ts +7 -1
  526. package/src/scripts/check_pack_size.ts +1 -1
  527. package/src/scripts/check_release_highlights.ts +10 -0
  528. package/src/scripts/check_release_manifest_content.ts +189 -0
  529. package/src/scripts/check_release_pr_shape.ts +38 -15
  530. package/src/scripts/check_standing_rule_delivery.ts +129 -13
  531. package/src/scripts/check_suppression_hygiene.ts +2 -5
  532. package/src/scripts/check_verify_expectation_delta.ts +521 -0
  533. package/src/scripts/ci_settle.ts +42 -5
  534. package/src/scripts/classify_merge_risk.ts +320 -0
  535. package/src/scripts/closure_scan.ts +91 -1
  536. package/src/scripts/code_graph/detect.ts +127 -7
  537. package/src/scripts/code_graph/foreign.ts +194 -0
  538. package/src/scripts/code_graph/query.ts +217 -4
  539. package/src/scripts/code_graph/types.ts +26 -2
  540. package/src/scripts/code_graph/validate.ts +3 -1
  541. package/src/scripts/code_graph/verbs.ts +103 -0
  542. package/src/scripts/command_suggester/settings.ts +8 -108
  543. package/src/scripts/command_suggester/types.ts +4 -5
  544. package/src/scripts/compile_hook_manifest.ts +33 -1
  545. package/src/scripts/condense.ts +14 -27
  546. package/src/scripts/consumer_matrix.ts +102 -0
  547. package/src/scripts/context_hygiene_hook.ts +13 -23
  548. package/src/scripts/cost/preflight.mjs +12 -1
  549. package/src/scripts/council_cli.ts +7 -7
  550. package/src/scripts/dispatch_r2_reviewer.ts +24 -11
  551. package/src/scripts/estate_exemption_shape.ts +202 -0
  552. package/src/scripts/explain_run.ts +8 -13
  553. package/src/scripts/generate_git_convention_grammar.ts +127 -0
  554. package/src/scripts/generate_host_cost_table.ts +21 -4
  555. package/src/scripts/handoff_context_hook.ts +86 -37
  556. package/src/scripts/hook_manifest.json +1 -1
  557. package/src/scripts/hook_manifest.yaml +175 -15
  558. package/src/scripts/hooks/block_config_weakening.ts +115 -7
  559. package/src/scripts/hooks/block_plumbing_writes.ts +37 -5
  560. package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
  561. package/src/scripts/hooks/concern_failure_policy.ts +280 -0
  562. package/src/scripts/hooks/concern_registry.ts +2 -0
  563. package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
  564. package/src/scripts/hooks/dispatch_hook.ts +52 -52
  565. package/src/scripts/hooks/evidence_independence.ts +12 -4
  566. package/src/scripts/hooks/exit_codes.ts +2 -1
  567. package/src/scripts/hooks/host_lowering.json +1 -1
  568. package/src/scripts/hooks/host_lowering.ts +19 -1
  569. package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
  570. package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
  571. package/src/scripts/hooks/payload_stub.ts +10 -1
  572. package/src/scripts/hooks/push_settle_hook.ts +4 -3
  573. package/src/scripts/hooks/rule_inject_hook.ts +795 -60
  574. package/src/scripts/hooks/state_io.ts +8 -4
  575. package/src/scripts/hooks/table_fingerprint.ts +21 -0
  576. package/src/scripts/hooks/telemetry_usage_hook.ts +24 -7
  577. package/src/scripts/hooks/turn_end_gate_hook.ts +85 -0
  578. package/src/scripts/hooks_status.ts +112 -0
  579. package/src/scripts/injection_scan_hook.ts +7 -0
  580. package/src/scripts/install-hooks.sh +42 -14
  581. package/src/scripts/install.ts +78 -215
  582. package/src/scripts/installed_layer_report.ts +103 -0
  583. package/src/scripts/language_mirror_hook.ts +15 -6
  584. package/src/scripts/learning_sidecar.ts +119 -8
  585. package/src/scripts/lint_blocker_citations.ts +198 -0
  586. package/src/scripts/lint_evidence_artifacts.ts +9 -0
  587. package/src/scripts/lint_hook_concern_budget.ts +10 -21
  588. package/src/scripts/lint_hook_manifest.ts +53 -0
  589. package/src/scripts/lint_major_migration_sections.ts +156 -26
  590. package/src/scripts/lint_pack_boundaries.ts +465 -29
  591. package/src/scripts/lint_roadmap_blockers.ts +282 -29
  592. package/src/scripts/lint_roadmap_complexity.ts +4 -2
  593. package/src/scripts/lint_rule_law_section.ts +647 -0
  594. package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
  595. package/src/scripts/lint_settings_classes.ts +1 -1
  596. package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
  597. package/src/scripts/lint_workflow_security.ts +173 -6
  598. package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
  599. package/src/scripts/mcp_server/graph_tools.ts +72 -3
  600. package/src/scripts/measure_routing_signal.ts +54 -16
  601. package/src/scripts/measure_skill_ranker_baseline.ts +221 -8
  602. package/src/scripts/memory_learn_hook.ts +91 -6
  603. package/src/scripts/model_rule_injection.ts +55 -8
  604. package/src/scripts/onboarding_gate_hook.ts +7 -6
  605. package/src/scripts/print_required_checks.ts +15 -3
  606. package/src/scripts/probe_host_compliance.ts +33 -5
  607. package/src/scripts/probe_turnaround.ts +183 -3
  608. package/src/scripts/project_thin_rules.ts +34 -327
  609. package/src/scripts/ratification_header.ts +77 -0
  610. package/src/scripts/refusal_envelope.ts +138 -0
  611. package/src/scripts/release_publication.ts +29 -3
  612. package/src/scripts/report_dispatch_import_closure.ts +76 -0
  613. package/src/scripts/report_evidence_temperature.ts +657 -0
  614. package/src/scripts/report_installed_rule_links.ts +274 -0
  615. package/src/scripts/report_label_agreement.ts +233 -0
  616. package/src/scripts/report_module_reach.ts +212 -0
  617. package/src/scripts/report_obligation_mechanism.ts +228 -0
  618. package/src/scripts/report_parked_blockers.ts +222 -0
  619. package/src/scripts/report_required_checks_drift.ts +196 -0
  620. package/src/scripts/report_single_token_triggers.ts +277 -0
  621. package/src/scripts/report_skill_ranker_confusion.ts +543 -0
  622. package/src/scripts/report_standing_payload_by_host.ts +188 -15
  623. package/src/scripts/report_verification_record_coverage.ts +306 -0
  624. package/src/scripts/routing_doctor.ts +2 -2
  625. package/src/scripts/rule_activation_census.ts +5 -2
  626. package/src/scripts/rule_trigger_eval.ts +9 -9
  627. package/src/scripts/schemas/agent-settings.schema.json +17 -31
  628. package/src/scripts/schemas/command.schema.json +1 -1
  629. package/src/scripts/schemas/review-findings.schema.json +3 -2
  630. package/src/scripts/schemas/rule.schema.json +5 -0
  631. package/src/scripts/schemas/skill.schema.json +1 -1
  632. package/src/scripts/self_review_gate.ts +101 -9
  633. package/src/scripts/skill_tools/score_skill_relevance.ts +314 -40
  634. package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
  635. package/src/scripts/sync_gitignore.ts +29 -235
  636. package/src/scripts/sync_pr_branch.ts +403 -132
  637. package/src/scripts/trigger_eval_grandfather.json +0 -21
  638. package/src/server/schemas/settings.ts +42 -176
  639. package/src/shared/skillRanking.ts +169 -14
  640. package/dist/cli-delegate/chunk-5R7HOLAF.js +0 -99
  641. package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
  642. package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
  643. package/src/scripts/_lib/config_chain.ts +0 -477
  644. package/src/scripts/_lib/conformance_report.ts +0 -403
  645. package/src/scripts/_lib/eval_discrimination.ts +0 -95
  646. package/src/scripts/_lib/evaluator_promotion.ts +0 -225
  647. package/src/scripts/_lib/file_slicer.ts +0 -117
  648. package/src/scripts/_lib/legacy_boundary_map.ts +0 -228
  649. package/src/scripts/_lib/minimality_tiebreak.ts +0 -168
  650. package/src/scripts/_lib/overbuild_lens_contract.ts +0 -196
  651. package/src/scripts/_lib/role_split.ts +0 -338
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Thin an INSTALLED Claude Code rule layer, in place, after the copy.
3
+ *
4
+ * `road-to-an-installed-layer-that-is-thinned` step 1.1. The global install step
5
+ * copies `dist/agent-src/rules` verbatim into `~/.claude/rules`
6
+ * (`install.ts::_copy_dir_dereferencing_symlinks`), so a consumer receives every
7
+ * rule body whether or not any trigger ever fires. The round that opened that
8
+ * roadmap measured a fresh install at 102 unconditional files and 338,225
9
+ * characters against a host that reports a 150,000 budget. Thinning existed —
10
+ * `project_thin_rules::build_thin` — but ran only on the maintainer projection,
11
+ * which no consumer receives.
12
+ *
13
+ * Three properties, each a defect this would otherwise reintroduce.
14
+ *
15
+ * **The stub is built from the SOURCE tree, never from the installed file.**
16
+ * `claudeRuleRewrite` runs immediately before this and reduces each installed
17
+ * rule to the host's activation vocabulary — `paths:` plus the ownership keys —
18
+ * dropping `description:` and the `triggers:` block. Those two are exactly what
19
+ * `thin_entry` reads to write the stub's matching signal, so a stub built from
20
+ * the rewritten file would carry an empty description and no `Fires on:` hint.
21
+ * Reading `<packageRoot>/dist/agent-src/rules/<name>` keeps the signal intact.
22
+ *
23
+ * **The installed frontmatter is kept verbatim.** The roadmap's step 1.1 ends
24
+ * "Ownership keys survive", and it is not decoration: `reap_tagged_orphans`
25
+ * calls the literal `package:` line "the only path with ownership proof
26
+ * independent of inventory history", and doctor's stale-orphan check reads the
27
+ * same tag. A stub that replaced the whole file would delete the reaper's only
28
+ * evidence for every thinned rule. So only the BODY is replaced; the header the
29
+ * copy and the rewrite produced is written back unchanged, which also preserves
30
+ * any `paths:` block — harmless, since a path-only rule is never thinned.
31
+ *
32
+ * **A user-modified file is skipped, not overwritten.** The preserved set comes
33
+ * from the conflict tracker, the same one the copy consulted. Step 1.3 requires
34
+ * an upgrade to preserve and report those files; thinning one would destroy an
35
+ * edit the copy had just declined to destroy.
36
+ *
37
+ * The rollback of step 1.2 needs nothing here, and the reason is the ordering.
38
+ *
39
+ * The install manifest records each deployed file's digest from the bytes ON
40
+ * DISK at manifest-write time, which is after this pass. So the next run sees
41
+ * `recorded-unchanged` for a thinned file, `decideDeployWrite` returns `write`,
42
+ * and the verbatim copy restores the full body. Switching the mode back to
43
+ * `eager-all` therefore un-thins by simply not running this pass — no inverse
44
+ * operation, and no stub left behind. The property that carries it is the
45
+ * ordering, which `tests/scripts/install_thin_layer.test.ts` pins directly.
46
+ *
47
+ * Side-effect-free apart from the writes it is asked to make. No CLI entry, no
48
+ * `process.exit` — this module is reachable from the `build:install-bundle`
49
+ * entry and `check_installer_import_purity` forbids both.
50
+ */
51
+ import * as fs from 'node:fs';
52
+ import * as path from 'node:path';
53
+ import * as os from 'node:os';
54
+ import { buildHostLimitRows, loadHostInstructionLimits, ownershipLine, readLayer, renderHostLimitRows, resolveLayerOwnership, } from '../scripts/_lib/installed_layer.js';
55
+ import { GLOBAL_RULE_DIRS, globalRuleLayerPath } from './globalRuleLayers.js';
56
+ import { manifest_path } from '../scripts/_lib/installed_tools.js';
57
+ import { absoluteBodyLinkPrefix, build_thin, split_frontmatter, } from '../scripts/_lib/thin_rules.js';
58
+ /**
59
+ * Replace the body of every thinnable rule in `rulesDir` with its stub.
60
+ *
61
+ * Idempotent: a layer already thinned is rewritten to byte-identical content,
62
+ * so a repeated install neither grows nor drifts.
63
+ */
64
+ export function thinInstalledRuleLayer(opts) {
65
+ const packageRoot = path.resolve(opts.packageRoot);
66
+ const bodySourceDir = path.join(packageRoot, 'dist', 'agent-src', 'rules');
67
+ const bodyLinkPrefix = absoluteBodyLinkPrefix(packageRoot);
68
+ const preserved = opts.preserved ?? new Set();
69
+ // Scope is `null` on purpose. The copy already applied the install's rule
70
+ // scope, so the files that EXIST in `rulesDir` are the scoped set; asking
71
+ // `build_thin` to resolve the scope a second time would be a second reader
72
+ // of the same decision, and the two could disagree. Anything the stub map
73
+ // names that is not on disk is simply out of scope and is reported as such.
74
+ const stubs = build_thin(bodySourceDir, null, null, null, { packageRoot, bodyLinkPrefix });
75
+ let thinned = 0;
76
+ let rewritten = 0;
77
+ let kept = 0;
78
+ let charsBefore = 0;
79
+ let charsAfter = 0;
80
+ const preservedHits = [];
81
+ const absent = [];
82
+ const failed = [];
83
+ for (const [name, stubText] of stubs) {
84
+ const target = path.join(opts.rulesDir, name);
85
+ let installed;
86
+ try {
87
+ installed = fs.readFileSync(target, 'utf-8');
88
+ }
89
+ catch (e) {
90
+ // ENOENT is the documented meaning of `absent` — the copy's rule
91
+ // scope did not place this rule here. Anything else (EACCES, EISDIR,
92
+ // EIO) is a FAILURE wearing a scoping outcome's clothes, and the
93
+ // receipt prints failures and does not print absences, so the two
94
+ // must not share a bucket.
95
+ if (e.code === 'ENOENT')
96
+ absent.push(name);
97
+ else
98
+ failed.push({ rule: name, reason: String(e) });
99
+ continue;
100
+ }
101
+ // KEPT-VS-THINNED IS DECIDED BY IDENTITY, NOT BY A CONTENT SNIFF.
102
+ // `build_thin` returns either a stub or the SOURCE TEXT VERBATIM, so
103
+ // the full-bodied branch is exactly "the map value equals the source
104
+ // file". Testing `is_thin_entry(stubText)` instead would misread a
105
+ // source rule whose own body happened to contain the marker — and that
106
+ // rule would then be written as `installedFrontmatter + fullSourceText`,
107
+ // duplicating the frontmatter block. Zero such rules ship today, which
108
+ // makes it latent rather than live, and `THIN_ENTRY_MARKER`'s own
109
+ // docstring argues against exactly this kind of inferred detection.
110
+ let sourceText;
111
+ try {
112
+ sourceText = fs.readFileSync(path.join(bodySourceDir, name), 'utf-8');
113
+ }
114
+ catch {
115
+ sourceText = null;
116
+ }
117
+ if (stubText === sourceText) {
118
+ // Kept full-bodied by `build_thin`'s own predicate — kernel,
119
+ // trigger-less, path-only, or a declared `no_stub` member. The
120
+ // installed copy is already the right shape; touching it would be
121
+ // this pass inventing a decision the projector did not make.
122
+ kept += 1;
123
+ charsBefore += installed.length;
124
+ charsAfter += installed.length;
125
+ continue;
126
+ }
127
+ if (preserved.has(path.resolve(target))) {
128
+ preservedHits.push(name);
129
+ charsBefore += installed.length;
130
+ charsAfter += installed.length;
131
+ continue;
132
+ }
133
+ const [frontmatter] = split_frontmatter(installed);
134
+ charsBefore += installed.length;
135
+ // `split_frontmatter` answers `['', text]` for a file that OPENS a
136
+ // frontmatter block and never closes it — a truncated write, a file
137
+ // ending exactly on the closing fence with no trailing newline, CRLF.
138
+ // Writing `'' + stub` there would delete the `package:` line this
139
+ // module's header calls the reaper's only evidence, which is the one
140
+ // corruption this pass could cause. A file that claims a block it does
141
+ // not have is left exactly as found and reported.
142
+ //
143
+ // The test is a REGEX rather than `startsWith('---')` because the
144
+ // claim can be preceded by a BOM or by leading whitespace, and either
145
+ // one took the prefix check's "no block here" branch straight into the
146
+ // write it exists to prevent.
147
+ if (frontmatter === '' && /^\uFEFF?[\s]*---/.test(installed)) {
148
+ failed.push({
149
+ rule: name,
150
+ reason: 'opens a frontmatter block that never closes — left untouched so its ' +
151
+ 'ownership keys survive',
152
+ });
153
+ charsAfter += installed.length;
154
+ continue;
155
+ }
156
+ const next = `${frontmatter}${stubText}`;
157
+ try {
158
+ if (next !== installed) {
159
+ fs.writeFileSync(target, next, 'utf-8');
160
+ rewritten += 1;
161
+ }
162
+ thinned += 1;
163
+ charsAfter += next.length;
164
+ }
165
+ catch (e) {
166
+ failed.push({ rule: name, reason: String(e) });
167
+ charsAfter += installed.length;
168
+ }
169
+ }
170
+ if (stubs.size === 0) {
171
+ // A ZERO-STUB MAP AND A ZERO-THINNABLE LAYER PRINT THE SAME RECEIPT, so
172
+ // the one that is a failure has to say so. `_globSortedMd` swallows an
173
+ // unreadable directory and answers `[]`, which is what a wrongly
174
+ // resolved package root produces — the hazard `ThinRoots` exists for.
175
+ // Without this the feature would be silently not applied behind a
176
+ // success-shaped line, and the installer's try/catch sees only throws.
177
+ failed.push({
178
+ rule: bodySourceDir,
179
+ reason: 'no rule bodies found to build stubs from — the layer was left full-bodied',
180
+ });
181
+ }
182
+ return {
183
+ thinned,
184
+ rewritten,
185
+ kept,
186
+ preserved: preservedHits,
187
+ absent,
188
+ failed,
189
+ bodyLinkPrefix,
190
+ charsBefore,
191
+ charsAfter,
192
+ };
193
+ }
194
+ /**
195
+ * One receipt line per outcome, for a caller that prints.
196
+ *
197
+ * Returns the lines rather than writing them, so the installer's `--quiet` and
198
+ * its progress-event emitter stay the only things deciding what a consumer sees.
199
+ */
200
+ export function describeThinInstalledLayer(res) {
201
+ const out = [];
202
+ out.push(res.rewritten === 0 && res.thinned > 0
203
+ ? ` claude-code: ${String(res.thinned)} rule(s) already thinned, ` +
204
+ `${String(res.kept)} kept full-bodied; ` +
205
+ `${String(res.charsAfter)} chars — nothing to rewrite`
206
+ : ` claude-code: thinned ${String(res.rewritten)} rule(s) to stubs, ` +
207
+ `${String(res.kept)} kept full-bodied; ` +
208
+ `${String(res.charsBefore)} -> ${String(res.charsAfter)} chars`);
209
+ if (res.preserved.length > 0) {
210
+ out.push(` claude-code: ${String(res.preserved.length)} rule(s) left full — you edited them ` +
211
+ `and they are preserved, never overwritten (${res.preserved.join(', ')})`);
212
+ }
213
+ for (const f of res.failed) {
214
+ out.push(` claude-code: ${f.rule}: could not write stub — ${f.reason}`);
215
+ }
216
+ return out;
217
+ }
218
+ /**
219
+ * The install receipt's instruction-budget block — step 1.4's "at install".
220
+ *
221
+ * The step asks for the limit, the split and the 80 % warning AT INSTALL, and
222
+ * the measurement existed only behind the standalone `installed_layer_report`
223
+ * CLI: `buildHostLimitRows`'s own docstring named "the install receipt" as the
224
+ * caller it was exported for, and that caller did not exist. A consumer whose
225
+ * layer is over budget learned it from the host, which is the notice the
226
+ * roadmap exists to remove.
227
+ *
228
+ * Global layers only, deliberately. The install writes `~/.claude/rules` and
229
+ * its siblings; a project layer is not what this run just changed, and folding
230
+ * one in would make the receipt's number disagree with the thing it is a
231
+ * receipt FOR.
232
+ *
233
+ * Never throws. A receipt that cannot be measured is silent rather than fatal —
234
+ * the deploy it describes has already happened correctly.
235
+ */
236
+ export function installReceiptBudgetLines(packageRoot, home = os.homedir(), opts = {}) {
237
+ try {
238
+ // ONE RESOLVER, SHARED WITH THE REPORT — step 1.2. This used to read
239
+ // `manifest_path(packageRoot)`, the PACKAGE root's lock, which on a
240
+ // global-only install names a file no global install ever writes; the
241
+ // receipt then printed `0 package-owned` for a layer it had itself just
242
+ // deployed. `resolveLayerOwnership` falls through to the inventory, and
243
+ // `thisDeploy` covers the first install, where the receipt prints
244
+ // before `record_deploy` has written anything.
245
+ const { recorded, sources } = resolveLayerOwnership({
246
+ manifestPath: opts.manifestPath === undefined ? manifest_path(packageRoot) : opts.manifestPath,
247
+ projectRoot: packageRoot,
248
+ // The same home the layers below are read from — the inventory's
249
+ // anchor is tilde-relative, so the two must agree or the receipt
250
+ // measures one install and claims ownership of another.
251
+ home,
252
+ // THE RECEIPT IS THE "ASKING PROCESS" CASE, so it names no home
253
+ // here. It runs inside the install that WROTE the inventory, and
254
+ // that writer resolves the path through `inventory_path()` —
255
+ // honouring `AGENT_CONFIG_DEPLOY_INVENTORY`, which names a FILE
256
+ // rather than a home, and `EVENT4U_CONFIG_HOME`. Passing `home`
257
+ // would take `defaultInventoryPath`'s stated-home branch and read
258
+ // `<home>/.event4u/...`, a file nothing wrote under either
259
+ // override, and the inventory evidence would be silently lost.
260
+ // UNDEFINED IS LEFT UNDEFINED so `resolveLayerOwnership` applies
261
+ // `defaultInventoryPath(home)` — the SAME resolution the report
262
+ // uses. Hardcoding `inventory_path()` here made the two readers
263
+ // step 1.2 exists to reconcile disagree for any home that is not
264
+ // the asking process's: the receipt read one install's inventory
265
+ // and then expanded its tilde-relative anchors against the OTHER
266
+ // home, which is the cross-home misattribution two docstrings in
267
+ // the resolver forbid. `defaultInventoryPath` already returns
268
+ // `inventory_path()` when the stated home IS this process's, which
269
+ // is the case that motivated the hardcode.
270
+ inventoryPath: opts.inventoryPath,
271
+ thisDeploy: opts.thisDeploy,
272
+ });
273
+ const layers = [];
274
+ for (const host of Object.keys(GLOBAL_RULE_DIRS).sort()) {
275
+ const dir = globalRuleLayerPath(host, home);
276
+ if (dir === null)
277
+ continue;
278
+ layers.push(readLayer(host, 'global', dir, recorded));
279
+ }
280
+ const rows = buildHostLimitRows(layers, loadHostInstructionLimits());
281
+ if (rows.length === 0)
282
+ return [];
283
+ return [` ${ownershipLine(sources)}`, ...renderHostLimitRows(rows).map((l) => ` ${l}`)];
284
+ }
285
+ catch {
286
+ return [];
287
+ }
288
+ }
289
+ //# sourceMappingURL=installThinLayer.js.map
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Do the links inside an installed rule file resolve from where the install
3
+ * puts it?
4
+ *
5
+ * A rule body is authored in `src/rules/` and projected to
6
+ * `dist/agent-src/rules/`, where `](../guidelines/x.md)` resolves because the
7
+ * sibling directory is right there. The installer then copies a SUBSET of
8
+ * those sibling directories into the host's rule directory, so the same link
9
+ * resolves or does not depending on a list in `install.ts` that the rule
10
+ * author never sees. Nothing checked the two against each other.
11
+ *
12
+ * This module answers one question per link — resolved, or why not — against a
13
+ * deploy plan rather than against a materialised tree, so the audit costs a
14
+ * `statSync` per distinct target instead of a copy of 299 skills.
15
+ *
16
+ * Side-effect-free, no CLI entry, no `process.exit`.
17
+ */
18
+ import * as fs from 'node:fs';
19
+ import * as path from 'node:path';
20
+ /**
21
+ * Build a plan from `GLOBAL_DEPLOY_SOURCES`-shaped pairs.
22
+ *
23
+ * The empty destination (`cline` maps rules to the root) is deliberately kept:
24
+ * a rule installed at the root resolves `../x` differently, and silently
25
+ * dropping the entry would make this module answer a question about a layout
26
+ * that is not the one being installed.
27
+ */
28
+ export function deployPlanFrom(pairs) {
29
+ const plan = new Map();
30
+ for (const [source, dest] of pairs)
31
+ plan.set(dest, source);
32
+ return plan;
33
+ }
34
+ /** Markdown inline links, minus the ones that are not a path into the tree. */
35
+ export function relativeLinkTargets(markdown) {
36
+ const out = [];
37
+ for (const m of markdown.matchAll(/\]\(([^)\s]+)\)/g)) {
38
+ const target = m[1];
39
+ if (/^[a-z][a-z0-9+.-]*:/i.test(target))
40
+ continue; // http:, mailto:, etc.
41
+ if (target.startsWith('#'))
42
+ continue; // same-file anchor
43
+ if (target.startsWith('/'))
44
+ continue; // absolute — not ours to resolve
45
+ out.push(target);
46
+ }
47
+ return out;
48
+ }
49
+ /** Strip a trailing `#anchor`; a bare directory link keeps its trailing slash. */
50
+ function withoutAnchor(target) {
51
+ const hash = target.indexOf('#');
52
+ return hash === -1 ? target : target.slice(0, hash);
53
+ }
54
+ /**
55
+ * Audit one link written in a rule that the install places at
56
+ * `<install-root>/<rulesDest>/<rule>.md`.
57
+ */
58
+ export function auditLink(rule, target, rulesDest, plan, packageRoot) {
59
+ const bare = withoutAnchor(target);
60
+ // Resolve the link the way a reader does: from the installed file's own
61
+ // DIRECTORY — `rulesDest` is that directory, not the file — as a POSIX
62
+ // path relative to the install root. A sibling link (`[x](other.md)`, no
63
+ // `../`) therefore stays inside the rules directory, which is where the
64
+ // installer puts its sibling.
65
+ const fromDir = rulesDest === '' ? '.' : rulesDest;
66
+ const resolved = path.posix.normalize(path.posix.join(fromDir, bare));
67
+ if (resolved.startsWith('..')) {
68
+ return { rule, target, resolved_to: null, verdict: 'outside-install-root' };
69
+ }
70
+ const segments = resolved.split('/');
71
+ // Which deployed directory does this land in? Normally the first segment
72
+ // names it. When rules install at the install ROOT (`cline` maps them to
73
+ // `''`), there is no such segment: a sibling link like `](scope-control.md)`
74
+ // resolves to `scope-control.md`, whose first segment is a FILE NAME. Read
75
+ // literally that is `directory-not-deployed` for a file the install writes
76
+ // right beside the rule — 275 of cline's 523 links, every one of them fine.
77
+ // The `''` key exists in the plan precisely for this and could never be
78
+ // reached by a first-segment lookup.
79
+ const rootSource = plan.get('');
80
+ // The root entry answers for a BARE filename only. A link with a directory
81
+ // segment the plan does not carry is `directory-not-deployed`, the same as
82
+ // anywhere else — resolving it against the rules source would probe a path
83
+ // the install never writes and report `file-missing`, whose documented
84
+ // meaning ("the directory IS deployed") would then be false.
85
+ const useRoot = rootSource !== undefined && segments.length === 1;
86
+ const source = useRoot ? rootSource : plan.get(segments[0]);
87
+ const rest = useRoot ? segments : segments.slice(1);
88
+ if (source === undefined) {
89
+ return { rule, target, resolved_to: resolved, verdict: 'directory-not-deployed' };
90
+ }
91
+ // An empty `rest` means the link points at the deployed directory itself.
92
+ const onDisk = path.join(packageRoot, source, ...rest);
93
+ const exists = fs.existsSync(onDisk);
94
+ return {
95
+ rule,
96
+ target,
97
+ resolved_to: resolved,
98
+ verdict: exists ? 'resolved' : 'file-missing',
99
+ };
100
+ }
101
+ const EMPTY_COUNTS = () => ({
102
+ resolved: 0,
103
+ 'outside-install-root': 0,
104
+ 'directory-not-deployed': 0,
105
+ 'file-missing': 0,
106
+ });
107
+ /**
108
+ * Every `.md` file under `dir`, as POSIX paths relative to it, sorted.
109
+ *
110
+ * Recursive because skills (`<name>/SKILL.md`), commands (`<cluster>/x.md`) and
111
+ * contexts nest.
112
+ */
113
+ function markdownFilesUnder(dir) {
114
+ const out = [];
115
+ const walk = (rel) => {
116
+ for (const e of fs.readdirSync(path.join(dir, rel), { withFileTypes: true })) {
117
+ const child = rel === '' ? e.name : `${rel}/${e.name}`;
118
+ if (e.isDirectory())
119
+ walk(child);
120
+ else if (e.name.endsWith('.md'))
121
+ out.push(child);
122
+ }
123
+ };
124
+ walk('');
125
+ return out.sort();
126
+ }
127
+ /**
128
+ * Does this link point into a tree no install ever carries — `docs/`, which
129
+ * holds the ADRs?
130
+ *
131
+ * Decided from where the file sits in the PACKAGE (`dist/agent-src/<kind>/…`),
132
+ * not from where the install puts it: an author linking `docs/` meant the
133
+ * repository, whatever the host does. Two shapes count — a target landing under
134
+ * the top-level `docs/`, and a target naming a `docs/` segment or an ADR file
135
+ * that resolves to nothing in the package (an author writing `../docs/x` from
136
+ * a rule meant the repository's `docs/`, not a sibling that does not exist).
137
+ * `guidelines/docs/` is a real projected directory, which is why existence
138
+ * decides the second shape rather than the word alone.
139
+ */
140
+ export function isNonProjectedTarget(packageRoot, packageFromDir, target) {
141
+ const bare = withoutAnchor(target);
142
+ const resolved = path.posix.normalize(path.posix.join(packageFromDir, bare));
143
+ if (resolved === 'docs' || resolved.startsWith('docs/'))
144
+ return true;
145
+ if (!/(^|\/)(docs\/|ADR-\d)/.test(bare))
146
+ return false;
147
+ return resolved.startsWith('..') || !fs.existsSync(path.join(packageRoot, resolved));
148
+ }
149
+ /**
150
+ * Audit every link in every file of ONE installed kind.
151
+ *
152
+ * `kindSource` is the package directory the plan copies (`dist/agent-src/skills`).
153
+ * A file nested at `<rel>/x.md` is installed at `<dest>/<rel>/x.md`, so its links
154
+ * resolve from that directory — through the same {@link auditLink} the rule
155
+ * audit uses, because a second resolver would be the drift this count exists to
156
+ * catch.
157
+ *
158
+ * Returns null when the plan does not install the kind at all: "not installed"
159
+ * is a different answer from "installed with zero links".
160
+ */
161
+ export function auditInstalledKindLinks(plan, packageRoot, kindSource) {
162
+ let dest;
163
+ for (const [d, source] of plan)
164
+ if (source === kindSource)
165
+ dest = d;
166
+ if (dest === undefined)
167
+ return null;
168
+ const audits = [];
169
+ const nonProjected = [];
170
+ const dir = path.join(packageRoot, kindSource);
171
+ if (fs.existsSync(dir)) {
172
+ for (const file of markdownFilesUnder(dir)) {
173
+ const relDir = path.posix.dirname(file);
174
+ const installedDir = relDir === '.' ? dest : dest === '' ? relDir : `${dest}/${relDir}`;
175
+ const packageDir = relDir === '.' ? kindSource : `${kindSource}/${relDir}`;
176
+ const id = file.replace(/\.md$/, '');
177
+ const body = fs.readFileSync(path.join(dir, file), 'utf8');
178
+ for (const target of relativeLinkTargets(body)) {
179
+ const audit = auditLink(id, target, installedDir, plan, packageRoot);
180
+ if (isNonProjectedTarget(packageRoot, packageDir, target))
181
+ nonProjected.push(audit);
182
+ else
183
+ audits.push(audit);
184
+ }
185
+ }
186
+ }
187
+ return { ...summarise(audits), non_projected: nonProjected };
188
+ }
189
+ function summarise(audits) {
190
+ const counts = EMPTY_COUNTS();
191
+ for (const a of audits)
192
+ counts[a.verdict] += 1;
193
+ const grouped = new Map();
194
+ for (const a of audits) {
195
+ if (a.verdict === 'resolved')
196
+ continue;
197
+ const key = a.resolved_to === null ? a.target.replace(/[^/]*$/, '') : a.resolved_to.split('/')[0];
198
+ const row = grouped.get(key);
199
+ if (row)
200
+ row.count += 1;
201
+ else
202
+ grouped.set(key, { count: 1, verdict: a.verdict });
203
+ }
204
+ const by_directory = [...grouped.entries()]
205
+ .map(([directory, v]) => ({ directory, count: v.count, verdict: v.verdict }))
206
+ .sort((a, b) => b.count - a.count || a.directory.localeCompare(b.directory));
207
+ return { audits, counts, by_directory };
208
+ }
209
+ /**
210
+ * Audit every link in every rule the plan installs.
211
+ *
212
+ * `packageRoot` is the package checkout the installer copies FROM; the rule
213
+ * bodies are read from the plan's own rules source, so the audit cannot drift
214
+ * from what is shipped. Non-projected targets stay IN this reading: its
215
+ * recorded figures predate the per-kind split.
216
+ */
217
+ export function auditInstalledRuleLinks(plan, packageRoot) {
218
+ const audits = [];
219
+ for (const [dest, source] of plan) {
220
+ if (!source.endsWith('/rules'))
221
+ continue;
222
+ const dir = path.join(packageRoot, source);
223
+ if (!fs.existsSync(dir))
224
+ continue;
225
+ const files = fs
226
+ .readdirSync(dir, { withFileTypes: true })
227
+ .filter((e) => !e.isDirectory() && e.name.endsWith('.md'))
228
+ .map((e) => e.name)
229
+ .sort();
230
+ for (const file of files) {
231
+ const rule = file.replace(/\.md$/, '');
232
+ const body = fs.readFileSync(path.join(dir, file), 'utf8');
233
+ for (const target of relativeLinkTargets(body)) {
234
+ audits.push(auditLink(rule, target, dest, plan, packageRoot));
235
+ }
236
+ }
237
+ }
238
+ return summarise(audits);
239
+ }
240
+ /**
241
+ * Standing-text cost of the rewrite option, in characters.
242
+ *
243
+ * Option A of this roadmap's step 1.2: leave the install plan alone and
244
+ * rewrite every link to an absolute package path. Each unresolved link then
245
+ * grows by the absolute prefix minus the `../` it replaces — and it grows
246
+ * INSIDE a rule body, which is the text the host loads as instructions.
247
+ *
248
+ * `prefixChars` is the installed package root's own length, which is a
249
+ * property of the machine, so the caller supplies it and the report says which
250
+ * value it used.
251
+ */
252
+ export function rewriteOptionCost(report, prefixChars) {
253
+ const unresolved = report.audits.filter((a) => a.verdict !== 'resolved');
254
+ let total = 0;
255
+ for (const a of unresolved) {
256
+ // `../x` and `../../x` both become `<abs>/x`: the climb is replaced.
257
+ const climb = (a.target.match(/\.\.\//g) ?? []).length * 3;
258
+ total += prefixChars + 1 - climb;
259
+ }
260
+ return total;
261
+ }
262
+ //# sourceMappingURL=installedRuleLinks.js.map
@@ -59,6 +59,30 @@ export const USER_SCOPE_PATHS = {
59
59
  /**
60
60
  * Universal Anthropic-shaped skill bundle deployed to markdown-skills
61
61
  * tools. Mirrors `_CLAUDE_SKILL_BUNDLE` in the retired Python installer (ADR-200).
62
+ *
63
+ * NOT deploying `contexts/` and `guidelines/` here is a held decision, not an
64
+ * oversight — see the `rule-link-targets-change-the-frozen-install-abi` blocker
65
+ * on `road-to-rule-triggers-and-links-that-hold`.
66
+ *
67
+ * A rule is authored against the package tree and projected verbatim, so
68
+ * `](../guidelines/x.md)` resolves in `dist/agent-src/rules/` and then does
69
+ * not resolve in the install, because this table does not carry those two
70
+ * directories. Measured by `report_installed_rule_links` on 2026-10-03: 136 of
71
+ * 523 links in an installed Claude rule directory point nowhere, 112 of them
72
+ * into exactly those two. Adding them is the cheaper of the two repairs on the
73
+ * budget that is scarce — 0 standing characters against **5,152** for rewriting
74
+ * those same 112 links to absolute package paths, at a 48-character install
75
+ * prefix (the report prints the prefix it used; the figure scales with it).
76
+ *
77
+ * The totals were 160 of 550 when this was first measured and 158 of 545 on
78
+ * 2026-10-02; what fell since is the OTHER population — repo-tree link forms no
79
+ * install ever held — so the 112 this paragraph is about has not moved.
80
+ *
81
+ * It is held because this table is part of the FROZEN install ABI
82
+ * (`docs/contracts/install-layout.md`), and any change to it owes an
83
+ * `install_layout_version` bump plus a deprecation window: old and new shape
84
+ * side by side for a minor cycle, with in-place migration. That is a release
85
+ * commitment, not an implementation detail, so it is the owner's to make.
62
86
  */
63
87
  const CLAUDE_SKILL_BUNDLE = [
64
88
  ['dist/agent-src/rules', 'rules'],
@@ -1 +1 @@
1
- | [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including the counts in these badges. | 31 tools (stdio, worker) | `npx -y @event4u/agent-config mcp-server` |
1
+ | [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) — every claim machine-checked, including the counts in these badges. | 37 tools (stdio, worker) | `agent-config mcp-server` |
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including the counts in these badges.",
3
3
  "homepage": "https://event4u-app.github.io/agent-config",
4
- "install_hint_stdio": "npx -y @event4u/agent-config mcp-server",
4
+ "install_hint_stdio": "agent-config mcp-server",
5
5
  "name": "agent-config-mcp",
6
6
  "repository": "https://github.com/event4u-app/agent-config",
7
- "tools_count": 31,
7
+ "tools_count": 37,
8
8
  "topics": [
9
9
  "agent-governance",
10
10
  "agent-skills",
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "discovery": {
3
- "artefact_count": 625,
3
+ "artefact_count": 628,
4
4
  "scanner_version": "de0a22b4ac4c"
5
5
  },
6
- "generated_at": "2026-10-01",
6
+ "generated_at": "2026-10-10",
7
7
  "package": {
8
8
  "description": "Governed skills, rules and commands for AI coding tools (Claude Code, Cursor, Windsurf, Copilot) \u2014 every claim machine-checked, including the counts in these badges.",
9
9
  "homepage": "https://event4u-app.github.io/agent-config",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "16.2.0"
12
+ "version": "16.4.0"
13
13
  },
14
14
  "registries": [
15
15
  {
@@ -47,9 +47,9 @@
47
47
  }
48
48
  ],
49
49
  "server": {
50
- "install_hint_stdio": "npx -y @event4u/agent-config mcp-server",
50
+ "install_hint_stdio": "agent-config mcp-server",
51
51
  "name": "agent-config-mcp",
52
- "tools_count": 31,
52
+ "tools_count": 37,
53
53
  "transports": [
54
54
  "stdio",
55
55
  "worker"
@@ -9,12 +9,12 @@
9
9
  "transport": {
10
10
  "type": "stdio"
11
11
  },
12
- "version": "16.2.0"
12
+ "version": "16.4.0"
13
13
  }
14
14
  ],
15
15
  "repository": {
16
16
  "source": "github",
17
17
  "url": "https://github.com/event4u-app/agent-config"
18
18
  },
19
- "version": "16.2.0"
19
+ "version": "16.4.0"
20
20
  }