@khoavu882/doflow 2.0.0-beta.5 → 2.0.1

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 (494) hide show
  1. package/README.md +16 -16
  2. package/bin/doflow.js +22 -12
  3. package/core/.antigravity-plugin/plugin.json +1 -2
  4. package/core/.claude-plugin/plugin.json +1 -1
  5. package/core/.codex-plugin/plugin.json +1 -1
  6. package/core/.plugin/plugin.json +1 -1
  7. package/core/harnesses/claude/hooks/lib.sh +43 -24
  8. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +4 -1
  9. package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
  10. package/core/harnesses/claude/hooks/post-compact.sh +35 -32
  11. package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
  12. package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
  13. package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
  14. package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
  15. package/core/harnesses/claude/hooks/pre-implement-gate.sh +4 -1
  16. package/core/harnesses/claude/hooks/session-end.sh +23 -10
  17. package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
  18. package/core/harnesses/claude/settings/settings.json +26 -9
  19. package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
  20. package/core/harnesses/codex/agents/core-implementer.toml +1 -0
  21. package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
  22. package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
  23. package/core/harnesses/codex/agents/research-writer.toml +1 -1
  24. package/core/harnesses/codex/agents/reviewer.toml +10 -0
  25. package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
  26. package/core/harnesses/codex/agents/system-architect.toml +1 -1
  27. package/core/harnesses/codex/hooks/hooks.json +0 -10
  28. package/core/harnesses/codex/hooks/lib.sh +44 -25
  29. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +4 -1
  30. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
  31. package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
  32. package/core/harnesses/codex/hooks/pre-implement-gate.sh +4 -1
  33. package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
  34. package/core/harnesses/codex/hooks/subagent-audit.sh +1 -0
  35. package/core/harnesses/copilot/hooks/doflow-lib.sh +94 -0
  36. package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
  37. package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
  38. package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
  39. package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
  40. package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
  41. package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
  42. package/core/harnesses/copilot/hooks/doflow.json +51 -0
  43. package/core/harnesses/kiro/agents/doflow.json +1 -11
  44. package/core/harnesses/kiro/hooks/doflow.json +0 -10
  45. package/core/harnesses/kiro/hooks/lib.sh +26 -6
  46. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +8 -3
  47. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +8 -3
  48. package/core/harnesses/kiro/hooks/session-start.sh +1 -0
  49. package/core/harnesses/kiro/hooks/stop-check.sh +1 -0
  50. package/core/harnesses/pi/extensions/doflow-guard.js +11 -2
  51. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +1 -2
  52. package/core/harnesses/shared/hooks/adapters/antigravity.js +1 -1
  53. package/core/harnesses/shared/hooks/bridge/bridge.sh +126 -23
  54. package/core/harnesses/shared/hooks/bridge/envelope.jq +87 -18
  55. package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
  56. package/core/harnesses/shared/hooks/bridge/respond.sh +16 -2
  57. package/core/harnesses/shared/hooks/policies/capture-failure.sh +49 -16
  58. package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
  59. package/core/harnesses/shared/hooks/policies/contract.sh +3 -0
  60. package/core/harnesses/shared/hooks/policies/deny-json.sh +20 -7
  61. package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
  62. package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
  63. package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
  64. package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
  65. package/core/harnesses/shared/hooks/policies/lib.sh +63 -40
  66. package/core/harnesses/shared/hooks/policies/mcp-policy.conf +1 -1
  67. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +7 -8
  68. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +132 -57
  69. package/core/harnesses/shared/hooks/policies/session-context.sh +30 -1
  70. package/core/harnesses/shared/hooks/policies/stop-check.sh +27 -15
  71. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +6 -3
  72. package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
  73. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +60 -155
  74. package/core/harnesses/shared/hooks/stream-hook-runner.js +58 -20
  75. package/core/harnesses/shared/locator/doflow-run +2 -3
  76. package/core/registry/advice.json +3 -3
  77. package/core/registry/assets.json +55 -82
  78. package/core/registry/capabilities.json +12 -0
  79. package/core/registry/contracts.json +58 -31
  80. package/core/registry/contribution-points.json +35 -0
  81. package/core/registry/gates.json +32 -0
  82. package/core/registry/guidance-caps.json +40 -0
  83. package/core/registry/harnesses.json +1445 -366
  84. package/core/registry/intake.json +53 -0
  85. package/core/registry/lifecycle.json +599 -996
  86. package/core/registry/mcp.json +5 -1
  87. package/core/registry/models.json +7 -1
  88. package/core/registry/package-templates/README.md +19 -0
  89. package/core/registry/package-templates/agent/files/agent.md +9 -0
  90. package/core/registry/package-templates/agent/template.json +4 -0
  91. package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
  92. package/core/registry/package-templates/capability-provider/template.json +11 -0
  93. package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
  94. package/core/registry/package-templates/debate-preset/template.json +4 -0
  95. package/core/registry/package-templates/intake-category/files/category.json +8 -0
  96. package/core/registry/package-templates/intake-category/template.json +4 -0
  97. package/core/registry/package-templates/review-preset/files/preset.json +30 -0
  98. package/core/registry/package-templates/review-preset/template.json +4 -0
  99. package/core/registry/package-templates/skill/files/SKILL.md +8 -0
  100. package/core/registry/package-templates/skill/template.json +4 -0
  101. package/core/registry/package-templates/worker/files/worker.json +92 -0
  102. package/core/registry/package-templates/worker/template.json +11 -0
  103. package/core/registry/packages/doflow/doflow-package.json +15 -0
  104. package/core/registry/packages/doflow/presets/debate-3.json +26 -0
  105. package/core/registry/protocols.json +61 -0
  106. package/core/registry/routes.json +17 -0
  107. package/core/registry/rules.json +431 -0
  108. package/core/registry/settings.json +272 -0
  109. package/core/registry/storage.json +687 -31
  110. package/core/registry/telemetry.json +236 -0
  111. package/core/registry/transcripts.json +142 -0
  112. package/core/registry/verification.json +76 -6
  113. package/core/registry/workflows.json +55 -0
  114. package/core/shared/agent-specs/core-implementer.md +3 -0
  115. package/core/shared/agent-specs/delivery-lead.md +68 -0
  116. package/core/shared/agent-specs/quality-guardian.md +5 -1
  117. package/core/shared/agent-specs/research-writer.md +10 -3
  118. package/core/shared/agent-specs/reviewer.md +53 -0
  119. package/core/shared/agent-specs/spec-analyst.md +5 -6
  120. package/core/shared/agent-specs/system-architect.md +5 -1
  121. package/core/shared/guidance/DOFLOW_CORE.md +1 -5
  122. package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
  123. package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
  124. package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
  125. package/core/shared/guidance/pointers/codex.md +1 -4
  126. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
  127. package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
  128. package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
  129. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
  130. package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
  131. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
  132. package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
  133. package/core/shared/guidance/references/ORCHESTRATION.md +3 -2
  134. package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +19 -1
  135. package/core/shared/guidance/rules/RULES.md +45 -0
  136. package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
  137. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
  138. package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
  139. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
  140. package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
  141. package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
  142. package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
  143. package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
  144. package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
  145. package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
  146. package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
  147. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +49 -5
  148. package/core/shared/scripts/doflow/bin/doflow-run +152 -34
  149. package/core/shared/skills/do/SKILL.md +14 -12
  150. package/core/shared/skills/do/references/advice_calls.md +26 -0
  151. package/core/shared/skills/do/references/pm_routing.md +1 -2
  152. package/core/shared/skills/do/references/program_mode.md +31 -0
  153. package/core/shared/skills/do-brainstorm/SKILL.md +45 -97
  154. package/core/shared/skills/do-brainstorm/references/handoff_branches.md +36 -0
  155. package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
  156. package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
  157. package/core/shared/skills/do-code-review/SKILL.md +48 -148
  158. package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
  159. package/core/shared/skills/do-code-review/references/tools.md +90 -0
  160. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
  161. package/core/shared/skills/do-design/SKILL.md +23 -20
  162. package/core/shared/skills/do-diagnose/SKILL.md +18 -6
  163. package/core/shared/skills/do-document/SKILL.md +12 -1
  164. package/core/shared/skills/do-document/references/deep_research.md +1 -2
  165. package/core/shared/skills/do-document/references/embedded-research.md +19 -7
  166. package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
  167. package/core/shared/skills/do-execute-plan/SKILL.md +19 -60
  168. package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
  169. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
  170. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +26 -1
  171. package/core/shared/skills/do-execute-plan/references/run_position.md +16 -2
  172. package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
  173. package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
  174. package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
  175. package/core/shared/skills/do-flow/SKILL.md +10 -11
  176. package/core/shared/skills/do-flow/references/task_classes.md +5 -5
  177. package/core/shared/skills/do-git/SKILL.md +4 -0
  178. package/core/shared/skills/do-implement/SKILL.md +13 -14
  179. package/core/shared/skills/do-plan/SKILL.md +34 -20
  180. package/core/shared/skills/do-test/SKILL.md +7 -4
  181. package/core/shared/templates/doflow/constitution-template.md +9 -3
  182. package/core/shared/templates/doflow/data-model-template.md +1 -1
  183. package/core/shared/templates/doflow/design-template.md +113 -16
  184. package/core/shared/templates/doflow/plan-template.md +11 -10
  185. package/core/shared/templates/doflow/question-log-template.md +14 -2
  186. package/core/shared/templates/doflow/requirement-template.md +1 -1
  187. package/core/shared/workflows/do-flow-chain.md +2 -0
  188. package/core/worker-evidence/antigravity/checks.json +14 -0
  189. package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
  190. package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
  191. package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
  192. package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
  193. package/core/worker-evidence/codex/checks.json +38 -0
  194. package/package.json +10 -6
  195. package/src/adapters/antigravity/index.js +143 -66
  196. package/src/adapters/claude/index.js +46 -5
  197. package/src/adapters/codex/agents.js +25 -15
  198. package/src/adapters/codex/hooks.js +39 -3
  199. package/src/adapters/codex/index.js +61 -13
  200. package/src/adapters/codex/native-projection.js +6 -2
  201. package/src/adapters/copilot/index.js +58 -23
  202. package/src/adapters/copy-tree.js +291 -46
  203. package/src/adapters/guidance-manifest.js +71 -0
  204. package/src/adapters/guidance-pointer.js +19 -0
  205. package/src/adapters/hook-commands.js +6 -10
  206. package/src/adapters/index.js +1 -0
  207. package/src/adapters/kiro/index.js +23 -12
  208. package/src/adapters/opencode/index.js +8 -8
  209. package/src/adapters/pi/hooks.js +2 -1
  210. package/src/adapters/pi/index.js +14 -7
  211. package/src/adapters/resolve-source.js +26 -2
  212. package/src/cli/commands/install.js +2 -1
  213. package/src/cli/commands/reconcile.js +53 -9
  214. package/src/cli/commands/remove.js +2 -2
  215. package/src/cli/commands/rollback.js +6 -3
  216. package/src/cli/commands/self-update.js +18 -9
  217. package/src/cli/commands/status.js +22 -3
  218. package/src/cli/commands/ui.js +99 -0
  219. package/src/cli/commands/update.js +2 -1
  220. package/src/cli/index.js +337 -32
  221. package/src/cli/runtime-commands.js +220 -60
  222. package/src/cli/shared.js +0 -2
  223. package/src/helper/git.js +1 -1
  224. package/src/helper/guardrails.js +1 -1
  225. package/src/helper/marker-merge.js +31 -13
  226. package/src/helper/package-ids.js +37 -0
  227. package/src/helper/semver.js +94 -0
  228. package/src/install/backup.js +105 -15
  229. package/src/install/context.js +1 -1
  230. package/src/install/targets.js +31 -16
  231. package/src/lifecycle/coverage.js +4 -16
  232. package/src/lifecycle/hook-tier.js +160 -0
  233. package/src/lifecycle/index.js +412 -78
  234. package/src/lifecycle/retired-harnesses.js +318 -0
  235. package/src/lifecycle/view.js +35 -15
  236. package/src/registry/index.js +551 -26
  237. package/src/registry/worker-ids.js +45 -0
  238. package/src/release/build-package.js +0 -3
  239. package/src/release/docs-blocks.js +472 -0
  240. package/src/release/preflight.js +425 -0
  241. package/src/release/rehearse.js +401 -0
  242. package/src/release/release-workflow.js +733 -0
  243. package/src/release/sync-plugin-versions.js +43 -7
  244. package/src/runtime/advice/bench-gate.js +25 -0
  245. package/src/runtime/advice/cli.js +59 -16
  246. package/src/runtime/advice/client.js +32 -9
  247. package/src/runtime/advice/config.js +98 -133
  248. package/src/runtime/advice/doctor.js +1 -1
  249. package/src/runtime/advice/elevation.js +97 -0
  250. package/src/runtime/advice/endpoint-guard.js +9 -3
  251. package/src/runtime/advice/mode.js +37 -0
  252. package/src/runtime/advice/record.js +18 -5
  253. package/src/runtime/advice/registry.js +4 -1
  254. package/src/runtime/advice/shadow-config.js +229 -0
  255. package/src/runtime/advice/shadow-dispatcher.js +276 -0
  256. package/src/runtime/brief-rules.js +81 -0
  257. package/src/runtime/brief-tools.js +111 -34
  258. package/src/runtime/candidate.js +20 -11
  259. package/src/runtime/capabilities/executor.js +450 -0
  260. package/src/runtime/capabilities/loopback.js +41 -0
  261. package/src/runtime/capabilities/sanitizer.js +88 -0
  262. package/src/runtime/capability-router.js +135 -3
  263. package/src/runtime/checkouts.js +73 -11
  264. package/src/runtime/claims.js +13 -7
  265. package/src/runtime/cli.js +196 -19
  266. package/src/runtime/config-home.js +42 -0
  267. package/src/runtime/context/arbitrate.js +767 -0
  268. package/src/runtime/context/delivery-store.js +4 -6
  269. package/src/runtime/context/emission-rules.js +118 -0
  270. package/src/runtime/context/identity.js +227 -0
  271. package/src/runtime/context/pointer.js +67 -12
  272. package/src/runtime/context/primary-command.js +117 -0
  273. package/src/runtime/context/primary.js +344 -0
  274. package/src/runtime/context/summary-store.js +655 -0
  275. package/src/runtime/context-pack.js +158 -79
  276. package/src/runtime/decision-register.js +13 -4
  277. package/src/runtime/dispatch/admission.js +392 -0
  278. package/src/runtime/dispatch/attempt-end.js +274 -0
  279. package/src/runtime/dispatch/command.js +628 -0
  280. package/src/runtime/dispatch/controls.js +904 -0
  281. package/src/runtime/dispatch/envelope.js +276 -0
  282. package/src/runtime/dispatch/grants.js +310 -0
  283. package/src/runtime/dispatch/integrate.js +617 -0
  284. package/src/runtime/dispatch/loop.js +1835 -0
  285. package/src/runtime/dispatch/store.js +352 -0
  286. package/src/runtime/dispatch/verify-run.js +201 -0
  287. package/src/runtime/evidence-ledger.js +52 -7
  288. package/src/runtime/failure/capture.js +3 -1
  289. package/src/runtime/failure/cli.js +25 -9
  290. package/src/runtime/failure/home.js +57 -30
  291. package/src/runtime/failure/store.js +7 -2
  292. package/src/runtime/feature-pointer.js +174 -0
  293. package/src/runtime/feature-resolve.js +13 -2
  294. package/src/runtime/fleet/command.js +77 -0
  295. package/src/runtime/fleet/projects.js +178 -0
  296. package/src/runtime/fleet/tree.js +383 -0
  297. package/src/runtime/freshness.js +33 -3
  298. package/src/runtime/git-memo.js +46 -0
  299. package/src/runtime/guidance/ablation.js +427 -0
  300. package/src/runtime/health.js +624 -18
  301. package/src/runtime/history-compactor.js +13 -3
  302. package/src/runtime/implementation-gate.js +281 -26
  303. package/src/runtime/intake/engine.js +677 -0
  304. package/src/runtime/intake/index.js +136 -0
  305. package/src/runtime/intake/manifest.js +140 -0
  306. package/src/runtime/intake/taxonomy.js +206 -0
  307. package/src/runtime/inventory/coverage.js +1 -1
  308. package/src/runtime/inventory/index.js +1 -1
  309. package/src/runtime/inventory/precedence.js +2 -2
  310. package/src/runtime/inventory/siblings.js +6 -4
  311. package/src/runtime/knowledge/code-corpus.js +277 -0
  312. package/src/runtime/knowledge/code-lexical.js +130 -0
  313. package/src/runtime/knowledge/code-retrieval.js +307 -0
  314. package/src/runtime/knowledge/code-validation.js +106 -0
  315. package/src/runtime/knowledge/gp3-gate.js +74 -0
  316. package/src/runtime/knowledge/graph-adapter.js +288 -0
  317. package/src/runtime/knowledge/graph-fallback.js +394 -0
  318. package/src/runtime/knowledge/hybrid.js +136 -8
  319. package/src/runtime/knowledge/retrieval.js +34 -1
  320. package/src/runtime/knowledge/rtk-compress.js +77 -0
  321. package/src/runtime/knowledge/semble-bridge.py +106 -0
  322. package/src/runtime/knowledge/semble-lifecycle.js +114 -0
  323. package/src/runtime/knowledge/semble-provider.js +365 -0
  324. package/src/runtime/lifecycle/cli.js +88 -10
  325. package/src/runtime/lifecycle/event-store.js +8 -6
  326. package/src/runtime/lifecycle/followup.js +38 -7
  327. package/src/runtime/lifecycle/overview.js +26 -2
  328. package/src/runtime/lifecycle/report-store.js +8 -10
  329. package/src/runtime/lifecycle/retention.js +95 -31
  330. package/src/runtime/lifecycle/root.js +9 -1
  331. package/src/runtime/lifecycle/status.js +34 -17
  332. package/src/runtime/lifecycle/store-upkeep.js +56 -7
  333. package/src/runtime/mask.js +134 -7
  334. package/src/runtime/mcp-consultations.js +40 -6
  335. package/src/runtime/model-router.js +79 -7
  336. package/src/runtime/models/catalogue.js +191 -0
  337. package/src/runtime/models/command.js +153 -0
  338. package/src/runtime/off-words.js +12 -0
  339. package/src/runtime/outcome.js +2 -2
  340. package/src/runtime/packages/command.js +1009 -0
  341. package/src/runtime/packages/contributions.js +116 -0
  342. package/src/runtime/packages/digest.js +132 -0
  343. package/src/runtime/packages/fetch.js +182 -0
  344. package/src/runtime/packages/grants.js +192 -0
  345. package/src/runtime/packages/index-file.js +134 -0
  346. package/src/runtime/packages/instruction.js +90 -0
  347. package/src/runtime/packages/manifest.js +331 -0
  348. package/src/runtime/packages/points.js +487 -0
  349. package/src/runtime/packages/programs.js +216 -0
  350. package/src/runtime/packages/scaffold.js +277 -0
  351. package/src/runtime/packages/source.js +90 -0
  352. package/src/runtime/packages/state.js +164 -0
  353. package/src/runtime/packages/store.js +449 -0
  354. package/src/runtime/packages/tar.js +106 -0
  355. package/src/runtime/packages/view.js +406 -0
  356. package/src/runtime/plan-check.js +59 -0
  357. package/src/runtime/plan-content.js +324 -0
  358. package/src/runtime/policy-init.js +118 -0
  359. package/src/runtime/profiles/doctor.js +96 -0
  360. package/src/runtime/profiles/resolve.js +244 -0
  361. package/src/runtime/profiles/rollback.js +254 -0
  362. package/src/runtime/profiles/sampler.js +41 -0
  363. package/src/runtime/readiness-record.js +16 -11
  364. package/src/runtime/readiness.js +46 -5
  365. package/src/runtime/research-request.js +50 -25
  366. package/src/runtime/retrieval-plan.js +10 -30
  367. package/src/runtime/retrieval-record.js +75 -5
  368. package/src/runtime/review/command.js +246 -0
  369. package/src/runtime/review/dominance.js +68 -0
  370. package/src/runtime/review/findings.js +434 -0
  371. package/src/runtime/review/identity.js +255 -0
  372. package/src/runtime/review/protocol-command.js +109 -0
  373. package/src/runtime/review/protocols.js +405 -0
  374. package/src/runtime/review/resolve-protocol.js +302 -0
  375. package/src/runtime/review/start.js +530 -0
  376. package/src/runtime/roadmap/attendance.js +137 -0
  377. package/src/runtime/roadmap/facts.js +479 -0
  378. package/src/runtime/roadmap/gates.js +273 -0
  379. package/src/runtime/roadmap/loop.js +1719 -0
  380. package/src/runtime/roadmap/merge.js +390 -0
  381. package/src/runtime/roadmap/rows.js +1122 -0
  382. package/src/runtime/roadmap/seed.js +1063 -0
  383. package/src/runtime/roadmap/worktree-cleanup.js +147 -0
  384. package/src/runtime/rules-report.js +336 -0
  385. package/src/runtime/scaffold/artifacts.js +60 -9
  386. package/src/runtime/scaffold/generate.js +21 -9
  387. package/src/runtime/settings/autopilot.js +106 -0
  388. package/src/runtime/settings/cli.js +280 -0
  389. package/src/runtime/settings/config-write.js +314 -0
  390. package/src/runtime/settings/files.js +271 -0
  391. package/src/runtime/settings/legacy.js +154 -0
  392. package/src/runtime/settings/lexical.js +56 -0
  393. package/src/runtime/settings/prepared-run.js +269 -0
  394. package/src/runtime/settings/project-layers.js +118 -0
  395. package/src/runtime/settings/refs.js +288 -0
  396. package/src/runtime/settings/registry.js +553 -0
  397. package/src/runtime/settings/resolve.js +713 -0
  398. package/src/runtime/settings/shared.js +37 -0
  399. package/src/runtime/settings/worker-billing.js +107 -0
  400. package/src/runtime/settings/write.js +269 -0
  401. package/src/runtime/slot-command.js +78 -0
  402. package/src/runtime/slots.js +671 -0
  403. package/src/runtime/source-version.js +1 -0
  404. package/src/runtime/state-root.js +217 -0
  405. package/src/runtime/storage/cli.js +12 -5
  406. package/src/runtime/storage/engine.js +9 -2
  407. package/src/runtime/storage/registry.js +14 -1
  408. package/src/runtime/storage/roots.js +66 -16
  409. package/src/runtime/storage/rules.js +82 -10
  410. package/src/runtime/storage/upkeep.js +10 -2
  411. package/src/runtime/storage/work-status.js +245 -26
  412. package/src/runtime/task-attempts.js +589 -69
  413. package/src/runtime/task-classifier.js +85 -14
  414. package/src/runtime/task-graph.js +373 -0
  415. package/src/runtime/task-run.js +778 -0
  416. package/src/runtime/task-scope.js +176 -55
  417. package/src/runtime/task-sources.js +147 -0
  418. package/src/runtime/task-state.js +373 -64
  419. package/src/runtime/team/admission.js +301 -0
  420. package/src/runtime/team/envelope.js +324 -0
  421. package/src/runtime/team/review-guard.js +156 -0
  422. package/src/runtime/trace/analyze.js +427 -0
  423. package/src/runtime/trace/baseline.js +770 -0
  424. package/src/runtime/trace/ledger.js +63 -140
  425. package/src/runtime/trace/otlp-export.js +568 -0
  426. package/src/runtime/trace/otlp-map.js +481 -0
  427. package/src/runtime/trace/spans.js +745 -0
  428. package/src/runtime/trace/telemetry.js +225 -0
  429. package/src/runtime/trace/views.js +1 -0
  430. package/src/runtime/transcripts/command.js +98 -0
  431. package/src/runtime/transcripts/cursor.js +326 -0
  432. package/src/runtime/transcripts/read.js +126 -0
  433. package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
  434. package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
  435. package/src/runtime/transcripts/readers/copilot-events.js +90 -0
  436. package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
  437. package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
  438. package/src/runtime/transcripts/registry.js +161 -0
  439. package/src/runtime/transcripts/stats.js +161 -0
  440. package/src/runtime/verb-view.js +267 -0
  441. package/src/runtime/verification/check-key.js +628 -0
  442. package/src/runtime/verification/contract-runner.js +546 -11
  443. package/src/runtime/verification/engine.js +499 -54
  444. package/src/runtime/verification/impact.js +617 -0
  445. package/src/runtime/verification/inflight.js +205 -0
  446. package/src/runtime/verification/registry.js +176 -0
  447. package/src/runtime/verification/reuse.js +184 -0
  448. package/src/runtime/verification/telemetry-emit.js +254 -0
  449. package/src/runtime/verification/test-selection.js +67 -7
  450. package/src/runtime/worker/active.js +90 -0
  451. package/src/runtime/worker/cancel.js +222 -0
  452. package/src/runtime/worker/catalogue.js +122 -0
  453. package/src/runtime/worker/command.js +677 -0
  454. package/src/runtime/worker/evidence.js +288 -0
  455. package/src/runtime/worker/launch.js +256 -0
  456. package/src/runtime/worker/models.js +137 -0
  457. package/src/runtime/worker/parsers.js +218 -0
  458. package/src/runtime/worker/probes/index.js +706 -0
  459. package/src/runtime/worker/process-tree.js +415 -0
  460. package/src/runtime/worker/quota.js +43 -0
  461. package/src/runtime/worker/readiness.js +713 -0
  462. package/src/runtime/worker/run-store.js +166 -0
  463. package/src/runtime/worker/supervisor.js +541 -0
  464. package/src/runtime/worker/worktree-check.js +252 -0
  465. package/src/runtime/workflow-engine.js +5 -1
  466. package/src/runtime/workflow-orchestrator.js +610 -67
  467. package/src/runtime/worktree.js +149 -22
  468. package/src/state/index.js +1 -1
  469. package/src/state/lockfile.js +64 -10
  470. package/src/state/run-lock.js +1 -1
  471. package/types/node-commonjs.d.ts +106 -7
  472. package/core/harnesses/claude/hooks/pre-bash-guard.sh +0 -10
  473. package/core/harnesses/codex/hooks/pre-bash-guard.sh +0 -10
  474. package/core/harnesses/gemini/hooks/hooks.json +0 -77
  475. package/core/harnesses/gemini/hooks/lib.sh +0 -302
  476. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -10
  477. package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
  478. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -10
  479. package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
  480. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -10
  481. package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
  482. package/core/harnesses/gemini/hooks/session-end.sh +0 -5
  483. package/core/harnesses/gemini/hooks/session-start.sh +0 -7
  484. package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
  485. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +0 -24
  486. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +0 -91
  487. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +0 -378
  488. package/core/shared/guidance/FLAGS.md +0 -25
  489. package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
  490. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
  491. package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
  492. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
  493. package/src/adapters/gemini/hooks.js +0 -251
  494. package/src/adapters/gemini/index.js +0 -429
@@ -20,10 +20,6 @@
20
20
  "hook-review"
21
21
  ]
22
22
  },
23
- "gemini": {
24
- "event": "BeforeTool",
25
- "status": "different"
26
- },
27
23
  "opencode": {
28
24
  "status": "unavailable",
29
25
  "fallback": "guidance"
@@ -33,61 +29,16 @@
33
29
  "status": "different"
34
30
  },
35
31
  "copilot": {
36
- "status": "unavailable",
37
- "fallback": "guidance"
38
- },
39
- "kiro": {
40
- "event": "PreToolUse",
41
- "status": "supported"
42
- },
43
- "antigravity": {
44
- "event": "PreToolUse",
45
- "status": "supported"
46
- }
47
- }
48
- },
49
- {
50
- "id": "pre-bash-guard",
51
- "intent": "block-destructive-commands",
52
- "tier": "enhanced",
53
- "requires": [
54
- "hooks"
55
- ],
56
- "mappings": {
57
- "claude": {
58
32
  "event": "PreToolUse",
59
33
  "status": "supported"
60
34
  },
61
- "codex": {
62
- "event": "PreToolUse",
63
- "status": "different",
64
- "prerequisites": [
65
- "hook-review"
66
- ]
67
- },
68
- "gemini": {
69
- "event": "BeforeTool",
70
- "status": "different"
71
- },
72
- "opencode": {
73
- "status": "unavailable",
74
- "fallback": "guidance"
75
- },
76
- "pi": {
77
- "event": "tool_call",
78
- "status": "different"
79
- },
80
- "copilot": {
81
- "status": "unavailable",
82
- "fallback": "guidance"
83
- },
84
35
  "kiro": {
85
36
  "event": "PreToolUse",
86
37
  "status": "supported"
87
38
  },
88
39
  "antigravity": {
89
- "status": "unavailable",
90
- "fallback": "guidance"
40
+ "event": "PreToolUse",
41
+ "status": "supported"
91
42
  }
92
43
  }
93
44
  },
@@ -110,10 +61,6 @@
110
61
  "hook-review"
111
62
  ]
112
63
  },
113
- "gemini": {
114
- "event": "SessionStart",
115
- "status": "supported"
116
- },
117
64
  "opencode": {
118
65
  "status": "unavailable",
119
66
  "fallback": "guidance"
@@ -123,8 +70,8 @@
123
70
  "fallback": "guidance"
124
71
  },
125
72
  "copilot": {
126
- "status": "unavailable",
127
- "fallback": "guidance"
73
+ "event": "SessionStart",
74
+ "status": "supported"
128
75
  },
129
76
  "kiro": {
130
77
  "event": "SessionStart",
@@ -156,10 +103,6 @@
156
103
  "hook-review"
157
104
  ]
158
105
  },
159
- "gemini": {
160
- "event": "BeforeTool",
161
- "status": "different"
162
- },
163
106
  "opencode": {
164
107
  "status": "unavailable",
165
108
  "fallback": "guidance"
@@ -169,8 +112,8 @@
169
112
  "status": "different"
170
113
  },
171
114
  "copilot": {
172
- "status": "unavailable",
173
- "fallback": "guidance"
115
+ "event": "PreToolUse",
116
+ "status": "supported"
174
117
  },
175
118
  "kiro": {
176
119
  "event": "PreToolUse",
@@ -201,10 +144,6 @@
201
144
  "hook-review"
202
145
  ]
203
146
  },
204
- "gemini": {
205
- "status": "unavailable",
206
- "fallback": "guidance"
207
- },
208
147
  "opencode": {
209
148
  "status": "unavailable",
210
149
  "fallback": "guidance"
@@ -214,8 +153,8 @@
214
153
  "fallback": "guidance"
215
154
  },
216
155
  "copilot": {
217
- "status": "unavailable",
218
- "fallback": "guidance"
156
+ "event": "Stop",
157
+ "status": "supported"
219
158
  },
220
159
  "kiro": {
221
160
  "event": "Stop",
@@ -230,7 +169,7 @@
230
169
  ],
231
170
  "coverage": {
232
171
  "schemaVersion": 1,
233
- "revision": 2,
172
+ "revision": 3,
234
173
  "refresh": {
235
174
  "trigger": "a harness bridge, template or installed harness version changes",
236
175
  "owner": "the feature that changes it"
@@ -256,11 +195,11 @@
256
195
  "timing": "pre-tool",
257
196
  "profile": "any",
258
197
  "wired": true,
259
- "configSource": "core/harnesses/claude/settings/settings.json:89",
198
+ "configSource": "core/harnesses/claude/settings/settings.json:97",
260
199
  "harnessVersion": {
261
200
  "tested": "2.1.287 (Claude Code)"
262
201
  },
263
- "class": "blocking",
202
+ "class": "advisory",
264
203
  "verification": "verified",
265
204
  "prerequisites": [],
266
205
  "covers": [],
@@ -292,7 +231,7 @@
292
231
  "harnessVersion": {
293
232
  "tested": "codex-cli 0.162.1"
294
233
  },
295
- "class": "blocking",
234
+ "class": "advisory",
296
235
  "verification": "verified",
297
236
  "prerequisites": [
298
237
  "hook-review"
@@ -315,38 +254,6 @@
315
254
  }
316
255
  ]
317
256
  },
318
- {
319
- "policy": "pre-implementation-gate",
320
- "harness": "gemini",
321
- "event": "BeforeTool",
322
- "timing": "pre-tool",
323
- "profile": "any",
324
- "wired": true,
325
- "configSource": "core/harnesses/gemini/hooks/hooks.json:25",
326
- "harnessVersion": {
327
- "tested": "0.55.1"
328
- },
329
- "class": "blocking",
330
- "verification": "verified",
331
- "prerequisites": [],
332
- "covers": [],
333
- "doesNotCover": [
334
- "writes via shell commands"
335
- ],
336
- "caveats": [],
337
- "provenance": [
338
- {
339
- "kind": "doc",
340
- "locator": "https://geminicli.com/docs/hooks/",
341
- "date": "2026-10-12"
342
- },
343
- {
344
- "kind": "fixture",
345
- "locator": "test/fixtures/hooks/gemini/pre-implement-gate/deny.json",
346
- "date": "2026-10-14"
347
- }
348
- ]
349
- },
350
257
  {
351
258
  "policy": "pre-implementation-gate",
352
259
  "harness": "opencode",
@@ -381,11 +288,11 @@
381
288
  "timing": "pre-tool",
382
289
  "profile": "cli-extension",
383
290
  "wired": true,
384
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
291
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
385
292
  "harnessVersion": {
386
293
  "tested": "1.1.0"
387
294
  },
388
- "class": "blocking",
295
+ "class": "advisory",
389
296
  "verification": "verified",
390
297
  "prerequisites": [],
391
298
  "covers": [],
@@ -455,7 +362,7 @@
455
362
  "timing": "pre-tool",
456
363
  "profile": "user-headless",
457
364
  "wired": true,
458
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
365
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
459
366
  "harnessVersion": {
460
367
  "tested": "1.1.0"
461
368
  },
@@ -495,7 +402,7 @@
495
402
  "timing": "pre-tool",
496
403
  "profile": "project-headless",
497
404
  "wired": true,
498
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
405
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
499
406
  "harnessVersion": {
500
407
  "tested": "1.1.0"
501
408
  },
@@ -572,13 +479,41 @@
572
479
  ]
573
480
  },
574
481
  {
575
- "policy": "pre-bash-guard",
482
+ "policy": "session-context",
483
+ "harness": "pi",
484
+ "event": "*",
485
+ "timing": "session",
486
+ "profile": "any",
487
+ "wired": false,
488
+ "configSource": null,
489
+ "harnessVersion": {
490
+ "tested": "1.1.0"
491
+ },
492
+ "class": "unsupported",
493
+ "verification": "unverified",
494
+ "prerequisites": [],
495
+ "covers": [],
496
+ "doesNotCover": [],
497
+ "caveats": [
498
+ "not wired for this harness mapping",
499
+ "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
500
+ ],
501
+ "provenance": [
502
+ {
503
+ "kind": "doc",
504
+ "locator": "core/registry/lifecycle.json: policy session-context mapping for pi",
505
+ "date": "2026-10-14"
506
+ }
507
+ ]
508
+ },
509
+ {
510
+ "policy": "mcp-tool-guard",
576
511
  "harness": "pi",
577
512
  "event": "tool_call",
578
513
  "timing": "pre-tool",
579
514
  "profile": "cli-extension",
580
515
  "wired": true,
581
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
516
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
582
517
  "harnessVersion": {
583
518
  "tested": "1.1.0"
584
519
  },
@@ -603,13 +538,13 @@
603
538
  },
604
539
  {
605
540
  "kind": "fixture",
606
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
541
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
607
542
  "date": "2026-10-14"
608
543
  }
609
544
  ]
610
545
  },
611
546
  {
612
- "policy": "pre-bash-guard",
547
+ "policy": "mcp-tool-guard",
613
548
  "harness": "pi",
614
549
  "event": "tool_execution_start",
615
550
  "timing": "post-tool",
@@ -636,13 +571,13 @@
636
571
  ]
637
572
  },
638
573
  {
639
- "policy": "pre-bash-guard",
574
+ "policy": "mcp-tool-guard",
640
575
  "harness": "pi",
641
576
  "event": "tool_call",
642
577
  "timing": "pre-tool",
643
578
  "profile": "user-headless",
644
579
  "wired": true,
645
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
580
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
646
581
  "harnessVersion": {
647
582
  "tested": "1.1.0"
648
583
  },
@@ -668,19 +603,19 @@
668
603
  },
669
604
  {
670
605
  "kind": "fixture",
671
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
606
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
672
607
  "date": "2026-10-14"
673
608
  }
674
609
  ]
675
610
  },
676
611
  {
677
- "policy": "pre-bash-guard",
612
+ "policy": "mcp-tool-guard",
678
613
  "harness": "pi",
679
614
  "event": "tool_call",
680
615
  "timing": "pre-tool",
681
616
  "profile": "project-headless",
682
617
  "wired": true,
683
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
618
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
684
619
  "harnessVersion": {
685
620
  "tested": "1.1.0"
686
621
  },
@@ -709,13 +644,13 @@
709
644
  },
710
645
  {
711
646
  "kind": "fixture",
712
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
647
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
713
648
  "date": "2026-10-14"
714
649
  }
715
650
  ]
716
651
  },
717
652
  {
718
- "policy": "pre-bash-guard",
653
+ "policy": "mcp-tool-guard",
719
654
  "harness": "pi",
720
655
  "event": "*",
721
656
  "timing": "pre-tool",
@@ -747,16 +682,16 @@
747
682
  },
748
683
  {
749
684
  "kind": "fixture",
750
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
685
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
751
686
  "date": "2026-10-14"
752
687
  }
753
688
  ]
754
689
  },
755
690
  {
756
- "policy": "session-context",
691
+ "policy": "stop-check",
757
692
  "harness": "pi",
758
693
  "event": "*",
759
- "timing": "session",
694
+ "timing": "stop",
760
695
  "profile": "any",
761
696
  "wired": false,
762
697
  "configSource": null,
@@ -775,659 +710,138 @@
775
710
  "provenance": [
776
711
  {
777
712
  "kind": "doc",
778
- "locator": "core/registry/lifecycle.json: policy session-context mapping for pi",
713
+ "locator": "core/registry/lifecycle.json: policy stop-check mapping for pi",
779
714
  "date": "2026-10-14"
780
715
  }
781
716
  ]
782
717
  },
783
718
  {
784
- "policy": "mcp-tool-guard",
785
- "harness": "pi",
786
- "event": "tool_call",
719
+ "policy": "pre-implementation-gate",
720
+ "harness": "copilot",
721
+ "event": "PreToolUse",
787
722
  "timing": "pre-tool",
788
- "profile": "cli-extension",
723
+ "profile": "any",
789
724
  "wired": true,
790
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
725
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:12",
791
726
  "harnessVersion": {
792
- "tested": "1.1.0"
727
+ "tested": "GitHub Copilot CLI 1.0.103"
793
728
  },
794
- "class": "unknown",
795
- "verification": "unverified",
729
+ "class": "advisory",
730
+ "verification": "verified",
796
731
  "prerequisites": [],
797
732
  "covers": [],
798
- "doesNotCover": [],
733
+ "doesNotCover": [
734
+ "writes via shell commands"
735
+ ],
799
736
  "caveats": [
800
- "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
737
+ "live-verified: the preToolUse deny shape (a shell command was blocked) and the apply_patch payload; the edit and create tool arguments are not captured, so their path field is assumed to be `path` or `file_path`",
738
+ "version-drift:GitHub Copilot CLI 1.0.104."
801
739
  ],
802
740
  "provenance": [
803
- {
804
- "kind": "types",
805
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
806
- "date": "2026-10-14"
807
- },
808
741
  {
809
742
  "kind": "doc",
810
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
811
- "date": "2026-10-14"
743
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
744
+ "date": "2026-10-27"
812
745
  },
813
746
  {
814
747
  "kind": "fixture",
815
- "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
816
- "date": "2026-10-14"
748
+ "locator": "test/fixtures/hooks/copilot/pre-implement-gate/apply_patch-deny.json",
749
+ "date": "2026-10-27"
750
+ },
751
+ {
752
+ "kind": "live",
753
+ "locator": "test/fixtures/hooks/copilot/live/deny-proof-2026-10-27.json",
754
+ "date": "2026-10-27"
755
+ },
756
+ {
757
+ "kind": "live",
758
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
759
+ "date": "2026-10-27"
817
760
  }
818
761
  ]
819
762
  },
820
763
  {
821
- "policy": "mcp-tool-guard",
822
- "harness": "pi",
823
- "event": "tool_execution_start",
824
- "timing": "post-tool",
825
- "profile": "cli-extension",
826
- "wired": false,
827
- "configSource": null,
764
+ "policy": "pre-implementation-gate",
765
+ "harness": "kiro",
766
+ "event": "PreToolUse",
767
+ "timing": "pre-tool",
768
+ "profile": "ide",
769
+ "wired": true,
770
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
828
771
  "harnessVersion": {
829
- "tested": "1.1.0"
772
+ "tested": "kiro-cli 2.29.1"
830
773
  },
831
- "class": "observation",
832
- "verification": "unverified",
774
+ "class": "advisory",
775
+ "verification": "verified",
833
776
  "prerequisites": [],
834
777
  "covers": [],
835
- "doesNotCover": [],
836
- "caveats": [
837
- "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
778
+ "doesNotCover": [
779
+ "writes via shell commands"
838
780
  ],
781
+ "caveats": [],
839
782
  "provenance": [
840
783
  {
841
784
  "kind": "doc",
842
- "locator": "https://pi.dev/docs/latest/extensions",
785
+ "locator": "https://kiro.dev/docs/hooks/types/",
786
+ "date": "2026-10-12"
787
+ },
788
+ {
789
+ "kind": "fixture",
790
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
843
791
  "date": "2026-10-14"
844
792
  }
845
793
  ]
846
794
  },
847
795
  {
848
- "policy": "mcp-tool-guard",
849
- "harness": "pi",
850
- "event": "tool_call",
796
+ "policy": "pre-implementation-gate",
797
+ "harness": "kiro",
798
+ "event": "PreToolUse",
851
799
  "timing": "pre-tool",
852
- "profile": "user-headless",
800
+ "profile": "cli-v3",
853
801
  "wired": true,
854
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
802
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
855
803
  "harnessVersion": {
856
- "tested": "1.1.0"
804
+ "tested": "kiro-cli 2.29.1"
857
805
  },
858
- "class": "unknown",
859
- "verification": "unverified",
806
+ "class": "advisory",
807
+ "verification": "verified",
860
808
  "prerequisites": [],
861
809
  "covers": [],
862
- "doesNotCover": [],
863
- "caveats": [
864
- "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
865
- "live probe pending"
810
+ "doesNotCover": [
811
+ "writes via shell commands"
866
812
  ],
813
+ "caveats": [],
867
814
  "provenance": [
868
- {
869
- "kind": "types",
870
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
871
- "date": "2026-10-14"
872
- },
873
815
  {
874
816
  "kind": "doc",
875
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
876
- "date": "2026-10-14"
817
+ "locator": "https://kiro.dev/docs/hooks/types/",
818
+ "date": "2026-10-12"
877
819
  },
878
820
  {
879
821
  "kind": "fixture",
880
- "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
822
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
881
823
  "date": "2026-10-14"
882
824
  }
883
825
  ]
884
826
  },
885
827
  {
886
- "policy": "mcp-tool-guard",
887
- "harness": "pi",
888
- "event": "tool_call",
828
+ "policy": "pre-implementation-gate",
829
+ "harness": "kiro",
830
+ "event": "PreToolUse",
889
831
  "timing": "pre-tool",
890
- "profile": "project-headless",
832
+ "profile": "cli-v3-agent",
891
833
  "wired": true,
892
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
834
+ "configSource": "core/harnesses/kiro/agents/doflow.json:11",
893
835
  "harnessVersion": {
894
- "tested": "1.1.0"
836
+ "tested": "kiro-cli 2.29.1"
895
837
  },
896
- "class": "unknown",
897
- "verification": "unverified",
898
- "prerequisites": [
899
- "project-trust"
900
- ],
901
- "covers": [],
902
- "doesNotCover": [],
903
- "caveats": [
904
- "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
905
- "live probe pending",
906
- "project-trust is required for the project-scope extension"
907
- ],
908
- "provenance": [
909
- {
910
- "kind": "types",
911
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
912
- "date": "2026-10-14"
913
- },
914
- {
915
- "kind": "doc",
916
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
917
- "date": "2026-10-14"
918
- },
919
- {
920
- "kind": "fixture",
921
- "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
922
- "date": "2026-10-14"
923
- }
924
- ]
925
- },
926
- {
927
- "policy": "mcp-tool-guard",
928
- "harness": "pi",
929
- "event": "*",
930
- "timing": "pre-tool",
931
- "profile": "no-extensions",
932
- "wired": false,
933
- "configSource": null,
934
- "harnessVersion": {
935
- "tested": "1.1.0"
936
- },
937
- "class": "unsupported",
938
- "verification": "unverified",
939
- "prerequisites": [],
940
- "covers": [],
941
- "doesNotCover": [],
942
- "caveats": [
943
- "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
944
- "Pi extension unavailable in this profile"
945
- ],
946
- "provenance": [
947
- {
948
- "kind": "types",
949
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
950
- "date": "2026-10-14"
951
- },
952
- {
953
- "kind": "doc",
954
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
955
- "date": "2026-10-14"
956
- },
957
- {
958
- "kind": "fixture",
959
- "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
960
- "date": "2026-10-14"
961
- }
962
- ]
963
- },
964
- {
965
- "policy": "stop-check",
966
- "harness": "pi",
967
- "event": "*",
968
- "timing": "stop",
969
- "profile": "any",
970
- "wired": false,
971
- "configSource": null,
972
- "harnessVersion": {
973
- "tested": "1.1.0"
974
- },
975
- "class": "unsupported",
976
- "verification": "unverified",
977
- "prerequisites": [],
978
- "covers": [],
979
- "doesNotCover": [],
980
- "caveats": [
981
- "not wired for this harness mapping",
982
- "Pi user- and project-scope extensions have not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it"
983
- ],
984
- "provenance": [
985
- {
986
- "kind": "doc",
987
- "locator": "core/registry/lifecycle.json: policy stop-check mapping for pi",
988
- "date": "2026-10-14"
989
- }
990
- ]
991
- },
992
- {
993
- "policy": "pre-implementation-gate",
994
- "harness": "copilot",
995
- "event": "PreToolUse",
996
- "timing": "pre-tool",
997
- "profile": "any",
998
- "wired": false,
999
- "configSource": null,
1000
- "harnessVersion": {
1001
- "tested": "GitHub Copilot CLI 1.0.78"
1002
- },
1003
- "class": "unknown",
1004
- "verification": "unverified",
1005
- "prerequisites": [],
1006
- "covers": [],
1007
- "doesNotCover": [
1008
- "writes via shell commands"
1009
- ],
1010
- "caveats": [
1011
- "fixture-pending",
1012
- "version-drift:GitHub Copilot CLI 1.0.78."
1013
- ],
1014
- "provenance": [
1015
- {
1016
- "kind": "doc",
1017
- "locator": "core/registry/contracts.json: Copilot documented event inventory",
1018
- "date": "2026-10-14"
1019
- }
1020
- ]
1021
- },
1022
- {
1023
- "policy": "pre-implementation-gate",
1024
- "harness": "copilot",
1025
- "event": "*",
1026
- "timing": "pre-tool",
1027
- "profile": "any",
1028
- "wired": false,
1029
- "configSource": null,
1030
- "harnessVersion": {
1031
- "tested": "GitHub Copilot CLI 1.0.78"
1032
- },
1033
- "class": "unsupported",
1034
- "verification": "unverified",
1035
- "prerequisites": [],
1036
- "covers": [],
1037
- "doesNotCover": [
1038
- "writes via shell commands"
1039
- ],
1040
- "caveats": [
1041
- "version-drift:GitHub Copilot CLI 1.0.78."
1042
- ],
1043
- "provenance": [
1044
- {
1045
- "kind": "doc",
1046
- "locator": "core/registry/harnesses.json: copilot harness; core/registry/contracts.json: unavailable hook mapping",
1047
- "date": "2026-10-12"
1048
- }
1049
- ]
1050
- },
1051
- {
1052
- "policy": "pre-implementation-gate",
1053
- "harness": "kiro",
1054
- "event": "PreToolUse",
1055
- "timing": "pre-tool",
1056
- "profile": "ide",
1057
- "wired": true,
1058
- "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1059
- "harnessVersion": {
1060
- "tested": "kiro-cli 2.29.1"
1061
- },
1062
- "class": "blocking",
1063
- "verification": "verified",
1064
- "prerequisites": [],
1065
- "covers": [],
1066
- "doesNotCover": [
1067
- "writes via shell commands"
1068
- ],
1069
- "caveats": [],
1070
- "provenance": [
1071
- {
1072
- "kind": "doc",
1073
- "locator": "https://kiro.dev/docs/hooks/types/",
1074
- "date": "2026-10-12"
1075
- },
1076
- {
1077
- "kind": "fixture",
1078
- "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
1079
- "date": "2026-10-14"
1080
- }
1081
- ]
1082
- },
1083
- {
1084
- "policy": "pre-implementation-gate",
1085
- "harness": "kiro",
1086
- "event": "PreToolUse",
1087
- "timing": "pre-tool",
1088
- "profile": "cli-v3",
1089
- "wired": true,
1090
- "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1091
- "harnessVersion": {
1092
- "tested": "kiro-cli 2.29.1"
1093
- },
1094
- "class": "blocking",
1095
- "verification": "verified",
1096
- "prerequisites": [],
1097
- "covers": [],
1098
- "doesNotCover": [
1099
- "writes via shell commands"
1100
- ],
1101
- "caveats": [],
1102
- "provenance": [
1103
- {
1104
- "kind": "doc",
1105
- "locator": "https://kiro.dev/docs/hooks/types/",
1106
- "date": "2026-10-12"
1107
- },
1108
- {
1109
- "kind": "fixture",
1110
- "locator": "test/fixtures/hooks/kiro/pre-implement-gate/deny.json",
1111
- "date": "2026-10-14"
1112
- }
1113
- ]
1114
- },
1115
- {
1116
- "policy": "pre-implementation-gate",
1117
- "harness": "kiro",
1118
- "event": "PreToolUse",
1119
- "timing": "pre-tool",
1120
- "profile": "cli-v3-agent",
1121
- "wired": true,
1122
- "configSource": "core/harnesses/kiro/agents/doflow.json:11",
1123
- "harnessVersion": {
1124
- "tested": "kiro-cli 2.29.1"
1125
- },
1126
- "class": "blocking",
1127
- "verification": "verified",
1128
- "prerequisites": [],
1129
- "covers": [],
1130
- "doesNotCover": [
1131
- "writes via shell commands"
1132
- ],
1133
- "caveats": [],
1134
- "provenance": [
1135
- {
1136
- "kind": "doc",
1137
- "locator": "https://kiro.dev/docs/hooks/types/",
1138
- "date": "2026-10-12"
1139
- },
1140
- {
1141
- "kind": "fixture",
1142
- "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1143
- "date": "2026-10-14"
1144
- }
1145
- ]
1146
- },
1147
- {
1148
- "policy": "pre-implementation-gate",
1149
- "harness": "kiro",
1150
- "event": "PreToolUse",
1151
- "timing": "pre-tool",
1152
- "profile": "cli-2x-agent",
1153
- "wired": true,
1154
- "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1155
- "harnessVersion": {
1156
- "tested": "kiro-cli 2.29.1"
1157
- },
1158
- "class": "blocking",
1159
- "verification": "verified",
1160
- "prerequisites": [],
1161
- "covers": [],
1162
- "doesNotCover": [
1163
- "writes via shell commands"
1164
- ],
1165
- "caveats": [],
1166
- "provenance": [
1167
- {
1168
- "kind": "doc",
1169
- "locator": "https://kiro.dev/docs/hooks/types/",
1170
- "date": "2026-10-12"
1171
- },
1172
- {
1173
- "kind": "fixture",
1174
- "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1175
- "date": "2026-10-14"
1176
- }
1177
- ]
1178
- },
1179
- {
1180
- "policy": "pre-implementation-gate",
1181
- "harness": "antigravity",
1182
- "event": "PreToolUse",
1183
- "timing": "pre-tool",
1184
- "profile": "any",
1185
- "wired": true,
1186
- "configSource": "src/adapters/antigravity/index.js:60",
1187
- "harnessVersion": {
1188
- "tested": "1.3.3"
1189
- },
1190
- "class": "blocking",
1191
- "verification": "verified",
1192
- "prerequisites": [],
1193
- "covers": [],
1194
- "doesNotCover": [
1195
- "writes via shell commands"
1196
- ],
1197
- "caveats": [],
1198
- "provenance": [
1199
- {
1200
- "kind": "doc",
1201
- "locator": "https://antigravity.google/docs/hooks/",
1202
- "date": "2026-10-12"
1203
- },
1204
- {
1205
- "kind": "fixture",
1206
- "locator": "test/fixtures/hooks/antigravity/pre-implement-gate/deny-missing-design.json",
1207
- "date": "2026-10-14"
1208
- }
1209
- ]
1210
- },
1211
- {
1212
- "policy": "pre-bash-guard",
1213
- "harness": "claude",
1214
- "event": "PreToolUse",
1215
- "timing": "pre-tool",
1216
- "profile": "any",
1217
- "wired": true,
1218
- "configSource": "core/harnesses/claude/settings/settings.json:89",
1219
- "harnessVersion": {
1220
- "tested": "2.1.287 (Claude Code)"
1221
- },
1222
- "class": "blocking",
1223
- "verification": "verified",
1224
- "prerequisites": [],
1225
- "covers": [],
1226
- "doesNotCover": [],
1227
- "caveats": [],
1228
- "provenance": [
1229
- {
1230
- "kind": "doc",
1231
- "locator": "https://code.claude.com/docs/en/hooks",
1232
- "date": "2026-10-12"
1233
- },
1234
- {
1235
- "kind": "fixture",
1236
- "locator": "test/fixtures/hooks/claude/pre-bash-guard/deny.json",
1237
- "date": "2026-10-14"
1238
- }
1239
- ]
1240
- },
1241
- {
1242
- "policy": "pre-bash-guard",
1243
- "harness": "codex",
1244
- "event": "PreToolUse",
1245
- "timing": "pre-tool",
1246
- "profile": "any",
1247
- "wired": true,
1248
- "configSource": "core/harnesses/codex/hooks/hooks.json:45",
1249
- "harnessVersion": {
1250
- "tested": "codex-cli 0.162.1"
1251
- },
1252
- "class": "blocking",
1253
- "verification": "verified",
1254
- "prerequisites": [
1255
- "hook-review"
1256
- ],
1257
- "covers": [],
1258
- "doesNotCover": [],
1259
- "caveats": [],
1260
- "provenance": [
1261
- {
1262
- "kind": "doc",
1263
- "locator": "https://learn.chatgpt.com/docs/hooks",
1264
- "date": "2026-10-12"
1265
- },
1266
- {
1267
- "kind": "fixture",
1268
- "locator": "test/fixtures/hooks/codex/pre-bash-guard/deny.json",
1269
- "date": "2026-10-14"
1270
- }
1271
- ]
1272
- },
1273
- {
1274
- "policy": "pre-bash-guard",
1275
- "harness": "gemini",
1276
- "event": "BeforeTool",
1277
- "timing": "pre-tool",
1278
- "profile": "any",
1279
- "wired": true,
1280
- "configSource": "core/harnesses/gemini/hooks/hooks.json:25",
1281
- "harnessVersion": {
1282
- "tested": "0.55.1"
1283
- },
1284
- "class": "blocking",
1285
- "verification": "verified",
1286
- "prerequisites": [],
1287
- "covers": [],
1288
- "doesNotCover": [],
1289
- "caveats": [],
1290
- "provenance": [
1291
- {
1292
- "kind": "doc",
1293
- "locator": "https://geminicli.com/docs/hooks/",
1294
- "date": "2026-10-12"
1295
- },
1296
- {
1297
- "kind": "fixture",
1298
- "locator": "test/fixtures/hooks/gemini/pre-bash-guard/deny.json",
1299
- "date": "2026-10-14"
1300
- }
1301
- ]
1302
- },
1303
- {
1304
- "policy": "pre-bash-guard",
1305
- "harness": "opencode",
1306
- "event": "*",
1307
- "timing": "pre-tool",
1308
- "profile": "any",
1309
- "wired": false,
1310
- "configSource": null,
1311
- "harnessVersion": {
1312
- "tested": "1.18.30"
1313
- },
1314
- "class": "unsupported",
1315
- "verification": "unverified",
1316
- "prerequisites": [],
1317
- "covers": [],
1318
- "doesNotCover": [],
1319
- "caveats": [],
1320
- "provenance": [
1321
- {
1322
- "kind": "doc",
1323
- "locator": "core/registry/harnesses.json: opencode harness; core/registry/contracts.json: unavailable hook mapping",
1324
- "date": "2026-10-12"
1325
- }
1326
- ]
1327
- },
1328
- {
1329
- "policy": "pre-bash-guard",
1330
- "harness": "copilot",
1331
- "event": "*",
1332
- "timing": "pre-tool",
1333
- "profile": "any",
1334
- "wired": false,
1335
- "configSource": null,
1336
- "harnessVersion": {
1337
- "tested": "GitHub Copilot CLI 1.0.78"
1338
- },
1339
- "class": "unsupported",
1340
- "verification": "unverified",
1341
- "prerequisites": [],
1342
- "covers": [],
1343
- "doesNotCover": [],
1344
- "caveats": [
1345
- "version-drift:GitHub Copilot CLI 1.0.78."
1346
- ],
1347
- "provenance": [
1348
- {
1349
- "kind": "doc",
1350
- "locator": "core/registry/harnesses.json: copilot harness; core/registry/contracts.json: unavailable hook mapping",
1351
- "date": "2026-10-12"
1352
- }
1353
- ]
1354
- },
1355
- {
1356
- "policy": "pre-bash-guard",
1357
- "harness": "kiro",
1358
- "event": "PreToolUse",
1359
- "timing": "pre-tool",
1360
- "profile": "ide",
1361
- "wired": true,
1362
- "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
1363
- "harnessVersion": {
1364
- "tested": "kiro-cli 2.29.1"
1365
- },
1366
- "class": "blocking",
1367
- "verification": "verified",
1368
- "prerequisites": [],
1369
- "covers": [],
1370
- "doesNotCover": [],
1371
- "caveats": [],
1372
- "provenance": [
1373
- {
1374
- "kind": "doc",
1375
- "locator": "https://kiro.dev/docs/hooks/types/",
1376
- "date": "2026-10-12"
1377
- },
1378
- {
1379
- "kind": "fixture",
1380
- "locator": "test/fixtures/hooks/kiro/pre-bash-guard/deny.json",
1381
- "date": "2026-10-14"
1382
- }
1383
- ]
1384
- },
1385
- {
1386
- "policy": "pre-bash-guard",
1387
- "harness": "kiro",
1388
- "event": "PreToolUse",
1389
- "timing": "pre-tool",
1390
- "profile": "cli-v3",
1391
- "wired": true,
1392
- "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
1393
- "harnessVersion": {
1394
- "tested": "kiro-cli 2.29.1"
1395
- },
1396
- "class": "blocking",
1397
- "verification": "verified",
1398
- "prerequisites": [],
1399
- "covers": [],
1400
- "doesNotCover": [],
1401
- "caveats": [],
1402
- "provenance": [
1403
- {
1404
- "kind": "doc",
1405
- "locator": "https://kiro.dev/docs/hooks/types/",
1406
- "date": "2026-10-12"
1407
- },
1408
- {
1409
- "kind": "fixture",
1410
- "locator": "test/fixtures/hooks/kiro/pre-bash-guard/deny.json",
1411
- "date": "2026-10-14"
1412
- }
1413
- ]
1414
- },
1415
- {
1416
- "policy": "pre-bash-guard",
1417
- "harness": "kiro",
1418
- "event": "PreToolUse",
1419
- "timing": "pre-tool",
1420
- "profile": "cli-v3-agent",
1421
- "wired": true,
1422
- "configSource": "core/harnesses/kiro/agents/doflow.json:21",
1423
- "harnessVersion": {
1424
- "tested": "kiro-cli 2.29.1"
1425
- },
1426
- "class": "blocking",
838
+ "class": "advisory",
1427
839
  "verification": "verified",
1428
840
  "prerequisites": [],
1429
841
  "covers": [],
1430
- "doesNotCover": [],
842
+ "doesNotCover": [
843
+ "writes via shell commands"
844
+ ],
1431
845
  "caveats": [],
1432
846
  "provenance": [
1433
847
  {
@@ -1437,27 +851,29 @@
1437
851
  },
1438
852
  {
1439
853
  "kind": "fixture",
1440
- "locator": "test/fixtures/hooks/kiro/pre-bash-guard/agent-deny.json",
854
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1441
855
  "date": "2026-10-14"
1442
856
  }
1443
857
  ]
1444
858
  },
1445
859
  {
1446
- "policy": "pre-bash-guard",
860
+ "policy": "pre-implementation-gate",
1447
861
  "harness": "kiro",
1448
862
  "event": "PreToolUse",
1449
863
  "timing": "pre-tool",
1450
864
  "profile": "cli-2x-agent",
1451
865
  "wired": true,
1452
- "configSource": "core/harnesses/kiro/agents/doflow.json:21",
866
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:15",
1453
867
  "harnessVersion": {
1454
868
  "tested": "kiro-cli 2.29.1"
1455
869
  },
1456
- "class": "blocking",
870
+ "class": "advisory",
1457
871
  "verification": "verified",
1458
872
  "prerequisites": [],
1459
873
  "covers": [],
1460
- "doesNotCover": [],
874
+ "doesNotCover": [
875
+ "writes via shell commands"
876
+ ],
1461
877
  "caveats": [],
1462
878
  "provenance": [
1463
879
  {
@@ -1467,34 +883,39 @@
1467
883
  },
1468
884
  {
1469
885
  "kind": "fixture",
1470
- "locator": "test/fixtures/hooks/kiro/pre-bash-guard/agent-deny.json",
886
+ "locator": "test/fixtures/hooks/kiro/pre-implement-gate/agent-deny.json",
1471
887
  "date": "2026-10-14"
1472
888
  }
1473
889
  ]
1474
890
  },
1475
891
  {
1476
- "policy": "pre-bash-guard",
892
+ "policy": "pre-implementation-gate",
1477
893
  "harness": "antigravity",
1478
- "event": "*",
894
+ "event": "PreToolUse",
1479
895
  "timing": "pre-tool",
1480
896
  "profile": "any",
1481
- "wired": false,
1482
- "configSource": null,
897
+ "wired": true,
898
+ "configSource": "src/adapters/antigravity/index.js:60",
1483
899
  "harnessVersion": {
1484
900
  "tested": "1.3.3"
1485
901
  },
1486
- "class": "unsupported",
1487
- "verification": "unverified",
902
+ "class": "advisory",
903
+ "verification": "verified",
1488
904
  "prerequisites": [],
1489
905
  "covers": [],
1490
- "doesNotCover": [],
1491
- "caveats": [
1492
- "not wired for this harness mapping"
906
+ "doesNotCover": [
907
+ "writes via shell commands"
1493
908
  ],
909
+ "caveats": [],
1494
910
  "provenance": [
1495
911
  {
1496
912
  "kind": "doc",
1497
- "locator": "core/registry/lifecycle.json: policy pre-bash-guard mapping for antigravity",
913
+ "locator": "https://antigravity.google/docs/hooks/",
914
+ "date": "2026-10-12"
915
+ },
916
+ {
917
+ "kind": "fixture",
918
+ "locator": "test/fixtures/hooks/antigravity/pre-implement-gate/deny-missing-design.json",
1498
919
  "date": "2026-10-14"
1499
920
  }
1500
921
  ]
@@ -1506,7 +927,7 @@
1506
927
  "timing": "session",
1507
928
  "profile": "any",
1508
929
  "wired": true,
1509
- "configSource": "core/harnesses/claude/settings/settings.json:36",
930
+ "configSource": "core/harnesses/claude/settings/settings.json:44",
1510
931
  "harnessVersion": {
1511
932
  "tested": "2.1.287 (Claude Code)"
1512
933
  },
@@ -1555,33 +976,6 @@
1555
976
  }
1556
977
  ]
1557
978
  },
1558
- {
1559
- "policy": "session-context",
1560
- "harness": "gemini",
1561
- "event": "SessionStart",
1562
- "timing": "session",
1563
- "profile": "any",
1564
- "wired": true,
1565
- "configSource": "core/harnesses/gemini/hooks/hooks.json:4",
1566
- "harnessVersion": {
1567
- "tested": "0.55.1"
1568
- },
1569
- "class": "unknown",
1570
- "verification": "unverified",
1571
- "prerequisites": [],
1572
- "covers": [],
1573
- "doesNotCover": [],
1574
- "caveats": [
1575
- "native event enforcement is not yet verified"
1576
- ],
1577
- "provenance": [
1578
- {
1579
- "kind": "doc",
1580
- "locator": "https://geminicli.com/docs/hooks/",
1581
- "date": "2026-10-12"
1582
- }
1583
- ]
1584
- },
1585
979
  {
1586
980
  "policy": "session-context",
1587
981
  "harness": "opencode",
@@ -1669,10 +1063,10 @@
1669
1063
  "event": "SessionStart",
1670
1064
  "timing": "session",
1671
1065
  "profile": "any",
1672
- "wired": false,
1673
- "configSource": null,
1066
+ "wired": true,
1067
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:4",
1674
1068
  "harnessVersion": {
1675
- "tested": "GitHub Copilot CLI 1.0.78"
1069
+ "tested": "GitHub Copilot CLI 1.0.103"
1676
1070
  },
1677
1071
  "class": "unknown",
1678
1072
  "verification": "unverified",
@@ -1680,14 +1074,24 @@
1680
1074
  "covers": [],
1681
1075
  "doesNotCover": [],
1682
1076
  "caveats": [
1683
- "fixture-pending",
1684
- "version-drift:GitHub Copilot CLI 1.0.78."
1077
+ "native event enforcement is not yet verified; the policy writes session state and prints nothing",
1078
+ "version-drift:GitHub Copilot CLI 1.0.104."
1685
1079
  ],
1686
1080
  "provenance": [
1687
1081
  {
1688
1082
  "kind": "doc",
1689
- "locator": "core/registry/contracts.json: Copilot documented event inventory",
1690
- "date": "2026-10-14"
1083
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
1084
+ "date": "2026-10-27"
1085
+ },
1086
+ {
1087
+ "kind": "fixture",
1088
+ "locator": "test/fixtures/hooks/copilot/session-start/start.json",
1089
+ "date": "2026-10-27"
1090
+ },
1091
+ {
1092
+ "kind": "live",
1093
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
1094
+ "date": "2026-10-27"
1691
1095
  }
1692
1096
  ]
1693
1097
  },
@@ -1747,33 +1151,6 @@
1747
1151
  }
1748
1152
  ]
1749
1153
  },
1750
- {
1751
- "policy": "session-context",
1752
- "harness": "copilot",
1753
- "event": "*",
1754
- "timing": "session",
1755
- "profile": "any",
1756
- "wired": false,
1757
- "configSource": null,
1758
- "harnessVersion": {
1759
- "tested": "GitHub Copilot CLI 1.0.78"
1760
- },
1761
- "class": "unsupported",
1762
- "verification": "unverified",
1763
- "prerequisites": [],
1764
- "covers": [],
1765
- "doesNotCover": [],
1766
- "caveats": [
1767
- "version-drift:GitHub Copilot CLI 1.0.78."
1768
- ],
1769
- "provenance": [
1770
- {
1771
- "kind": "doc",
1772
- "locator": "core/registry/harnesses.json: copilot harness; core/registry/contracts.json: unavailable hook mapping",
1773
- "date": "2026-10-12"
1774
- }
1775
- ]
1776
- },
1777
1154
  {
1778
1155
  "policy": "session-context",
1779
1156
  "harness": "copilot",
@@ -1863,7 +1240,7 @@
1863
1240
  "timing": "pre-tool",
1864
1241
  "profile": "any",
1865
1242
  "wired": true,
1866
- "configSource": "core/harnesses/claude/settings/settings.json:89",
1243
+ "configSource": "core/harnesses/claude/settings/settings.json:97",
1867
1244
  "harnessVersion": {
1868
1245
  "tested": "2.1.287 (Claude Code)"
1869
1246
  },
@@ -1918,36 +1295,6 @@
1918
1295
  }
1919
1296
  ]
1920
1297
  },
1921
- {
1922
- "policy": "mcp-tool-guard",
1923
- "harness": "gemini",
1924
- "event": "BeforeTool",
1925
- "timing": "pre-tool",
1926
- "profile": "any",
1927
- "wired": true,
1928
- "configSource": "core/harnesses/gemini/hooks/hooks.json:25",
1929
- "harnessVersion": {
1930
- "tested": "0.55.1"
1931
- },
1932
- "class": "blocking",
1933
- "verification": "verified",
1934
- "prerequisites": [],
1935
- "covers": [],
1936
- "doesNotCover": [],
1937
- "caveats": [],
1938
- "provenance": [
1939
- {
1940
- "kind": "doc",
1941
- "locator": "https://geminicli.com/docs/hooks/",
1942
- "date": "2026-10-12"
1943
- },
1944
- {
1945
- "kind": "fixture",
1946
- "locator": "test/fixtures/hooks/gemini/mcp-tool-guard/deny.json",
1947
- "date": "2026-10-14"
1948
- }
1949
- ]
1950
- },
1951
1298
  {
1952
1299
  "policy": "mcp-tool-guard",
1953
1300
  "harness": "opencode",
@@ -2060,27 +1407,33 @@
2060
1407
  {
2061
1408
  "policy": "mcp-tool-guard",
2062
1409
  "harness": "copilot",
2063
- "event": "*",
1410
+ "event": "PreToolUse",
2064
1411
  "timing": "pre-tool",
2065
1412
  "profile": "any",
2066
- "wired": false,
2067
- "configSource": null,
1413
+ "wired": true,
1414
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:12",
2068
1415
  "harnessVersion": {
2069
- "tested": "GitHub Copilot CLI 1.0.78"
1416
+ "tested": "GitHub Copilot CLI 1.0.103"
2070
1417
  },
2071
- "class": "unsupported",
1418
+ "class": "unknown",
2072
1419
  "verification": "unverified",
2073
1420
  "prerequisites": [],
2074
1421
  "covers": [],
2075
1422
  "doesNotCover": [],
2076
1423
  "caveats": [
2077
- "version-drift:GitHub Copilot CLI 1.0.78."
1424
+ "the MCP tool-name form on preToolUse was not captured: the guard matches the mcp__<server>__<tool> and mcp_ prefixes, so an MCP call under another name is allowed",
1425
+ "version-drift:GitHub Copilot CLI 1.0.104."
2078
1426
  ],
2079
1427
  "provenance": [
2080
1428
  {
2081
1429
  "kind": "doc",
2082
- "locator": "core/registry/harnesses.json: copilot harness; core/registry/contracts.json: unavailable hook mapping",
2083
- "date": "2026-10-12"
1430
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
1431
+ "date": "2026-10-27"
1432
+ },
1433
+ {
1434
+ "kind": "fixture",
1435
+ "locator": "test/fixtures/hooks/copilot/mcp-tool-guard/deny.json",
1436
+ "date": "2026-10-27"
2084
1437
  }
2085
1438
  ]
2086
1439
  },
@@ -2091,7 +1444,7 @@
2091
1444
  "timing": "pre-tool",
2092
1445
  "profile": "ide",
2093
1446
  "wired": true,
2094
- "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
1447
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
2095
1448
  "harnessVersion": {
2096
1449
  "tested": "kiro-cli 2.29.1"
2097
1450
  },
@@ -2121,7 +1474,7 @@
2121
1474
  "timing": "pre-tool",
2122
1475
  "profile": "cli-v3",
2123
1476
  "wired": true,
2124
- "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
1477
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:24",
2125
1478
  "harnessVersion": {
2126
1479
  "tested": "kiro-cli 2.29.1"
2127
1480
  },
@@ -2151,7 +1504,7 @@
2151
1504
  "timing": "pre-tool",
2152
1505
  "profile": "cli-v3-agent",
2153
1506
  "wired": true,
2154
- "configSource": "core/harnesses/kiro/agents/doflow.json:31",
1507
+ "configSource": "core/harnesses/kiro/agents/doflow.json:21",
2155
1508
  "harnessVersion": {
2156
1509
  "tested": "kiro-cli 2.29.1"
2157
1510
  },
@@ -2181,7 +1534,7 @@
2181
1534
  "timing": "pre-tool",
2182
1535
  "profile": "cli-2x-agent",
2183
1536
  "wired": true,
2184
- "configSource": "core/harnesses/kiro/agents/doflow.json:31",
1537
+ "configSource": "core/harnesses/kiro/agents/doflow.json:21",
2185
1538
  "harnessVersion": {
2186
1539
  "tested": "kiro-cli 2.29.1"
2187
1540
  },
@@ -2238,11 +1591,11 @@
2238
1591
  "timing": "stop",
2239
1592
  "profile": "any",
2240
1593
  "wired": true,
2241
- "configSource": "core/harnesses/claude/settings/settings.json:138",
1594
+ "configSource": "core/harnesses/claude/settings/settings.json:146",
2242
1595
  "harnessVersion": {
2243
1596
  "tested": "2.1.287 (Claude Code)"
2244
1597
  },
2245
- "class": "blocking",
1598
+ "class": "advisory",
2246
1599
  "verification": "verified",
2247
1600
  "prerequisites": [],
2248
1601
  "covers": [],
@@ -2268,11 +1621,11 @@
2268
1621
  "timing": "stop",
2269
1622
  "profile": "any",
2270
1623
  "wired": true,
2271
- "configSource": "core/harnesses/codex/hooks/hooks.json:99",
1624
+ "configSource": "core/harnesses/codex/hooks/hooks.json:89",
2272
1625
  "harnessVersion": {
2273
1626
  "tested": "codex-cli 0.162.1"
2274
1627
  },
2275
- "class": "blocking",
1628
+ "class": "advisory",
2276
1629
  "verification": "verified",
2277
1630
  "prerequisites": [
2278
1631
  "hook-review"
@@ -2293,33 +1646,6 @@
2293
1646
  }
2294
1647
  ]
2295
1648
  },
2296
- {
2297
- "policy": "stop-check",
2298
- "harness": "gemini",
2299
- "event": "*",
2300
- "timing": "stop",
2301
- "profile": "any",
2302
- "wired": false,
2303
- "configSource": null,
2304
- "harnessVersion": {
2305
- "tested": "0.55.1"
2306
- },
2307
- "class": "unsupported",
2308
- "verification": "unverified",
2309
- "prerequisites": [],
2310
- "covers": [],
2311
- "doesNotCover": [],
2312
- "caveats": [
2313
- "not wired for this harness mapping"
2314
- ],
2315
- "provenance": [
2316
- {
2317
- "kind": "doc",
2318
- "locator": "core/registry/lifecycle.json: policy stop-check mapping for gemini",
2319
- "date": "2026-10-14"
2320
- }
2321
- ]
2322
- },
2323
1649
  {
2324
1650
  "policy": "stop-check",
2325
1651
  "harness": "opencode",
@@ -2351,10 +1677,10 @@
2351
1677
  "event": "Stop",
2352
1678
  "timing": "stop",
2353
1679
  "profile": "any",
2354
- "wired": false,
2355
- "configSource": null,
1680
+ "wired": true,
1681
+ "configSource": "core/harnesses/copilot/hooks/doflow.json:26",
2356
1682
  "harnessVersion": {
2357
- "tested": "GitHub Copilot CLI 1.0.78"
1683
+ "tested": "GitHub Copilot CLI 1.0.103"
2358
1684
  },
2359
1685
  "class": "unknown",
2360
1686
  "verification": "unverified",
@@ -2362,41 +1688,25 @@
2362
1688
  "covers": [],
2363
1689
  "doesNotCover": [],
2364
1690
  "caveats": [
2365
- "fixture-pending",
2366
- "version-drift:GitHub Copilot CLI 1.0.78."
1691
+ "the {decision:\"block\"} output is documented but not exercised live",
1692
+ "the last assistant message is read from the events.jsonl transcript, and whether agentStop fires after it is written is unverified; a subagent's own agentStop is skipped",
1693
+ "version-drift:GitHub Copilot CLI 1.0.104."
2367
1694
  ],
2368
1695
  "provenance": [
2369
1696
  {
2370
1697
  "kind": "doc",
2371
- "locator": "core/registry/contracts.json: Copilot documented event inventory",
2372
- "date": "2026-10-14"
2373
- }
2374
- ]
2375
- },
2376
- {
2377
- "policy": "stop-check",
2378
- "harness": "copilot",
2379
- "event": "*",
2380
- "timing": "stop",
2381
- "profile": "any",
2382
- "wired": false,
2383
- "configSource": null,
2384
- "harnessVersion": {
2385
- "tested": "GitHub Copilot CLI 1.0.78"
2386
- },
2387
- "class": "unsupported",
2388
- "verification": "unverified",
2389
- "prerequisites": [],
2390
- "covers": [],
2391
- "doesNotCover": [],
2392
- "caveats": [
2393
- "version-drift:GitHub Copilot CLI 1.0.78."
2394
- ],
2395
- "provenance": [
1698
+ "locator": "https://docs.github.com/en/copilot/reference/hooks-reference",
1699
+ "date": "2026-10-27"
1700
+ },
2396
1701
  {
2397
- "kind": "doc",
2398
- "locator": "core/registry/harnesses.json: copilot harness; core/registry/contracts.json: unavailable hook mapping",
2399
- "date": "2026-10-12"
1702
+ "kind": "fixture",
1703
+ "locator": "test/fixtures/hooks/copilot/stop-check/deny.json",
1704
+ "date": "2026-10-27"
1705
+ },
1706
+ {
1707
+ "kind": "live",
1708
+ "locator": "test/fixtures/hooks/copilot/live/capture-2026-10-27.jsonl",
1709
+ "date": "2026-10-27"
2400
1710
  }
2401
1711
  ]
2402
1712
  },
@@ -2407,7 +1717,7 @@
2407
1717
  "timing": "stop",
2408
1718
  "profile": "ide",
2409
1719
  "wired": true,
2410
- "configSource": "core/harnesses/kiro/hooks/doflow.json:44",
1720
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
2411
1721
  "harnessVersion": {
2412
1722
  "tested": "kiro-cli 2.29.1"
2413
1723
  },
@@ -2445,7 +1755,7 @@
2445
1755
  "timing": "stop",
2446
1756
  "profile": "cli-v3",
2447
1757
  "wired": true,
2448
- "configSource": "core/harnesses/kiro/hooks/doflow.json:44",
1758
+ "configSource": "core/harnesses/kiro/hooks/doflow.json:34",
2449
1759
  "harnessVersion": {
2450
1760
  "tested": "kiro-cli 2.29.1"
2451
1761
  },
@@ -2487,76 +1797,33 @@
2487
1797
  "harnessVersion": {
2488
1798
  "tested": "1.3.3"
2489
1799
  },
2490
- "class": "blocking",
1800
+ "class": "advisory",
2491
1801
  "verification": "verified",
2492
1802
  "prerequisites": [],
2493
1803
  "covers": [],
2494
1804
  "doesNotCover": [],
2495
- "caveats": [],
2496
- "provenance": [
2497
- {
2498
- "kind": "doc",
2499
- "locator": "https://antigravity.google/docs/hooks/",
2500
- "date": "2026-10-12"
2501
- },
2502
- {
2503
- "kind": "fixture",
2504
- "locator": "test/fixtures/hooks/antigravity/stop-check/continue.json",
2505
- "date": "2026-10-14"
2506
- }
2507
- ]
2508
- },
2509
- {
2510
- "policy": "pre-implementation-gate",
2511
- "harness": "pi",
2512
- "event": "tool_call",
2513
- "timing": "pre-tool",
2514
- "profile": "project-interactive",
2515
- "wired": true,
2516
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2517
- "harnessVersion": {
2518
- "tested": "1.1.0"
2519
- },
2520
- "class": "unknown",
2521
- "verification": "unverified",
2522
- "prerequisites": [
2523
- "project-trust"
2524
- ],
2525
- "covers": [],
2526
- "doesNotCover": [
2527
- "writes via shell commands"
2528
- ],
2529
- "caveats": [
2530
- "project-trust is required for the project-scope extension",
2531
- "loading path not live-observed",
2532
- "project-trust is required for the project-scope extension"
2533
- ],
1805
+ "caveats": [],
2534
1806
  "provenance": [
2535
- {
2536
- "kind": "types",
2537
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2538
- "date": "2026-10-14"
2539
- },
2540
1807
  {
2541
1808
  "kind": "doc",
2542
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2543
- "date": "2026-10-14"
1809
+ "locator": "https://antigravity.google/docs/hooks/",
1810
+ "date": "2026-10-12"
2544
1811
  },
2545
1812
  {
2546
1813
  "kind": "fixture",
2547
- "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
1814
+ "locator": "test/fixtures/hooks/antigravity/stop-check/continue.json",
2548
1815
  "date": "2026-10-14"
2549
1816
  }
2550
1817
  ]
2551
1818
  },
2552
1819
  {
2553
- "policy": "pre-bash-guard",
1820
+ "policy": "pre-implementation-gate",
2554
1821
  "harness": "pi",
2555
1822
  "event": "tool_call",
2556
1823
  "timing": "pre-tool",
2557
1824
  "profile": "project-interactive",
2558
1825
  "wired": true,
2559
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
1826
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
2560
1827
  "harnessVersion": {
2561
1828
  "tested": "1.1.0"
2562
1829
  },
@@ -2566,7 +1833,9 @@
2566
1833
  "project-trust"
2567
1834
  ],
2568
1835
  "covers": [],
2569
- "doesNotCover": [],
1836
+ "doesNotCover": [
1837
+ "writes via shell commands"
1838
+ ],
2570
1839
  "caveats": [
2571
1840
  "project-trust is required for the project-scope extension",
2572
1841
  "loading path not live-observed",
@@ -2585,7 +1854,7 @@
2585
1854
  },
2586
1855
  {
2587
1856
  "kind": "fixture",
2588
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
1857
+ "locator": "test/fixtures/hooks/pi/tool_call/edit-deny.json",
2589
1858
  "date": "2026-10-14"
2590
1859
  }
2591
1860
  ]
@@ -2597,7 +1866,7 @@
2597
1866
  "timing": "pre-tool",
2598
1867
  "profile": "project-interactive",
2599
1868
  "wired": true,
2600
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
1869
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
2601
1870
  "harnessVersion": {
2602
1871
  "tested": "1.1.0"
2603
1872
  },
@@ -2638,7 +1907,7 @@
2638
1907
  "timing": "stop",
2639
1908
  "profile": "cli-2x-agent",
2640
1909
  "wired": true,
2641
- "configSource": "core/harnesses/kiro/agents/doflow.json:50",
1910
+ "configSource": "core/harnesses/kiro/agents/doflow.json:40",
2642
1911
  "harnessVersion": {
2643
1912
  "tested": "kiro-cli 2.29.1"
2644
1913
  },
@@ -2670,7 +1939,7 @@
2670
1939
  "timing": "stop",
2671
1940
  "profile": "cli-v3-agent",
2672
1941
  "wired": true,
2673
- "configSource": "core/harnesses/kiro/agents/doflow.json:50",
1942
+ "configSource": "core/harnesses/kiro/agents/doflow.json:40",
2674
1943
  "harnessVersion": {
2675
1944
  "tested": "kiro-cli 2.29.1"
2676
1945
  },
@@ -2708,7 +1977,7 @@
2708
1977
  "timing": "pre-tool",
2709
1978
  "profile": "user-interactive",
2710
1979
  "wired": true,
2711
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
1980
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
2712
1981
  "harnessVersion": {
2713
1982
  "tested": "1.1.0"
2714
1983
  },
@@ -2742,13 +2011,13 @@
2742
2011
  ]
2743
2012
  },
2744
2013
  {
2745
- "policy": "pre-bash-guard",
2014
+ "policy": "mcp-tool-guard",
2746
2015
  "harness": "pi",
2747
2016
  "event": "tool_call",
2748
2017
  "timing": "pre-tool",
2749
2018
  "profile": "user-interactive",
2750
2019
  "wired": true,
2751
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2020
+ "configSource": "core/harnesses/pi/extensions/doflow-guard.js:128",
2752
2021
  "harnessVersion": {
2753
2022
  "tested": "1.1.0"
2754
2023
  },
@@ -2774,77 +2043,411 @@
2774
2043
  },
2775
2044
  {
2776
2045
  "kind": "fixture",
2777
- "locator": "test/fixtures/hooks/pi/tool_call/bash-deny.json",
2046
+ "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
2778
2047
  "date": "2026-10-14"
2779
2048
  }
2780
2049
  ]
2781
2050
  },
2782
2051
  {
2783
- "policy": "mcp-tool-guard",
2784
- "harness": "pi",
2785
- "event": "tool_call",
2786
- "timing": "pre-tool",
2787
- "profile": "user-interactive",
2052
+ "policy": "session-context",
2053
+ "harness": "kiro",
2054
+ "event": "SessionStart",
2055
+ "timing": "session",
2056
+ "profile": "cli-v3-agent",
2788
2057
  "wired": true,
2789
- "configSource": "core/harnesses/pi/extensions/doflow-guard.js:129",
2058
+ "configSource": "core/harnesses/kiro/agents/doflow.json:32",
2790
2059
  "harnessVersion": {
2791
- "tested": "1.1.0"
2060
+ "tested": "kiro-cli 2.29.1"
2792
2061
  },
2793
- "class": "unknown",
2062
+ "class": "advisory",
2794
2063
  "verification": "unverified",
2795
2064
  "prerequisites": [],
2796
2065
  "covers": [],
2797
2066
  "doesNotCover": [],
2798
2067
  "caveats": [
2799
- "Pi extension has not been exercised in a live session; a later tool_call handler may mutate input after DoFlow allows it",
2800
- "live probe pending"
2068
+ "native event enforcement is not yet verified"
2801
2069
  ],
2802
2070
  "provenance": [
2803
2071
  {
2804
- "kind": "types",
2805
- "locator": "@earendil-works/pi-coding-agent@1.1.0 dist/core/extensions/types.d.ts:907-958",
2806
- "date": "2026-10-14"
2807
- },
2072
+ "kind": "doc",
2073
+ "locator": "https://kiro.dev/docs/hooks/types/",
2074
+ "date": "2026-10-12"
2075
+ }
2076
+ ]
2077
+ }
2078
+ ],
2079
+ "endOfTurn": [
2080
+ {
2081
+ "harness": "claude",
2082
+ "events": [
2083
+ "Stop"
2084
+ ],
2085
+ "provenance": [
2808
2086
  {
2809
2087
  "kind": "doc",
2810
- "locator": "@earendil-works/pi-coding-agent@1.1.0 docs/extensions.md:169",
2088
+ "locator": "https://code.claude.com/docs/en/hooks",
2089
+ "date": "2026-10-12"
2090
+ }
2091
+ ]
2092
+ },
2093
+ {
2094
+ "harness": "codex",
2095
+ "events": [
2096
+ "Stop"
2097
+ ],
2098
+ "provenance": [
2099
+ {
2100
+ "kind": "doc",
2101
+ "locator": "https://learn.chatgpt.com/docs/hooks",
2102
+ "date": "2026-10-12"
2103
+ }
2104
+ ]
2105
+ },
2106
+ {
2107
+ "harness": "opencode",
2108
+ "events": [],
2109
+ "none": "no DoFlow hook bridge",
2110
+ "provenance": []
2111
+ },
2112
+ {
2113
+ "harness": "pi",
2114
+ "events": [],
2115
+ "none": "the extension handles tool_call only",
2116
+ "provenance": []
2117
+ },
2118
+ {
2119
+ "harness": "copilot",
2120
+ "events": [
2121
+ "Stop"
2122
+ ],
2123
+ "provenance": [
2124
+ {
2125
+ "kind": "doc",
2126
+ "locator": "core/registry/contracts.json: Copilot documented event inventory",
2811
2127
  "date": "2026-10-14"
2812
2128
  },
2813
2129
  {
2814
- "kind": "fixture",
2815
- "locator": "test/fixtures/hooks/pi/tool_call/nested-mcp-deny.json",
2816
- "date": "2026-10-14"
2130
+ "kind": "doc",
2131
+ "locator": "https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-hooks-reference",
2132
+ "date": "2026-10-15"
2817
2133
  }
2818
2134
  ]
2819
2135
  },
2820
2136
  {
2821
- "policy": "session-context",
2822
2137
  "harness": "kiro",
2823
- "event": "SessionStart",
2824
- "timing": "session",
2825
- "profile": "cli-v3-agent",
2826
- "wired": true,
2827
- "configSource": "core/harnesses/kiro/agents/doflow.json:42",
2828
- "harnessVersion": {
2829
- "tested": "kiro-cli 2.29.1"
2830
- },
2831
- "class": "advisory",
2832
- "verification": "unverified",
2833
- "prerequisites": [],
2834
- "covers": [],
2835
- "doesNotCover": [],
2836
- "caveats": [
2837
- "native event enforcement is not yet verified"
2138
+ "events": [
2139
+ "Stop",
2140
+ "stop"
2838
2141
  ],
2839
2142
  "provenance": [
2840
2143
  {
2841
2144
  "kind": "doc",
2842
2145
  "locator": "https://kiro.dev/docs/hooks/types/",
2843
2146
  "date": "2026-10-12"
2147
+ },
2148
+ {
2149
+ "kind": "doc",
2150
+ "locator": "https://kiro.dev/docs/hooks/types/",
2151
+ "date": "2026-10-14"
2152
+ }
2153
+ ]
2154
+ },
2155
+ {
2156
+ "harness": "antigravity",
2157
+ "events": [
2158
+ "Stop"
2159
+ ],
2160
+ "provenance": [
2161
+ {
2162
+ "kind": "doc",
2163
+ "locator": "https://antigravity.google/docs/hooks/",
2164
+ "date": "2026-10-12"
2844
2165
  }
2845
2166
  ]
2846
2167
  }
2847
2168
  ],
2848
- "rowsDigest": "sha256:199bb689b2034157ecb3ade2b47b70470a00e567fa27134fc0cf5ef467369768"
2169
+ "behaviours": [
2170
+ {
2171
+ "behaviour": "context-authority",
2172
+ "harness": "claude",
2173
+ "status": "enforced",
2174
+ "tests": [
2175
+ "test/hooks/context-authority.test.ts"
2176
+ ]
2177
+ },
2178
+ {
2179
+ "behaviour": "context-authority",
2180
+ "harness": "codex",
2181
+ "status": "enforced",
2182
+ "tests": [
2183
+ "test/hooks/context-authority.test.ts"
2184
+ ]
2185
+ },
2186
+ {
2187
+ "behaviour": "context-authority",
2188
+ "harness": "opencode",
2189
+ "status": "limitation",
2190
+ "limitation": "no DoFlow hook bridge"
2191
+ },
2192
+ {
2193
+ "behaviour": "context-authority",
2194
+ "harness": "pi",
2195
+ "status": "limitation",
2196
+ "limitation": "extension handles tool_call only"
2197
+ },
2198
+ {
2199
+ "behaviour": "context-authority",
2200
+ "harness": "copilot",
2201
+ "status": "limitation",
2202
+ "limitation": "no prompt hook wired; SessionStart emits no context"
2203
+ },
2204
+ {
2205
+ "behaviour": "context-authority",
2206
+ "harness": "kiro",
2207
+ "status": "limitation",
2208
+ "limitation": "no prompt hook wired; SessionStart emits no context"
2209
+ },
2210
+ {
2211
+ "behaviour": "context-authority",
2212
+ "harness": "antigravity",
2213
+ "status": "limitation",
2214
+ "limitation": "only PreToolUse and Stop wired"
2215
+ },
2216
+ {
2217
+ "behaviour": "default-silence",
2218
+ "harness": "claude",
2219
+ "status": "enforced",
2220
+ "tests": [
2221
+ "test/hooks/context-authority.test.ts",
2222
+ "test/hooks/emission-adapter.test.ts"
2223
+ ]
2224
+ },
2225
+ {
2226
+ "behaviour": "default-silence",
2227
+ "harness": "codex",
2228
+ "status": "enforced",
2229
+ "tests": [
2230
+ "test/hooks/context-authority.test.ts",
2231
+ "test/hooks/emission-adapter.test.ts"
2232
+ ]
2233
+ },
2234
+ {
2235
+ "behaviour": "default-silence",
2236
+ "harness": "opencode",
2237
+ "status": "limitation",
2238
+ "limitation": "no DoFlow hook bridge"
2239
+ },
2240
+ {
2241
+ "behaviour": "default-silence",
2242
+ "harness": "pi",
2243
+ "status": "limitation",
2244
+ "limitation": "no prompt-time emission"
2245
+ },
2246
+ {
2247
+ "behaviour": "default-silence",
2248
+ "harness": "copilot",
2249
+ "status": "limitation",
2250
+ "limitation": "no prompt-time emission"
2251
+ },
2252
+ {
2253
+ "behaviour": "default-silence",
2254
+ "harness": "kiro",
2255
+ "status": "limitation",
2256
+ "limitation": "no prompt-time emission"
2257
+ },
2258
+ {
2259
+ "behaviour": "default-silence",
2260
+ "harness": "antigravity",
2261
+ "status": "limitation",
2262
+ "limitation": "no prompt-time emission"
2263
+ },
2264
+ {
2265
+ "behaviour": "summary-scope",
2266
+ "harness": "claude",
2267
+ "status": "enforced",
2268
+ "tests": [
2269
+ "test/hooks/summary-scope.test.ts",
2270
+ "test/hooks/cross-harness-parity.test.ts"
2271
+ ]
2272
+ },
2273
+ {
2274
+ "behaviour": "summary-scope",
2275
+ "harness": "codex",
2276
+ "status": "limitation",
2277
+ "limitation": "PreCompact carries no summary text"
2278
+ },
2279
+ {
2280
+ "behaviour": "summary-scope",
2281
+ "harness": "opencode",
2282
+ "status": "limitation",
2283
+ "limitation": "no DoFlow hook bridge"
2284
+ },
2285
+ {
2286
+ "behaviour": "summary-scope",
2287
+ "harness": "pi",
2288
+ "status": "limitation",
2289
+ "limitation": "no compaction hook wired"
2290
+ },
2291
+ {
2292
+ "behaviour": "summary-scope",
2293
+ "harness": "copilot",
2294
+ "status": "limitation",
2295
+ "limitation": "no compaction hook wired"
2296
+ },
2297
+ {
2298
+ "behaviour": "summary-scope",
2299
+ "harness": "kiro",
2300
+ "status": "limitation",
2301
+ "limitation": "no compaction hook wired"
2302
+ },
2303
+ {
2304
+ "behaviour": "summary-scope",
2305
+ "harness": "antigravity",
2306
+ "status": "limitation",
2307
+ "limitation": "no compaction hook wired"
2308
+ },
2309
+ {
2310
+ "behaviour": "summary-grant",
2311
+ "harness": "claude",
2312
+ "status": "enforced",
2313
+ "tests": [
2314
+ "test/hooks/summary-scope.test.ts",
2315
+ "test/hooks/cross-harness-parity.test.ts"
2316
+ ]
2317
+ },
2318
+ {
2319
+ "behaviour": "summary-grant",
2320
+ "harness": "codex",
2321
+ "status": "enforced",
2322
+ "tests": [
2323
+ "test/hooks/cross-harness-parity.test.ts"
2324
+ ]
2325
+ },
2326
+ {
2327
+ "behaviour": "summary-grant",
2328
+ "harness": "opencode",
2329
+ "status": "limitation",
2330
+ "limitation": "no DoFlow hook bridge"
2331
+ },
2332
+ {
2333
+ "behaviour": "summary-grant",
2334
+ "harness": "pi",
2335
+ "status": "limitation",
2336
+ "limitation": "no prompt hook to deliver"
2337
+ },
2338
+ {
2339
+ "behaviour": "summary-grant",
2340
+ "harness": "copilot",
2341
+ "status": "limitation",
2342
+ "limitation": "no prompt hook to deliver"
2343
+ },
2344
+ {
2345
+ "behaviour": "summary-grant",
2346
+ "harness": "kiro",
2347
+ "status": "limitation",
2348
+ "limitation": "no prompt hook to deliver"
2349
+ },
2350
+ {
2351
+ "behaviour": "summary-grant",
2352
+ "harness": "antigravity",
2353
+ "status": "limitation",
2354
+ "limitation": "no prompt hook to deliver"
2355
+ },
2356
+ {
2357
+ "behaviour": "identity",
2358
+ "harness": "claude",
2359
+ "status": "limitation",
2360
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2361
+ },
2362
+ {
2363
+ "behaviour": "identity",
2364
+ "harness": "codex",
2365
+ "status": "limitation",
2366
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2367
+ },
2368
+ {
2369
+ "behaviour": "identity",
2370
+ "harness": "opencode",
2371
+ "status": "limitation",
2372
+ "limitation": "no DoFlow hook bridge"
2373
+ },
2374
+ {
2375
+ "behaviour": "identity",
2376
+ "harness": "pi",
2377
+ "status": "limitation",
2378
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2379
+ },
2380
+ {
2381
+ "behaviour": "identity",
2382
+ "harness": "copilot",
2383
+ "status": "limitation",
2384
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2385
+ },
2386
+ {
2387
+ "behaviour": "identity",
2388
+ "harness": "kiro",
2389
+ "status": "limitation",
2390
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2391
+ },
2392
+ {
2393
+ "behaviour": "identity",
2394
+ "harness": "antigravity",
2395
+ "status": "limitation",
2396
+ "limitation": "launcher environment forwarding into hook processes is unverified until 081 (DEC-004)"
2397
+ },
2398
+ {
2399
+ "behaviour": "check-freshness",
2400
+ "harness": "claude",
2401
+ "status": "enforced",
2402
+ "tests": [
2403
+ "test/hooks/check-freshness.test.ts"
2404
+ ]
2405
+ },
2406
+ {
2407
+ "behaviour": "check-freshness",
2408
+ "harness": "codex",
2409
+ "status": "enforced",
2410
+ "tests": [
2411
+ "test/hooks/check-freshness.test.ts"
2412
+ ]
2413
+ },
2414
+ {
2415
+ "behaviour": "check-freshness",
2416
+ "harness": "opencode",
2417
+ "status": "limitation",
2418
+ "limitation": "no pre-edit or pre-command gate"
2419
+ },
2420
+ {
2421
+ "behaviour": "check-freshness",
2422
+ "harness": "pi",
2423
+ "status": "enforced",
2424
+ "tests": [
2425
+ "test/hooks/check-freshness.test.ts"
2426
+ ]
2427
+ },
2428
+ {
2429
+ "behaviour": "check-freshness",
2430
+ "harness": "copilot",
2431
+ "status": "limitation",
2432
+ "limitation": "pre-tool gate and shell guard are wired; check-freshness is not exercised against Copilot payloads"
2433
+ },
2434
+ {
2435
+ "behaviour": "check-freshness",
2436
+ "harness": "kiro",
2437
+ "status": "enforced",
2438
+ "tests": [
2439
+ "test/hooks/check-freshness.test.ts"
2440
+ ]
2441
+ },
2442
+ {
2443
+ "behaviour": "check-freshness",
2444
+ "harness": "antigravity",
2445
+ "status": "enforced",
2446
+ "tests": [
2447
+ "test/hooks/check-freshness.test.ts"
2448
+ ]
2449
+ }
2450
+ ],
2451
+ "rowsDigest": "sha256:39c81a958388528cddec2fa524296872bf420d37073ae643a76faddc54893cf5"
2849
2452
  }
2850
2453
  }