@event4u/agent-config 16.2.0 → 16.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +337 -234
  5. package/README.md +15 -13
  6. package/agents/templates/.ai-council.yml.example +26 -8
  7. package/dist/agent-src/commands/analyze/inbox.md +11 -8
  8. package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
  9. package/dist/agent-src/commands/bug/fix.md +17 -2
  10. package/dist/agent-src/commands/bug/investigate.md +1 -1
  11. package/dist/agent-src/commands/commit/in-chunks.md +40 -31
  12. package/dist/agent-src/commands/commit.md +72 -33
  13. package/dist/agent-src/commands/condense.md +2 -8
  14. package/dist/agent-src/commands/council/debate.md +11 -7
  15. package/dist/agent-src/commands/council/default.md +10 -9
  16. package/dist/agent-src/commands/council.md +1 -1
  17. package/dist/agent-src/commands/estimate-ticket.md +1 -1
  18. package/dist/agent-src/commands/feature/explore.md +3 -3
  19. package/dist/agent-src/commands/feature/plan.md +2 -2
  20. package/dist/agent-src/commands/feature/roadmap.md +1 -1
  21. package/dist/agent-src/commands/fix/ci.md +18 -4
  22. package/dist/agent-src/commands/fix/commit-messages.md +48 -23
  23. package/dist/agent-src/commands/fix/pr-comments.md +3 -6
  24. package/dist/agent-src/commands/implement-ticket.md +4 -4
  25. package/dist/agent-src/commands/jira-ticket.md +1 -1
  26. package/dist/agent-src/commands/memory/add.md +4 -16
  27. package/dist/agent-src/commands/memory/load.md +5 -6
  28. package/dist/agent-src/commands/memory/promote.md +3 -16
  29. package/dist/agent-src/commands/mission/upgrade.md +3 -2
  30. package/dist/agent-src/commands/optimize/agents-dir.md +2 -2
  31. package/dist/agent-src/commands/optimize/deep.md +4 -2
  32. package/dist/agent-src/commands/optimize/rtk.md +4 -26
  33. package/dist/agent-src/commands/pr/create/description-only.md +18 -15
  34. package/dist/agent-src/commands/pr/create.md +42 -34
  35. package/dist/agent-src/commands/pr/merge.md +136 -9
  36. package/dist/agent-src/commands/prepare-for-review.md +13 -11
  37. package/dist/agent-src/commands/project/analyze.md +7 -35
  38. package/dist/agent-src/commands/refine-ticket.md +1 -1
  39. package/dist/agent-src/commands/review/changes.md +14 -19
  40. package/dist/agent-src/commands/roadmap/create.md +1 -1
  41. package/dist/agent-src/commands/roadmap/materialize.md +1 -1
  42. package/dist/agent-src/commands/roadmap/next.md +10 -1
  43. package/dist/agent-src/commands/roadmap/process-full.md +56 -42
  44. package/dist/agent-src/commands/roadmap/resolve-blockers.md +411 -0
  45. package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
  46. package/dist/agent-src/commands/roadmap.md +18 -4
  47. package/dist/agent-src/commands/tests/create.md +17 -3
  48. package/dist/agent-src/commands/tests/execute.md +22 -5
  49. package/dist/agent-src/commands/worktree/create.md +7 -3
  50. package/dist/agent-src/commands/worktree/verify.md +2 -1
  51. package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
  52. package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
  53. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +5 -3
  54. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +7 -9
  55. package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -6
  56. package/dist/agent-src/contexts/contracts/frugality-charter.md +8 -5
  57. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +7 -7
  58. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +0 -1
  59. package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
  60. package/dist/agent-src/contexts/execution/non-interactive-contract.md +5 -8
  61. package/dist/agent-src/contexts/execution/rdp-gate.md +4 -4
  62. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +9 -8
  63. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +99 -54
  64. package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
  65. package/dist/agent-src/contexts/execution/subagent-routing.md +8 -8
  66. package/dist/agent-src/contexts/execution/subagent-steering.md +6 -4
  67. package/dist/agent-src/contexts/execution/terminal-states.md +2 -2
  68. package/dist/agent-src/contexts/execution/toolchain-resolver.md +95 -7
  69. package/dist/agent-src/contexts/subagent-configuration.md +1 -1
  70. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
  71. package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
  72. package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
  73. package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
  74. package/dist/agent-src/guidelines/agent-infra/layered-settings.md +13 -1
  75. package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  76. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
  77. package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +36 -0
  78. package/dist/agent-src/guidelines/php/git.md +15 -2
  79. package/dist/agent-src/rules/active-remediation.md +1 -2
  80. package/dist/agent-src/rules/analysis-skill-routing.md +0 -1
  81. package/dist/agent-src/rules/architecture.md +0 -1
  82. package/dist/agent-src/rules/artifact-drafting-protocol.md +0 -1
  83. package/dist/agent-src/rules/artifact-engagement-recording.md +0 -1
  84. package/dist/agent-src/rules/augment-edit-discipline.md +0 -1
  85. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  86. package/dist/agent-src/rules/brand-consistency.md +0 -1
  87. package/dist/agent-src/rules/brand-source-of-truth.md +0 -1
  88. package/dist/agent-src/rules/broken-access-control.md +1 -1
  89. package/dist/agent-src/rules/cli-output-handling.md +0 -1
  90. package/dist/agent-src/rules/code-comment-discipline.md +0 -1
  91. package/dist/agent-src/rules/code-provenance.md +0 -1
  92. package/dist/agent-src/rules/command-suggestion-policy.md +1 -1
  93. package/dist/agent-src/rules/commit-conventions.md +1 -2
  94. package/dist/agent-src/rules/communication-through-line.md +1 -2
  95. package/dist/agent-src/rules/content-quoting-floor.md +1 -2
  96. package/dist/agent-src/rules/context-hygiene.md +6 -6
  97. package/dist/agent-src/rules/copilot-routing.md +1 -2
  98. package/dist/agent-src/rules/council-availability.md +4 -4
  99. package/dist/agent-src/rules/cross-source-consistency.md +4 -6
  100. package/dist/agent-src/rules/decision-revisit-gate.md +17 -35
  101. package/dist/agent-src/rules/delegation-policy.md +2 -3
  102. package/dist/agent-src/rules/design-fidelity.md +12 -16
  103. package/dist/agent-src/rules/design-review-after-ui-write.md +3 -3
  104. package/dist/agent-src/rules/devcontainer-routing.md +1 -2
  105. package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -1
  106. package/dist/agent-src/rules/docker-commands.md +0 -1
  107. package/dist/agent-src/rules/domain-adoption-policy.md +0 -1
  108. package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -1
  109. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  110. package/dist/agent-src/rules/domain-safety-retention.md +1 -1
  111. package/dist/agent-src/rules/downstream-changes.md +0 -1
  112. package/dist/agent-src/rules/engineering-safety-floor.md +1 -1
  113. package/dist/agent-src/rules/evaluator-independence.md +3 -2
  114. package/dist/agent-src/rules/external-code-graph-interop.md +0 -1
  115. package/dist/agent-src/rules/external-reference-deep-dive.md +0 -1
  116. package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -2
  117. package/dist/agent-src/rules/finance-safety-floor.md +1 -1
  118. package/dist/agent-src/rules/fix-what-you-see.md +6 -32
  119. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +0 -1
  120. package/dist/agent-src/rules/git-history-discipline.md +2 -2
  121. package/dist/agent-src/rules/guidelines.md +0 -1
  122. package/dist/agent-src/rules/history-discipline.md +0 -1
  123. package/dist/agent-src/rules/icon-consistency.md +0 -1
  124. package/dist/agent-src/rules/image-likeness-and-rights.md +1 -1
  125. package/dist/agent-src/rules/improve-before-implement.md +0 -1
  126. package/dist/agent-src/rules/invite-challenge.md +0 -1
  127. package/dist/agent-src/rules/laravel-routing.md +1 -2
  128. package/dist/agent-src/rules/laravel-translations.md +0 -1
  129. package/dist/agent-src/rules/legal-safety-floor.md +3 -3
  130. package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -1
  131. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +0 -1
  132. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -1
  133. package/dist/agent-src/rules/markdown-safe-codeblocks.md +0 -1
  134. package/dist/agent-src/rules/media-governance-routing.md +13 -17
  135. package/dist/agent-src/rules/media-sync-ground-truth.md +0 -1
  136. package/dist/agent-src/rules/minimal-safe-diff.md +0 -1
  137. package/dist/agent-src/rules/missing-skill-recovery.md +0 -1
  138. package/dist/agent-src/rules/missing-tool-handling.md +0 -1
  139. package/dist/agent-src/rules/model-recommendation.md +0 -1
  140. package/dist/agent-src/rules/neighbour-precedence.md +64 -0
  141. package/dist/agent-src/rules/no-attribution-footers.md +0 -1
  142. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +0 -1
  143. package/dist/agent-src/rules/no-pr-progress-comments.md +0 -1
  144. package/dist/agent-src/rules/no-roadmap-references.md +0 -1
  145. package/dist/agent-src/rules/notes-first-reasoning.md +0 -1
  146. package/dist/agent-src/rules/onboarding-gate.md +0 -1
  147. package/dist/agent-src/rules/output-discipline.md +0 -1
  148. package/dist/agent-src/rules/package-ci-checks.md +0 -1
  149. package/dist/agent-src/rules/persona-governance.md +4 -5
  150. package/dist/agent-src/rules/php-coding.md +0 -1
  151. package/dist/agent-src/rules/prefer-enums-over-literals.md +0 -1
  152. package/dist/agent-src/rules/preservation-guard.md +0 -1
  153. package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -4
  154. package/dist/agent-src/rules/question-not-instruction.md +1 -1
  155. package/dist/agent-src/rules/reviewer-awareness.md +0 -1
  156. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -1
  157. package/dist/agent-src/rules/roadmap-progress-sync.md +4 -7
  158. package/dist/agent-src/rules/role-mode-adherence.md +0 -1
  159. package/dist/agent-src/rules/rule-type-governance.md +0 -1
  160. package/dist/agent-src/rules/runtime-safety.md +1 -1
  161. package/dist/agent-src/rules/scale-discipline.md +0 -1
  162. package/dist/agent-src/rules/secret-vcs-guard.md +1 -1
  163. package/dist/agent-src/rules/security-sensitive-stop.md +3 -3
  164. package/dist/agent-src/rules/self-repair-loop.md +0 -1
  165. package/dist/agent-src/rules/senior-engineering-discipline.md +0 -1
  166. package/dist/agent-src/rules/session-canary.md +7 -62
  167. package/dist/agent-src/rules/settings-ask-protocol.md +6 -6
  168. package/dist/agent-src/rules/size-enforcement.md +0 -1
  169. package/dist/agent-src/rules/skill-improvement-trigger.md +2 -3
  170. package/dist/agent-src/rules/skill-quality.md +0 -1
  171. package/dist/agent-src/rules/slash-command-routing-policy.md +0 -1
  172. package/dist/agent-src/rules/source-confidentiality.md +1 -1
  173. package/dist/agent-src/rules/source-discovery-gate.md +0 -1
  174. package/dist/agent-src/rules/source-of-truth.md +0 -1
  175. package/dist/agent-src/rules/spreadsheet-source-quality.md +1 -2
  176. package/dist/agent-src/rules/strategy-safety-floor.md +1 -1
  177. package/dist/agent-src/rules/symfony-routing.md +1 -2
  178. package/dist/agent-src/rules/think-before-action.md +0 -1
  179. package/dist/agent-src/rules/token-budget-discipline.md +12 -46
  180. package/dist/agent-src/rules/token-efficiency.md +0 -1
  181. package/dist/agent-src/rules/token-optimizer-maintenance.md +0 -1
  182. package/dist/agent-src/rules/tool-safety.md +1 -1
  183. package/dist/agent-src/rules/ui-audit-gate.md +1 -2
  184. package/dist/agent-src/rules/untrusted-input-defense.md +1 -1
  185. package/dist/agent-src/rules/upstream-proposal.md +0 -1
  186. package/dist/agent-src/rules/user-interaction.md +0 -1
  187. package/dist/agent-src/rules/user-interrupt-priority.md +1 -1
  188. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  189. package/dist/agent-src/scripts/deferral_carry.ts +339 -0
  190. package/dist/agent-src/scripts/gate_budget.ts +47 -23
  191. package/dist/agent-src/scripts/gate_execute.ts +12 -4
  192. package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
  193. package/dist/agent-src/skills/ai-council/SKILL.md +7 -4
  194. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +21 -11
  195. package/dist/agent-src/skills/ai-council/references/procedure.md +12 -6
  196. package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +1 -1
  197. package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
  198. package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
  199. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  200. package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
  201. package/dist/agent-src/skills/command-routing/SKILL.md +3 -4
  202. package/dist/agent-src/skills/conventional-commits-writing/SKILL.md +127 -139
  203. package/dist/agent-src/skills/corpus-grounding/ATTRIBUTION.md +39 -0
  204. package/dist/agent-src/skills/corpus-grounding/SKILL.md +8 -2
  205. package/dist/agent-src/skills/database/data/manifest.json +2 -2
  206. package/dist/agent-src/skills/database/data/query-tuning.csv +13 -13
  207. package/dist/agent-src/skills/design-system-capture/SKILL.md +0 -3
  208. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
  209. package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
  210. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
  211. package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
  212. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  213. package/dist/agent-src/skills/git-workflow/SKILL.md +44 -44
  214. package/dist/agent-src/skills/git-workflow/references/branch-update.md +312 -0
  215. package/dist/agent-src/skills/git-workflow/references/commit-subject.md +205 -0
  216. package/dist/agent-src/skills/iconography/SKILL.md +1 -1
  217. package/dist/agent-src/skills/jira-integration/SKILL.md +3 -3
  218. package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
  219. package/dist/agent-src/skills/merge-conflicts/SKILL.md +10 -4
  220. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  221. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  222. package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
  223. package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
  224. package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
  225. package/dist/agent-src/skills/refine-ticket/SKILL.md +4 -4
  226. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  227. package/dist/agent-src/skills/roadmap-writing/SKILL.md +2 -2
  228. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
  229. package/dist/agent-src/skills/source-discovery/SKILL.md +1 -1
  230. package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
  231. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +4 -2
  232. package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
  233. package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
  234. package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
  235. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  236. package/dist/agent-src/skills/ui-component-architect/SKILL.md +2 -2
  237. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -1
  238. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  239. package/dist/agent-src/templates/AGENTS.md +1 -1
  240. package/dist/agent-src/templates/agent-settings.md +46 -129
  241. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
  242. package/dist/agent-src/templates/command.md +2 -2
  243. package/dist/agent-src/templates/roadmaps.md +6 -1
  244. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
  245. package/dist/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
  246. package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  247. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
  248. package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
  249. package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
  250. package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
  251. package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
  252. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  253. package/dist/agent-src/templates/skill.md +1 -1
  254. package/dist/cli/registry.js +2 -1
  255. package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
  256. package/dist/cli-delegate/check_update_banner.js +207 -120
  257. package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
  258. package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-5GPULQBE.js} +2797 -338
  259. package/dist/cli-delegate/{chunk-IGD6ERX6.js → chunk-6SRJTYJS.js} +42 -176
  260. package/dist/cli-delegate/chunk-6V5FMA3P.js +186 -0
  261. package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
  262. package/dist/cli-delegate/chunk-6YQC2HLF.js +415 -0
  263. package/dist/cli-delegate/{chunk-E4XIZDIB.js → chunk-7HKRE54K.js} +1 -64
  264. package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
  265. package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-AED2VQGM.js} +1245 -249
  266. package/dist/cli-delegate/{chunk-7HQ52DHU.js → chunk-AL3RZ22D.js} +1 -1
  267. package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
  268. package/dist/cli-delegate/{chunk-DBH4AHDK.js → chunk-ED7KCMLB.js} +9 -11
  269. package/dist/cli-delegate/chunk-F3QDG2GT.js +2569 -0
  270. package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-G5VVIZRC.js} +3 -3
  271. package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-H76PHZBI.js} +149 -61
  272. package/dist/cli-delegate/chunk-IAYTIIQW.js +67 -0
  273. package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
  274. package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
  275. package/dist/cli-delegate/{chunk-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
  276. package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-KXXWJTDO.js} +6 -11
  277. package/dist/cli-delegate/{chunk-T7L2QK3K.js → chunk-LQOCRFWT.js} +1 -1
  278. package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-MDPPKQCQ.js} +58 -9
  279. package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-MSUL5NYP.js} +5 -5
  280. package/dist/cli-delegate/chunk-OAFSJBHH.js +272 -0
  281. package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
  282. package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
  283. package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-PWX7CKMD.js} +4 -4
  284. package/dist/cli-delegate/{chunk-NDJLNC6Q.js → chunk-T6BP34WI.js} +1 -0
  285. package/dist/cli-delegate/{chunk-7XGBX6ZH.js → chunk-T7XSJSUQ.js} +1144 -589
  286. package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
  287. package/dist/cli-delegate/chunk-WQWXGIWB.js +1779 -0
  288. package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-XQTPXKFA.js} +1 -1
  289. package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
  290. package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
  291. package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
  292. package/dist/cli-delegate/cmd_analyze_session.js +223 -43
  293. package/dist/cli-delegate/cmd_brand_status.js +3 -2
  294. package/dist/cli-delegate/cmd_conformance.js +1252 -249
  295. package/dist/cli-delegate/cmd_converge.js +3 -3
  296. package/dist/cli-delegate/cmd_doctor.js +19 -9
  297. package/dist/cli-delegate/cmd_doctor_neighbours.js +30 -0
  298. package/dist/cli-delegate/cmd_explain.js +45 -21
  299. package/dist/cli-delegate/cmd_export.js +13 -10
  300. package/dist/cli-delegate/cmd_fleet.js +3 -3
  301. package/dist/cli-delegate/cmd_git_convention.js +1851 -0
  302. package/dist/cli-delegate/cmd_handoff.js +44 -22
  303. package/dist/cli-delegate/cmd_mcp_available.js +3 -2
  304. package/dist/cli-delegate/cmd_memory_get.js +3 -1
  305. package/dist/cli-delegate/cmd_migrate.js +3 -3
  306. package/dist/cli-delegate/cmd_packs_active.js +5 -4
  307. package/dist/cli-delegate/cmd_preflight.js +6 -6
  308. package/dist/cli-delegate/cmd_prune.js +14 -11
  309. package/dist/cli-delegate/cmd_refresh.js +2 -1
  310. package/dist/cli-delegate/cmd_route_audit.js +10 -8
  311. package/dist/cli-delegate/cmd_route_explain.js +4 -4
  312. package/dist/cli-delegate/cmd_session_recycle.js +10 -7
  313. package/dist/cli-delegate/cmd_settings_check.js +54 -7
  314. package/dist/cli-delegate/cmd_settings_get.js +18 -8
  315. package/dist/cli-delegate/cmd_settings_migrate.js +13 -10
  316. package/dist/cli-delegate/cmd_settings_set.js +4 -4
  317. package/dist/cli-delegate/cmd_sync.js +14 -11
  318. package/dist/cli-delegate/cmd_uninstall.js +15 -12
  319. package/dist/cli-delegate/cmd_update.js +7 -7
  320. package/dist/cli-delegate/cmd_upgrade.js +9 -8
  321. package/dist/cli-delegate/cmd_validate.js +15 -12
  322. package/dist/cli-delegate/cmd_versions.js +5 -5
  323. package/dist/cli-delegate/deferral_carry.js +16 -0
  324. package/dist/cli-delegate/gate_budget.js +1 -1
  325. package/dist/cli-delegate/gate_execute.js +3 -3
  326. package/dist/cli-delegate/roadmap_gates.js +6 -6
  327. package/dist/cli-delegate/update_roadmap_progress.js +1 -1
  328. package/dist/discovery/deprecation-report.md +1 -1
  329. package/dist/discovery/discovery-manifest.json +232 -141
  330. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  331. package/dist/discovery/discovery-manifest.summary.md +3 -3
  332. package/dist/discovery/dormancy-report.md +1 -1
  333. package/dist/discovery/orphan-report.md +1 -1
  334. package/dist/discovery/packs.json +26 -9
  335. package/dist/discovery/trust-report.md +3 -3
  336. package/dist/discovery/workspaces.json +7 -4
  337. package/dist/hooks/dispatch.js +5655 -6623
  338. package/dist/hooks/dispatch.sha256 +1 -1
  339. package/dist/install/claudePathsPlan.js +47 -6
  340. package/dist/install/claudeRuleRewrite.js +7 -0
  341. package/dist/install/emit_host_rules_cli.js +39 -36
  342. package/dist/install/globalRuleScope.js +87 -0
  343. package/dist/install/host_rule_ownership.js +160 -0
  344. package/dist/install/install.mjs +2336 -1249
  345. package/dist/install/installThinLayer.js +289 -0
  346. package/dist/install/installedRuleLinks.js +262 -0
  347. package/dist/install/wizard-plan.js +24 -0
  348. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  349. package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
  350. package/dist/mcp/registry-manifest.json +5 -5
  351. package/dist/mcp/server.json +2 -2
  352. package/dist/mcp/server.mjs +36504 -30986
  353. package/dist/router.json +1 -1
  354. package/dist/scripts/_lib/agent_settings.js +26 -120
  355. package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
  356. package/dist/scripts/_lib/compile_time_toggles.js +12 -21
  357. package/dist/scripts/_lib/git_convention.js +232 -0
  358. package/dist/scripts/_lib/global_deploy_inventory.js +730 -0
  359. package/dist/scripts/_lib/installed_layer.js +704 -0
  360. package/dist/scripts/_lib/lean_projection_mode.js +218 -15
  361. package/dist/scripts/_lib/package_root.js +68 -0
  362. package/dist/scripts/_lib/rule_consequence_class.js +45 -0
  363. package/dist/scripts/_lib/rule_injection.js +67 -10
  364. package/dist/scripts/_lib/rule_law_section.js +122 -0
  365. package/dist/scripts/_lib/settings_removed_keys.js +168 -0
  366. package/dist/scripts/_lib/thin_rules.js +535 -0
  367. package/dist/scripts/_lib/windsurf_render.js +60 -0
  368. package/dist/scripts/condense.js +14 -26
  369. package/dist/scripts/project_thin_rules.js +14 -294
  370. package/dist/server/app.js +2 -1
  371. package/dist/server/gitKeysGate.js +105 -0
  372. package/dist/server/routes/settings.js +67 -8
  373. package/dist/server/routes/wizard.js +4 -0
  374. package/dist/server/schemas/settings.js +29 -81
  375. package/dist/shared/skillRanking.js +103 -16
  376. package/dist/ui/assets/{index-Cwq4d0hX.js → index-C3djEJah.js} +2 -2
  377. package/dist/ui/index.html +1 -1
  378. package/docs/MIGRATION.md +72 -1
  379. package/docs/contracts/settings-classes.md +39 -67
  380. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +39 -0
  381. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +1 -1
  382. package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +8 -10
  383. package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +3 -2
  384. package/docs/guidelines/agent-infra/layered-settings.md +13 -1
  385. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  386. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +10 -3
  387. package/docs/guidelines/agent-infra/size-and-scope.md +36 -0
  388. package/docs/guidelines/php/git.md +15 -2
  389. package/package.json +1 -1
  390. package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
  391. package/src/agent-src/scripts/deferral_carry.ts +339 -0
  392. package/src/agent-src/scripts/gate_budget.ts +47 -23
  393. package/src/agent-src/scripts/gate_execute.ts +12 -4
  394. package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
  395. package/src/agent-src/templates/AGENTS.md +1 -1
  396. package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +0 -6
  397. package/src/agent-src/templates/scripts/work_engine/directives/backend/_self_fix.ts +11 -7
  398. package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
  399. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +3 -2
  400. package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +2 -1
  401. package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +0 -6
  402. package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +9 -12
  403. package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +2 -1
  404. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
  405. package/src/config/agent-settings.template.yml +141 -334
  406. package/src/config/agents-paths.yml +16 -0
  407. package/src/config/assurance-capability-registry.json +7 -3
  408. package/src/config/ci-local-parity.yml +3 -0
  409. package/src/config/continuity-surface.json +10 -3
  410. package/src/config/discovery/packs.yml +17 -1
  411. package/src/config/evaluator-budgets.json +23 -10
  412. package/src/config/gate-coverage.yml +138 -3
  413. package/src/config/gate-violation-baselines.json +64 -16
  414. package/src/config/gitignore-block.txt +19 -0
  415. package/src/config/hook-bundle-budget.json +25 -0
  416. package/src/config/hook-token-budget.json +6 -1
  417. package/src/config/host-instruction-limits.json +33 -0
  418. package/src/config/release-gate-locality.yml +2 -1
  419. package/src/config/routing-coverage-seed.json +67 -4
  420. package/src/config/rule-activation-census.json +7 -3
  421. package/src/config/rule-consequence-class.json +161 -0
  422. package/src/config/rule-law-ceilings.json +105 -0
  423. package/src/config/rule-obligations.json +833 -0
  424. package/src/install/claudePathsPlan.ts +46 -4
  425. package/src/install/claudeRuleRewrite.ts +10 -1
  426. package/src/install/emit_host_rules_cli.ts +43 -34
  427. package/src/install/globalRuleScope.ts +109 -0
  428. package/src/install/host_rule_ownership.ts +170 -0
  429. package/src/install/installThinLayer.ts +378 -0
  430. package/src/install/installedRuleLinks.ts +308 -0
  431. package/src/install/wizard-plan.ts +24 -0
  432. package/src/scripts/_cli/cmd_analyze_session.ts +9 -15
  433. package/src/scripts/_cli/cmd_conformance.ts +13 -2
  434. package/src/scripts/_cli/cmd_doctor.ts +33 -81
  435. package/src/scripts/_cli/cmd_doctor_neighbours.ts +426 -0
  436. package/src/scripts/_cli/cmd_explain.ts +72 -14
  437. package/src/scripts/_cli/cmd_git_convention.ts +637 -0
  438. package/src/scripts/_cli/cmd_settings_check.ts +66 -8
  439. package/src/scripts/_cli/cmd_settings_get.ts +18 -3
  440. package/src/scripts/_cli/doctor_execution.ts +72 -1
  441. package/src/scripts/_dispatch.bash +53 -4
  442. package/src/scripts/_lib/agent_settings.ts +26 -124
  443. package/src/scripts/_lib/blocked_by_marker.ts +1 -1
  444. package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
  445. package/src/scripts/_lib/compile_time_toggles.ts +12 -21
  446. package/src/scripts/_lib/dispatch_import_closure.ts +163 -0
  447. package/src/scripts/_lib/estate_offsets.ts +241 -0
  448. package/src/scripts/_lib/exemption_shape.ts +143 -0
  449. package/src/scripts/_lib/fnv.ts +23 -0
  450. package/src/scripts/_lib/foreign_scan.ts +106 -0
  451. package/src/scripts/_lib/git_base_ref.ts +92 -0
  452. package/src/scripts/_lib/git_convention.ts +291 -0
  453. package/src/scripts/_lib/git_convention_carrier.ts +389 -0
  454. package/src/scripts/_lib/git_convention_grammar.ts +246 -0
  455. package/src/scripts/_lib/git_convention_measure.ts +344 -0
  456. package/src/scripts/_lib/gitignore_block.ts +314 -0
  457. package/src/scripts/_lib/global_deploy_inventory.ts +106 -0
  458. package/src/scripts/_lib/graph_feeder_record.ts +437 -0
  459. package/src/scripts/_lib/hook_settings.ts +73 -0
  460. package/src/scripts/_lib/host_capability.ts +40 -19
  461. package/src/scripts/_lib/host_hook_merge.ts +165 -0
  462. package/src/scripts/_lib/installed_layer.ts +963 -0
  463. package/src/scripts/_lib/json_merge.ts +82 -0
  464. package/src/scripts/_lib/json_pointers.ts +93 -11
  465. package/src/scripts/_lib/knowledge_global.ts +14 -1
  466. package/src/scripts/_lib/lean_projection_mode.ts +275 -15
  467. package/src/scripts/_lib/machine_wake.ts +16 -3
  468. package/src/scripts/_lib/module_reach.ts +456 -0
  469. package/src/scripts/_lib/neighbour_census.ts +760 -0
  470. package/src/scripts/_lib/neighbour_contradictions.ts +236 -0
  471. package/src/scripts/_lib/neighbour_scan.ts +122 -0
  472. package/src/scripts/_lib/neighbour_tool_use.ts +187 -0
  473. package/src/scripts/_lib/prompt_shape.ts +46 -0
  474. package/src/scripts/_lib/ratification_artifact.ts +220 -1
  475. package/src/scripts/_lib/ratification_subject.ts +92 -0
  476. package/src/scripts/_lib/release_findings_ingest.ts +15 -7
  477. package/src/scripts/_lib/release_highlights.ts +5 -0
  478. package/src/scripts/_lib/release_migration_gate.ts +19 -3
  479. package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
  480. package/src/scripts/_lib/review_coverage.ts +134 -0
  481. package/src/scripts/_lib/rule_consequence_class.ts +71 -0
  482. package/src/scripts/_lib/rule_injection.ts +130 -10
  483. package/src/scripts/_lib/rule_law_section.ts +147 -0
  484. package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
  485. package/src/scripts/_lib/rule_obligations.ts +205 -0
  486. package/src/scripts/_lib/self_repair.ts +1 -1
  487. package/src/scripts/_lib/settings_removed_keys.ts +173 -0
  488. package/src/scripts/_lib/skill_origin.ts +254 -0
  489. package/src/scripts/_lib/structured_ask.ts +64 -21
  490. package/src/scripts/_lib/test_red_state.ts +5 -0
  491. package/src/scripts/_lib/thin_rules.ts +620 -0
  492. package/src/scripts/_lib/touched_file_quality.ts +570 -0
  493. package/src/scripts/_lib/turn_end_refusals.ts +77 -2
  494. package/src/scripts/_lib/windsurf_render.ts +63 -0
  495. package/src/scripts/_lib/worker_budget.ts +1 -1
  496. package/src/scripts/adr/regenerate_index.ts +16 -1
  497. package/src/scripts/ai_council/cli_call_budget.ts +13 -5
  498. package/src/scripts/ai_council/clients.ts +26 -57
  499. package/src/scripts/ai_council/config.ts +8 -8
  500. package/src/scripts/ai_council/modification_review.ts +100 -0
  501. package/src/scripts/ai_council/modification_review_questions.ts +90 -0
  502. package/src/scripts/ai_council/orchestrator.ts +5 -5
  503. package/src/scripts/ai_council/spend_gate.ts +18 -7
  504. package/src/scripts/ai_council/vendor_defaults.ts +45 -0
  505. package/src/scripts/ai_team/config.ts +11 -16
  506. package/src/scripts/audit_skill_overlap.ts +261 -0
  507. package/src/scripts/audit_user_type_axis.ts +20 -8
  508. package/src/scripts/before_complete_hook.ts +243 -12
  509. package/src/scripts/bench_ab_clone.ts +1 -2
  510. package/src/scripts/bench_concern_spawn_path.ts +129 -0
  511. package/src/scripts/bench_graph_feeder_latency.ts +584 -0
  512. package/src/scripts/bench_touched_file_quality.ts +238 -0
  513. package/src/scripts/check_agent_artifact_location.ts +36 -0
  514. package/src/scripts/check_branch_freshness.ts +147 -24
  515. package/src/scripts/check_enforcement_coverage.ts +130 -0
  516. package/src/scripts/check_enforcement_matrix.ts +377 -20
  517. package/src/scripts/check_estate_count.ts +130 -153
  518. package/src/scripts/check_evaluator_budgets.ts +4 -0
  519. package/src/scripts/check_finding_dispositions.ts +196 -21
  520. package/src/scripts/check_gate_coverage.ts +4 -3
  521. package/src/scripts/check_gate_reachability.ts +48 -1
  522. package/src/scripts/check_generator_sync.ts +48 -0
  523. package/src/scripts/check_hook_bundle_composition.ts +477 -0
  524. package/src/scripts/check_kernel_edit_ratified.ts +132 -14
  525. package/src/scripts/check_memory.ts +7 -1
  526. package/src/scripts/check_pack_size.ts +1 -1
  527. package/src/scripts/check_release_highlights.ts +10 -0
  528. package/src/scripts/check_release_manifest_content.ts +189 -0
  529. package/src/scripts/check_release_pr_shape.ts +38 -15
  530. package/src/scripts/check_standing_rule_delivery.ts +129 -13
  531. package/src/scripts/check_suppression_hygiene.ts +2 -5
  532. package/src/scripts/check_verify_expectation_delta.ts +521 -0
  533. package/src/scripts/ci_settle.ts +42 -5
  534. package/src/scripts/classify_merge_risk.ts +320 -0
  535. package/src/scripts/closure_scan.ts +91 -1
  536. package/src/scripts/code_graph/detect.ts +127 -7
  537. package/src/scripts/code_graph/foreign.ts +194 -0
  538. package/src/scripts/code_graph/query.ts +217 -4
  539. package/src/scripts/code_graph/types.ts +26 -2
  540. package/src/scripts/code_graph/validate.ts +3 -1
  541. package/src/scripts/code_graph/verbs.ts +103 -0
  542. package/src/scripts/command_suggester/settings.ts +8 -108
  543. package/src/scripts/command_suggester/types.ts +4 -5
  544. package/src/scripts/compile_hook_manifest.ts +33 -1
  545. package/src/scripts/condense.ts +14 -27
  546. package/src/scripts/consumer_matrix.ts +102 -0
  547. package/src/scripts/context_hygiene_hook.ts +13 -23
  548. package/src/scripts/cost/preflight.mjs +12 -1
  549. package/src/scripts/council_cli.ts +7 -7
  550. package/src/scripts/dispatch_r2_reviewer.ts +24 -11
  551. package/src/scripts/estate_exemption_shape.ts +202 -0
  552. package/src/scripts/explain_run.ts +8 -13
  553. package/src/scripts/generate_git_convention_grammar.ts +127 -0
  554. package/src/scripts/generate_host_cost_table.ts +21 -4
  555. package/src/scripts/handoff_context_hook.ts +86 -37
  556. package/src/scripts/hook_manifest.json +1 -1
  557. package/src/scripts/hook_manifest.yaml +175 -15
  558. package/src/scripts/hooks/block_config_weakening.ts +115 -7
  559. package/src/scripts/hooks/block_plumbing_writes.ts +37 -5
  560. package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
  561. package/src/scripts/hooks/concern_failure_policy.ts +280 -0
  562. package/src/scripts/hooks/concern_registry.ts +2 -0
  563. package/src/scripts/hooks/delegation_nudge_hook.ts +2 -3
  564. package/src/scripts/hooks/dispatch_hook.ts +52 -52
  565. package/src/scripts/hooks/evidence_independence.ts +12 -4
  566. package/src/scripts/hooks/exit_codes.ts +2 -1
  567. package/src/scripts/hooks/host_lowering.json +1 -1
  568. package/src/scripts/hooks/host_lowering.ts +19 -1
  569. package/src/scripts/hooks/mcp_usage_observation_hook.ts +121 -0
  570. package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
  571. package/src/scripts/hooks/payload_stub.ts +10 -1
  572. package/src/scripts/hooks/push_settle_hook.ts +4 -3
  573. package/src/scripts/hooks/rule_inject_hook.ts +795 -60
  574. package/src/scripts/hooks/state_io.ts +8 -4
  575. package/src/scripts/hooks/table_fingerprint.ts +21 -0
  576. package/src/scripts/hooks/telemetry_usage_hook.ts +24 -7
  577. package/src/scripts/hooks/turn_end_gate_hook.ts +85 -0
  578. package/src/scripts/hooks_status.ts +112 -0
  579. package/src/scripts/injection_scan_hook.ts +7 -0
  580. package/src/scripts/install-hooks.sh +42 -14
  581. package/src/scripts/install.ts +78 -215
  582. package/src/scripts/installed_layer_report.ts +103 -0
  583. package/src/scripts/language_mirror_hook.ts +15 -6
  584. package/src/scripts/learning_sidecar.ts +119 -8
  585. package/src/scripts/lint_blocker_citations.ts +198 -0
  586. package/src/scripts/lint_evidence_artifacts.ts +9 -0
  587. package/src/scripts/lint_hook_concern_budget.ts +10 -21
  588. package/src/scripts/lint_hook_manifest.ts +53 -0
  589. package/src/scripts/lint_major_migration_sections.ts +156 -26
  590. package/src/scripts/lint_pack_boundaries.ts +465 -29
  591. package/src/scripts/lint_roadmap_blockers.ts +282 -29
  592. package/src/scripts/lint_roadmap_complexity.ts +4 -2
  593. package/src/scripts/lint_rule_law_section.ts +647 -0
  594. package/src/scripts/lint_rule_skill_pack_reach.ts +17 -0
  595. package/src/scripts/lint_settings_classes.ts +1 -1
  596. package/src/scripts/lint_ticked_unmet_criteria.ts +165 -0
  597. package/src/scripts/lint_workflow_security.ts +173 -6
  598. package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
  599. package/src/scripts/mcp_server/graph_tools.ts +72 -3
  600. package/src/scripts/measure_routing_signal.ts +54 -16
  601. package/src/scripts/measure_skill_ranker_baseline.ts +221 -8
  602. package/src/scripts/memory_learn_hook.ts +91 -6
  603. package/src/scripts/model_rule_injection.ts +55 -8
  604. package/src/scripts/onboarding_gate_hook.ts +7 -6
  605. package/src/scripts/print_required_checks.ts +15 -3
  606. package/src/scripts/probe_host_compliance.ts +33 -5
  607. package/src/scripts/probe_turnaround.ts +183 -3
  608. package/src/scripts/project_thin_rules.ts +34 -327
  609. package/src/scripts/ratification_header.ts +77 -0
  610. package/src/scripts/refusal_envelope.ts +138 -0
  611. package/src/scripts/release_publication.ts +29 -3
  612. package/src/scripts/report_dispatch_import_closure.ts +76 -0
  613. package/src/scripts/report_evidence_temperature.ts +657 -0
  614. package/src/scripts/report_installed_rule_links.ts +274 -0
  615. package/src/scripts/report_label_agreement.ts +233 -0
  616. package/src/scripts/report_module_reach.ts +212 -0
  617. package/src/scripts/report_obligation_mechanism.ts +228 -0
  618. package/src/scripts/report_parked_blockers.ts +222 -0
  619. package/src/scripts/report_required_checks_drift.ts +196 -0
  620. package/src/scripts/report_single_token_triggers.ts +277 -0
  621. package/src/scripts/report_skill_ranker_confusion.ts +543 -0
  622. package/src/scripts/report_standing_payload_by_host.ts +188 -15
  623. package/src/scripts/report_verification_record_coverage.ts +306 -0
  624. package/src/scripts/routing_doctor.ts +2 -2
  625. package/src/scripts/rule_activation_census.ts +5 -2
  626. package/src/scripts/rule_trigger_eval.ts +9 -9
  627. package/src/scripts/schemas/agent-settings.schema.json +17 -31
  628. package/src/scripts/schemas/command.schema.json +1 -1
  629. package/src/scripts/schemas/review-findings.schema.json +3 -2
  630. package/src/scripts/schemas/rule.schema.json +5 -0
  631. package/src/scripts/schemas/skill.schema.json +1 -1
  632. package/src/scripts/self_review_gate.ts +101 -9
  633. package/src/scripts/skill_tools/score_skill_relevance.ts +314 -40
  634. package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
  635. package/src/scripts/sync_gitignore.ts +29 -235
  636. package/src/scripts/sync_pr_branch.ts +403 -132
  637. package/src/scripts/trigger_eval_grandfather.json +0 -21
  638. package/src/server/schemas/settings.ts +42 -176
  639. package/src/shared/skillRanking.ts +169 -14
  640. package/dist/cli-delegate/chunk-5R7HOLAF.js +0 -99
  641. package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
  642. package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
  643. package/src/scripts/_lib/config_chain.ts +0 -477
  644. package/src/scripts/_lib/conformance_report.ts +0 -403
  645. package/src/scripts/_lib/eval_discrimination.ts +0 -95
  646. package/src/scripts/_lib/evaluator_promotion.ts +0 -225
  647. package/src/scripts/_lib/file_slicer.ts +0 -117
  648. package/src/scripts/_lib/legacy_boundary_map.ts +0 -228
  649. package/src/scripts/_lib/minimality_tiebreak.ts +0 -168
  650. package/src/scripts/_lib/overbuild_lens_contract.ts +0 -196
  651. package/src/scripts/_lib/role_split.ts +0 -338
@@ -7,7 +7,7 @@ cluster: roadmap
7
7
  sub: process-full
8
8
  skills: [agent-docs-writing, ai-council, roadmap-management]
9
9
  description: Autonomously process every open step across every phase of a roadmap until the file is fully closed. Largest execution scope of the /roadmap cluster — runs continuously across phase boundaries.
10
- argument-hint: "[roadmap] [--all] [--worktree]"
10
+ argument-hint: "[roadmap] [--all] [--merge] [--worktree]"
11
11
  suggestion:
12
12
  eligible: false
13
13
  rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
@@ -145,13 +145,13 @@ the loop continues to the next one.
145
145
  ### Delivery — every run, flag or not
146
146
 
147
147
  On outcome `complete`, open the PR as today, then run
148
- [`/pr:merge <N> --no-merge`](../../../git/pr/merge/command.md) on it: sync the
148
+ `/pr:merge <N> --no-merge` on it: sync the
149
149
  base in, resolve conflicts by that command's four enumerated classes, drive the
150
150
  required checks green on the pushed head. **This is unconditional** — a bare
151
151
  `/roadmap:process-full` delivers a mergeable PR, not merely an open one, and
152
- waiting on that remote CI is part of the run per the Iron Law below. It is
153
- the whole of what this command delivers: there is no flag that carries it
154
- further, and § Merging below says why.
152
+ waiting on that remote CI is part of the run per the Iron Law below. With an
153
+ owner auto-merge instruction the call is `/pr:merge <N> --merge` instead, which
154
+ merges through that command's danger gate — § Merging below.
155
155
 
156
156
  ### The six required layers, in order, each with the command that runs it
157
157
 
@@ -193,39 +193,31 @@ condition to test rather than assert: a PR whose required context is skipped has
193
193
  a green rollup and an unenforced gate, so a delivery-ready test that reads only
194
194
  the rollup passes exactly when it should fail.
195
195
 
196
- ### Merging — out of scope, cancelled rather than deferred
196
+ ### `--merge` — merging, on the owner's word only (ADR-282)
197
197
 
198
198
  ```
199
- THIS COMMAND NEVER MERGES. THERE IS NO FLAG THAT MAKES IT MERGE.
200
- THE RUN ENDS AT MERGEABLE-AND-OPEN, ALWAYS, AND SAYS SO.
201
- A FUTURE MERGE CAPABILITY NEEDS A NEW ROADMAP AND AN OWNER RULING —
202
- NOT A COMMAND EDIT, AND NOT A FLAG THAT ALREADY SITS HERE INERT.
199
+ THIS COMMAND MERGES ONLY ON AN EXPLICIT OWNER AUTO-MERGE INSTRUCTION:
200
+ `--merge`, OR THE OWNER'S OWN WORDS IN THE SESSION THAT RUNS THE WORK.
201
+ WITHOUT ONE, THE RUN ENDS AT MERGEABLE-AND-OPEN, AND SAYS SO.
202
+ A `needs-council` PR MERGES ONLY ON TWO CONVERGENT CLEARING SEATS;
203
+ DANGEROUS, SPLIT, DEGRADED OR UNAVAILABLE → THE OWNER DECIDES.
203
204
  ```
204
205
 
205
- A `--merge` flag was specified here and has been **removed**. The
206
- `merge-authority` blocker of `road-to-drain-commands` closed as *not authorized
207
- in this roadmap*: activating the flag would have lowered
208
- [`non-destructive-by-default`](../../../../rules/non-destructive-by-default.md)'s
209
- per-turn confirmation floor for a production-branch merge, which
210
- [`decision-revisit-gate`](../../../../rules/decision-revisit-gate.md)'s
211
- owner-reserved table reserves to the owner. No owner ruling was available to the
212
- run that closed the roadmap, and an AI-council pass (2/2 convergent, 2026-08-22)
213
- ruled that a council may cancel an unauthorized implementation but may not
214
- manufacture the owner decision. The policy question is therefore **undecided,
215
- not rejected** — see
206
+ The owner settled the half of
216
207
  [ADR-239](../../../../../docs/decisions/ADR-239-drain-command-surface-and-merge-authority.md)
217
- § Disposition.
218
-
219
- The flag was removed rather than left inert deliberately: an archived roadmap
220
- must not leave latent executable authority behind a documented switch.
221
-
222
- Three independent findings stand behind the safety requirement, and any future
223
- attempt starts from them rather than re-deriving them: the AI council's Q1
224
- verdict (2026-08-21 — mergeability-only until authorization is target-bound and
225
- tamper-resistant), the committed `road-to-gate-preauth-authorization` stub (an
226
- authorization the agent can write is not an authorization), and the runtime
227
- guard that refused this roadmap's own attempt to edit the canonical loop
228
- contract.
208
+ § Disposition that ADR-266 left open:
209
+ [ADR-282](../../../../../docs/decisions/ADR-282-auto-merge-authority-with-a-council-danger-gate.md).
210
+ An explicit auto-merge instruction is the this-turn confirmation
211
+ [`non-destructive-by-default`](../../../../rules/non-destructive-by-default.md)
212
+ requires for the production-branch merge of a **routine** PR. Delivery runs
213
+ `/pr:merge <N> --merge`, whose § 9a danger gate (`classify_merge_risk`) decides:
214
+ `routine` → squash-merge bound to the observed head; `needs-council` → a neutral
215
+ council review, merge only when both seats say *not dangerous, owner review
216
+ unnecessary*, otherwise hand the PR back with the seats' reasons.
217
+
218
+ ADR-268 § 3's object-bound `prod_merge` grant stays a separate, unchanged path.
219
+ A standing autonomy directive or momentum is **neither**. Deploy, release and
220
+ every other Hard-Floor action keep their own confirmation.
229
221
 
230
222
  **Mergeability is per-PR against a recorded base, never a queue property.**
231
223
  When every PR in the estate touches the same generated files — in this
@@ -269,7 +261,7 @@ stops the run):
269
261
  5. **Test / quality red** that cannot be cleared within the N=3 budget.
270
262
  6. **RETIRED 2026-09-13** by `road-to-adversarial-verification-and-long-runs`
271
263
  5.2. This read *a merge conflict outside the four enumerated classes of
272
- [`/pr:merge` § 3](../../../git/pr/merge/command.md)*. That section now ROUTES
264
+ `/pr:merge` § 3*. That section now ROUTES
273
265
  an unenumerated conflict — understand both intents, inspect recency and
274
266
  authorship, preserve both where compatible, independent review, council or
275
267
  team, and the owner **only** for a product-semantic incompatibility — so
@@ -298,7 +290,7 @@ roadmap:
298
290
 
299
291
  **And the conditions that end the loop without ending a roadmap:**
300
292
  estate-queue exhaustion (always), a
301
- [`/pr:merge` § 8](../../../git/pr/merge/command.md) kill switch (always — that
293
+ `/pr:merge` § 8 kill switch (always — that
302
294
  section arms its checks during **preparation**, not only before a merge, which
303
295
  is what keeps them reachable while the merge step is gated), and
304
296
  authorization-window expiry — which is **unreachable in this command**,
@@ -322,7 +314,7 @@ FORBIDDEN NON-HALT REASONS — NEVER STOP THE RUN FOR ANY OF THESE:
322
314
  · "a PR must be opened" / "a GitHub setting must change"
323
315
  · "CI must be re-run" / "the merge base needs updating" / "there are
324
316
  conflicts" — resolving these IS the work, and since 2026-09-13 that holds
325
- for an UNENUMERATED conflict too: [`/pr:merge` § 3](../../../git/pr/merge/command.md)
317
+ for an UNENUMERATED conflict too: `/pr:merge` § 3
326
318
  routes it (understand both intents → recency and authorship → preserve both
327
319
  where compatible → independent review → council or team → the owner only for
328
320
  a product-semantic incompatibility) instead of stopping. The prohibition that
@@ -481,7 +473,12 @@ A missing setting, a CI re-run, a protection flag, a rebase, a council call: do
481
473
  them, and say so in the PR body if it matters. The only mid-run interruptions
482
474
  that remain legitimate are a spend-ceiling crossing and an EXCLUDED-list action
483
475
  (production trunk, deploy, prod data/infra, an irreversible external action
484
- beyond the PR).
476
+ beyond the PR). One carve-out from "do them": a rebase of a branch that is
477
+ already pushed rewrites published history, and still needs the user's answer
478
+ this turn per `git-history-discipline` § When rewrite is allowed — the
479
+ invocation does not give it, and neither does `git.update_strategy: rebase`,
480
+ which picks the operation and never authorises it. Without that answer the
481
+ branch is left behind and the PR body says so.
485
482
 
486
483
  Report shape:
487
484
 
@@ -500,18 +497,35 @@ Hard external blocker: <specific reason>
500
497
  Attempted: <what was tried>
501
498
  ```
502
499
 
503
- ## Spend — USD 25 per run, pre-authorised
500
+ ## Spend — whatever ceiling was configured, and none when none was
504
501
 
505
502
  ```
506
- cost_so_far + reasonably_expected_remaining ≤ $25 → RUN IT, ASK NOTHING
507
- cost_so_far + reasonably_expected_remaining > $25 → OWNER APPROVAL BEFORE CROSSING
503
+ READ THE CONFIGURED cost.budgets WINDOWS (daily · weekly · monthly).
504
+ spend_so_far + reasonably_expected_remaining WITHIN EVERY CONFIGURED WINDOW
505
+ → RUN IT, ASK NOTHING
506
+ WOULD CROSS A CONFIGURED WINDOW → PAUSE AND REPORT BEFORE CROSSING.
507
+ NO WINDOW CONFIGURED → NONE APPLIES. RUN IT, ASK NOTHING.
508
508
  COST UNKNOWN → CONSERVATIVE ESTIMATE. UNCERTAINTY IS NOT A REASON TO ASK.
509
- SERVICE-ENFORCED LIMITS MAKE >$25 IMPOSSIBLE → AUTHORISED.
509
+ SERVICE-ENFORCED LIMITS MAKE A CROSSING IMPOSSIBLE → AUTHORISED.
510
510
  EXISTING SUBSCRIPTION → MARGINAL COST $0, NOT COUNTED.
511
511
  NEVER SPLIT SPEND ACROSS SERVICES, SUBAGENTS, COUNCIL ROUNDS OR CALLS
512
- TO KEEP EACH ITEM UNDER THE CEILING. THE CEILING IS CUMULATIVE, PER RUN.
512
+ TO KEEP EACH ITEM UNDER A CEILING. A CEILING IS CUMULATIVE, PER RUN.
513
513
  ```
514
514
 
515
+ **Who carries this, stated plainly: the model, not a gate.** Nothing on a
516
+ roadmap run reads a cumulative spend figure and compares it with anything —
517
+ ADR-237 said so of its own ceiling ("Nothing mechanical checks any of this")
518
+ and that has not changed. The optional `cost.enforcement: hard-stop` preflight
519
+ is a separate, deliberately-invoked control and is not called from a run. So
520
+ this block is an obligation the model carries, and a reader should not take it
521
+ for an enforced limit.
522
+
523
+ What used to sit here was a flat per-run USD constant that nobody configured.
524
+ ADR-279 replaced it with the windows a person actually set, which is the only
525
+ kind of ceiling this package now applies; that record names the old figure, and
526
+ this file deliberately does not, so no reader mistakes a historical number for
527
+ a live threshold. Set `cost.budgets.daily` / `weekly` / `monthly` to get one.
528
+
515
529
  The transport is not a governance boundary: a council invocation is the same
516
530
  authorised action whether it runs through the `council` CLI or a direct API call.
517
531
  There is deliberately **no allowlist** of blessed services — the general rule
@@ -0,0 +1,411 @@
1
+ ---
2
+ model_tier: high
3
+ name: roadmap-resolve-blockers
4
+ pack: product-basic
5
+ visibility: internal
6
+ cluster: roadmap
7
+ sub: resolve-blockers
8
+ skills: [roadmap-management, ai-council, decision-review, roadmap-writing]
9
+ description: Check every open roadmap blocker, close what the tree already settled, decide the rest in the AI council, and ask the owner only for real residue — one question at a time.
10
+ argument-hint: "[<roadmap> | <blocker-id> | all] [--no-council] [--check-only]"
11
+ suggestion:
12
+ eligible: false
13
+ rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /roadmap:resolve-blockers name; not independently suggested (surface-consolidation)."
14
+ workspaces:
15
+ - agent-config-maintainer
16
+ packs:
17
+ - meta
18
+ ---
19
+
20
+ # /roadmap:resolve-blockers
21
+
22
+ Blocker sub of the [`/roadmap`](../roadmap.md) cluster. A `### blocker:` entry
23
+ records the world at the moment it was written, and nothing re-reads it: its
24
+ `Status:` word goes stale while the condition it waits on comes true, and a
25
+ decision an agent or the council could take sits in a file waiting for the one
26
+ reader whose attention does not scale. This command walks every open blocker,
27
+ closes the ones the tree already settled, decides the ones the council owns, and
28
+ reaches the owner only for what genuinely needs them — one question per turn,
29
+ with a recommendation, so answering costs one keystroke.
30
+
31
+ ## The Iron Law
32
+
33
+ ```
34
+ A BLOCKER'S STATUS IS A CLAIM ABOUT THE PAST. EXECUTE ITS `Resolved when`
35
+ AS A CHECK BEFORE TREATING IT AS OPEN.
36
+ RESOLVE AT THE LOWEST RUNG THAT OWNS THE DECISION: EVIDENCE → RECORDED RULE →
37
+ EXECUTION → AGENT → INDEPENDENT SESSION → COUNCIL → OWNER.
38
+ THE OWNER IS THE LAST RUNG, NEVER THE FIRST, AND NEVER FOR A TECHNICAL DECISION.
39
+ NO OWNER QUESTION IS PUT BEFORE ONE BATCHED COUNCIL PASS HAS RUN OVER EVERY
40
+ UNDECIDED BLOCKER OF THE RUN — OWNER-LABELLED ONES INCLUDED. A BLOCKER'S
41
+ `Owner:`, `Ownership:` OR "YOURS TO SET" IS ITS AUTHOR'S GUESS; THE COUNCIL'S
42
+ OWNER-RESERVED TEST DECIDES WHO MUST ANSWER.
43
+ NEVER PASS `--confirm` OR BUY METERED COUNCIL SPEND WITHOUT THE OWNER'S YES.
44
+ THE OWNER IS ASKED ONE QUESTION PER TURN, WITH OPTIONS AND ONE RECOMMENDATION,
45
+ AND THE ANSWER IS WRITTEN DOWN BEFORE THE NEXT QUESTION IS PUT.
46
+ NEVER HAND BACK A FILED QUESTION OR A COUNT OF OPEN QUESTIONS.
47
+ A BLOCKER IS CLOSED ONLY BY `- **Status:** resolved` — AND ONLY WITH EVIDENCE.
48
+ NO RUNG LIFTS A HARD FLOOR OR AN OWNER-RESERVED INVARIANT.
49
+ ```
50
+
51
+ ## Argument
52
+
53
+ | Given | Scope |
54
+ |---|---|
55
+ | a roadmap path | that roadmap's open blockers |
56
+ | a blocker id | that one blocker |
57
+ | `all` or nothing | every open blocker in the active roadmaps |
58
+ | `stubs` | the open blockers in `agents/roadmaps/stubs/` |
59
+
60
+ `--check-only` stops after Phase 2 — conditions executed and reported, nothing
61
+ written. `--no-council` stops each decision at the agent rung and presents the
62
+ council-owned ones as proposals instead of running the council.
63
+
64
+ The dashboard parser skips `stubs/`, so `stubs` is read by grep instead
65
+ (`grep -n '^### blocker:' agents/roadmaps/stubs/*.md`, then each entry's five
66
+ fields) — and only on request, because a stub records a decision still to take,
67
+ not a plan in flight. `later/`, `archive/` and `skipped/` are out of scope — their blockers are history
68
+ or are re-checked by [`/roadmap:triage-parked`](triage-parked.md).
69
+
70
+ ## Where the work happens
71
+
72
+ The checked-out branch, like every `/roadmap` sub. A worktree, a branch, a commit
73
+ or a PR only on an explicit ask ([`scope-control`](../../rules/scope-control.md)
74
+ § Git operations, [`commit-policy`](../../rules/commit-policy.md)).
75
+
76
+ ## Instructions
77
+
78
+ ### 1. Inventory — from the parser, never by reading files
79
+
80
+ ```bash
81
+ agent-config gates --all --json
82
+ ```
83
+
84
+ It is the dashboard's own parser (`collect()`), so the set is exactly what the
85
+ dashboard counts. Per blocker it gives `id`, `roadmap`, `owner`, `class`,
86
+ `blocks`, `unblocksSteps`, `todo` and `resolvedWhen`. The class says who may act:
87
+ `0` deterministic and free (a `Run:` command) · `1` billable but reversible (a
88
+ `Run:` command inside the gate budget) · `2` council-decidable · `3` human-only —
89
+ and `3` is also the **absent-field default**, so most `3`s were never classified
90
+ at all. Re-classifying a technical `3` to `2` is a legitimate outcome of this
91
+ run, recorded on the entry (`Class: 2 — council-decidable. Corrected from 3 on
92
+ YYYY-MM-DD`), written as the bold field `- **Class:** 2 — …` the lint reads.
93
+ Read each entry's `- **Ownership:**` too: `product-owned`, `business-owned` and
94
+ `destructive-owned` are the author's routing claim, written when nobody had run
95
+ the test. They mark a candidate for the owner, never a destination: the
96
+ blocker still goes into the council batch, whose owner-reserved test (§ Running
97
+ the council) decides whether it reaches the owner.
98
+
99
+ `unblocksSteps` is the open-step count of the whole roadmap the blocker sits in,
100
+ the same number for every blocker of that roadmap. Order by the steps a blocker
101
+ actually holds — `grep -c '<!-- blocked-by: <id>' <roadmap>` — and break ties by
102
+ `unblocksSteps`.
103
+
104
+ Show the inventory as one table before any write:
105
+
106
+ | # | blocker | roadmap | owner | class | unblocks | rung expected |
107
+
108
+ ### 2. Check — execute every `Resolved when`, cheapest limb first
109
+
110
+ A status word records the past; the condition records what would end the wait.
111
+ Run it as a command:
112
+
113
+ ```bash
114
+ gh pr view <n> --json state,mergedAt # "PR X merged"
115
+ git log --oneline origin/main -- <path> # "<file> landed on main"
116
+ ls docs/decisions/ADR-NNN-*.md # "the ADR exists / names (a) or (b)"
117
+ grep -n '<key>' <file> # "<key> is present"
118
+ ```
119
+
120
+ Verdict per blocker: `met` · `unmet` · `undecidable` (the condition names no
121
+ check — itself a finding, fixed in Phase 4 by rewriting `Resolved when` into one).
122
+
123
+ **A spend or quota blocker is checked against the live meter**, never the text:
124
+ `agent-config council:status` and `council_cli quota` show what is actually left.
125
+ A blocker that cites an exhausted budget the meter does not show is `met`.
126
+
127
+ **Read what the condition measures, not only whether it returns.** A condition
128
+ that keys on a value that never occurs is `met` never, whatever the world does;
129
+ that is a defect in the blocker and becomes a decision (Phase 3), not a wait.
130
+
131
+ `--check-only` ends here: the table with a verdict column.
132
+
133
+ ### 3. Resolve — one rung at a time, stopping at the first that can
134
+
135
+ The ladder is the one [`/challenge-me:closure`](../challenge-me/closure.md)
136
+ uses, with one blocker-specific rung added (execution):
137
+
138
+ 1. **Evidence** — the condition is `met`. Close it (Phase 4). No question exists.
139
+ 2. **A recorded rule** — an ADR, contract, `## Decisions` row or earlier council
140
+ verdict already answers the question the blocker asks. An ADR is evaluated
141
+ before it is cited — `./scripts-run src/scripts/adr_cite_check <ADR-NNN>`
142
+ (status, supersession, review trigger) — and a superseded or triggered one
143
+ closes nothing ([`decision-revisit-gate`](../../rules/decision-revisit-gate.md)).
144
+ 3. **Execution** — a class-0 blocker is a command whose output is the unblock.
145
+ `agent-config gates --execute <id>` echoes the exact string; the run needs
146
+ `--confirm`, and **`--confirm` is the owner's consent, not the agent's** — the
147
+ `Run:` field is shell read out of a file. Collect every class-0 and in-budget
148
+ class-1 command of the run and put them to the owner as **one** question
149
+ (§ Asking the owner): the literal commands, *run all* · *run selected* ·
150
+ *leave them*. Only on that answer does the agent pass `--confirm`. Class 1
151
+ outside the gate budget is a spend question for the owner.
152
+ 4. **The agent** — `deterministic` and `reversible-technical` choices inside
153
+ stated conventions. Pick it, write why.
154
+ 5. **An independent session** — the first rung for `contested-technical`: a
155
+ second instance with no stake in the first answer.
156
+ 6. **The council** — `critical-technical` decisions, process decisions the agent
157
+ should not take alone, and every reopening of a recorded decision
158
+ (`decision-revisit-gate` sends those council-first). See § Running the
159
+ council. Where no council is available, the **team** rung (`ai_team`) takes
160
+ its place.
161
+ 7. **The owner** — **only** what the council's batch pass marked
162
+ owner-reserved (either seat), or split on with the split surviving a
163
+ measurement: `product-owned`, `business-owned` and `destructive-owned`
164
+ decisions, and the transitions `decision-revisit-gate` reserves (lowering a
165
+ safety floor, an irreversible or external commitment, spend above a
166
+ delegated threshold, governance self-amendment). A technical decision never
167
+ reaches here by being hard, and an owner-labelled one never reaches here
168
+ without the council's pass. One exception, from the ownership contract: a
169
+ `critical-technical` question with a single provider present degrades to
170
+ **owner-confirm of the agent's proposal**, never to one model reviewing
171
+ itself. See § Asking the owner.
172
+
173
+ `spend-exhaustion` leaves the ladder: it **pauses and reports** (§ Running the
174
+ council), it is not a question.
175
+
176
+ `Owner: user` on a blocker is **not** a reason to skip rungs 1–5. It records who
177
+ was expected to answer when the blocker was written; the ladder decides who
178
+ actually must. A blocker whose question the council can settle is settled there,
179
+ and its owner is told the outcome, not asked.
180
+
181
+ Things a blocker can wait on that **no rung can buy** — a real external party, a
182
+ calendar soak, a measurement campaign that needs sessions that have not happened,
183
+ a published release — stay open. For those the work is to make the wait
184
+ checkable: rewrite `Resolved when` into a command and, where it helps, add a
185
+ date. Never invent a decision to make one go away.
186
+
187
+ ### Running the council
188
+
189
+ Council availability is the resolver's answer, never the project tree's:
190
+
191
+ ```bash
192
+ agent-config council:status
193
+ ```
194
+
195
+ 1. **Batch the questions — all of them, before any owner question.** Every
196
+ blocker rungs 1–4 did not close goes into **one** question file under
197
+ `agents/runtime/council/questions/`, including those labelled `Owner: user`,
198
+ `product-owned`, `business-owned` or `destructive-owned` — one numbered
199
+ section per blocker, each carrying the blocker's five fields, the Phase-2
200
+ evidence and the candidate options. One run, not one per blocker. The file
201
+ opens with the owner-reserved test, quoted from `decision-revisit-gate`'s
202
+ owner-reserved table: the chosen option would change the project's purpose
203
+ or a declared non-negotiable outcome; **lower** or remove a recorded
204
+ security / privacy / safety / data-handling floor; be irreversible or
205
+ materially destructive; spend or carry liability above a delegated
206
+ threshold; create, remove or weaken a legal, contractual, licensing,
207
+ compatibility or public commitment; or amend governance itself (reopening
208
+ authority, quorum, escalation, the owner-reserved set). Strengthening a
209
+ floor, or anything reversible inside these bounds, is council-decidable.
210
+ Each section then asks for three answers, in this order:
211
+ 1. **Owner-reserved?** — yes / no, naming the clause, per option where the
212
+ options differ (one option can be reserved while another is not);
213
+ 2. **Choice** — the option the seat takes if it is council-decidable, and
214
+ the option it would recommend to the owner if it is not;
215
+ 3. **The fact that would change the answer.**
216
+ A recorded decision that reserved the question to the owner (a `## Decisions`
217
+ row, an ADR) is put to the same test, as a reopening per
218
+ `decision-revisit-gate` — the council says whether the reservation still
219
+ holds; it never lifts one on its own authority.
220
+ 2. **Write the question neutrally** — scope, evidence, options. No
221
+ recommendation and no expected verdict, in either direction: the council is
222
+ judging a decision the agent would otherwise take, so the agent's lean stays
223
+ out of the prompt ([`evaluator-independence`](../../rules/evaluator-independence.md)),
224
+ and the prompt is kept with the verdict.
225
+ 3. **Estimate, then run.** The positional is a **file path**, never the question
226
+ text:
227
+
228
+ ```bash
229
+ ./scripts-run src/scripts/council_cli estimate <q.md>
230
+ ./scripts-run src/scripts/council_cli run <q.md> \
231
+ --output agents/runtime/council/responses/<name> \
232
+ --confirm --invocation agent
233
+ ```
234
+
235
+ In a fresh worktree, copy `agents/runtime/state/council-probes.json` from a
236
+ checkout that has run a council first — without it every seat reads as
237
+ unavailable. `--output` must sit under `agents/runtime/council/responses/`;
238
+ any other directory is refused. A failed run still spends quota, so never
239
+ re-run an unchanged question — with one exception: a seat that is absent
240
+ for a **transport** reason (the response's `absent_members[].detail` names
241
+ an OS, network or process error, not a refusal or a verdict) allows **one**
242
+ transport retry of the unchanged file under a new `--output` name. The
243
+ retry is recorded as such, and if a seat that answered both times changed
244
+ its answer, both readings are reported. A second retry, or a retry after an
245
+ unwelcome verdict, is verdict shopping.
246
+
247
+ **Exhausted quota is `spend-exhaustion`: pause and report** — which questions
248
+ needed the council, the quota reading, `estimate --mode-override api`'s cost,
249
+ and what proceeds without it. Turning plan quota into metered spend is the
250
+ operator's decision, never one this command infers
251
+ (`docs/contracts/ai-council-config.md` § `fallback.api_on_quota`). Where the
252
+ owner has said yes to the metered rung, `agent-config council:grant-billing
253
+ <run_id>` records that yes for one run, and only then does
254
+ `--mode-override api` run.
255
+ 4. **Read the verdict honestly.** Route first: a blocker both seats call **not**
256
+ owner-reserved is decided by the council's choice and never reaches the
257
+ owner; one that either seat calls owner-reserved goes to the owner, carrying
258
+ the seats' recommended option. Then the choice: 2/2 agreeing → decided. 1/2 present is a
259
+ single-seat reading (`DEGRADED`), never a convergence: accept it for a
260
+ `reversible-technical` or `contested-technical` question and say so; for a
261
+ `critical-technical` one it degrades to owner-confirm of the proposal.
262
+ A split usually names a disputed **fact** — measure it. A second council
263
+ round is legitimate only when its input changed (the measurement, or a
264
+ proposal narrowed to what a refusal named); it is recorded as a new round,
265
+ and both verdicts are reported. Re-asking an unchanged question with a
266
+ different wording, or dropping scope until the answer turns, is verdict
267
+ shopping (`evaluator-independence` items 2 and 4). A split that survives the
268
+ measurement goes to the owner, with both positions as the options.
269
+ 5. **Record it inline.** `agents/runtime/council/` is gitignored and pruned, so a
270
+ roadmap never cites that path (`check_council_references`). The record is a
271
+ `## Decisions` row plus the blocker's status line carrying date, members,
272
+ verdict and cost.
273
+
274
+ ### Asking the owner — one question, one keystroke
275
+
276
+ ```
277
+ ONE QUESTION PER TURN. THE MOST UNBLOCKING ONE FIRST.
278
+ EVERY QUESTION IS ANSWERABLE WITH ONE NUMBER.
279
+ THE ANSWER IS RECORDED AND APPLIED BEFORE THE NEXT QUESTION IS PUT.
280
+ ```
281
+
282
+ The queue holds only what the council's batch pass routed here (§ Running the
283
+ council, step 4) — never a blocker the pass did not see, and never one both
284
+ seats called council-decidable. With `--no-council`, or when no seat is
285
+ available, say so in the queue line: the routing is then the agent's, unchecked.
286
+
287
+ Before the first question, one short line says how many owner questions the run
288
+ has left after the council (`3 decisions need you — here is the first`), so the
289
+ owner knows the length of the queue. Then, per question:
290
+
291
+ - **Context in two sentences** — what is blocked and what it unblocks.
292
+ - **What the council said** — why it is owner-reserved (the clause each seat
293
+ named), and the option each seat would recommend, or the split.
294
+ - **What exactly you do**, if the answer needs an act only the owner can
295
+ perform — a repository setting, a ruleset toggle, a credential, a tag: the
296
+ literal step (the page, the field, the command), so nothing has to be looked
297
+ up or asked back.
298
+ - **Numbered options**, each naming what changes if picked — the blocker's own
299
+ options where it has them, the council's otherwise; the last option is always
300
+ *leave it open*.
301
+ - **One recommendation line** directly under the options
302
+ ([`user-interaction`](../../rules/user-interaction.md)).
303
+
304
+ The answer is written into the roadmap (Phase 4) and the dependent step
305
+ unblocked **before** the next question appears. A *later* or *skip* answer moves
306
+ to the next question; the blocker stays open and is not re-asked in this run
307
+ ([`scope-control`](../../rules/scope-control.md) § Decline = silence).
308
+
309
+ `agent-config gates --reply` gives the `Blocked:` / `Do:` / `Done when:` lines
310
+ of the top user-owned blocker across the whole tree — raw material for a
311
+ question, not the question: it carries no options, no recommendation and no
312
+ council verdict, and it may name a blocker this run already classified
313
+ differently.
314
+
315
+ ### 4. Write — close, record, unblock
316
+
317
+ Per resolved blocker:
318
+
319
+ 1. **Status line** — already written by `gates --execute --confirm` for an
320
+ executed blocker (leave it, add only the Decisions row); otherwise
321
+ `- **Status:** resolved YYYY-MM-DD — <decision, one line>
322
+ (<rung>: <evidence | ADR-NNN | council YYYY-MM-DD, <members>, <verdict>, $<cost> | owner>)`.
323
+ `resolved` must be the first word: it is the only closing token
324
+ `lint_roadmap_blockers`, the dashboard and the estate count accept.
325
+ 2. **`## Decisions` row** in the same roadmap —
326
+ `| ID | ownership | resolved by | decision | evidence | revisit if |` —
327
+ `ownership` one of the eight classes (`deterministic`,
328
+ `reversible-technical`, `contested-technical`, `critical-technical`,
329
+ `product-owned`, `business-owned`, `destructive-owned`, `spend-exhaustion`),
330
+ `resolved by` one of `evidence` (also the recorded-rule and execution rungs),
331
+ `agent`, `independent:<session or model>`, `council:<date-slug>`,
332
+ `team:<record>`, `owner`;
333
+ then `./scripts-run src/scripts/lint_decision_classes`.
334
+ 3. **Unblock the steps** — remove each `<!-- blocked-by: <id> -->` annotation the
335
+ blocker held. The work itself is not started here.
336
+ 4. **A blocker that stays open** gets its `Resolved when` rewritten into a check
337
+ when Phase 2 found it `undecidable`, its `What to do` updated with what this
338
+ run learned, and a `- **Recommendation:**` and an `- **If you do nothing:**`
339
+ line where it lacks them. An owner question that was asked this run flips its
340
+ `blocked-by:` annotations from `asked: no — …` to `asked: yes`.
341
+
342
+ Then regenerate and lint what changed:
343
+
344
+ ```bash
345
+ ./agent-config roadmap:progress --no-archive
346
+ ./scripts-run src/scripts/lint_roadmap_blockers
347
+ ./scripts-run src/scripts/check_estate_count
348
+ ```
349
+
350
+ A run that closes blockers lowers `open_blockers`; that is the drawdown the
351
+ estate gate wants and needs no claim; when `lint_roadmap_blockers` then reports
352
+ its decidability baseline as loose, lower it in the same change. A roadmap whose last blocker closed while
353
+ it has no open step is now archivable — name it in the output;
354
+ `./agent-config roadmap:progress` without the flag sweeps it. A decision whose
355
+ **implementation** touches governance surfaces (`src/config/gate-coverage.yml`,
356
+ workflows, kernel rules) needs its ratification artifact in that later change;
357
+ deciding it here does not. A run that **adds** a blocker (splitting
358
+ one, or recording a newly found external wait) grows it and needs an
359
+ `estate_growth_exempt: <reason>` line added to that roadmap's frontmatter in the
360
+ same change.
361
+
362
+ ## Output
363
+
364
+ 1. The inventory table with the Phase-2 verdict and the rung that closed each.
365
+ 2. Per closed blocker: one line — what decided it and where it is recorded.
366
+ 3. The council run(s): question count, members present, verdict per question,
367
+ cost.
368
+ 4. **The ledger** — the run's completeness check:
369
+
370
+ ```
371
+ blockers N in scope
372
+ closed by evidence n · by recorded rule n · by execution n · by agent n · by council n · by owner n
373
+ open waiting on external n · owner said later n · undecidable → rewritten n
374
+ steps N unblocked across M roadmaps
375
+ ```
376
+
377
+ Every blocker in scope appears in exactly one bucket.
378
+ 5. Roadmaps that became archivable because their last blocker closed.
379
+ 6. If owner questions remain: the queue length and the **first question** — never
380
+ the list.
381
+
382
+ ## Honest enforcement — `instruction-only`
383
+
384
+ `lint_roadmap_blockers` checks a blocker's shape and the closing token; nothing
385
+ checks that a `Resolved when` was executed rather than read, that a council
386
+ verdict was reported at its real quorum, or that an owner question was the
387
+ council's to answer. The ledger and the inline council record are the control.
388
+
389
+ ## Do NOT
390
+
391
+ - Mark a blocker resolved because its status is old, or because a sibling PR
392
+ looks related. The condition, executed, is the only evidence.
393
+ - Ask the owner what the tree, a recorded decision or the council can answer —
394
+ *"Owner: user"*, `Ownership: product-owned` or *"yours to set"* in the file
395
+ is not a reason.
396
+ - Put the first owner question before the council's batch pass has run over
397
+ every undecided blocker, or classify a blocker as owner-reserved yourself
398
+ when a council seat is available to run the test.
399
+ - Ask more than one question per turn, or hand back *"four decisions are open in
400
+ file X"*.
401
+ - Run the council once per blocker, or re-run an unchanged question after a
402
+ failure — beyond the single transport retry § Running the council allows.
403
+ - Pass `--confirm` or switch to metered council spend without the owner's yes.
404
+ - Cite `agents/runtime/council/` from a roadmap.
405
+ - Execute the work a resolved blocker unblocks — this command authorizes
406
+ deciding and recording, not doing ([`scope-control`](../../rules/scope-control.md)
407
+ § Authoring vs. implementation). `/roadmap:next` or `/roadmap:process-full`
408
+ picks the work up.
409
+ - Lift a Hard Floor ([`non-destructive-by-default`](../../rules/non-destructive-by-default.md))
410
+ through any rung — a council verdict authorizes no deploy, push, deletion or
411
+ spend beyond the standing budget.