@event4u/agent-config 16.1.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 (467) 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 +98 -257
  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 +5 -5
  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/commands/work.md +4 -0
  23. package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
  24. package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
  25. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
  26. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
  27. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
  28. package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
  29. package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
  30. package/dist/agent-src/rules/active-remediation.md +1 -1
  31. package/dist/agent-src/rules/autonomous-execution.md +1 -0
  32. package/dist/agent-src/rules/broken-access-control.md +1 -0
  33. package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
  34. package/dist/agent-src/rules/context-hygiene.md +1 -1
  35. package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
  36. package/dist/agent-src/rules/design-fidelity.md +13 -16
  37. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
  38. package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
  39. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  40. package/dist/agent-src/rules/domain-safety-retention.md +1 -0
  41. package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
  42. package/dist/agent-src/rules/evaluator-independence.md +3 -2
  43. package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
  44. package/dist/agent-src/rules/finance-safety-floor.md +1 -0
  45. package/dist/agent-src/rules/git-history-discipline.md +1 -0
  46. package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
  47. package/dist/agent-src/rules/legal-safety-floor.md +3 -2
  48. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
  49. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
  50. package/dist/agent-src/rules/media-governance-routing.md +14 -17
  51. package/dist/agent-src/rules/persona-governance.md +2 -2
  52. package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
  53. package/dist/agent-src/rules/question-not-instruction.md +1 -0
  54. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  55. package/dist/agent-src/rules/runtime-safety.md +1 -0
  56. package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
  57. package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
  58. package/dist/agent-src/rules/session-canary.md +8 -62
  59. package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
  60. package/dist/agent-src/rules/source-confidentiality.md +1 -0
  61. package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
  62. package/dist/agent-src/rules/tool-safety.md +1 -0
  63. package/dist/agent-src/rules/ui-audit-gate.md +1 -2
  64. package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
  65. package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
  66. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  67. package/dist/agent-src/scripts/deferral_carry.ts +339 -0
  68. package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
  69. package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
  70. package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
  71. package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
  72. package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
  73. package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
  74. package/dist/agent-src/skills/design-review/SKILL.md +30 -4
  75. package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
  76. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
  77. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
  78. package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
  79. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  80. package/dist/agent-src/skills/iconography/SKILL.md +1 -1
  81. package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
  82. package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
  83. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  84. package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
  85. package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
  86. package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
  87. package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
  88. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  89. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
  90. package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
  91. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  92. package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
  93. package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
  94. package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
  95. package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
  96. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  97. package/dist/agent-src/templates/roadmaps.md +30 -0
  98. package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  99. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
  100. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  101. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  102. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  103. package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
  104. package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  105. package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  106. package/dist/cli/python/knowledge_ingest.js +1 -1
  107. package/dist/cli/python/workspace_drive.js +1 -1
  108. package/dist/cli/registry.js +1 -1
  109. package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
  110. package/dist/cli-delegate/check_update_banner.js +12 -1
  111. package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
  112. package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
  113. package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
  114. package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
  115. package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
  116. package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
  117. package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
  118. package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
  119. package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
  120. package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
  121. package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
  122. package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
  123. package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
  124. package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
  125. package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
  126. package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
  127. package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
  128. package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
  129. package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
  130. package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
  131. package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
  132. package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
  133. package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
  134. package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
  135. package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
  136. package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
  137. package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
  138. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  139. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  140. package/dist/cli-delegate/cmd_conformance.js +1862 -809
  141. package/dist/cli-delegate/cmd_doctor.js +13 -6
  142. package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
  143. package/dist/cli-delegate/cmd_explain.js +5 -5
  144. package/dist/cli-delegate/cmd_export.js +11 -8
  145. package/dist/cli-delegate/cmd_fleet.js +3 -3
  146. package/dist/cli-delegate/cmd_handoff.js +10 -7
  147. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  148. package/dist/cli-delegate/cmd_memory_get.js +3 -1
  149. package/dist/cli-delegate/cmd_migrate.js +2 -2
  150. package/dist/cli-delegate/cmd_packs_active.js +3 -3
  151. package/dist/cli-delegate/cmd_preflight.js +6 -6
  152. package/dist/cli-delegate/cmd_prune.js +11 -8
  153. package/dist/cli-delegate/cmd_refresh.js +2 -1
  154. package/dist/cli-delegate/cmd_route_audit.js +8 -6
  155. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  156. package/dist/cli-delegate/cmd_session_recycle.js +4 -3
  157. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  158. package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
  159. package/dist/cli-delegate/cmd_settings_set.js +4 -4
  160. package/dist/cli-delegate/cmd_sync.js +11 -8
  161. package/dist/cli-delegate/cmd_uninstall.js +11 -8
  162. package/dist/cli-delegate/cmd_update.js +1 -1
  163. package/dist/cli-delegate/cmd_upgrade.js +3 -2
  164. package/dist/cli-delegate/cmd_validate.js +11 -8
  165. package/dist/cli-delegate/cmd_versions.js +1 -1
  166. package/dist/cli-delegate/deferral_carry.js +16 -0
  167. package/dist/cli-delegate/gate_execute.js +2 -2
  168. package/dist/cli-delegate/roadmap_gates.js +5 -5
  169. package/dist/cli-delegate/update_roadmap_progress.js +1 -1
  170. package/dist/discovery/deprecation-report.md +1 -1
  171. package/dist/discovery/discovery-manifest.json +132 -80
  172. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  173. package/dist/discovery/discovery-manifest.summary.md +3 -3
  174. package/dist/discovery/dormancy-report.md +1 -1
  175. package/dist/discovery/orphan-report.md +1 -1
  176. package/dist/discovery/packs.json +7 -5
  177. package/dist/discovery/trust-report.md +2 -2
  178. package/dist/discovery/workspaces.json +6 -4
  179. package/dist/hooks/dispatch.js +7972 -5186
  180. package/dist/hooks/dispatch.sha256 +1 -0
  181. package/dist/install/claudePathsPlan.js +47 -6
  182. package/dist/install/claudeRuleRewrite.js +7 -0
  183. package/dist/install/emit_host_rules_cli.js +39 -36
  184. package/dist/install/globalRuleScope.js +87 -0
  185. package/dist/install/host_rule_ownership.js +160 -0
  186. package/dist/install/install.mjs +2226 -1055
  187. package/dist/install/installThinLayer.js +261 -0
  188. package/dist/install/installedRuleLinks.js +176 -0
  189. package/dist/install/wizard-plan.js +24 -0
  190. package/dist/mcp/registry-manifest.json +3 -3
  191. package/dist/mcp/server.json +2 -2
  192. package/dist/mcp/server.mjs +40913 -34865
  193. package/dist/scripts/_lib/agent_settings.js +11 -0
  194. package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
  195. package/dist/scripts/_lib/installed_layer.js +378 -0
  196. package/dist/scripts/_lib/lean_projection_mode.js +218 -15
  197. package/dist/scripts/_lib/rule_consequence_class.js +45 -0
  198. package/dist/scripts/_lib/rule_injection.js +67 -10
  199. package/dist/scripts/_lib/rule_law_section.js +122 -0
  200. package/dist/scripts/_lib/thin_rules.js +458 -0
  201. package/dist/scripts/_lib/windsurf_render.js +60 -0
  202. package/dist/scripts/condense.js +14 -26
  203. package/dist/scripts/project_thin_rules.js +14 -294
  204. package/dist/server/schemas/settings.js +29 -0
  205. package/dist/shared/skillRanking.js +74 -13
  206. package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
  207. package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
  208. package/dist/ui/index.html +2 -2
  209. package/docs/contracts/settings-classes.md +10 -6
  210. package/package.json +4 -4
  211. package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  212. package/src/agent-src/scripts/deferral_carry.ts +339 -0
  213. package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
  214. package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
  215. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
  216. package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
  217. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
  218. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  219. package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
  220. package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
  221. package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
  222. package/src/config/agent-settings.template.yml +91 -22
  223. package/src/config/ci-local-parity.yml +18 -0
  224. package/src/config/continuity-surface.json +9 -2
  225. package/src/config/evaluator-budgets.json +4 -4
  226. package/src/config/gate-coverage.yml +327 -3
  227. package/src/config/gate-violation-baselines.json +21 -9
  228. package/src/config/hook-bundle-budget.json +25 -0
  229. package/src/config/hook-latency-budget.json +21 -0
  230. package/src/config/hook-token-budget.json +8 -3
  231. package/src/config/host-instruction-limits.json +33 -0
  232. package/src/config/metric-registry.yml +114 -0
  233. package/src/config/placeholder-drift-budget.json +10 -0
  234. package/src/config/routing-coverage-seed.json +38 -3
  235. package/src/config/rule-activation-census.json +7 -3
  236. package/src/config/rule-consequence-class.json +161 -0
  237. package/src/config/rule-law-ceilings.json +99 -0
  238. package/src/install/claudePathsPlan.ts +46 -4
  239. package/src/install/claudeRuleRewrite.ts +10 -1
  240. package/src/install/emit_host_rules_cli.ts +43 -34
  241. package/src/install/globalRuleScope.ts +109 -0
  242. package/src/install/host_rule_ownership.ts +170 -0
  243. package/src/install/installThinLayer.ts +312 -0
  244. package/src/install/installedRuleLinks.ts +220 -0
  245. package/src/install/wizard-plan.ts +24 -0
  246. package/src/scripts/_cli/cmd_doctor.ts +28 -90
  247. package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
  248. package/src/scripts/_cli/doctor_execution.ts +100 -17
  249. package/src/scripts/_cli/doctor_network_posture.ts +226 -0
  250. package/src/scripts/_dispatch.bash +16 -2
  251. package/src/scripts/_lib/agent_settings.ts +11 -0
  252. package/src/scripts/_lib/body_portable.ts +102 -0
  253. package/src/scripts/_lib/cc_transcript.ts +132 -1
  254. package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
  255. package/src/scripts/_lib/concern_sla_window.ts +200 -0
  256. package/src/scripts/_lib/estate_offsets.ts +241 -0
  257. package/src/scripts/_lib/exemption_shape.ts +143 -0
  258. package/src/scripts/_lib/fnv.ts +23 -0
  259. package/src/scripts/_lib/foreign_scan.ts +106 -0
  260. package/src/scripts/_lib/forge_protection.ts +114 -0
  261. package/src/scripts/_lib/forge_reader.ts +558 -0
  262. package/src/scripts/_lib/gitignore_block.ts +314 -0
  263. package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
  264. package/src/scripts/_lib/graph_feeder_record.ts +214 -0
  265. package/src/scripts/_lib/hook_settings.ts +73 -0
  266. package/src/scripts/_lib/host_capability.ts +40 -19
  267. package/src/scripts/_lib/host_env_write.ts +111 -0
  268. package/src/scripts/_lib/host_hook_merge.ts +165 -0
  269. package/src/scripts/_lib/installed_layer.ts +538 -0
  270. package/src/scripts/_lib/json_merge.ts +82 -0
  271. package/src/scripts/_lib/json_pointers.ts +93 -11
  272. package/src/scripts/_lib/lean_projection_mode.ts +275 -15
  273. package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
  274. package/src/scripts/_lib/machine_wake.ts +16 -3
  275. package/src/scripts/_lib/neighbour_census.ts +760 -0
  276. package/src/scripts/_lib/neighbour_scan.ts +122 -0
  277. package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
  278. package/src/scripts/_lib/obligations.ts +119 -8
  279. package/src/scripts/_lib/probe_inputs.ts +271 -0
  280. package/src/scripts/_lib/prompt_shape.ts +46 -0
  281. package/src/scripts/_lib/read_surface_scan.ts +322 -0
  282. package/src/scripts/_lib/release_highlights.ts +2 -1
  283. package/src/scripts/_lib/release_migration_gate.ts +19 -3
  284. package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
  285. package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
  286. package/src/scripts/_lib/review_coverage.ts +134 -0
  287. package/src/scripts/_lib/rule_consequence_class.ts +71 -0
  288. package/src/scripts/_lib/rule_injection.ts +130 -10
  289. package/src/scripts/_lib/rule_law_section.ts +147 -0
  290. package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
  291. package/src/scripts/_lib/shell_write_shapes.ts +108 -0
  292. package/src/scripts/_lib/skill_origin.ts +254 -0
  293. package/src/scripts/_lib/structural_hiding.ts +622 -0
  294. package/src/scripts/_lib/structured_ask.ts +64 -21
  295. package/src/scripts/_lib/thin_rules.ts +540 -0
  296. package/src/scripts/_lib/touched_file_quality.ts +434 -0
  297. package/src/scripts/_lib/turn_end_refusals.ts +600 -4
  298. package/src/scripts/_lib/turn_end_transcript.ts +216 -0
  299. package/src/scripts/_lib/verification_command.ts +324 -0
  300. package/src/scripts/_lib/verification_evidence.ts +647 -0
  301. package/src/scripts/_lib/verify_clause.ts +280 -0
  302. package/src/scripts/_lib/windsurf_render.ts +63 -0
  303. package/src/scripts/ai_council/cli_call_budget.ts +13 -5
  304. package/src/scripts/ai_council/clients.ts +26 -57
  305. package/src/scripts/ai_council/config.ts +1 -1
  306. package/src/scripts/ai_council/vendor_defaults.ts +45 -0
  307. package/src/scripts/ai_team/team_dispatch.ts +4 -0
  308. package/src/scripts/audit_skill_overlap.ts +261 -0
  309. package/src/scripts/before_complete_hook.ts +573 -25
  310. package/src/scripts/bench_hook_latency.ts +412 -5
  311. package/src/scripts/bench_touched_file_quality.ts +238 -0
  312. package/src/scripts/cache_realization_report.ts +61 -1
  313. package/src/scripts/check_argument_hint.ts +287 -0
  314. package/src/scripts/check_claims.ts +125 -1
  315. package/src/scripts/check_enforcement_coverage.ts +38 -9
  316. package/src/scripts/check_enforcement_matrix.ts +621 -22
  317. package/src/scripts/check_estate_count.ts +130 -153
  318. package/src/scripts/check_finding_dispositions.ts +138 -7
  319. package/src/scripts/check_generator_sync.ts +71 -0
  320. package/src/scripts/check_hook_bundle_composition.ts +370 -0
  321. package/src/scripts/check_host_docs_digest.ts +786 -0
  322. package/src/scripts/check_host_format_column.ts +559 -0
  323. package/src/scripts/check_input_references.ts +228 -0
  324. package/src/scripts/check_inputs_parity.ts +235 -0
  325. package/src/scripts/check_kernel_edit_ratified.ts +89 -9
  326. package/src/scripts/check_kill_switch_table.ts +294 -0
  327. package/src/scripts/check_memory.ts +7 -1
  328. package/src/scripts/check_placeholder_drift.ts +221 -0
  329. package/src/scripts/check_read_surface_coverage.ts +515 -0
  330. package/src/scripts/check_release_highlights.ts +10 -0
  331. package/src/scripts/check_release_holds.ts +2 -1
  332. package/src/scripts/check_release_pr_shape.ts +38 -15
  333. package/src/scripts/check_routing_coverage.ts +378 -11
  334. package/src/scripts/check_standing_rule_delivery.ts +33 -13
  335. package/src/scripts/check_static_parity.ts +17 -0
  336. package/src/scripts/check_verify_expectation_delta.ts +521 -0
  337. package/src/scripts/ci_settle.ts +145 -19
  338. package/src/scripts/closure_scan.ts +115 -1
  339. package/src/scripts/code_graph/detect.ts +127 -7
  340. package/src/scripts/code_graph/foreign.ts +194 -0
  341. package/src/scripts/code_graph/query.ts +217 -4
  342. package/src/scripts/code_graph/types.ts +26 -2
  343. package/src/scripts/code_graph/validate.ts +3 -1
  344. package/src/scripts/code_graph/verbs.ts +103 -0
  345. package/src/scripts/compile_hook_manifest.ts +90 -14
  346. package/src/scripts/condense.ts +14 -27
  347. package/src/scripts/estate_exemption_shape.ts +202 -0
  348. package/src/scripts/external_sources_denylist.json +29 -4
  349. package/src/scripts/generate_host_cost_table.ts +1 -1
  350. package/src/scripts/hook_manifest.json +1 -1
  351. package/src/scripts/hook_manifest.yaml +192 -14
  352. package/src/scripts/hooks/block_config_weakening.ts +294 -4
  353. package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
  354. package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
  355. package/src/scripts/hooks/bundle_integrity.ts +291 -0
  356. package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
  357. package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
  358. package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
  359. package/src/scripts/hooks/concern_failure_policy.ts +280 -0
  360. package/src/scripts/hooks/concern_registry.ts +2 -0
  361. package/src/scripts/hooks/concern_timings.ts +94 -0
  362. package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
  363. package/src/scripts/hooks/design_pass_hook.ts +100 -9
  364. package/src/scripts/hooks/design_slop_hook.ts +1 -2
  365. package/src/scripts/hooks/dispatch_hook.ts +77 -71
  366. package/src/scripts/hooks/edit_shape_hook.ts +1 -2
  367. package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
  368. package/src/scripts/hooks/evidence_independence.ts +1 -2
  369. package/src/scripts/hooks/exit_codes.ts +129 -0
  370. package/src/scripts/hooks/host_lowering.json +1 -0
  371. package/src/scripts/hooks/host_lowering.ts +146 -3
  372. package/src/scripts/hooks/host_lowering.yaml +262 -46
  373. package/src/scripts/hooks/host_semantics.ts +30 -2
  374. package/src/scripts/hooks/injection_budget.ts +9 -2
  375. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
  376. package/src/scripts/hooks/journal_record_hook.ts +1 -2
  377. package/src/scripts/hooks/memory_recall_hook.ts +1 -2
  378. package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
  379. package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
  380. package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
  381. package/src/scripts/hooks/payload_stub.ts +10 -1
  382. package/src/scripts/hooks/permission_gate.ts +1 -2
  383. package/src/scripts/hooks/push_settle_hook.ts +1 -3
  384. package/src/scripts/hooks/replay_hook.ts +2 -1
  385. package/src/scripts/hooks/reread_guard_hook.ts +1 -2
  386. package/src/scripts/hooks/review_baseline_hook.ts +1 -2
  387. package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
  388. package/src/scripts/hooks/rule_inject_hook.ts +765 -68
  389. package/src/scripts/hooks/run_continuation_hook.ts +13 -15
  390. package/src/scripts/hooks/skill_route_hook.ts +1 -2
  391. package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
  392. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
  393. package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
  394. package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
  395. package/src/scripts/hooks/table_fingerprint.ts +70 -0
  396. package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
  397. package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
  398. package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
  399. package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
  400. package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
  401. package/src/scripts/hooks_status.ts +112 -0
  402. package/src/scripts/injection_scan_hook.ts +7 -0
  403. package/src/scripts/install.ts +75 -189
  404. package/src/scripts/installed_layer_report.ts +103 -0
  405. package/src/scripts/language_mirror_hook.ts +15 -6
  406. package/src/scripts/learning_sidecar.ts +119 -8
  407. package/src/scripts/lint_deny_text.ts +419 -0
  408. package/src/scripts/lint_exit_codes.ts +262 -0
  409. package/src/scripts/lint_hook_manifest.ts +108 -0
  410. package/src/scripts/lint_major_migration_sections.ts +156 -26
  411. package/src/scripts/lint_pack_boundaries.ts +63 -5
  412. package/src/scripts/lint_roadmap_blockers.ts +78 -12
  413. package/src/scripts/lint_rule_law_section.ts +517 -0
  414. package/src/scripts/lint_skill_descriptions.ts +1 -1
  415. package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
  416. package/src/scripts/lint_workflow_security.ts +161 -5
  417. package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
  418. package/src/scripts/mcp_server/graph_tools.ts +72 -3
  419. package/src/scripts/mcp_server/prompts.ts +142 -1
  420. package/src/scripts/measure_routing_signal.ts +54 -16
  421. package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
  422. package/src/scripts/measure_turn_end_gate.ts +193 -0
  423. package/src/scripts/memory_learn_hook.ts +91 -6
  424. package/src/scripts/memory_lookup.ts +1 -1
  425. package/src/scripts/model_rule_injection.ts +52 -5
  426. package/src/scripts/prepack-check.mjs +53 -0
  427. package/src/scripts/project_thin_rules.ts +34 -327
  428. package/src/scripts/release_publication.ts +13 -1
  429. package/src/scripts/report_evidence_temperature.ts +657 -0
  430. package/src/scripts/report_installed_rule_links.ts +157 -0
  431. package/src/scripts/report_invocation_surface.ts +383 -0
  432. package/src/scripts/report_label_agreement.ts +233 -0
  433. package/src/scripts/report_obligation_carriers.ts +699 -0
  434. package/src/scripts/report_obligation_mechanism.ts +230 -0
  435. package/src/scripts/report_obligation_writer_split.ts +236 -0
  436. package/src/scripts/report_single_token_triggers.ts +277 -0
  437. package/src/scripts/report_skill_menu_census.ts +208 -0
  438. package/src/scripts/report_skill_ranker_confusion.ts +442 -0
  439. package/src/scripts/report_standing_payload_by_host.ts +188 -15
  440. package/src/scripts/report_verification_record_coverage.ts +306 -0
  441. package/src/scripts/roadmap_verify_share.ts +213 -0
  442. package/src/scripts/rule_activation_census.ts +5 -2
  443. package/src/scripts/rule_trigger_eval.ts +9 -9
  444. package/src/scripts/schemas/command.schema.json +44 -0
  445. package/src/scripts/schemas/review-findings.schema.json +7 -2
  446. package/src/scripts/schemas/rule.schema.json +5 -0
  447. package/src/scripts/schemas/skill.schema.json +44 -0
  448. package/src/scripts/self_review_gate.ts +421 -17
  449. package/src/scripts/semantic_parity_census.ts +314 -0
  450. package/src/scripts/session_eol_report.ts +54 -1
  451. package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
  452. package/src/scripts/sweep_dead_scan_roots.ts +1 -1
  453. package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
  454. package/src/scripts/sync_gitignore.ts +29 -235
  455. package/src/scripts/trigger_eval_grandfather.json +0 -7
  456. package/src/scripts/trigger_eval_rotation.ts +122 -27
  457. package/src/scripts/ui_conformance_probe.ts +156 -4
  458. package/src/scripts/update_prices.ts +85 -3
  459. package/src/scripts/write_bundle_digest.mjs +74 -0
  460. package/src/server/schemas/settings.ts +41 -0
  461. package/src/shared/skillRanking.ts +117 -11
  462. package/src/templates/consumer-settings/ONBOARDING.md +1 -0
  463. package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
  464. package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
  465. package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
  466. package/dist/ui/assets/index-DH1xc62v.js +0 -29
  467. package/dist/ui/assets/index-jSfMW8_t.css +0 -1
@@ -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,22 +168,40 @@ 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
151
182
  # hooks.injection_scan.enabled is true in .agent-settings.yml. The runtime
152
183
  # backstop layered on the always-on untrusted-input-defense rule.
184
+ #
185
+ # THE INPUT IT READS, AND WHY IT CANNOT MOVE TO A BLOCKING SLOT
186
+ # (road-to-a-content-scanner-on-a-slot-that-can-refuse 1.1). It scans the
187
+ # tool RESULT -- fetched pages, file reads, MCP/tool responses -- which is
188
+ # why it declares `result` below. `pre_tool_use` is the only slot on this
189
+ # host with a non-null `block_exit`, and a pre-call payload has no tool
190
+ # response in it: the `result` body class resolves to `tool_response` /
191
+ # `toolResponse` / `tool_result` / `toolUseResult` (hooks/payload_stub.ts),
192
+ # none of which exist before the call runs. So rebinding for the deny would
193
+ # leave the scanner reading the arguments it was never written to inspect --
194
+ # more enforcing-looking and strictly less detecting. It stays on
195
+ # `post_tool_use` and the published claims say `detected, not blocked`;
196
+ # `docs/enforcement-by-host.md` § "The slot rows are not a statement about
197
+ # any concern" carries the reasoning, and `check_enforcement_matrix` prints
198
+ # the per-host binding audit that keeps it from drifting back.
153
199
  injection-scan:
154
200
  script: src/scripts/injection_scan_hook.ts
155
201
  args: []
156
202
  fail_closed: false
157
203
  severity: advisory
204
+ effect: verification
158
205
  needs_payload_bodies: [input, result]
159
206
  # road-to-security-hardening Phase 3 — PreToolUse guard turning the
160
207
  # git-history-discipline Iron Law into a deterministic gate. Blocks
@@ -168,6 +215,7 @@ concerns:
168
215
  args: []
169
216
  fail_closed: true
170
217
  severity: blocking
218
+ effect: permission
171
219
  needs_payload_bodies: [input]
172
220
  # road-to-ai-employee-borrowings Phase 1 — kernel immutability Layer 1.
173
221
  # PreToolUse guard: DENIES Write/Edit/NotebookEdit (and cross-platform
@@ -185,6 +233,29 @@ concerns:
185
233
  args: []
186
234
  fail_closed: true
187
235
  severity: blocking
236
+ effect: permission
237
+ needs_payload_bodies: [input]
238
+ # road-to-a-kernel-that-guards-its-plumbing 1.2 — the build-output half of
239
+ # "one mechanism per file class". PreToolUse guard: DENIES Write/Edit/
240
+ # NotebookEdit and the shell write shapes whose target is
241
+ # `dist/hooks/dispatch.js` (the esbuild bundle) or `hooks/hooks.json` (the
242
+ # host binding file). Both are GENERATED — by `npm run build:hooks` and by
243
+ # condense.ts via `task sync` — so a hand edit is never legitimate, and a
244
+ # hand-edited bundle reaches every dispatch while being invisible in a source
245
+ # review. The plumbing SOURCES beside them (hook_manifest.yaml,
246
+ # host_lowering.yaml, the *-dispatcher.sh trampolines, both budget files) are
247
+ # edited on purpose all the time and carry the ADR-268 § 4 ratification
248
+ # RECORD instead — check_kernel_edit_ratified, path set extended by step 1.1.
249
+ # The legitimate builds pass: they reach these files through a build tool,
250
+ # not through a redirect / in-place sed / tee / mv shape. fail_closed: true —
251
+ # the guarantee is about a DETECTED write; a malformed envelope with no
252
+ # target allows. No agent-accessible override; the fix is to rebuild.
253
+ block-plumbing-writes:
254
+ script: src/scripts/hooks/block_plumbing_writes.ts
255
+ args: []
256
+ fail_closed: true
257
+ severity: blocking
258
+ effect: permission
188
259
  needs_payload_bodies: [input]
189
260
  # road-to-asked-not-parked Phase 5.1 — one question per structured-ask call.
190
261
  # PreToolUse guard: DENIES a call to a host's native question picker whose
@@ -214,6 +285,7 @@ concerns:
214
285
  args: []
215
286
  fail_closed: false
216
287
  severity: blocking
288
+ effect: permission
217
289
  tools: [AskUserQuestion, AskQuestion, UserQuestion, ask_user_question, ask_question, user_question]
218
290
  needs_payload_bodies: [input]
219
291
  # road-to-source-silence Phase 4.2 — the write-time half of source
@@ -236,6 +308,7 @@ concerns:
236
308
  args: []
237
309
  fail_closed: false
238
310
  severity: blocking
311
+ effect: permission
239
312
  needs_payload_bodies: [input]
240
313
  # road-to-renewal-leverage Phase 2 — "fix the code, not the config".
241
314
  # PreToolUse guard over the recorded allowlist-growth antipattern
@@ -252,6 +325,7 @@ concerns:
252
325
  args: []
253
326
  fail_closed: false
254
327
  severity: blocking
328
+ effect: permission
255
329
  needs_payload_bodies: [input]
256
330
  # token-saving Phase 3 — PreToolUse RTK-wrap nudge. DETERMINISTIC: keys off a
257
331
  # live `which rtk` probe (not the self-reported flag). When rtk is installed
@@ -266,6 +340,7 @@ concerns:
266
340
  args: []
267
341
  fail_closed: false
268
342
  severity: advisory
343
+ effect: formatting
269
344
  needs_payload_bodies: [input]
270
345
  # road-to-anti-slop-detector Phase 3 — OPTIONAL PreToolUse anti-slop nudge.
271
346
  # Runs the lint_design_slop registry against about-to-be-written UI content
@@ -279,6 +354,7 @@ concerns:
279
354
  args: []
280
355
  fail_closed: false
281
356
  severity: advisory
357
+ effect: verification
282
358
  needs_payload_bodies: [input]
283
359
  # road-to-frontend-power E1.1 / E1.2 / E1.3 — the DELIVERY carrier the 0.0 %
284
360
  # UI-write measurement never had. One script on two slots:
@@ -305,6 +381,7 @@ concerns:
305
381
  args: []
306
382
  fail_closed: false
307
383
  severity: advisory
384
+ effect: notification
308
385
  needs_payload_bodies: [input]
309
386
  # `advisory`, and the code MATCHES the declaration rather than the prose.
310
387
  #
@@ -330,6 +407,7 @@ concerns:
330
407
  args: ['--slot', 'stop']
331
408
  fail_closed: false
332
409
  severity: advisory
410
+ effect: notification
333
411
  # road-to-frontend-skill-application Phase 4 — OPTIONAL PreToolUse UI-route
334
412
  # nudge. On a Write/Edit to a UI surface with no design consultation latched
335
413
  # this session, WARNS (exit 2) naming the route; a read or search touching a
@@ -345,6 +423,7 @@ concerns:
345
423
  args: []
346
424
  fail_closed: false
347
425
  severity: advisory
426
+ effect: notification
348
427
  needs_payload_bodies: [input]
349
428
  # road-to-a-graph-that-is-shipped 1.2 — PreToolUse code-graph CONTEXT line,
350
429
  # replacing the ADR-124 Phase 4 nudge concern, whose hook was deleted in the
@@ -401,6 +480,7 @@ concerns:
401
480
  args: []
402
481
  fail_closed: false
403
482
  severity: advisory
483
+ effect: telemetry
404
484
  # road-to-autonomous-auto-mode — the carrier for `token-efficiency` § One
405
485
  # command per Bash call. That rule is `type: auto`, so its triggers match the
406
486
  # PROMPT, and no prompt announces that the next tool call will be chained;
@@ -447,23 +527,35 @@ concerns:
447
527
  args: []
448
528
  fail_closed: false
449
529
  severity: advisory
530
+ effect: notification
450
531
  needs_payload_bodies: [input]
451
532
  code-graph-context:
452
533
  script: src/scripts/hooks/code_graph_context_hook.ts
453
534
  args: []
454
535
  fail_closed: false
455
536
  severity: advisory
537
+ effect: context
456
538
  # Per-concern tool filter — the dispatcher skips this concern in-process on
457
539
  # any other tool. See `_concern_matches_tool` in hooks/dispatch_hook.ts for
458
540
  # the semantics (absent = every event, "*" = the same, non-tool events are
459
541
  # never filtered) and for why the filter is NOT a host `matcher`.
460
542
  #
461
543
  # This set is not a guess: the hook's entire branch surface is
462
- # `name === 'Grep' || name === 'Glob'` and `name === 'Read'`
463
- # (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.
464
555
  #
465
- # Deliberately NOT declared on the three blocking PreToolUse guards
466
- # (block-no-verify, block-kernel-rule-writes, block-config-weakening): their
556
+ # Deliberately NOT declared on the four blocking PreToolUse guards
557
+ # (block-no-verify, block-kernel-rule-writes, block-plumbing-writes,
558
+ # block-config-weakening): their
467
559
  # tool sets span host-specific naming variants (`Bash` / `BashTool` /
468
560
  # `launch-process` / `launch_process`, `str-replace-editor` /
469
561
  # `str_replace_editor` / `save-file` / …), so a list that misses one variant
@@ -471,7 +563,7 @@ concerns:
471
563
  # re-read `tool_name` and return early; paying one dispatch to keep a guard
472
564
  # correct is the right trade, and the cheap filter is reserved for advisory
473
565
  # concerns whose set is provable from their own source.
474
- tools: [Grep, Glob, Read]
566
+ tools: [Grep, Glob, Read, Bash]
475
567
  needs_payload_bodies: [input]
476
568
  # road-to-reachable-code-memory Phase 4 — session_end learning-sidecar
477
569
  # aggregation. Joins the EXISTING session_end concern set (no new platform
@@ -487,6 +579,7 @@ concerns:
487
579
  args: []
488
580
  fail_closed: false
489
581
  severity: advisory
582
+ effect: memory
490
583
  # Phase 2 of road-to-hooks-actually-fire-in-consumers — session_start
491
584
  # gate that surfaces the marketplace-install-but-unscaffolded shape.
492
585
  # Writes .augment/.first-run-action-needed.md + one stderr line so
@@ -497,6 +590,7 @@ concerns:
497
590
  args: []
498
591
  fail_closed: false
499
592
  severity: advisory
593
+ effect: notification
500
594
  # session-profile-activation Phase 1 — emits a one-line staleness notice
501
595
  # when a new session starts with a `runtime.active_packs` overlay carried
502
596
  # over from a previous session. Never resets (option a, explicit
@@ -506,6 +600,7 @@ concerns:
506
600
  args: []
507
601
  fail_closed: false
508
602
  severity: advisory
603
+ effect: notification
509
604
  # Defense-in-depth twin of the update-command wrapper refresh
510
605
  # (cmd_upgrade / cmd_refresh). On session_start, re-stamps a stale
511
606
  # project-local ./agent-config wrapper from the canonical template so
@@ -516,6 +611,7 @@ concerns:
516
611
  args: []
517
612
  fail_closed: false
518
613
  severity: advisory
614
+ effect: notification
519
615
  # road-to-install-path-convergence Phase 4 — duplicate-surface probe.
520
616
  # Reads src/config/surface-matrix.yml, existence-checks declared duplicate
521
617
  # classes, nudges ONCE per day (state: agents/runtime/state/
@@ -526,6 +622,7 @@ concerns:
526
622
  args: []
527
623
  fail_closed: false
528
624
  severity: advisory
625
+ effect: telemetry
529
626
  # road-to-team-mode Phase 4 — managed Review-Gate circuit breaker.
530
627
  # Runs AFTER the plugin's own Stop gate: reads the persisted gate job
531
628
  # record, counts consecutive BLOCK verdicts per session, injects the
@@ -538,6 +635,7 @@ concerns:
538
635
  args: []
539
636
  fail_closed: false
540
637
  severity: advisory
638
+ effect: verification
541
639
  # Reply-shape backstop for the direct-answers rule (reply-close): a PR
542
640
  # created THIS turn must end the reply as the literal last raw URL. This
543
641
  # PostToolUse hook fires right after a PR *create* (gh pr create, or a
@@ -550,6 +648,7 @@ concerns:
550
648
  args: []
551
649
  fail_closed: false
552
650
  severity: advisory
651
+ effect: notification
553
652
  needs_payload_bodies: [input, result]
554
653
  # Push-settle reminder — the second half of "a push closes its own loop".
555
654
  # The pre-push hook answers "is this push safe to make"; nothing answered "is
@@ -565,6 +664,7 @@ concerns:
565
664
  args: []
566
665
  fail_closed: false
567
666
  severity: advisory
667
+ effect: verification
568
668
  needs_payload_bodies: [input, result]
569
669
  # Language-mirror pin — carries the ONE fact the transcript cannot express:
570
670
  # which language the human actually typed. 47 skill/slash-command bodies were
@@ -578,6 +678,7 @@ concerns:
578
678
  args: []
579
679
  fail_closed: false
580
680
  severity: advisory
681
+ effect: context
581
682
  # Git-authorization ledger — records which git ops the user's OWN WORDS
582
683
  # authorize this turn. Writes state only; never blocks.
583
684
  git-authorization:
@@ -585,6 +686,7 @@ concerns:
585
686
  args: []
586
687
  fail_closed: false
587
688
  severity: advisory
689
+ effect: verification
588
690
  # The blocking half was REMOVED by owner decision on 2026-09-04 (ADR-254).
589
691
  # It refused authorizations the owner had in fact given: a guardrail sentence
590
692
  # inside an authorization ("never merge empty PRs") read as a withdrawal and
@@ -616,6 +718,7 @@ concerns:
616
718
  args: []
617
719
  fail_closed: false
618
720
  severity: blocking
721
+ effect: permission
619
722
  needs_payload_bodies: [input]
620
723
  # Canary injection — deterministic carrier for the
621
724
  # session-canary rule (greet-by-name at task start + reply-close markers
@@ -638,6 +741,7 @@ concerns:
638
741
  args: []
639
742
  fail_closed: false
640
743
  severity: advisory
744
+ effect: context
641
745
  # Council-availability fact. Carries whether a council is configured and from
642
746
  # where, because the always-loaded layer refers to the council conditionally
643
747
  # and never says how to check. Measured 2026-08-08: an agent announced "kein
@@ -650,6 +754,7 @@ concerns:
650
754
  args: []
651
755
  fail_closed: false
652
756
  severity: advisory
757
+ effect: verification
653
758
  # Org-telemetry disclosure (road-to-org-telemetry Phase 3.2; ADR-233 § D5).
654
759
  # `org-pack` is the only consent class in this suite granted by somebody
655
760
  # OTHER than the person it binds — an org administrator, once, for every
@@ -663,6 +768,7 @@ concerns:
663
768
  args: []
664
769
  fail_closed: false
665
770
  severity: advisory
771
+ effect: notification
666
772
  # road-to-org-telemetry Phase 2 (step 2.1) — session-end Class-A flush.
667
773
  # Checks whether the outbound spool has bytes and, if so, spawns a DETACHED
668
774
  # sender and returns. It makes no network call in the session's own process,
@@ -691,6 +797,7 @@ concerns:
691
797
  args: []
692
798
  fail_closed: false
693
799
  severity: advisory
800
+ effect: telemetry
694
801
  # Self-repair intake (road-to-self-repair Phase 1). Two slots, one queue:
695
802
  # user_prompt_submit opens a record when the user states the agent worked
696
803
  # wrongly and injects the open-queue line; stop runs the deterministic
@@ -702,6 +809,7 @@ concerns:
702
809
  args: []
703
810
  fail_closed: false
704
811
  severity: advisory
812
+ effect: telemetry
705
813
  # Shared per-session register (road-to-parallel-session-coordination) — writes
706
814
  # this session into <git-common-dir>/agent-sessions/<session_id>.json so every
707
815
  # other worktree of the repo can see it, and on session_start injects the live
@@ -735,6 +843,7 @@ concerns:
735
843
  args: []
736
844
  fail_closed: false
737
845
  severity: advisory
846
+ effect: telemetry
738
847
  # road-to-orchestrator-discipline-carriers Phase 3 (F6) — deterministic
739
848
  # PostToolUse orchestration-telemetry capture. Fires only on an Agent/Task
740
849
  # tool-use completion (the two observed subagent-dispatch tool names) and
@@ -747,6 +856,7 @@ concerns:
747
856
  args: []
748
857
  fail_closed: false
749
858
  severity: advisory
859
+ effect: telemetry
750
860
  tools: [Agent, Task]
751
861
  needs_payload_bodies: [input, result]
752
862
  # road-to-org-telemetry Phase 1 (step 1.2) — Class-A usage capture. Fires
@@ -790,6 +900,7 @@ concerns:
790
900
  args: []
791
901
  fail_closed: false
792
902
  severity: advisory
903
+ effect: telemetry
793
904
  # Provable from the hook's own source: the only branch surface is
794
905
  # `extractToolName(payload) !== SKILL_TOOL_NAME`.
795
906
  tools: [Skill]
@@ -836,6 +947,7 @@ concerns:
836
947
  args: []
837
948
  fail_closed: false
838
949
  severity: advisory
950
+ effect: notification
839
951
  nudge_rank: 1
840
952
  # road-to-inbox-harvest-2026-08-d-runtime-skill-routing Phase 2 — binds the
841
953
  # deterministic task→skill ranker, which had shipped with ZERO production
@@ -859,6 +971,7 @@ concerns:
859
971
  args: []
860
972
  fail_closed: false
861
973
  severity: advisory
974
+ effect: context
862
975
  nudge_rank: 2
863
976
  # road-to-trigger-delivered-rule-bodies Phase 1 — the DELIVERY twin of
864
977
  # `skill-route` above: same two slots, opposite payload policy. `skill-route`
@@ -897,6 +1010,7 @@ concerns:
897
1010
  args: []
898
1011
  fail_closed: false
899
1012
  severity: advisory
1013
+ effect: context
900
1014
  needs_payload_bodies: [input]
901
1015
  # road-to-orchestrator-discipline-carriers Phase 5 (F4-lite) — end-review
902
1016
  # nudge. Fires ONLY when the session mutated tracked+untracked, non-doc
@@ -924,11 +1038,13 @@ concerns:
924
1038
  args: []
925
1039
  fail_closed: false
926
1040
  severity: advisory
1041
+ effect: verification
927
1042
  end-review-nudge:
928
1043
  script: src/scripts/hooks/end_review_nudge_hook.ts
929
1044
  args: []
930
1045
  fail_closed: false
931
1046
  severity: advisory
1047
+ effect: notification
932
1048
  # road-to-stop-gate-honesty step 3.1 — skipped on a refusal RETRY.
933
1049
  # ARGUMENT, per concern as that step requires: the F2 fire gate is a
934
1050
  # once-per-session marker, and this concern's own header records that a
@@ -969,6 +1085,7 @@ concerns:
969
1085
  args: []
970
1086
  fail_closed: false
971
1087
  severity: advisory
1088
+ effect: telemetry
972
1089
  # road-to-conformance-round5 Phase 3 — the FIRST concern that can refuse a
973
1090
  # turn-END. Round 5 measured the reason: both blocking carriers reached zero
974
1091
  # violations, neither advisory carrier did, and 19 language violations
@@ -992,16 +1109,34 @@ concerns:
992
1109
  # detector's own trigger conditions, which is the same shape `delegation-nudge`
993
1110
  # uses — no signal, no output. `hooks.turn_end_gate.*` is in REMOVED_KEYS.
994
1111
  #
995
- # fail_closed: FALSE, deliberately and unlike every other blocking concern
996
- # here: a crash in a turn-end gate must let the turn END. Failing closed on
997
- # this slot does not degrade the session, it wedges it. Re-entrancy is two
998
- # independent layers (`stop_hook_active`; a marker keyed on the last USER
999
- # 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.
1000
1134
  turn-end-gate:
1001
1135
  script: src/scripts/hooks/turn_end_gate_hook.ts
1002
1136
  args: []
1003
1137
  fail_closed: false
1004
1138
  severity: blocking
1139
+ effect: permission
1005
1140
  # Comment-discipline advisory — the write-time half of
1006
1141
  # `lint_code_comments`. Scans the TEXT JUST WRITTEN (Write ->
1007
1142
  # tool_input.content, Edit -> tool_input.new_string), never the file on
@@ -1022,6 +1157,7 @@ concerns:
1022
1157
  args: []
1023
1158
  fail_closed: false
1024
1159
  severity: advisory
1160
+ effect: verification
1025
1161
  tools: [Write, Edit]
1026
1162
  needs_payload_bodies: [input]
1027
1163
  # road-to-token-economy-cache Phase 5.1/5.2 — edit-shape advisory. Fires
@@ -1039,6 +1175,7 @@ concerns:
1039
1175
  args: []
1040
1176
  fail_closed: false
1041
1177
  severity: advisory
1178
+ effect: verification
1042
1179
  # Provable from the hook's own source: the only branch surface is
1043
1180
  # `toolName !== 'Write'` — same cheap-filter discipline as
1044
1181
  # `orchestration-record`'s [Agent, Task].
@@ -1060,6 +1197,7 @@ concerns:
1060
1197
  args: []
1061
1198
  fail_closed: false
1062
1199
  severity: advisory
1200
+ effect: verification
1063
1201
  # Provable from the hook's own source: READ_TOOLS ∪ WRITE_TOOLS.
1064
1202
  tools: [Read, Edit, Write]
1065
1203
  needs_payload_bodies: [input]
@@ -1094,6 +1232,7 @@ concerns:
1094
1232
  args: []
1095
1233
  fail_closed: false
1096
1234
  severity: advisory
1235
+ effect: memory
1097
1236
  # Provable from the hook's own source: the union of the `tools` sets on
1098
1237
  # RECALL_RULES — COMMAND_TOOLS (rules 1 and 4) ∪ EDIT_TOOLS (rules 2, 3).
1099
1238
  tools: [Bash, Edit, Write, MultiEdit, str-replace-editor, save-file, launch-process]
@@ -1117,6 +1256,7 @@ concerns:
1117
1256
  args: []
1118
1257
  fail_closed: false
1119
1258
  severity: advisory
1259
+ effect: notification
1120
1260
  # road-to-long-horizon-execution Phase 1 (H-1) — the stop slot's first
1121
1261
  # WORK-REMAINING concern. No-op unless this session claimed a roadmap
1122
1262
  # (`sessions:claim`) whose frontmatter says `execution.mode: autonomous`;
@@ -1129,6 +1269,12 @@ concerns:
1129
1269
  # always. Events: agents/runtime/state/run-continuation.jsonl. Kill switch:
1130
1270
  # AGENT_CONFIG_NO_RUN_CONTINUATION=1. fail_closed: false — the only block
1131
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.
1132
1278
  run-continuation:
1133
1279
  script: src/scripts/hooks/run_continuation_hook.ts
1134
1280
  args: []
@@ -1142,6 +1288,7 @@ concerns:
1142
1288
  # mechanism was inert on the one verified host. `turn-end-gate` above sits
1143
1289
  # on the same slot and declares `blocking` for exactly this reason.
1144
1290
  severity: blocking
1291
+ effect: permission
1145
1292
  # road-to-user-out-of-the-loop Phase 0 Step 1 — the interruption ledger.
1146
1293
  # Every Stop, classifies whether the turn that just ended put a synchronous
1147
1294
  # contact to the user and appends one `{run_id, turn, kind, class, roadmap}`
@@ -1167,6 +1314,7 @@ concerns:
1167
1314
  args: []
1168
1315
  fail_closed: false
1169
1316
  severity: advisory
1317
+ effect: telemetry
1170
1318
  # road-to-stop-gate-honesty step 3.1 — skipped on a refusal RETRY, and this
1171
1319
  # is the flag with the real saving.
1172
1320
  # ARGUMENT, per concern: `alreadyRecorded(ledgerPath, run_id, turn)` dedupes
@@ -1200,6 +1348,7 @@ concerns:
1200
1348
  args: []
1201
1349
  fail_closed: false
1202
1350
  severity: advisory
1351
+ effect: telemetry
1203
1352
  # road-to-inbox-harvest-2026-08-d-context-ledger Phase 1 Step 1.1 — the
1204
1353
  # tool-result byte counter. `hook-token-budget.json` registers the gap it
1205
1354
  # closes in its own words: bytes-into-context from tool RESULTS are
@@ -1224,6 +1373,7 @@ concerns:
1224
1373
  args: []
1225
1374
  fail_closed: false
1226
1375
  severity: advisory
1376
+ effect: telemetry
1227
1377
  # road-to-subagent-lifecycle-integrity Phase 3 Step 1 — spawn guard, SHADOW
1228
1378
  # ONLY, per docs/contracts/concern-activation-policy.md. On every Agent/Task
1229
1379
  # call it appends one `spawn_guard_shadow` line recording what a guard WOULD
@@ -1244,6 +1394,7 @@ concerns:
1244
1394
  args: []
1245
1395
  fail_closed: false
1246
1396
  severity: advisory
1397
+ effect: telemetry
1247
1398
  tools: [Agent, Task]
1248
1399
  # road-to-source-first-frontend Phase 3 Steps 1-2 — source-first gate, SHADOW
1249
1400
  # ONLY, per docs/contracts/concern-activation-policy.md. On every
@@ -1268,11 +1419,15 @@ concerns:
1268
1419
  # to advisory is pre-registered in the hook header.
1269
1420
  #
1270
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.
1271
1425
  source-first-gate:
1272
1426
  script: src/scripts/hooks/source_first_gate_hook.ts
1273
1427
  args: []
1274
1428
  fail_closed: false
1275
1429
  severity: advisory
1430
+ effect: telemetry
1276
1431
  needs_payload_bodies: [input]
1277
1432
  # road-to-runtime-event-journal Phase 1 step 1.4 — the journal's hook binding
1278
1433
  # (AI council 2026-08-28, decision 3). `_lib/runtime_journal.ts` shipped bound
@@ -1316,6 +1471,7 @@ concerns:
1316
1471
  args: []
1317
1472
  fail_closed: false
1318
1473
  severity: advisory
1474
+ effect: telemetry
1319
1475
 
1320
1476
  # Role axis (road-to-token-economy-dispatch Phase 2). The dispatcher reads
1321
1477
  # AGENT_CONFIG_SESSION_ROLE (resolved via _lib/session_role.ts — set ONLY by
@@ -1387,12 +1543,22 @@ platforms:
1387
1543
  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]
1388
1544
  session_end: [chat-history, memory-learn, session-register, roadmap-progress, telemetry-flush]
1389
1545
  stop: [chat-history, verify-before-complete, self-repair, session-register, roadmap-progress, design-pass-stop]
1390
- pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-config-weakening, block-speaking-inbox-dir, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, memory-recall]
1546
+ pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-plumbing-writes, block-config-weakening, block-speaking-inbox-dir, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, memory-recall]
1391
1547
  post_tool_use: [chat-history, roadmap-progress, context-hygiene, verify-before-complete, minimal-safe-diff, injection-scan, pr-url-reminder, push-settle, orchestration-record, telemetry-usage, tool-result-bytes, edit-shape, comment-discipline, design-pass]
1392
1548
 
1393
1549
  claude:
1394
1550
  ask: native
1395
- 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.
1396
1562
  session_end: [chat-history, memory-learn, session-register, roadmap-progress, telemetry-flush, journal-record]
1397
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]
1398
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]
@@ -1419,7 +1585,7 @@ platforms:
1419
1585
  # (+16,329 GPT tok, +69 % on the thin rule layer) are in
1420
1586
  # `project_thin_rules.path_only_ids`; the receiver is
1421
1587
  # `agents/roadmaps/stubs/road-to-a-path-route-under-delivery.md`.
1422
- pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-config-weakening, block-speaking-inbox-dir, one-question-per-ask, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, spawn-guard-shadow, source-first-gate, memory-recall]
1588
+ pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-plumbing-writes, block-config-weakening, block-speaking-inbox-dir, one-question-per-ask, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, spawn-guard-shadow, source-first-gate, memory-recall]
1423
1589
  post_tool_use: [chat-history, roadmap-progress, context-hygiene, verify-before-complete, minimal-safe-diff, injection-scan, pr-url-reminder, push-settle, orchestration-record, telemetry-usage, tool-result-bytes, edit-shape, comment-discipline, language-mirror, design-pass, journal-record]
1424
1590
  # `language-mirror` — round-5 § 6.1. `pre_compact` sets a pin-lost marker;
1425
1591
  # the `post_tool_use` entry above re-emits the pin exactly once while that
@@ -1466,7 +1632,7 @@ platforms:
1466
1632
  # still costs the dispatch, and its entire output is thrown away.
1467
1633
  stop: [chat-history, verify-before-complete, self-repair, session-register, roadmap-progress, design-pass-stop]
1468
1634
  user_prompt_submit: [chat-history, verify-before-complete, minimal-safe-diff, language-mirror, git-authorization, session-canary, self-repair, session-register]
1469
- pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-config-weakening, block-speaking-inbox-dir, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, spawn-guard-shadow, source-first-gate, memory-recall]
1635
+ pre_tool_use: [block-no-verify, evidence-independence, block-kernel-rule-writes, block-plumbing-writes, block-config-weakening, block-speaking-inbox-dir, rtk-wrap, design-slop, ui-route-nudge, code-graph-context, chain-nudge, ship-diff-volume, reread-guard, spawn-guard-shadow, source-first-gate, memory-recall]
1470
1636
  post_tool_use: [chat-history, roadmap-progress, context-hygiene, verify-before-complete, minimal-safe-diff, injection-scan, pr-url-reminder, push-settle, orchestration-record, telemetry-usage, tool-result-bytes, edit-shape, comment-discipline, design-pass]
1471
1637
  # subagent-ledger IS bound here, unlike the two nudges above, and the
1472
1638
  # difference is the delivery channel rather than the platform: the nudges
@@ -1571,6 +1737,18 @@ native_event_aliases:
1571
1737
  Stop: stop
1572
1738
  UserPromptSubmit: user_prompt_submit
1573
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
1574
1752
  PreToolUse: pre_tool_use
1575
1753
  PreCompact: pre_compact
1576
1754
  # road-to-subagent-lifecycle-integrity Phase 1 Step 1. Both tokens were