@event4u/agent-config 16.2.0 → 16.3.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 (332) 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 +89 -237
  5. package/README.md +14 -12
  6. package/dist/agent-src/commands/analyze/inbox.md +1 -1
  7. package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
  8. package/dist/agent-src/commands/bug/fix.md +17 -2
  9. package/dist/agent-src/commands/feature/plan.md +1 -1
  10. package/dist/agent-src/commands/feature/roadmap.md +1 -1
  11. package/dist/agent-src/commands/fix/ci.md +1 -1
  12. package/dist/agent-src/commands/implement-ticket.md +1 -1
  13. package/dist/agent-src/commands/jira-ticket.md +1 -1
  14. package/dist/agent-src/commands/roadmap/create.md +1 -1
  15. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  16. package/dist/agent-src/commands/roadmap/process-full.md +4 -4
  17. package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
  18. package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
  19. package/dist/agent-src/commands/roadmap.md +18 -4
  20. package/dist/agent-src/commands/tests/create.md +17 -3
  21. package/dist/agent-src/commands/tests/execute.md +22 -5
  22. package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
  23. package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
  24. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
  25. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
  26. package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
  27. package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
  28. package/dist/agent-src/rules/active-remediation.md +1 -1
  29. package/dist/agent-src/rules/autonomous-execution.md +1 -0
  30. package/dist/agent-src/rules/broken-access-control.md +1 -0
  31. package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
  32. package/dist/agent-src/rules/context-hygiene.md +1 -1
  33. package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
  34. package/dist/agent-src/rules/design-fidelity.md +13 -16
  35. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
  36. package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
  37. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  38. package/dist/agent-src/rules/domain-safety-retention.md +1 -0
  39. package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
  40. package/dist/agent-src/rules/evaluator-independence.md +3 -2
  41. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
  42. package/dist/agent-src/rules/finance-safety-floor.md +1 -0
  43. package/dist/agent-src/rules/git-history-discipline.md +1 -0
  44. package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
  45. package/dist/agent-src/rules/legal-safety-floor.md +3 -2
  46. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
  47. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
  48. package/dist/agent-src/rules/media-governance-routing.md +14 -17
  49. package/dist/agent-src/rules/persona-governance.md +2 -2
  50. package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
  51. package/dist/agent-src/rules/question-not-instruction.md +1 -0
  52. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  53. package/dist/agent-src/rules/runtime-safety.md +1 -0
  54. package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
  55. package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
  56. package/dist/agent-src/rules/session-canary.md +8 -62
  57. package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
  58. package/dist/agent-src/rules/source-confidentiality.md +1 -0
  59. package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
  60. package/dist/agent-src/rules/tool-safety.md +1 -0
  61. package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
  62. package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
  63. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  64. package/dist/agent-src/scripts/deferral_carry.ts +339 -0
  65. package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
  66. package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
  67. package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
  68. package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
  69. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
  70. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
  71. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  72. package/dist/agent-src/skills/iconography/SKILL.md +1 -1
  73. package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
  74. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  75. package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
  76. package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
  77. package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
  78. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  79. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
  80. package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
  81. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  82. package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
  83. package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
  84. package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
  85. package/dist/agent-src/skills/ui-component-architect/SKILL.md +2 -2
  86. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  87. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  88. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  89. package/dist/cli/registry.js +1 -1
  90. package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
  91. package/dist/cli-delegate/check_update_banner.js +12 -1
  92. package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
  93. package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
  94. package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
  95. package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
  96. package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
  97. package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
  98. package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
  99. package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
  100. package/dist/cli-delegate/{chunk-IGD6ERX6.js → chunk-JQVYKIZA.js} +10 -0
  101. package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
  102. package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
  103. package/dist/cli-delegate/{chunk-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
  104. package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
  105. package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-NQ7WT43P.js} +1186 -244
  106. package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
  107. package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
  108. package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
  109. package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
  110. package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
  111. package/dist/cli-delegate/{chunk-7XGBX6ZH.js → chunk-RQNNW7IF.js} +1314 -560
  112. package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-S4UMZNES.js} +1 -1
  113. package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
  114. package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-TRI6DQZ6.js} +2781 -340
  115. package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
  116. package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
  117. package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
  118. package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
  119. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  120. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  121. package/dist/cli-delegate/cmd_conformance.js +1167 -234
  122. package/dist/cli-delegate/cmd_doctor.js +13 -6
  123. package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
  124. package/dist/cli-delegate/cmd_explain.js +5 -5
  125. package/dist/cli-delegate/cmd_export.js +11 -8
  126. package/dist/cli-delegate/cmd_fleet.js +3 -3
  127. package/dist/cli-delegate/cmd_handoff.js +10 -7
  128. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  129. package/dist/cli-delegate/cmd_memory_get.js +3 -1
  130. package/dist/cli-delegate/cmd_migrate.js +2 -2
  131. package/dist/cli-delegate/cmd_packs_active.js +3 -3
  132. package/dist/cli-delegate/cmd_preflight.js +6 -6
  133. package/dist/cli-delegate/cmd_prune.js +11 -8
  134. package/dist/cli-delegate/cmd_refresh.js +2 -1
  135. package/dist/cli-delegate/cmd_route_audit.js +8 -6
  136. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  137. package/dist/cli-delegate/cmd_session_recycle.js +4 -3
  138. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  139. package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
  140. package/dist/cli-delegate/cmd_settings_set.js +4 -4
  141. package/dist/cli-delegate/cmd_sync.js +11 -8
  142. package/dist/cli-delegate/cmd_uninstall.js +11 -8
  143. package/dist/cli-delegate/cmd_update.js +1 -1
  144. package/dist/cli-delegate/cmd_upgrade.js +3 -2
  145. package/dist/cli-delegate/cmd_validate.js +11 -8
  146. package/dist/cli-delegate/cmd_versions.js +1 -1
  147. package/dist/cli-delegate/deferral_carry.js +16 -0
  148. package/dist/cli-delegate/gate_execute.js +2 -2
  149. package/dist/cli-delegate/roadmap_gates.js +5 -5
  150. package/dist/cli-delegate/update_roadmap_progress.js +1 -1
  151. package/dist/discovery/deprecation-report.md +1 -1
  152. package/dist/discovery/discovery-manifest.json +127 -75
  153. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  154. package/dist/discovery/discovery-manifest.summary.md +3 -3
  155. package/dist/discovery/dormancy-report.md +1 -1
  156. package/dist/discovery/orphan-report.md +1 -1
  157. package/dist/discovery/packs.json +7 -5
  158. package/dist/discovery/trust-report.md +2 -2
  159. package/dist/discovery/workspaces.json +6 -4
  160. package/dist/hooks/dispatch.js +5357 -6656
  161. package/dist/hooks/dispatch.sha256 +1 -1
  162. package/dist/install/claudePathsPlan.js +47 -6
  163. package/dist/install/claudeRuleRewrite.js +7 -0
  164. package/dist/install/emit_host_rules_cli.js +39 -36
  165. package/dist/install/globalRuleScope.js +87 -0
  166. package/dist/install/host_rule_ownership.js +160 -0
  167. package/dist/install/install.mjs +2080 -1024
  168. package/dist/install/installThinLayer.js +261 -0
  169. package/dist/install/installedRuleLinks.js +176 -0
  170. package/dist/install/wizard-plan.js +24 -0
  171. package/dist/mcp/registry-manifest.json +3 -3
  172. package/dist/mcp/server.json +2 -2
  173. package/dist/mcp/server.mjs +31965 -27154
  174. package/dist/scripts/_lib/agent_settings.js +11 -0
  175. package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
  176. package/dist/scripts/_lib/installed_layer.js +378 -0
  177. package/dist/scripts/_lib/lean_projection_mode.js +218 -15
  178. package/dist/scripts/_lib/rule_consequence_class.js +45 -0
  179. package/dist/scripts/_lib/rule_injection.js +67 -10
  180. package/dist/scripts/_lib/rule_law_section.js +122 -0
  181. package/dist/scripts/_lib/thin_rules.js +458 -0
  182. package/dist/scripts/_lib/windsurf_render.js +60 -0
  183. package/dist/scripts/condense.js +14 -26
  184. package/dist/scripts/project_thin_rules.js +14 -294
  185. package/dist/server/schemas/settings.js +6 -0
  186. package/dist/shared/skillRanking.js +74 -13
  187. package/docs/contracts/settings-classes.md +7 -5
  188. package/package.json +1 -1
  189. package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  190. package/src/agent-src/scripts/deferral_carry.ts +339 -0
  191. package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
  192. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  193. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  194. package/src/config/agent-settings.template.yml +62 -22
  195. package/src/config/continuity-surface.json +7 -0
  196. package/src/config/evaluator-budgets.json +4 -4
  197. package/src/config/gate-coverage.yml +96 -3
  198. package/src/config/gate-violation-baselines.json +17 -9
  199. package/src/config/hook-bundle-budget.json +25 -0
  200. package/src/config/hook-token-budget.json +6 -1
  201. package/src/config/host-instruction-limits.json +33 -0
  202. package/src/config/routing-coverage-seed.json +24 -3
  203. package/src/config/rule-activation-census.json +7 -3
  204. package/src/config/rule-consequence-class.json +161 -0
  205. package/src/config/rule-law-ceilings.json +99 -0
  206. package/src/install/claudePathsPlan.ts +46 -4
  207. package/src/install/claudeRuleRewrite.ts +10 -1
  208. package/src/install/emit_host_rules_cli.ts +43 -34
  209. package/src/install/globalRuleScope.ts +109 -0
  210. package/src/install/host_rule_ownership.ts +170 -0
  211. package/src/install/installThinLayer.ts +312 -0
  212. package/src/install/installedRuleLinks.ts +220 -0
  213. package/src/install/wizard-plan.ts +24 -0
  214. package/src/scripts/_cli/cmd_doctor.ts +23 -71
  215. package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
  216. package/src/scripts/_dispatch.bash +16 -2
  217. package/src/scripts/_lib/agent_settings.ts +11 -0
  218. package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
  219. package/src/scripts/_lib/estate_offsets.ts +241 -0
  220. package/src/scripts/_lib/exemption_shape.ts +143 -0
  221. package/src/scripts/_lib/fnv.ts +23 -0
  222. package/src/scripts/_lib/foreign_scan.ts +106 -0
  223. package/src/scripts/_lib/gitignore_block.ts +314 -0
  224. package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
  225. package/src/scripts/_lib/graph_feeder_record.ts +214 -0
  226. package/src/scripts/_lib/hook_settings.ts +73 -0
  227. package/src/scripts/_lib/host_capability.ts +40 -19
  228. package/src/scripts/_lib/host_hook_merge.ts +165 -0
  229. package/src/scripts/_lib/installed_layer.ts +538 -0
  230. package/src/scripts/_lib/json_merge.ts +82 -0
  231. package/src/scripts/_lib/json_pointers.ts +93 -11
  232. package/src/scripts/_lib/lean_projection_mode.ts +275 -15
  233. package/src/scripts/_lib/machine_wake.ts +16 -3
  234. package/src/scripts/_lib/neighbour_census.ts +760 -0
  235. package/src/scripts/_lib/neighbour_scan.ts +122 -0
  236. package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
  237. package/src/scripts/_lib/prompt_shape.ts +46 -0
  238. package/src/scripts/_lib/release_migration_gate.ts +19 -3
  239. package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
  240. package/src/scripts/_lib/review_coverage.ts +134 -0
  241. package/src/scripts/_lib/rule_consequence_class.ts +71 -0
  242. package/src/scripts/_lib/rule_injection.ts +130 -10
  243. package/src/scripts/_lib/rule_law_section.ts +147 -0
  244. package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
  245. package/src/scripts/_lib/skill_origin.ts +254 -0
  246. package/src/scripts/_lib/structured_ask.ts +64 -21
  247. package/src/scripts/_lib/thin_rules.ts +540 -0
  248. package/src/scripts/_lib/touched_file_quality.ts +434 -0
  249. package/src/scripts/_lib/turn_end_refusals.ts +77 -2
  250. package/src/scripts/_lib/windsurf_render.ts +63 -0
  251. package/src/scripts/ai_council/cli_call_budget.ts +13 -5
  252. package/src/scripts/ai_council/clients.ts +26 -57
  253. package/src/scripts/ai_council/config.ts +1 -1
  254. package/src/scripts/ai_council/vendor_defaults.ts +45 -0
  255. package/src/scripts/audit_skill_overlap.ts +261 -0
  256. package/src/scripts/before_complete_hook.ts +243 -12
  257. package/src/scripts/bench_touched_file_quality.ts +238 -0
  258. package/src/scripts/check_enforcement_matrix.ts +377 -20
  259. package/src/scripts/check_estate_count.ts +130 -153
  260. package/src/scripts/check_finding_dispositions.ts +116 -4
  261. package/src/scripts/check_hook_bundle_composition.ts +370 -0
  262. package/src/scripts/check_kernel_edit_ratified.ts +49 -11
  263. package/src/scripts/check_memory.ts +7 -1
  264. package/src/scripts/check_release_highlights.ts +10 -0
  265. package/src/scripts/check_release_pr_shape.ts +38 -15
  266. package/src/scripts/check_standing_rule_delivery.ts +33 -13
  267. package/src/scripts/check_verify_expectation_delta.ts +521 -0
  268. package/src/scripts/code_graph/detect.ts +127 -7
  269. package/src/scripts/code_graph/foreign.ts +194 -0
  270. package/src/scripts/code_graph/query.ts +217 -4
  271. package/src/scripts/code_graph/types.ts +26 -2
  272. package/src/scripts/code_graph/validate.ts +3 -1
  273. package/src/scripts/code_graph/verbs.ts +103 -0
  274. package/src/scripts/compile_hook_manifest.ts +33 -1
  275. package/src/scripts/condense.ts +14 -27
  276. package/src/scripts/estate_exemption_shape.ts +202 -0
  277. package/src/scripts/generate_host_cost_table.ts +1 -1
  278. package/src/scripts/hook_manifest.json +1 -1
  279. package/src/scripts/hook_manifest.yaml +150 -9
  280. package/src/scripts/hooks/block_config_weakening.ts +67 -2
  281. package/src/scripts/hooks/block_plumbing_writes.ts +29 -1
  282. package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
  283. package/src/scripts/hooks/concern_failure_policy.ts +280 -0
  284. package/src/scripts/hooks/dispatch_hook.ts +52 -52
  285. package/src/scripts/hooks/exit_codes.ts +2 -1
  286. package/src/scripts/hooks/host_lowering.json +1 -1
  287. package/src/scripts/hooks/host_lowering.ts +19 -1
  288. package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
  289. package/src/scripts/hooks/payload_stub.ts +10 -1
  290. package/src/scripts/hooks/rule_inject_hook.ts +757 -63
  291. package/src/scripts/hooks/table_fingerprint.ts +21 -0
  292. package/src/scripts/hooks/telemetry_usage_hook.ts +64 -8
  293. package/src/scripts/hooks/turn_end_gate_hook.ts +84 -0
  294. package/src/scripts/hooks_status.ts +112 -0
  295. package/src/scripts/injection_scan_hook.ts +7 -0
  296. package/src/scripts/install.ts +72 -185
  297. package/src/scripts/installed_layer_report.ts +103 -0
  298. package/src/scripts/language_mirror_hook.ts +15 -6
  299. package/src/scripts/learning_sidecar.ts +119 -8
  300. package/src/scripts/lint_hook_manifest.ts +53 -0
  301. package/src/scripts/lint_major_migration_sections.ts +156 -26
  302. package/src/scripts/lint_pack_boundaries.ts +63 -5
  303. package/src/scripts/lint_rule_law_section.ts +517 -0
  304. package/src/scripts/lint_workflow_security.ts +161 -5
  305. package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
  306. package/src/scripts/mcp_server/graph_tools.ts +72 -3
  307. package/src/scripts/measure_routing_signal.ts +54 -16
  308. package/src/scripts/measure_skill_ranker_baseline.ts +216 -8
  309. package/src/scripts/memory_learn_hook.ts +91 -6
  310. package/src/scripts/model_rule_injection.ts +52 -5
  311. package/src/scripts/project_thin_rules.ts +34 -327
  312. package/src/scripts/report_evidence_temperature.ts +657 -0
  313. package/src/scripts/report_installed_rule_links.ts +157 -0
  314. package/src/scripts/report_label_agreement.ts +233 -0
  315. package/src/scripts/report_obligation_mechanism.ts +230 -0
  316. package/src/scripts/report_single_token_triggers.ts +277 -0
  317. package/src/scripts/report_skill_ranker_confusion.ts +442 -0
  318. package/src/scripts/report_standing_payload_by_host.ts +188 -15
  319. package/src/scripts/report_verification_record_coverage.ts +306 -0
  320. package/src/scripts/rule_activation_census.ts +5 -2
  321. package/src/scripts/rule_trigger_eval.ts +9 -9
  322. package/src/scripts/schemas/review-findings.schema.json +3 -2
  323. package/src/scripts/schemas/rule.schema.json +5 -0
  324. package/src/scripts/self_review_gate.ts +62 -7
  325. package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
  326. package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
  327. package/src/scripts/sync_gitignore.ts +29 -235
  328. package/src/scripts/trigger_eval_grandfather.json +0 -5
  329. package/src/server/schemas/settings.ts +10 -0
  330. package/src/shared/skillRanking.ts +117 -11
  331. package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
  332. package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
@@ -35,6 +35,28 @@
35
35
  # eight new concerns spread across eight events violate it zero times.
36
36
  #
37
37
  # `decision: rejected` is a first-class row. A recorded refusal is the point.
38
+ #
39
+ # `effect:` — what a concern DELIVERS to a turn, from a closed set. Read by the
40
+ # neighbour census (`agent-config doctor neighbours`), which has to say what
41
+ # sharing an event with another package's hook entry actually risks.
42
+ #
43
+ # The axis is OBSERVABLE DELIVERY, never primary purpose. An independent review
44
+ # found the distinction load-bearing: a shadow concern whose purpose is
45
+ # verification but which emits nothing and never blocks delivers a RECORD, so it
46
+ # is `telemetry`. Classify by what a turn can tell happened.
47
+ #
48
+ # permission can REFUSE the thing it fires on. Equivalent to
49
+ # `severity: blocking`, and `lint_hook_manifest` enforces the
50
+ # equivalence in both directions. "Can refuse" is the whole
51
+ # definition — it is not "decides authorization", so a gate that
52
+ # refuses on a quality threshold is `permission` too.
53
+ # context puts text in front of the model
54
+ # verification checks a claim or a shape and REPORTS what it found
55
+ # telemetry records state, a ledger, a counter
56
+ # memory reads or writes the memory layer
57
+ # notification tells the human something and changes nothing else
58
+ # formatting reshapes a command or a generated file
59
+ #
38
60
  schema_version: 1
39
61
 
40
62
  concerns:
@@ -43,6 +65,7 @@ concerns:
43
65
  args: [hook-dispatch]
44
66
  fail_closed: false
45
67
  severity: advisory
68
+ effect: telemetry
46
69
  needs_payload_bodies: [result]
47
70
  # Restore persisted memory session index (road-to-memory-retrieval-economy
48
71
  # P5). session_start only: the dispatcher forwards the returned `context`
@@ -56,6 +79,7 @@ concerns:
56
79
  args: []
57
80
  fail_closed: false
58
81
  severity: advisory
82
+ effect: memory
59
83
  # One-shot handoff injection (road-to-agent-handoff-resume Phase 3).
60
84
  # session_start only: if `agent-config handoff` wrote
61
85
  # agents/runtime/state/handoff-context.md, inject it as spotlighted DATA
@@ -67,6 +91,7 @@ concerns:
67
91
  args: []
68
92
  fail_closed: false
69
93
  severity: advisory
94
+ effect: context
70
95
  # Debounced since road-to-per-turn-hook-economy step 3.1 (D-3). It used to
71
96
  # re-shell the dashboard regenerator through tsx on EVERY roadmap write — a
72
97
  # cold tsx start per write, in exactly the roadmap-heavy workflow this repo
@@ -90,17 +115,20 @@ concerns:
90
115
  args: []
91
116
  fail_closed: false
92
117
  severity: advisory
118
+ effect: formatting
93
119
  needs_payload_bodies: [input]
94
120
  onboarding-gate:
95
121
  script: src/scripts/onboarding_gate_hook.ts
96
122
  args: []
97
123
  fail_closed: false
98
124
  severity: advisory
125
+ effect: notification
99
126
  context-hygiene:
100
127
  script: src/scripts/context_hygiene_hook.ts
101
128
  args: []
102
129
  fail_closed: false
103
130
  severity: advisory
131
+ effect: telemetry
104
132
  # Phase 5 — Tier-1 hook for the verify-before-complete rule. Records
105
133
  # observable evidence of verification commands (tests, quality tools,
106
134
  # builds) into agents/state/verify-before-complete/<digest>.json — ONE FILE
@@ -120,6 +148,7 @@ concerns:
120
148
  args: []
121
149
  fail_closed: false
122
150
  severity: advisory
151
+ effect: verification
123
152
  needs_payload_bodies: [input, result]
124
153
  # Phase 5 — Tier-1 hook for the minimal-safe-diff rule. Counts unique
125
154
  # files touched per turn into agents/runtime/state/minimal-safe-diff.json and
@@ -139,12 +168,14 @@ concerns:
139
168
  args: []
140
169
  fail_closed: false
141
170
  severity: advisory
171
+ effect: verification
142
172
  needs_payload_bodies: [input]
143
173
  minimal-safe-diff:
144
174
  script: src/scripts/minimal_safe_diff_hook.ts
145
175
  args: []
146
176
  fail_closed: false
147
177
  severity: advisory
178
+ effect: verification
148
179
  needs_payload_bodies: [input]
149
180
  # road-to-security-pillar.md P3.2 — PostToolUse prompt-injection scanner.
150
181
  # Warn-in-context (exit 2), never blocks. Default-OFF: no-ops unless
@@ -170,6 +201,7 @@ concerns:
170
201
  args: []
171
202
  fail_closed: false
172
203
  severity: advisory
204
+ effect: verification
173
205
  needs_payload_bodies: [input, result]
174
206
  # road-to-security-hardening Phase 3 — PreToolUse guard turning the
175
207
  # git-history-discipline Iron Law into a deterministic gate. Blocks
@@ -183,6 +215,7 @@ concerns:
183
215
  args: []
184
216
  fail_closed: true
185
217
  severity: blocking
218
+ effect: permission
186
219
  needs_payload_bodies: [input]
187
220
  # road-to-ai-employee-borrowings Phase 1 — kernel immutability Layer 1.
188
221
  # PreToolUse guard: DENIES Write/Edit/NotebookEdit (and cross-platform
@@ -200,6 +233,7 @@ concerns:
200
233
  args: []
201
234
  fail_closed: true
202
235
  severity: blocking
236
+ effect: permission
203
237
  needs_payload_bodies: [input]
204
238
  # road-to-a-kernel-that-guards-its-plumbing 1.2 — the build-output half of
205
239
  # "one mechanism per file class". PreToolUse guard: DENIES Write/Edit/
@@ -221,6 +255,7 @@ concerns:
221
255
  args: []
222
256
  fail_closed: true
223
257
  severity: blocking
258
+ effect: permission
224
259
  needs_payload_bodies: [input]
225
260
  # road-to-asked-not-parked Phase 5.1 — one question per structured-ask call.
226
261
  # PreToolUse guard: DENIES a call to a host's native question picker whose
@@ -250,6 +285,7 @@ concerns:
250
285
  args: []
251
286
  fail_closed: false
252
287
  severity: blocking
288
+ effect: permission
253
289
  tools: [AskUserQuestion, AskQuestion, UserQuestion, ask_user_question, ask_question, user_question]
254
290
  needs_payload_bodies: [input]
255
291
  # road-to-source-silence Phase 4.2 — the write-time half of source
@@ -272,6 +308,7 @@ concerns:
272
308
  args: []
273
309
  fail_closed: false
274
310
  severity: blocking
311
+ effect: permission
275
312
  needs_payload_bodies: [input]
276
313
  # road-to-renewal-leverage Phase 2 — "fix the code, not the config".
277
314
  # PreToolUse guard over the recorded allowlist-growth antipattern
@@ -288,6 +325,7 @@ concerns:
288
325
  args: []
289
326
  fail_closed: false
290
327
  severity: blocking
328
+ effect: permission
291
329
  needs_payload_bodies: [input]
292
330
  # token-saving Phase 3 — PreToolUse RTK-wrap nudge. DETERMINISTIC: keys off a
293
331
  # live `which rtk` probe (not the self-reported flag). When rtk is installed
@@ -302,6 +340,7 @@ concerns:
302
340
  args: []
303
341
  fail_closed: false
304
342
  severity: advisory
343
+ effect: formatting
305
344
  needs_payload_bodies: [input]
306
345
  # road-to-anti-slop-detector Phase 3 — OPTIONAL PreToolUse anti-slop nudge.
307
346
  # Runs the lint_design_slop registry against about-to-be-written UI content
@@ -315,6 +354,7 @@ concerns:
315
354
  args: []
316
355
  fail_closed: false
317
356
  severity: advisory
357
+ effect: verification
318
358
  needs_payload_bodies: [input]
319
359
  # road-to-frontend-power E1.1 / E1.2 / E1.3 — the DELIVERY carrier the 0.0 %
320
360
  # UI-write measurement never had. One script on two slots:
@@ -341,6 +381,7 @@ concerns:
341
381
  args: []
342
382
  fail_closed: false
343
383
  severity: advisory
384
+ effect: notification
344
385
  needs_payload_bodies: [input]
345
386
  # `advisory`, and the code MATCHES the declaration rather than the prose.
346
387
  #
@@ -366,6 +407,7 @@ concerns:
366
407
  args: ['--slot', 'stop']
367
408
  fail_closed: false
368
409
  severity: advisory
410
+ effect: notification
369
411
  # road-to-frontend-skill-application Phase 4 — OPTIONAL PreToolUse UI-route
370
412
  # nudge. On a Write/Edit to a UI surface with no design consultation latched
371
413
  # this session, WARNS (exit 2) naming the route; a read or search touching a
@@ -381,6 +423,7 @@ concerns:
381
423
  args: []
382
424
  fail_closed: false
383
425
  severity: advisory
426
+ effect: notification
384
427
  needs_payload_bodies: [input]
385
428
  # road-to-a-graph-that-is-shipped 1.2 — PreToolUse code-graph CONTEXT line,
386
429
  # replacing the ADR-124 Phase 4 nudge concern, whose hook was deleted in the
@@ -437,6 +480,7 @@ concerns:
437
480
  args: []
438
481
  fail_closed: false
439
482
  severity: advisory
483
+ effect: telemetry
440
484
  # road-to-autonomous-auto-mode — the carrier for `token-efficiency` § One
441
485
  # command per Bash call. That rule is `type: auto`, so its triggers match the
442
486
  # PROMPT, and no prompt announces that the next tool call will be chained;
@@ -483,20 +527,31 @@ concerns:
483
527
  args: []
484
528
  fail_closed: false
485
529
  severity: advisory
530
+ effect: notification
486
531
  needs_payload_bodies: [input]
487
532
  code-graph-context:
488
533
  script: src/scripts/hooks/code_graph_context_hook.ts
489
534
  args: []
490
535
  fail_closed: false
491
536
  severity: advisory
537
+ effect: context
492
538
  # Per-concern tool filter — the dispatcher skips this concern in-process on
493
539
  # any other tool. See `_concern_matches_tool` in hooks/dispatch_hook.ts for
494
540
  # the semantics (absent = every event, "*" = the same, non-tool events are
495
541
  # never filtered) and for why the filter is NOT a host `matcher`.
496
542
  #
497
543
  # This set is not a guess: the hook's entire branch surface is
498
- # `name === 'Grep' || name === 'Glob'` and `name === 'Read'`
499
- # (code_graph_context_hook.ts), and a test pins the manifest list against it.
544
+ # `name === 'Grep' || name === 'Glob'`, `name === 'Read'` and
545
+ # `name === 'Bash'` (code_graph_context_hook.ts), and a test pins the
546
+ # manifest list against it.
547
+ #
548
+ # `Bash` is the ONE host-named tool declared here, and the caveat the
549
+ # blocking-guard paragraph below raises applies to it: on a host that calls
550
+ # the shell `launch-process` or `BashTool` this concern will not see it. That
551
+ # is a missed advisory line, not a disabled guard — the trade the paragraph
552
+ # below refuses for a security hook is the right one for a context line, and
553
+ # the alternative (dropping the filter) would dispatch this concern on every
554
+ # tool call in the session.
500
555
  #
501
556
  # Deliberately NOT declared on the four blocking PreToolUse guards
502
557
  # (block-no-verify, block-kernel-rule-writes, block-plumbing-writes,
@@ -508,7 +563,7 @@ concerns:
508
563
  # re-read `tool_name` and return early; paying one dispatch to keep a guard
509
564
  # correct is the right trade, and the cheap filter is reserved for advisory
510
565
  # concerns whose set is provable from their own source.
511
- tools: [Grep, Glob, Read]
566
+ tools: [Grep, Glob, Read, Bash]
512
567
  needs_payload_bodies: [input]
513
568
  # road-to-reachable-code-memory Phase 4 — session_end learning-sidecar
514
569
  # aggregation. Joins the EXISTING session_end concern set (no new platform
@@ -524,6 +579,7 @@ concerns:
524
579
  args: []
525
580
  fail_closed: false
526
581
  severity: advisory
582
+ effect: memory
527
583
  # Phase 2 of road-to-hooks-actually-fire-in-consumers — session_start
528
584
  # gate that surfaces the marketplace-install-but-unscaffolded shape.
529
585
  # Writes .augment/.first-run-action-needed.md + one stderr line so
@@ -534,6 +590,7 @@ concerns:
534
590
  args: []
535
591
  fail_closed: false
536
592
  severity: advisory
593
+ effect: notification
537
594
  # session-profile-activation Phase 1 — emits a one-line staleness notice
538
595
  # when a new session starts with a `runtime.active_packs` overlay carried
539
596
  # over from a previous session. Never resets (option a, explicit
@@ -543,6 +600,7 @@ concerns:
543
600
  args: []
544
601
  fail_closed: false
545
602
  severity: advisory
603
+ effect: notification
546
604
  # Defense-in-depth twin of the update-command wrapper refresh
547
605
  # (cmd_upgrade / cmd_refresh). On session_start, re-stamps a stale
548
606
  # project-local ./agent-config wrapper from the canonical template so
@@ -553,6 +611,7 @@ concerns:
553
611
  args: []
554
612
  fail_closed: false
555
613
  severity: advisory
614
+ effect: notification
556
615
  # road-to-install-path-convergence Phase 4 — duplicate-surface probe.
557
616
  # Reads src/config/surface-matrix.yml, existence-checks declared duplicate
558
617
  # classes, nudges ONCE per day (state: agents/runtime/state/
@@ -563,6 +622,7 @@ concerns:
563
622
  args: []
564
623
  fail_closed: false
565
624
  severity: advisory
625
+ effect: telemetry
566
626
  # road-to-team-mode Phase 4 — managed Review-Gate circuit breaker.
567
627
  # Runs AFTER the plugin's own Stop gate: reads the persisted gate job
568
628
  # record, counts consecutive BLOCK verdicts per session, injects the
@@ -575,6 +635,7 @@ concerns:
575
635
  args: []
576
636
  fail_closed: false
577
637
  severity: advisory
638
+ effect: verification
578
639
  # Reply-shape backstop for the direct-answers rule (reply-close): a PR
579
640
  # created THIS turn must end the reply as the literal last raw URL. This
580
641
  # PostToolUse hook fires right after a PR *create* (gh pr create, or a
@@ -587,6 +648,7 @@ concerns:
587
648
  args: []
588
649
  fail_closed: false
589
650
  severity: advisory
651
+ effect: notification
590
652
  needs_payload_bodies: [input, result]
591
653
  # Push-settle reminder — the second half of "a push closes its own loop".
592
654
  # The pre-push hook answers "is this push safe to make"; nothing answered "is
@@ -602,6 +664,7 @@ concerns:
602
664
  args: []
603
665
  fail_closed: false
604
666
  severity: advisory
667
+ effect: verification
605
668
  needs_payload_bodies: [input, result]
606
669
  # Language-mirror pin — carries the ONE fact the transcript cannot express:
607
670
  # which language the human actually typed. 47 skill/slash-command bodies were
@@ -615,6 +678,7 @@ concerns:
615
678
  args: []
616
679
  fail_closed: false
617
680
  severity: advisory
681
+ effect: context
618
682
  # Git-authorization ledger — records which git ops the user's OWN WORDS
619
683
  # authorize this turn. Writes state only; never blocks.
620
684
  git-authorization:
@@ -622,6 +686,7 @@ concerns:
622
686
  args: []
623
687
  fail_closed: false
624
688
  severity: advisory
689
+ effect: verification
625
690
  # The blocking half was REMOVED by owner decision on 2026-09-04 (ADR-254).
626
691
  # It refused authorizations the owner had in fact given: a guardrail sentence
627
692
  # inside an authorization ("never merge empty PRs") read as a withdrawal and
@@ -653,6 +718,7 @@ concerns:
653
718
  args: []
654
719
  fail_closed: false
655
720
  severity: blocking
721
+ effect: permission
656
722
  needs_payload_bodies: [input]
657
723
  # Canary injection — deterministic carrier for the
658
724
  # session-canary rule (greet-by-name at task start + reply-close markers
@@ -675,6 +741,7 @@ concerns:
675
741
  args: []
676
742
  fail_closed: false
677
743
  severity: advisory
744
+ effect: context
678
745
  # Council-availability fact. Carries whether a council is configured and from
679
746
  # where, because the always-loaded layer refers to the council conditionally
680
747
  # and never says how to check. Measured 2026-08-08: an agent announced "kein
@@ -687,6 +754,7 @@ concerns:
687
754
  args: []
688
755
  fail_closed: false
689
756
  severity: advisory
757
+ effect: verification
690
758
  # Org-telemetry disclosure (road-to-org-telemetry Phase 3.2; ADR-233 § D5).
691
759
  # `org-pack` is the only consent class in this suite granted by somebody
692
760
  # OTHER than the person it binds — an org administrator, once, for every
@@ -700,6 +768,7 @@ concerns:
700
768
  args: []
701
769
  fail_closed: false
702
770
  severity: advisory
771
+ effect: notification
703
772
  # road-to-org-telemetry Phase 2 (step 2.1) — session-end Class-A flush.
704
773
  # Checks whether the outbound spool has bytes and, if so, spawns a DETACHED
705
774
  # sender and returns. It makes no network call in the session's own process,
@@ -728,6 +797,7 @@ concerns:
728
797
  args: []
729
798
  fail_closed: false
730
799
  severity: advisory
800
+ effect: telemetry
731
801
  # Self-repair intake (road-to-self-repair Phase 1). Two slots, one queue:
732
802
  # user_prompt_submit opens a record when the user states the agent worked
733
803
  # wrongly and injects the open-queue line; stop runs the deterministic
@@ -739,6 +809,7 @@ concerns:
739
809
  args: []
740
810
  fail_closed: false
741
811
  severity: advisory
812
+ effect: telemetry
742
813
  # Shared per-session register (road-to-parallel-session-coordination) — writes
743
814
  # this session into <git-common-dir>/agent-sessions/<session_id>.json so every
744
815
  # other worktree of the repo can see it, and on session_start injects the live
@@ -772,6 +843,7 @@ concerns:
772
843
  args: []
773
844
  fail_closed: false
774
845
  severity: advisory
846
+ effect: telemetry
775
847
  # road-to-orchestrator-discipline-carriers Phase 3 (F6) — deterministic
776
848
  # PostToolUse orchestration-telemetry capture. Fires only on an Agent/Task
777
849
  # tool-use completion (the two observed subagent-dispatch tool names) and
@@ -784,6 +856,7 @@ concerns:
784
856
  args: []
785
857
  fail_closed: false
786
858
  severity: advisory
859
+ effect: telemetry
787
860
  tools: [Agent, Task]
788
861
  needs_payload_bodies: [input, result]
789
862
  # road-to-org-telemetry Phase 1 (step 1.2) — Class-A usage capture. Fires
@@ -827,6 +900,7 @@ concerns:
827
900
  args: []
828
901
  fail_closed: false
829
902
  severity: advisory
903
+ effect: telemetry
830
904
  # Provable from the hook's own source: the only branch surface is
831
905
  # `extractToolName(payload) !== SKILL_TOOL_NAME`.
832
906
  tools: [Skill]
@@ -873,6 +947,7 @@ concerns:
873
947
  args: []
874
948
  fail_closed: false
875
949
  severity: advisory
950
+ effect: notification
876
951
  nudge_rank: 1
877
952
  # road-to-inbox-harvest-2026-08-d-runtime-skill-routing Phase 2 — binds the
878
953
  # deterministic task→skill ranker, which had shipped with ZERO production
@@ -896,6 +971,7 @@ concerns:
896
971
  args: []
897
972
  fail_closed: false
898
973
  severity: advisory
974
+ effect: context
899
975
  nudge_rank: 2
900
976
  # road-to-trigger-delivered-rule-bodies Phase 1 — the DELIVERY twin of
901
977
  # `skill-route` above: same two slots, opposite payload policy. `skill-route`
@@ -934,6 +1010,7 @@ concerns:
934
1010
  args: []
935
1011
  fail_closed: false
936
1012
  severity: advisory
1013
+ effect: context
937
1014
  needs_payload_bodies: [input]
938
1015
  # road-to-orchestrator-discipline-carriers Phase 5 (F4-lite) — end-review
939
1016
  # nudge. Fires ONLY when the session mutated tracked+untracked, non-doc
@@ -961,11 +1038,13 @@ concerns:
961
1038
  args: []
962
1039
  fail_closed: false
963
1040
  severity: advisory
1041
+ effect: verification
964
1042
  end-review-nudge:
965
1043
  script: src/scripts/hooks/end_review_nudge_hook.ts
966
1044
  args: []
967
1045
  fail_closed: false
968
1046
  severity: advisory
1047
+ effect: notification
969
1048
  # road-to-stop-gate-honesty step 3.1 — skipped on a refusal RETRY.
970
1049
  # ARGUMENT, per concern as that step requires: the F2 fire gate is a
971
1050
  # once-per-session marker, and this concern's own header records that a
@@ -1006,6 +1085,7 @@ concerns:
1006
1085
  args: []
1007
1086
  fail_closed: false
1008
1087
  severity: advisory
1088
+ effect: telemetry
1009
1089
  # road-to-conformance-round5 Phase 3 — the FIRST concern that can refuse a
1010
1090
  # turn-END. Round 5 measured the reason: both blocking carriers reached zero
1011
1091
  # violations, neither advisory carrier did, and 19 language violations
@@ -1029,16 +1109,34 @@ concerns:
1029
1109
  # detector's own trigger conditions, which is the same shape `delegation-nudge`
1030
1110
  # uses — no signal, no output. `hooks.turn_end_gate.*` is in REMOVED_KEYS.
1031
1111
  #
1032
- # fail_closed: FALSE, deliberately and unlike every other blocking concern
1033
- # here: a crash in a turn-end gate must let the turn END. Failing closed on
1034
- # this slot does not degrade the session, it wedges it. Re-entrancy is two
1035
- # independent layers (`stop_hook_active`; a marker keyed on the last USER
1036
- # message, never the reply) — see the hook's file header.
1112
+ # fail_closed: FALSE — and read what that flag still DOES before changing it.
1113
+ # Since the dispatcher resolves rc >= 3 by SEVERITY it no longer decides the
1114
+ # crash branch at all; it decides the stdin-read-failure deny
1115
+ # (`stdin_failure_policy._is_fail_closed_blocking`), and nothing else. An
1116
+ # independent review named the old wording a reviewer trap: an operator
1117
+ # reading "fail_closed: false — a crash must let the turn END" would believe
1118
+ # they were configuring crash behaviour, and flipping it would change the
1119
+ # read-failure deny instead. The REASON it was set false is still true —
1120
+ # failing closed on a turn-end gate does not degrade the session, it wedges
1121
+ # it — but the flag is no longer what delivers it.
1122
+ #
1123
+ # What answers it now lives in the dispatcher, which is the only layer that
1124
+ # can: a blocking `stop` concern spends its refusal ONCE, and on the retry the
1125
+ # host marks (`stop_hook_active`) a crash falls back to fail-open and the turn
1126
+ # ends. The hook's own two re-entrancy layers cannot do this job — both run
1127
+ # INSIDE `main()`, so a crash never reaches them.
1128
+ #
1129
+ # The trade is deliberate: one refused Stop buys a guard that no longer
1130
+ # permits every turn end precisely when it is broken, and the second Stop
1131
+ # releases. Re-entrancy inside the hook stays what it was (`stop_hook_active`;
1132
+ # a marker keyed on the last USER message, never the reply) — see the hook's
1133
+ # file header.
1037
1134
  turn-end-gate:
1038
1135
  script: src/scripts/hooks/turn_end_gate_hook.ts
1039
1136
  args: []
1040
1137
  fail_closed: false
1041
1138
  severity: blocking
1139
+ effect: permission
1042
1140
  # Comment-discipline advisory — the write-time half of
1043
1141
  # `lint_code_comments`. Scans the TEXT JUST WRITTEN (Write ->
1044
1142
  # tool_input.content, Edit -> tool_input.new_string), never the file on
@@ -1059,6 +1157,7 @@ concerns:
1059
1157
  args: []
1060
1158
  fail_closed: false
1061
1159
  severity: advisory
1160
+ effect: verification
1062
1161
  tools: [Write, Edit]
1063
1162
  needs_payload_bodies: [input]
1064
1163
  # road-to-token-economy-cache Phase 5.1/5.2 — edit-shape advisory. Fires
@@ -1076,6 +1175,7 @@ concerns:
1076
1175
  args: []
1077
1176
  fail_closed: false
1078
1177
  severity: advisory
1178
+ effect: verification
1079
1179
  # Provable from the hook's own source: the only branch surface is
1080
1180
  # `toolName !== 'Write'` — same cheap-filter discipline as
1081
1181
  # `orchestration-record`'s [Agent, Task].
@@ -1097,6 +1197,7 @@ concerns:
1097
1197
  args: []
1098
1198
  fail_closed: false
1099
1199
  severity: advisory
1200
+ effect: verification
1100
1201
  # Provable from the hook's own source: READ_TOOLS ∪ WRITE_TOOLS.
1101
1202
  tools: [Read, Edit, Write]
1102
1203
  needs_payload_bodies: [input]
@@ -1131,6 +1232,7 @@ concerns:
1131
1232
  args: []
1132
1233
  fail_closed: false
1133
1234
  severity: advisory
1235
+ effect: memory
1134
1236
  # Provable from the hook's own source: the union of the `tools` sets on
1135
1237
  # RECALL_RULES — COMMAND_TOOLS (rules 1 and 4) ∪ EDIT_TOOLS (rules 2, 3).
1136
1238
  tools: [Bash, Edit, Write, MultiEdit, str-replace-editor, save-file, launch-process]
@@ -1154,6 +1256,7 @@ concerns:
1154
1256
  args: []
1155
1257
  fail_closed: false
1156
1258
  severity: advisory
1259
+ effect: notification
1157
1260
  # road-to-long-horizon-execution Phase 1 (H-1) — the stop slot's first
1158
1261
  # WORK-REMAINING concern. No-op unless this session claimed a roadmap
1159
1262
  # (`sessions:claim`) whose frontmatter says `execution.mode: autonomous`;
@@ -1166,6 +1269,12 @@ concerns:
1166
1269
  # always. Events: agents/runtime/state/run-continuation.jsonl. Kill switch:
1167
1270
  # AGENT_CONFIG_NO_RUN_CONTINUATION=1. fail_closed: false — the only block
1168
1271
  # it ever emits is the one carrying its own continuation text.
1272
+ # fail_closed: false — and as for `turn-end-gate` above, the dispatcher now
1273
+ # resolves rc >= 3 by SEVERITY rather than by this flag, so a crash here
1274
+ # refuses the first Stop and releases on the retry. What the flag still
1275
+ # decides is the stdin-read-failure deny, not crash behaviour; changing it
1276
+ # changes that and nothing else. The only block this concern DECIDES to emit
1277
+ # is still the one carrying its own continuation text.
1169
1278
  run-continuation:
1170
1279
  script: src/scripts/hooks/run_continuation_hook.ts
1171
1280
  args: []
@@ -1179,6 +1288,7 @@ concerns:
1179
1288
  # mechanism was inert on the one verified host. `turn-end-gate` above sits
1180
1289
  # on the same slot and declares `blocking` for exactly this reason.
1181
1290
  severity: blocking
1291
+ effect: permission
1182
1292
  # road-to-user-out-of-the-loop Phase 0 Step 1 — the interruption ledger.
1183
1293
  # Every Stop, classifies whether the turn that just ended put a synchronous
1184
1294
  # contact to the user and appends one `{run_id, turn, kind, class, roadmap}`
@@ -1204,6 +1314,7 @@ concerns:
1204
1314
  args: []
1205
1315
  fail_closed: false
1206
1316
  severity: advisory
1317
+ effect: telemetry
1207
1318
  # road-to-stop-gate-honesty step 3.1 — skipped on a refusal RETRY, and this
1208
1319
  # is the flag with the real saving.
1209
1320
  # ARGUMENT, per concern: `alreadyRecorded(ledgerPath, run_id, turn)` dedupes
@@ -1237,6 +1348,7 @@ concerns:
1237
1348
  args: []
1238
1349
  fail_closed: false
1239
1350
  severity: advisory
1351
+ effect: telemetry
1240
1352
  # road-to-inbox-harvest-2026-08-d-context-ledger Phase 1 Step 1.1 — the
1241
1353
  # tool-result byte counter. `hook-token-budget.json` registers the gap it
1242
1354
  # closes in its own words: bytes-into-context from tool RESULTS are
@@ -1261,6 +1373,7 @@ concerns:
1261
1373
  args: []
1262
1374
  fail_closed: false
1263
1375
  severity: advisory
1376
+ effect: telemetry
1264
1377
  # road-to-subagent-lifecycle-integrity Phase 3 Step 1 — spawn guard, SHADOW
1265
1378
  # ONLY, per docs/contracts/concern-activation-policy.md. On every Agent/Task
1266
1379
  # call it appends one `spawn_guard_shadow` line recording what a guard WOULD
@@ -1281,6 +1394,7 @@ concerns:
1281
1394
  args: []
1282
1395
  fail_closed: false
1283
1396
  severity: advisory
1397
+ effect: telemetry
1284
1398
  tools: [Agent, Task]
1285
1399
  # road-to-source-first-frontend Phase 3 Steps 1-2 — source-first gate, SHADOW
1286
1400
  # ONLY, per docs/contracts/concern-activation-policy.md. On every
@@ -1305,11 +1419,15 @@ concerns:
1305
1419
  # to advisory is pre-registered in the hook header.
1306
1420
  #
1307
1421
  # Never blocks, never warns: exit 0 on every path. fail_closed: false.
1422
+ # `effect: telemetry`, not `verification`, and the script's own header is why:
1423
+ # "it emits nothing to the model and it never blocks". A shadow concern
1424
+ # records what a gate WOULD have said; recording is what it delivers.
1308
1425
  source-first-gate:
1309
1426
  script: src/scripts/hooks/source_first_gate_hook.ts
1310
1427
  args: []
1311
1428
  fail_closed: false
1312
1429
  severity: advisory
1430
+ effect: telemetry
1313
1431
  needs_payload_bodies: [input]
1314
1432
  # road-to-runtime-event-journal Phase 1 step 1.4 — the journal's hook binding
1315
1433
  # (AI council 2026-08-28, decision 3). `_lib/runtime_journal.ts` shipped bound
@@ -1353,6 +1471,7 @@ concerns:
1353
1471
  args: []
1354
1472
  fail_closed: false
1355
1473
  severity: advisory
1474
+ effect: telemetry
1356
1475
 
1357
1476
  # Role axis (road-to-token-economy-dispatch Phase 2). The dispatcher reads
1358
1477
  # AGENT_CONFIG_SESSION_ROLE (resolved via _lib/session_role.ts — set ONLY by
@@ -1429,7 +1548,17 @@ platforms:
1429
1548
 
1430
1549
  claude:
1431
1550
  ask: native
1432
- session_start: [chat-history, hot-context, handoff-context, session-canary, council-availability, telemetry-disclosure, first-run-gate, onboarding-gate, verify-before-complete, minimal-safe-diff, profile-staleness, wrapper-freshness, surface-probe, session-register, review-baseline, journal-record]
1551
+ session_start: [chat-history, hot-context, handoff-context, session-canary, council-availability, telemetry-disclosure, first-run-gate, onboarding-gate, verify-before-complete, minimal-safe-diff, profile-staleness, wrapper-freshness, surface-probe, session-register, review-baseline, journal-record, rule-inject]
1552
+ # `rule-inject` is bound here for ONE source: `compact`
1553
+ # (road-to-a-rule-carrier-that-works-outside-the-repo step 1.6). The concern
1554
+ # returns before reading anything on `startup`, `resume`, `clear` and
1555
+ # `fork`, so this binding costs a function call per session on every other
1556
+ # source. It exists because `pre_compact` can only re-ARM delivery — it
1557
+ # cannot deliver, since the host is about to discard the context it would
1558
+ # emit into. The law sections of the pre-compaction seen-set are sent here
1559
+ # instead, under the same 8,000-character budget, which is the half the
1560
+ # concern's own header used to end at: a rule whose trigger does not recur
1561
+ # was not restored at all.
1433
1562
  session_end: [chat-history, memory-learn, session-register, roadmap-progress, telemetry-flush, journal-record]
1434
1563
  stop: [chat-history, verify-before-complete, team-review-gate, end-review-nudge, obligation-settle, turn-end-gate, self-repair, session-register, session-eol, interruption-ledger, roadmap-progress, design-pass-stop, suggestion-capture, journal-record, run-continuation]
1435
1564
  user_prompt_submit: [chat-history, verify-before-complete, minimal-safe-diff, language-mirror, delegation-nudge, skill-route, git-authorization, session-canary, self-repair, session-register, rule-inject, suggestion-capture, journal-record]
@@ -1608,6 +1737,18 @@ native_event_aliases:
1608
1737
  Stop: stop
1609
1738
  UserPromptSubmit: user_prompt_submit
1610
1739
  PostToolUse: post_tool_use
1740
+ # A FAILING tool call does not fire `PostToolUse` at all — it fires
1741
+ # `PostToolUseFailure`, which until now was bound to nothing, so the
1742
+ # verification recorder never saw a red command and `verification_runs`
1743
+ # could only ever hold passes. Observed on 2.1.286, three one-shot sessions,
1744
+ # exactly one of the two events per call — not inferred from the event list.
1745
+ # Lowered onto the SAME canonical slot rather than given a canonical event
1746
+ # of its own: one slot, one concern list, no change to the event vocabulary.
1747
+ # Deliberately claude-only. Cowork is Claude Code underneath and the rows
1748
+ # below duplicate this vocabulary, but this pair was measured on claude and
1749
+ # on no other host, and an alias row asserting a host behaviour nobody
1750
+ # observed is the defect class this suite keeps finding in its own tables.
1751
+ PostToolUseFailure: post_tool_use
1611
1752
  PreToolUse: pre_tool_use
1612
1753
  PreCompact: pre_compact
1613
1754
  # road-to-subagent-lifecycle-integrity Phase 1 Step 1. Both tokens were