@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
@@ -50,6 +50,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
50
50
  import * as path from 'node:path';
51
51
 
52
52
  import { parse as _rtParse } from '../sync_yaml_rt.js';
53
+ import { GIT_CONVENTION_KEYS, fileSource, readGitConventionKey } from '../_lib/git_convention.js';
53
54
 
54
55
  const DEFAULT_PATH = '.agent-settings.yml';
55
56
 
@@ -203,7 +204,8 @@ const _PRESCAN_RULES: readonly PrescanRule[] = [
203
204
  ];
204
205
 
205
206
  interface Finding {
206
- line: number;
207
+ /** null when no single line can be named, printed as `line:-`. */
208
+ line: number | null;
207
209
  kind: string;
208
210
  verdict: string;
209
211
  hint: string;
@@ -254,9 +256,53 @@ function _scan_text(text: string): Finding[] {
254
256
  return findings;
255
257
  }
256
258
 
259
+ /**
260
+ * The schema enum and the branch-pattern alphabet, through the same reader
261
+ * `git:convention show` and `sync_pr_branch` use, so a value those refuse
262
+ * fails here first.
263
+ */
264
+ function _git_convention_findings(target: string, text: string): Finding[] {
265
+ const findings: Finding[] = [];
266
+ const lines = _splitlines(text);
267
+ for (const key of GIT_CONVENTION_KEYS) {
268
+ const reading = readGitConventionKey(key, fileSource({ developer: [target] }), {});
269
+ if (reading.state !== 'invalid' && reading.state !== 'malformed') continue;
270
+ // `malformed` is a fact about the whole file, so it is one finding, not one per key.
271
+ if (reading.state === 'malformed') {
272
+ if (!findings.some((f) => f.verdict === 'malformed')) {
273
+ findings.push({ line: null, kind: 'git.*', verdict: 'malformed', hint: reading.detail ?? reading.state });
274
+ }
275
+ continue;
276
+ }
277
+ findings.push({
278
+ line: _gitKeyLine(lines, key),
279
+ kind: `git.${key}`,
280
+ verdict: reading.state,
281
+ hint: reading.detail ?? reading.state,
282
+ });
283
+ }
284
+ return findings;
285
+ }
286
+
287
+ /**
288
+ * The 1-based line of `key` inside a block-style `git:` section, or null: a
289
+ * same-named key elsewhere is not it, and an inline `git:` value has no line
290
+ * of its own to name.
291
+ */
292
+ function _gitKeyLine(lines: readonly string[], key: string): number | null {
293
+ const start = lines.findIndex((l) => /^git\s*:\s*(#.*)?$/.test(l));
294
+ if (start === -1) return null;
295
+ for (let i = start + 1; i < lines.length; i++) {
296
+ const l = lines[i] as string;
297
+ if (/^\S/.test(l) && !l.startsWith('#')) return null;
298
+ if (new RegExp(`^\\s+${key}\\s*:`).test(l)) return i + 1;
299
+ }
300
+ return null;
301
+ }
302
+
257
303
  function _format(finding: Finding): string {
258
304
  return (
259
- ` ❌ line:${_ljust(String(finding.line), 4)} ` +
305
+ ` ❌ line:${_ljust(finding.line === null ? '-' : String(finding.line), 4)} ` +
260
306
  `${_ljust(finding.kind, 22)} ${_ljust(finding.verdict, 14)} ${finding.hint}`
261
307
  );
262
308
  }
@@ -370,7 +416,13 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
370
416
  }
371
417
  }
372
418
 
373
- if (findings.length === 0) {
419
+ // A parser finding already reports a file that does not parse; a `malformed`
420
+ // git reading would only repeat it. A pre-scan finding is not a parse
421
+ // failure, so it hides nothing.
422
+ const unparsed = findings.some((f) => f.kind === 'parser');
423
+ const git = _git_convention_findings(target, text).filter((f) => !(unparsed && f.verdict === 'malformed'));
424
+
425
+ if (findings.length === 0 && git.length === 0) {
374
426
  if (!opts.quiet) {
375
427
  _print(
376
428
  out,
@@ -380,12 +432,18 @@ export function main(argv: string[] | null = null, options: MainOptions = {}): n
380
432
  }
381
433
  return 0;
382
434
  }
383
- _print(err, `❌ ${target}: ${findings.length} finding(s) outside the supported subset.`);
384
- for (const finding of findings) {
385
- _print(err, _format(finding));
435
+ if (findings.length > 0) {
436
+ _print(err, `❌ ${target}: ${findings.length} finding(s) outside the supported subset.`);
437
+ for (const finding of findings) _print(err, _format(finding));
438
+ _print(err, '');
439
+ _print(err, ' Contract: docs/contracts/settings-sync-yaml-subset.md');
440
+ }
441
+ if (git.length > 0) {
442
+ _print(err, `❌ ${target}: ${git.length} git.* value(s) the convention refuses.`);
443
+ for (const finding of git) _print(err, _format(finding));
444
+ _print(err, '');
445
+ _print(err, ' Contract: docs/decisions/ADR-283-git-convention-carrier.md (the git section of agent-settings.schema.json)');
386
446
  }
387
- _print(err, '');
388
- _print(err, ' Contract: docs/contracts/settings-sync-yaml-subset.md');
389
447
  return 1;
390
448
  }
391
449
 
@@ -48,6 +48,7 @@ import {
48
48
  iter_setting_overrides,
49
49
  load_agent_settings,
50
50
  MERGEABLE_KEYS,
51
+ settings_layer_states,
51
52
  user_global_settings_paths,
52
53
  USER_GLOBAL_FILENAME,
53
54
  } from '../_lib/agent_settings.js';
@@ -179,7 +180,7 @@ export function missionResolutionFor(
179
180
  * file the user actually edited — telling somebody their value was dropped
180
181
  * without telling them which file it was dropped from is half an answer.
181
182
  */
182
- export function userGlobalDrop(key: string): { dropped: boolean; file: string } {
183
+ export function userGlobalDrop(key: string, templateDefault?: unknown): { dropped: boolean; file: string } {
183
184
  // Probe EVERY user-global layer the loader reads, not just the flat file.
184
185
  // `user_global_settings_paths()` returns the flat `agent-settings.yml` AND
185
186
  // the canonical `settings/.agent-settings.yml` the setup wizard writes, and
@@ -200,7 +201,13 @@ export function userGlobalDrop(key: string): { dropped: boolean; file: string }
200
201
  } catch {
201
202
  continue;
202
203
  }
203
- if (getSettingsLeaf(raw, key) !== undefined) return { dropped: true, file: candidate };
204
+ const value = getSettingsLeaf(raw, key);
205
+ if (value === undefined) continue;
206
+ // `upgrade` inserts template defaults into the user-global file, so a
207
+ // dropped default is not something the user set and loses nothing. A
208
+ // lower layer can still hold a value the user did set.
209
+ if (templateDefault !== undefined && JSON.stringify(value) === JSON.stringify(templateDefault)) continue;
210
+ return { dropped: true, file: candidate };
204
211
  }
205
212
  return { dropped: false, file };
206
213
  }
@@ -234,8 +241,16 @@ export function runSettingsGet(opts: SettingsGetOptions): SettingsGetResult {
234
241
  const cls = _classFor(opts.packageRoot, opts.key);
235
242
  const fallback = templateDefault(opts.packageRoot, opts.key);
236
243
  const carveOut = carveOutFor(opts.key);
237
- const drop = userGlobalDrop(opts.key);
244
+ const drop = userGlobalDrop(opts.key, fallback);
238
245
  const mission = missionResolutionFor(opts.key, merged);
246
+ // The loader reads a layer that does not parse as absent, so "not set" can
247
+ // be false; the exit code stays 0 because the read itself still answered.
248
+ const malformed = settings_layer_states({ cwd: opts.cwd }).filter((l) => l.state === 'malformed');
249
+ if (malformed.length > 0) {
250
+ err.push(
251
+ `⚠️ settings:get: ${malformed.map((l) => l.path).join(', ')} does not parse; every value it sets is read as absent.`,
252
+ );
253
+ }
239
254
 
240
255
  if (opts.json) {
241
256
  out.push(
@@ -19,6 +19,7 @@ import {
19
19
  resolveExecutionPosture,
20
20
  } from '../../shared/missionExecution.js';
21
21
  import {
22
+ UNREAD_FORGE,
22
23
  forgeProtectionRows,
23
24
  protectionActions,
24
25
  type ForgeReading,
@@ -81,7 +82,11 @@ export function executionJson(overrides: () => OverrideStream): Dict {
81
82
  * `actions` carries the human ACTION lines — the step's own words are that a
82
83
  * missing row is a blocker entry and NOT a halt, so this reports and returns.
83
84
  */
84
- export function forgeProtectionJson(reading: ForgeReading, repo: string | null = null): Dict {
85
+ export function forgeProtectionJson(
86
+ reading: ForgeReading,
87
+ repo: string | null = null,
88
+ not_checked: NotCheckedReason = null,
89
+ ): Dict {
85
90
  const rows = forgeProtectionRows(reading);
86
91
  const readFromForge = rows.some((r) => r.state !== 'unread');
87
92
  // **The slug is reported only when something was actually read, and that
@@ -107,6 +112,11 @@ export function forgeProtectionJson(reading: ForgeReading, repo: string | null =
107
112
  })),
108
113
  actions: protectionActions(rows).map(name),
109
114
  read_from_forge: readFromForge,
115
+ // Present on every run, `null` when the read happened. A key that
116
+ // appeared only on the skipped path would make its absence carry the
117
+ // meaning, and absence is exactly what a schema-validating consumer
118
+ // reads as "this build does not report it".
119
+ not_checked,
110
120
  };
111
121
  }
112
122
 
@@ -147,6 +157,64 @@ export interface ForgeDeps {
147
157
  readonly env?: Readonly<Record<string, string | undefined>>;
148
158
  /** The subprocess runner for both `git` and `gh`. */
149
159
  readonly run?: Runner;
160
+ /**
161
+ * Skip the read before anything spawns. The block keeps its shape: five
162
+ * `unread` rows, exactly what a failed read produces.
163
+ */
164
+ readonly offline?: boolean;
165
+ /**
166
+ * WHY the read was skipped, or `null` when it happened.
167
+ *
168
+ * Five `unread` rows and no failures is what "everything is fine" looks
169
+ * like to a consumer summing row states, so `read_from_forge: false` alone
170
+ * did not carry the distinction. This names it, which is the condition the
171
+ * council attached to making offline the default.
172
+ */
173
+ readonly not_checked?: NotCheckedReason;
174
+ }
175
+
176
+ /**
177
+ * Why a `doctor` run did not read the forge. `null` means it did.
178
+ *
179
+ * Three reasons rather than a boolean, because the repairs differ: pass
180
+ * `--online`, drop `--no-forge`, or run without `--check`.
181
+ */
182
+ export type NotCheckedReason = 'online_not_requested' | 'offline_flag' | 'single_check' | null;
183
+
184
+ /**
185
+ * Whether a `doctor` run reads the forge — and why not, when it does not.
186
+ *
187
+ * **OFFLINE IS THE DEFAULT since 2026-10-09.** Blocker
188
+ * `doctor-network-default` of `road-to-findings-that-get-a-disposition`,
189
+ * option (a): AI council 2026-10-07 (anthropic + openai, 2/2), adopted
190
+ * 2026-10-08 under the owner's delegation of council-decidable questions. The
191
+ * recorded reasoning is that a health command reaching the network on every
192
+ * run — including a single-check run — is the surprising default, and that
193
+ * `--online` costs one word to anyone who wants the read.
194
+ *
195
+ * Phase 3.1 shipped the opt-OUT and this function's earlier header said the
196
+ * default "is an owner decision, so this function does not decide it". That is
197
+ * now decided, and the header says so rather than leaving the next reader to
198
+ * infer it from the expression.
199
+ *
200
+ * Precedence is narrowest-first, so the reason names the repair: a `--check`
201
+ * run reads no forge row at all, an explicit `--no-forge` beats `--online`
202
+ * because it is the more specific instruction, and the bare default is last.
203
+ */
204
+ export function forgeDepsFor(opts: {
205
+ readonly online?: boolean;
206
+ readonly no_forge?: boolean;
207
+ readonly check: string | null;
208
+ }): ForgeDeps {
209
+ const not_checked: NotCheckedReason =
210
+ opts.check !== null
211
+ ? 'single_check'
212
+ : opts.no_forge === true
213
+ ? 'offline_flag'
214
+ : opts.online === true
215
+ ? null
216
+ : 'online_not_requested';
217
+ return { offline: not_checked !== null, not_checked };
150
218
  }
151
219
 
152
220
  export function forgeProtectionJsonFor(root: string, deps: ForgeDeps = {}): Dict {
@@ -155,6 +223,9 @@ export function forgeProtectionJsonFor(root: string, deps: ForgeDeps = {}): Dict
155
223
  // binding were asserted one layer down against fakes while a regression in
156
224
  // the real wiring stayed invisible. `deps` is that seam; production passes
157
225
  // nothing and gets `process.env` plus the real spawn.
226
+ if (deps.offline === true) {
227
+ return forgeProtectionJson(UNREAD_FORGE, null, deps.not_checked ?? null);
228
+ }
158
229
  const env = deps.env ?? process.env;
159
230
  const run = deps.run;
160
231
  const remaining = budgetOf(FORGE_TOTAL_BUDGET_MS);
@@ -238,7 +238,11 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
238
238
  roadmap:set-step Flip ONE checkbox glyph safely (lock + line anchor +
239
239
  live invariant + survival check)
240
240
  roadmap:archive Archive completed roadmaps (branch-touched by default;
241
- --all for every complete one; --dry-run to preview)
241
+ --all for every complete one; --dry-run to preview;
242
+ bare [~] steps are carried to a follow-up first,
243
+ --no-carry to leave them blocking; owner-blocked
244
+ steps ask first; --owner-decision later --only <x>
245
+ parks that one roadmap)
242
246
  stubs:due Read-only: roadmap stubs past their `review_by:`
243
247
  date, plus the decisions routed to the owner.
244
248
  Writes nothing. Flags: --json, --counts,
@@ -279,6 +283,36 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
279
283
  settings:get Read one setting: its value, the file it came from, its
280
284
  class, and whether "absent" differs from the default.
281
285
  Usage: settings:get <key> [--json]
286
+ git:convention The git convention (git.commit_format, git.branch_pattern,
287
+ git.update_strategy): value in force, source and state
288
+ (valid|absent|malformed|invalid|discarded|unresolvable),
289
+ read from a committed .git-convention.yml over the
290
+ settings files; this checkout's differing value is shown
291
+ as a candidate, and any repository commit-message
292
+ validator that also runs at commit. Exit 1 when a key in
293
+ force is malformed, invalid, discarded or unresolvable;
294
+ a candidate in one of these states is a warning, exit 0.
295
+ --key limits show to the named keys (repeatable).
296
+ update_strategy is read at --base, else the default
297
+ branch: a pull request passes --base origin/<its base>.
298
+ subject checks subjects on stdin against the convention in
299
+ force; ticket reads the ticket out of a branch name; branch
300
+ renders a name from git.branch_pattern; measure proposes
301
+ a convention from the history (subject family, branch
302
+ pattern, observed update style) and writes nothing;
303
+ init --yes creates .git-convention.yml once on the
304
+ user's yes (never over one, never committed);
305
+ show and subject print "no convention established" when
306
+ no declaration, approved card or commitlint config exists; sync brings the
307
+ branch up to --base (else the default branch) per
308
+ git.update_strategy (exit 1 base unresolved, 3 behind
309
+ under rebase, 4 strategy unreadable).
310
+ Usage: git:convention show [--json] [--base REF] [--key K]
311
+ git:convention subject [--format F|--family F]
312
+ git:convention ticket [BRANCH] [--keys K]
313
+ git:convention branch --slug S [--type T] [--ticket K]
314
+ git:convention measure [--limit N] [--family F]
315
+ git:convention sync [--base REF] [--dry-run]
282
316
  settings:set Set one setting in the global file. Refuses every class-C
283
317
  (guarded) key from docs/contracts/settings-classes.md, and
284
318
  refuses everything when that contract is unreadable.
@@ -342,7 +376,9 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
342
376
  memory:check-proposal Run the admission gate on a memory proposal
343
377
  memory:learn Aggregate memory intake signals into the local learning
344
378
  sidecar (read-only; --write to emit). Usage: memory:learn [--intake-dir DIR]
345
- [--out-dir DIR] [--now ISO] [--write] [--format text|json]
379
+ [--out-dir DIR] [--now ISO] [--write] [--format text|json|status]
380
+ --format status prints the one-screen human view (verdict counts,
381
+ top preferred lessons, the hand-off); it refuses --write.
346
382
  analytics Local-only workspace analytics (emit|show|prune|migrate).
347
383
  Usage: analytics show [--window 30d|7d|24h] · analytics prune
348
384
  knowledge Global knowledge-card store (list|show|trace|forget|promote|
@@ -356,9 +392,9 @@ Tier 2 — maintenance / internal (hooks, MCP, memory, telemetry):
356
392
  roadmap-progress:hook PostToolUse hook entry point (read JSON from stdin)
357
393
  Regenerates roadmaps-progress.md when a tool wrote under agents/roadmaps/
358
394
  onboarding-gate:hook Hook entry point (drains stdin)
359
- Writes .augment/state/onboarding-gate.json from .agent-settings.yml
395
+ Writes agents/state/onboarding-gate.json from .agent-settings.yml
360
396
  context-hygiene:hook PostToolUse hook entry point (read JSON from stdin)
361
- Maintains .augment/state/context-hygiene.json (turn count, loop, freshness)
397
+ Maintains agents/state/context-hygiene.json (turn count, loop, freshness)
362
398
  dispatch:hook Universal hook dispatcher (Phase 7, hook-architecture-v1.md)
363
399
  Usage: dispatch:hook --platform <name> --event <event> [--native-event <native>]
364
400
  Reads scripts/hook_manifest.yaml and runs the resolved concern chain.
@@ -790,6 +826,10 @@ cmd_settings_get() {
790
826
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_settings_get.ts" "$@"
791
827
  }
792
828
 
829
+ cmd_git_convention() {
830
+ exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_git_convention.ts" "$@"
831
+ }
832
+
793
833
  cmd_mcp_available() {
794
834
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_mcp_available.ts" "$@"
795
835
  }
@@ -1456,7 +1496,15 @@ cmd_prune() {
1456
1496
  # `agent-config doctor` — read-only drift report against the manifest.
1457
1497
  # Surfaces missing / modified / foreign files. Exit 0 clean, 1 drift,
1458
1498
  # 2 manifest-absent. See scripts/_cli/cmd_doctor.ts.
1499
+ # `doctor neighbours` routes to its own entry point rather than a branch inside
1500
+ # cmd_doctor.ts, which is 2,000 lines over the source-size ceiling and cannot
1501
+ # grow. Routed here because the dispatcher is where verbs are already resolved.
1459
1502
  cmd_doctor() {
1503
+ if [[ "${1:-}" == "neighbours" ]]; then
1504
+ shift
1505
+ exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_doctor_neighbours.ts" "$@"
1506
+ return
1507
+ fi
1460
1508
  exec_ts "$PACKAGE_ROOT/src/scripts/_cli/cmd_doctor.ts" "$@"
1461
1509
  }
1462
1510
 
@@ -1547,6 +1595,7 @@ main() {
1547
1595
  session:recycle) cmd_session_recycle "$@" ;;
1548
1596
  packs:active) cmd_packs_active "$@" ;;
1549
1597
  settings:get) cmd_settings_get "$@" ;;
1598
+ git:convention) cmd_git_convention "$@" ;;
1550
1599
  mcp:available) cmd_mcp_available "$@" ;;
1551
1600
  brand:status) cmd_brand_status "$@" ;;
1552
1601
  roadmap:context) cmd_roadmap_context "$@" ;;
@@ -49,11 +49,13 @@ import { createRequire } from 'node:module';
49
49
  import * as fs from 'node:fs';
50
50
  import * as os from 'node:os';
51
51
  import * as path from 'node:path';
52
- import { fileURLToPath } from 'node:url';
52
+ import { resolvePackageRoot } from './package_root.js';
53
53
 
54
54
  import * as user_global_paths from './user_global_paths.js';
55
55
  import { carveOutKeys } from '../../shared/settingsCarveOut.js';
56
56
  import { applyRenamedKeys } from './settings_renamed_keys.js';
57
+ import { warnRemovedKeys } from './settings_removed_keys.js';
58
+ export { REMOVED_KEYS } from './settings_removed_keys.js';
57
59
  import type * as YamlModule from 'yaml';
58
60
 
59
61
  // ESM has no `require`; `createRequire(import.meta.url)` restores it so the
@@ -264,13 +266,13 @@ function _resolve_user_global_file(): string {
264
266
  * the user-global file. Adding a key requires an ADR.
265
267
  */
266
268
  export const MERGEABLE_KEYS: readonly string[] = [
267
- // `name`, `ide` and `personal.bot_icon` are the PRE-MIGRATION spellings.
268
- // `install.ts` migrates `ide` → `personal.ide` and `pr_comment_bot_icon`
269
- // into its `personal.` home, and this list was never moved with them — so
270
- // the whitelist named keys the template does not have while the keys it
271
- // does have were filtered out silently. A user setting either preference
272
- // user-globally got no error, no warning, and no effect
273
- // (road-to-capability-answerability 4.3, ADR-219).
269
+ // `name` and `ide` are the PRE-MIGRATION spellings. `install.ts` migrates
270
+ // `ide` → `personal.ide`, and this list was never moved with it — so the
271
+ // whitelist named a key the template does not have while the key it does
272
+ // have was filtered out silently (road-to-capability-answerability 4.3,
273
+ // ADR-219). `personal.bot_icon` / `personal.pr_comment_bot_icon` left with
274
+ // the key itself (2026-10-09): a whitelisted key nothing reads would carry a
275
+ // user-global value into a tree that ignores it.
274
276
  //
275
277
  // Both spellings are listed rather than replaced: a legacy file that still
276
278
  // uses the old name keeps working, and nothing that resolved before
@@ -280,20 +282,12 @@ export const MERGEABLE_KEYS: readonly string[] = [
280
282
  'ide',
281
283
  'personal.ide',
282
284
  'rule_loading_tier',
283
- 'memory.cadence',
284
- 'personal.bot_icon',
285
- 'personal.pr_comment_bot_icon',
286
285
  'personal.autonomy',
287
286
  // Knowledge-card global cross-project sharing is a USER-GLOBAL setting
288
287
  // (ADR-100 / road-to-structure-grounding-v2). Whitelisted so the
289
288
  // ~/.event4u/agent-config/agent-settings.yml values are honoured.
290
289
  'knowledge.global_sharing.enabled',
291
290
  'knowledge.global_sharing.allowed_tiers',
292
- 'knowledge.global_sharing.redaction.enabled',
293
- 'knowledge.global_sharing.redaction.halt_on_trigger',
294
- 'knowledge.global_sharing.auto_promote_threshold',
295
- 'knowledge.global_sharing.freshness.hypothesis_after_days',
296
- 'knowledge.global_sharing.freshness.stale_after_days',
297
291
  // `design.fidelity_mode` is a per-DEVELOPER working preference, not a
298
292
  // per-project one: whether an agent may deviate from a handed-over design
299
293
  // is a property of how that person works, and a designer who sets it once
@@ -305,17 +299,28 @@ export const MERGEABLE_KEYS: readonly string[] = [
305
299
  // GUI; whitelisting decides only whether the value SURVIVES the merge
306
300
  // (ADR-271, road-to-design-intent-conformance 2.3).
307
301
  'design.fidelity_mode',
302
+ // `lean_projection.*` is a per-MACHINE setting and the install it governs is
303
+ // a user-scope one: the layer being thinned is `~/.claude/rules`, which
304
+ // belongs to the machine and not to any checkout. Without these two rows a
305
+ // consumer who wrote the opt-in into the user-global file got no error, no
306
+ // warning and no effect — the same silent-filter defect the two entries
307
+ // above repair, reaching a third key, and unsatisfiable-by-construction on
308
+ // an ADR-020 global-only install, where no project layer exists to carry it.
309
+ // Whitelisting decides only whether a value SURVIVES the merge: it sets
310
+ // nothing, and `installerThinsHost` still refuses a template-only value.
311
+ 'lean_projection.mode',
312
+ 'lean_projection.hosts',
308
313
  ];
309
314
 
310
315
  /** The shipped template, relative to the package root. */
311
316
  const TEMPLATE_RELATIVE = path.join('src', 'config', 'agent-settings.template.yml');
312
317
 
313
318
  /**
314
- * Package root: `src/scripts/_lib/agent_settings.ts` → three levels up.
315
- * Same idiom as `cli_wrapper.ts:28`, and it holds in an installed consumer
316
- * too because `src/config/` ships (`package.json` `files[]`).
319
+ * Package root, anchored on the package marker rather than on hop counts: this
320
+ * module is also inlined into `dist/cli-delegate/`, two levels below the root,
321
+ * where three hops land outside the package and every default is lost.
317
322
  */
318
- const _PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', '..');
323
+ const _PACKAGE_ROOT = resolvePackageRoot(import.meta.url);
319
324
 
320
325
  /** Default template path — overridable per call for tests. */
321
326
  export function default_template_path(): string {
@@ -964,114 +969,11 @@ export function load_agent_settings(
964
969
  _deep_merge(merged, layer);
965
970
  }
966
971
  }
967
- _warn_removed_always_on_keys(merged);
972
+ warnRemovedKeys(merged);
968
973
  return merged;
969
974
  }
970
975
 
971
976
 
972
- /**
973
- * Settings keys this package has DELETED. A leftover value from an older
974
- * install is ignored — never applied by any reader — and surfaced with ONE
975
- * deprecation line per key per process run (stderr; the exit code never
976
- * changes).
977
- *
978
- * The map carries a per-key REASON rather than one shared sentence, because
979
- * the list now spans more than one deletion doctrine and a single blanket
980
- * phrase would mis-attribute every future entry. A reader who hits the line
981
- * should learn why the key went, not just that it did.
982
- *
983
- * `subagents.*` — the always-on-orchestration doctrine
984
- * (road-to-always-on-orchestration Phase 1): the layer has no per-layer
985
- * on/off setting any more. `ai_team.enabled` joined in Step 1.3 — the
986
- * `/team` family's availability is a codex-CLI/auth FACT
987
- * (`src/scripts/ai_team/availability.ts`), not a flag; the `ai_team` config
988
- * loader (`src/scripts/ai_team/config.ts`) separately accepts a leftover
989
- * `enabled` key without failing closed, so this warning is the only surfaced
990
- * signal of that deletion.
991
- *
992
- * `hooks.turn_end_gate.*` — the turn-end gate is always armed (2026-08-12).
993
- * A default-off safety gate cannot soak, so the switch protecting the soak
994
- * made the soak impossible; whether the gate fires is now decided by each
995
- * detector's own trigger conditions. See `turn_end_gate_hook.ts` § "Always
996
- * armed".
997
- *
998
- * The five `derivable` leaves below (2026-08-12, road-to-zero-settings Phase
999
- * 2.1) are a different case from every entry above them, and the difference is
1000
- * the whole safety argument: no code path ever *consulted* them. Each appeared
1001
- * in the template, the schema and the reference page, and several in the setup
1002
- * wizard, while the decision they looked like they governed was taken
1003
- * elsewhere. A key nothing reads cannot change a default by leaving — so this
1004
- * is the one deletion batch that needs no replacement mechanism, only the
1005
- * per-key statement of what already decides.
1006
- *
1007
- * A sixth unread key, `screenshots.data_bearing_gate`, was found in the same
1008
- * pass and deliberately NOT deleted — it is `consent`, and the open question is
1009
- * whether the repair is to build its missing reader or to delete a promise a
1010
- * Hard Floor can never honour. See `settings-classes.md` § The six unread keys.
1011
- *
1012
- * `worktrees.mode` (2026-08-13, ADR-229) is a third doctrine again: not
1013
- * always-on, not unread. It WAS read, and the reader honoured all three values —
1014
- * the deletion says the decision was never the agent's to make. `ask` bought a
1015
- * round trip per spawn, `on` let the agent start parallel work unprompted, and
1016
- * `off` described the wanted behaviour, so `off` became the hardcoded rule and
1017
- * the switch went. What decides instead is the user's own sentence in the chat.
1018
- *
1019
- * Every reason string must name what decides INSTEAD, never just "removed".
1020
- * Exported so `lint_settings_classes` can check the deletion side of the
1021
- * surface: a reason that names no replacement, or an entry whose key is live in
1022
- * the template again, is a contradiction the loader itself cannot notice.
1023
- */
1024
- export const REMOVED_KEYS: ReadonlyMap<string, string> = new Map([
1025
- ['subagents.enabled', 'always-on orchestration'],
1026
- ['subagents.auto', 'always-on orchestration'],
1027
- ['subagents.host_capabilities', 'always-on orchestration'],
1028
- ['subagents.budget_routing', 'always-on orchestration'],
1029
- ['ai_team.enabled', 'always-on orchestration'],
1030
- ['hooks.turn_end_gate.enabled', 'the turn-end gate is always armed'],
1031
- ['hooks.turn_end_gate.promissory', 'the turn-end gate is always armed'],
1032
- ['hooks.turn_end_gate.language', 'the turn-end gate is always armed'],
1033
- ['hooks.turn_end_gate.verification', 'the turn-end gate is always armed'],
1034
- ['telegraph.speak_scope', 'the rule body states its own scope; compile_router gates on telegraph.speak alone'],
1035
- ['chat_history.max_size_kb', 'the rotate command takes --max-kb from argv; session-count pruning bounds the file'],
1036
- ['chat_history.on_overflow', 'the overflow mode comes from the rotate command --mode argv'],
1037
- ['quality.wait_for_remote_ci', 'whether to poll follows from the push plus a detectable remote pipeline'],
1038
- ['legal_review_prep.consented_at', 'the provenance sidecar settings:set writes and consentVerdict reads'],
1039
- ['worktrees.mode', 'the user asking for a worktree in the chat; creation is instruction-only and hardcoded'],
1040
- ]);
1041
-
1042
- /** Keys already warned about in THIS process — the "once per run" dedupe. */
1043
- const _warnedRemovedKeys = new Set<string>();
1044
-
1045
- /** Read one dotted path out of a merged settings tree; `undefined` when absent. */
1046
- function _readDottedSettingsPath(root: SettingsDict, dotted: string): SettingsValue {
1047
- let node: SettingsValue = root;
1048
- for (const part of dotted.split('.')) {
1049
- if (typeof node !== 'object' || node === null || Array.isArray(node)) {
1050
- return undefined;
1051
- }
1052
- node = (node as SettingsDict)[part];
1053
- }
1054
- return node;
1055
- }
1056
-
1057
- /**
1058
- * Warn once per process, on stderr, for every {@link REMOVED_KEYS} entry still
1059
- * present in a resolved settings tree. Never throws, never changes what the
1060
- * caller does with `merged` — a pure notification side effect.
1061
- */
1062
- function _warn_removed_always_on_keys(merged: SettingsDict): void {
1063
- for (const [key, reason] of REMOVED_KEYS) {
1064
- if (_warnedRemovedKeys.has(key)) {
1065
- continue;
1066
- }
1067
- if (_readDottedSettingsPath(merged, key) === undefined) {
1068
- continue;
1069
- }
1070
- _warnedRemovedKeys.add(key);
1071
- process.stderr.write(`${key} was removed (${reason}); ignored.\n`);
1072
- }
1073
- }
1074
-
1075
977
  /**
1076
978
  * Return the merged `modules:` configuration with defaults applied.
1077
979
  *
@@ -50,7 +50,7 @@ export interface BlockedByMarker {
50
50
  * unreadable, which is a migration, not a fix.
51
51
  */
52
52
  export const BLOCKED_BY_MARKER_RE =
53
- /<!--[ \t]*blocked-by:[ \t]*([a-z0-9-]+)[ \t]*(?:\|[ \t]*asked:[ \t]*(yes|no)[ \t]*(?:[—-][ \t]*([^>]*?))?[ \t]*)?-->/i;
53
+ /<!--[ \t]*blocked-by:[ \t]*([a-z0-9-]+(?:#[a-z0-9-]+)?)[ \t]*(?:\|[ \t]*asked:[ \t]*(yes|no)[ \t]*(?:[—-][ \t]*([^>]*?))?[ \t]*)?-->/i;
54
54
 
55
55
  /** Parse one marker, or `null` when the text carries none. */
56
56
  export function parseBlockedByMarker(text: string): BlockedByMarker | null {
@@ -98,16 +98,18 @@ export function build_claude_hook_matrix(manifest_path: string): ClaudeHookMatri
98
98
  const aliasesAll = (manifest['native_event_aliases'] ?? {}) as Record<string, unknown>;
99
99
  const aliases = ((aliasesAll['claude'] ?? {}) as Record<string, unknown>) || {};
100
100
 
101
- const ac_to_native: Record<string, string> = {};
102
- for (const [native, ac] of Object.entries(aliases)) {
103
- ac_to_native[String(ac)] = native;
104
- }
105
-
101
+ // Iterating the ALIAS map, not the event map, because the relation is
102
+ // many-natives-to-one-event and the inversion this replaced silently lost
103
+ // every native but the last. `PostToolUse` and `PostToolUseFailure` both
104
+ // lower to `post_tool_use`; building `ac_to_native` would have kept one of
105
+ // them and UNBOUND the other, turning a routing fix into a routing
106
+ // regression that no existing test could see. Pinned by
107
+ // `before_complete_failure_envelope.test.ts` ("both natives stay bound").
106
108
  const matrix: ClaudeHookMatrix = {};
107
- for (const [ac_event, concerns] of Object.entries(claude_events)) {
109
+ for (const [native, ac_raw] of Object.entries(aliases)) {
110
+ const ac_event = String(ac_raw);
111
+ const concerns = claude_events[ac_event];
108
112
  if (!concerns || (Array.isArray(concerns) && concerns.length === 0)) continue;
109
- const native = ac_to_native[ac_event];
110
- if (native === undefined) continue;
111
113
  // Bundle fast path (road-to-hook-latency-repair Phase 2): invoke the
112
114
  // precompiled dispatcher bundle directly — no bash shim, no CLI boot
113
115
  // (measured ~450-500 ms CLI vs ~110 ms bundle per event on a 1-vCPU