@event4u/agent-config 16.5.0 → 17.1.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 (1047) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +2 -2
  4. package/.claude-plugin/skills/install-agent-config/SKILL.md +4 -4
  5. package/CHANGELOG.md +114 -530
  6. package/CONTRIBUTING.md +47 -0
  7. package/README.md +25 -24
  8. package/dist/agent-src/commands/{design.md → agent-design.md} +10 -6
  9. package/dist/agent-src/commands/agents/init.md +66 -3
  10. package/dist/agent-src/commands/agents/user/init.md +3 -0
  11. package/dist/agent-src/commands/{optimize/deep.md → analyze/and-optimize.md} +72 -33
  12. package/dist/agent-src/commands/analyze/inbox.md +168 -37
  13. package/dist/agent-src/commands/analyze/pr.md +144 -0
  14. package/dist/agent-src/commands/analyze/{repo.md → reference.md} +85 -14
  15. package/dist/agent-src/commands/analyze/roadmap-repos.md +19 -10
  16. package/dist/agent-src/commands/analyze.md +28 -12
  17. package/dist/agent-src/commands/audit.md +115 -0
  18. package/dist/agent-src/commands/brand/review.md +13 -2
  19. package/dist/agent-src/commands/brand/tokens.md +3 -3
  20. package/dist/agent-src/commands/brand/voice.md +8 -5
  21. package/dist/agent-src/commands/brand.md +2 -2
  22. package/dist/agent-src/commands/challenge-me/closure.md +25 -0
  23. package/dist/agent-src/commands/design-system/import.md +8 -3
  24. package/dist/agent-src/commands/design-system/sync.md +98 -0
  25. package/dist/agent-src/commands/design-system.md +6 -1
  26. package/dist/agent-src/commands/evals/analyze.json +44 -0
  27. package/dist/agent-src/commands/evals/audit.json +12 -0
  28. package/dist/agent-src/commands/evals/retro.json +12 -0
  29. package/dist/agent-src/commands/fix/ci.md +10 -8
  30. package/dist/agent-src/commands/ghostwriter/write.md +22 -0
  31. package/dist/agent-src/commands/memory/learn-low-impact.md +70 -83
  32. package/dist/agent-src/commands/memory/propose.md +12 -0
  33. package/dist/agent-src/commands/memory.md +1 -1
  34. package/dist/agent-src/commands/optimize.md +4 -3
  35. package/dist/agent-src/commands/post-as/me.md +18 -0
  36. package/dist/agent-src/commands/pr/create.md +17 -342
  37. package/dist/agent-src/commands/pr/merge.md +129 -368
  38. package/dist/agent-src/commands/retro.md +121 -0
  39. package/dist/agent-src/commands/review/routing.md +1 -1
  40. package/dist/agent-src/commands/roadmap/next.md +4 -1
  41. package/dist/agent-src/commands/roadmap/process-full.md +46 -333
  42. package/dist/agent-src/commands/roadmap/triage-parked.md +6 -2
  43. package/dist/agent-src/commands/team-knowledge/consolidate.md +2 -2
  44. package/dist/agent-src/commands/team-knowledge.md +1 -1
  45. package/dist/agent-src/commands/threat-model.md +1 -1
  46. package/dist/agent-src/commands/upstream-contribute.md +91 -101
  47. package/dist/agent-src/commands/worktree/cleanup.md +18 -11
  48. package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +54 -0
  49. package/dist/agent-src/contexts/execution/analysis-loop.md +137 -0
  50. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +3 -3
  51. package/dist/agent-src/contexts/execution/decision-closure-execution.md +1 -1
  52. package/dist/agent-src/contexts/execution/host-capability-manifest.md +10 -2
  53. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +11 -4
  54. package/dist/agent-src/contexts/execution/pr-create-branches-content.md +250 -0
  55. package/dist/agent-src/contexts/execution/pr-create-branches-freshness.md +150 -0
  56. package/dist/agent-src/contexts/execution/pr-merge-queue.md +287 -0
  57. package/dist/agent-src/contexts/execution/pr-merge-sync.md +276 -0
  58. package/dist/agent-src/contexts/execution/pr-merge-trust-boundary.md +69 -0
  59. package/dist/agent-src/contexts/execution/process-full-all.md +233 -0
  60. package/dist/agent-src/contexts/execution/process-full-delivery.md +231 -0
  61. package/dist/agent-src/contexts/execution/roadmap-execution-contract-branches.md +42 -0
  62. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -35
  63. package/dist/agent-src/contexts/execution/roadmap-process-loop-close.md +235 -0
  64. package/dist/agent-src/contexts/execution/roadmap-process-loop-prescan.md +216 -0
  65. package/dist/agent-src/contexts/execution/roadmap-process-loop-run.md +253 -0
  66. package/dist/agent-src/contexts/execution/roadmap-process-loop-set.md +212 -0
  67. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +25 -864
  68. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +14 -2
  69. package/dist/agent-src/contexts/execution/subagent-steering.md +65 -8
  70. package/dist/agent-src/contexts/model-recommendations.md +5 -5
  71. package/dist/agent-src/contexts/subagent-configuration.md +1 -1
  72. package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +4 -3
  73. package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +11 -5
  74. package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
  75. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
  76. package/dist/agent-src/guidelines/design-antipatterns.md +5 -0
  77. package/dist/agent-src/guidelines/design-asset-discipline.md +17 -0
  78. package/dist/agent-src/guidelines/design-fidelity-routing.md +1 -0
  79. package/dist/agent-src/guidelines/php/api-design.md +10 -1
  80. package/dist/agent-src/rules/brand-source-of-truth.md +7 -6
  81. package/dist/agent-src/rules/code-provenance.md +1 -1
  82. package/dist/agent-src/rules/context-hygiene.md +0 -1
  83. package/dist/agent-src/rules/design-fidelity.md +12 -13
  84. package/dist/agent-src/rules/external-reference-deep-dive.md +2 -2
  85. package/dist/agent-src/rules/fix-what-you-see.md +1 -1
  86. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +14 -15
  87. package/dist/agent-src/rules/missing-skill-recovery.md +12 -11
  88. package/dist/agent-src/rules/neighbour-precedence.md +1 -1
  89. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  90. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +0 -2
  91. package/dist/agent-src/rules/self-repair-loop.md +2 -2
  92. package/dist/agent-src/rules/token-budget-discipline.md +1 -1
  93. package/dist/agent-src/scripts/dashboard_mode.ts +4 -1
  94. package/dist/agent-src/scripts/roadmap_age.ts +175 -0
  95. package/dist/agent-src/scripts/update_roadmap_progress.ts +10 -2
  96. package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -3
  97. package/dist/agent-src/skills/agent-security-review/SKILL.md +2 -2
  98. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +12 -4
  99. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +7 -0
  100. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +11 -1
  101. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +7 -0
  102. package/dist/agent-src/skills/ai-council/references/execution-modes.md +7 -0
  103. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +19 -0
  104. package/dist/agent-src/skills/ai-council/references/procedure.md +7 -0
  105. package/dist/agent-src/skills/api-design/SKILL.md +2 -2
  106. package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -2
  107. package/dist/agent-src/skills/authz-review/SKILL.md +5 -3
  108. package/dist/agent-src/skills/blade-ui/SKILL.md +2 -2
  109. package/dist/agent-src/skills/brand/SKILL.md +7 -3
  110. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +13 -6
  111. package/dist/agent-src/skills/brand-audit/SKILL.md +2 -1
  112. package/dist/agent-src/skills/brand-identity/SKILL.md +5 -4
  113. package/dist/agent-src/skills/brand-strategy/SKILL.md +5 -4
  114. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +18 -39
  115. package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +2 -2
  116. package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +2 -2
  117. package/dist/agent-src/skills/canvas-design/SKILL.md +12 -2
  118. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  119. package/dist/agent-src/skills/composer-packages/SKILL.md +18 -0
  120. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  121. package/dist/agent-src/skills/content-funnel-design/SKILL.md +8 -1
  122. package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
  123. package/dist/agent-src/skills/context-document/SKILL.md +2 -2
  124. package/dist/agent-src/skills/corpus-grounding/SKILL.md +6 -6
  125. package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +13 -11
  126. package/dist/agent-src/skills/corpus-grounding/scripts/ground.mjs +1706 -0
  127. package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +7 -1
  128. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  129. package/dist/agent-src/skills/data-flow-mapper/SKILL.md +5 -2
  130. package/dist/agent-src/skills/database/SKILL.md +5 -4
  131. package/dist/agent-src/skills/decision-record/references/weighted-matrix.md +12 -0
  132. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +1 -1
  133. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +61 -11
  134. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  135. package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
  136. package/dist/agent-src/skills/design-intelligence/data/landing.csv +1 -1
  137. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +10 -2
  138. package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
  139. package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -3
  140. package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +14 -14
  141. package/dist/agent-src/skills/{wireframe → design-review}/references/story-beat-ledger.schema.json +1 -1
  142. package/dist/agent-src/skills/design-review/references/verification-automation.md +11 -3
  143. package/dist/agent-src/skills/design-system-capture/SKILL.md +15 -10
  144. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -5
  145. package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +2 -2
  146. package/dist/agent-src/skills/design-tokens/SKILL.md +23 -23
  147. package/dist/agent-src/skills/design-tokens/scripts/tokens.mjs +1037 -0
  148. package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +336 -13
  149. package/dist/agent-src/skills/design-tokens/templates/design-tokens-starter.json +52 -53
  150. package/dist/agent-src/skills/docker/SKILL.md +1 -1
  151. package/dist/agent-src/skills/estimate-ticket/SKILL.md +1 -1
  152. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +14 -276
  153. package/dist/agent-src/skills/existing-ui-audit/procedure.yaml +44 -0
  154. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +1 -1
  155. package/dist/agent-src/skills/existing-ui-audit/references/steps/00-inspect-stack-and-input.md +4 -0
  156. package/dist/agent-src/skills/existing-ui-audit/references/steps/01-enumerate-components.md +26 -0
  157. package/dist/agent-src/skills/existing-ui-audit/references/steps/01b-detect-component-taxonomy.md +7 -0
  158. package/dist/agent-src/skills/existing-ui-audit/references/steps/02-identify-design-system.md +12 -0
  159. package/dist/agent-src/skills/existing-ui-audit/references/steps/03-detect-design-tokens.md +35 -0
  160. package/dist/agent-src/skills/existing-ui-audit/references/steps/04-detect-shadcn-inventory.md +13 -0
  161. package/dist/agent-src/skills/existing-ui-audit/references/steps/04b-live-storybook-read.md +26 -0
  162. package/dist/agent-src/skills/existing-ui-audit/references/steps/05-list-reusable-patterns.md +14 -0
  163. package/dist/agent-src/skills/existing-ui-audit/references/steps/06-match-candidates.md +52 -0
  164. package/dist/agent-src/skills/existing-ui-audit/references/steps/07-greenfield-branch.md +29 -0
  165. package/dist/agent-src/skills/existing-ui-audit/references/steps/08-a11y-baseline.md +40 -0
  166. package/dist/agent-src/skills/existing-ui-audit/references/steps/09-validate-and-write.md +5 -0
  167. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  168. package/dist/agent-src/skills/fe-design/references/design-patterns.md +16 -2
  169. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +1 -1
  170. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  171. package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +6 -6
  172. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  173. package/dist/agent-src/skills/form-handler/SKILL.md +15 -2
  174. package/dist/agent-src/skills/git-workflow/SKILL.md +2 -2
  175. package/dist/agent-src/skills/git-workflow/references/branch-update.md +7 -0
  176. package/dist/agent-src/skills/git-workflow/references/commit-subject.md +12 -0
  177. package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +10 -0
  178. package/dist/agent-src/skills/gtm-launch/SKILL.md +8 -1
  179. package/dist/agent-src/skills/html-deck/SKILL.md +7 -2
  180. package/dist/agent-src/skills/humanizer/SKILL.md +16 -3
  181. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +13 -1
  182. package/dist/agent-src/skills/humanizer/references/fixtures.md +8 -0
  183. package/dist/agent-src/skills/js-library-packaging/SKILL.md +5 -4
  184. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.mjs +197 -0
  185. package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
  186. package/dist/agent-src/skills/judge-security-auditor/SKILL.md +2 -2
  187. package/dist/agent-src/skills/launch-readiness/SKILL.md +18 -22
  188. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +5 -5
  189. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  190. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +18 -0
  191. package/dist/agent-src/skills/logo-generation/SKILL.md +9 -3
  192. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +6 -1
  193. package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
  194. package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
  195. package/dist/agent-src/skills/messaging-architecture/SKILL.md +8 -1
  196. package/dist/agent-src/skills/motion-choreographer/SKILL.md +2 -2
  197. package/dist/agent-src/skills/playwright-testing/SKILL.md +2 -0
  198. package/dist/agent-src/skills/positioning-strategy/SKILL.md +10 -2
  199. package/dist/agent-src/skills/prediction-pool-optimizer/references/ev-fixtures.md +13 -0
  200. package/dist/agent-src/skills/prediction-pool-optimizer/references/odds-and-bonus.md +7 -0
  201. package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
  202. package/dist/agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +1 -1
  203. package/dist/agent-src/skills/project-analyzer/SKILL.md +14 -75
  204. package/dist/agent-src/skills/project-analyzer/procedure.yaml +39 -0
  205. package/dist/agent-src/skills/project-analyzer/references/steps/01-project-overview.md +9 -0
  206. package/dist/agent-src/skills/project-analyzer/references/steps/02-architecture.md +7 -0
  207. package/dist/agent-src/skills/project-analyzer/references/steps/03-data-layer.md +6 -0
  208. package/dist/agent-src/skills/project-analyzer/references/steps/04-business-domains.md +7 -0
  209. package/dist/agent-src/skills/project-analyzer/references/steps/05-api-surface.md +6 -0
  210. package/dist/agent-src/skills/project-analyzer/references/steps/06-service-map.md +6 -0
  211. package/dist/agent-src/skills/project-analyzer/references/steps/07-module-inventory.md +6 -0
  212. package/dist/agent-src/skills/project-analyzer/references/steps/08-infrastructure-and-testing.md +5 -0
  213. package/dist/agent-src/skills/project-analyzer/references/steps/09-agent-docs-audit.md +6 -0
  214. package/dist/agent-src/skills/project-analyzer/references/steps/10-gap-analysis.md +6 -0
  215. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +10 -0
  216. package/dist/agent-src/skills/quality-tools/references/php-tools.md +13 -0
  217. package/dist/agent-src/skills/quality-tools/references/python-tools.md +11 -0
  218. package/dist/agent-src/skills/react-native-setup/SKILL.md +7 -2
  219. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +5 -1
  220. package/dist/agent-src/skills/react-shadcn-ui/references/registry.md +13 -0
  221. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.mjs +315 -0
  222. package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +6 -6
  223. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  224. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  225. package/dist/agent-src/skills/release-comms/SKILL.md +2 -1
  226. package/dist/agent-src/skills/repomix-packer/SKILL.md +2 -2
  227. package/dist/agent-src/skills/requesting-code-review/SKILL.md +3 -3
  228. package/dist/agent-src/skills/roadmap-management/references/archival.md +3 -3
  229. package/dist/agent-src/skills/roadmap-management/references/authoring.md +9 -2
  230. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +3 -3
  231. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +3 -3
  232. package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -4
  233. package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +1 -1
  234. package/dist/agent-src/skills/rule-writing/SKILL.md +1 -2
  235. package/dist/agent-src/skills/security/SKILL.md +41 -5
  236. package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +5 -3
  237. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  238. package/dist/agent-src/skills/skill-writing/SKILL.md +23 -8
  239. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +19 -1
  240. package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
  241. package/dist/agent-src/skills/sql-writing/SKILL.md +2 -2
  242. package/dist/agent-src/skills/standards-from-config/SKILL.md +2 -2
  243. package/dist/agent-src/skills/storybook-workshop/SKILL.md +5 -0
  244. package/dist/agent-src/skills/storybook-workshop/scripts/story_contrast_floor.mjs +99 -0
  245. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +13 -13
  246. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +4 -3
  247. package/dist/agent-src/skills/svg-authoring/SKILL.md +7 -1
  248. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  249. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +8 -3
  250. package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.mjs +482 -0
  251. package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
  252. package/dist/agent-src/skills/threat-modeling/SKILL.md +8 -1
  253. package/dist/agent-src/skills/threat-modeling/data/manifest.json +5 -2
  254. package/dist/agent-src/skills/threat-modeling/data/reasoning.csv +10 -10
  255. package/dist/agent-src/skills/threat-modeling/data/surfaces.csv +11 -10
  256. package/dist/agent-src/skills/threat-modeling/data/threats.csv +34 -20
  257. package/dist/agent-src/skills/type-design/SKILL.md +196 -0
  258. package/dist/agent-src/skills/type-design/references/font-spec.md +90 -0
  259. package/dist/agent-src/skills/type-design/references/gates.md +113 -0
  260. package/dist/agent-src/skills/type-design/references/toolchain.md +66 -0
  261. package/dist/agent-src/skills/typography-system/SKILL.md +21 -11
  262. package/dist/agent-src/skills/typography-system/references/worked-scales.md +85 -0
  263. package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
  264. package/dist/agent-src/skills/universal-project-analysis/SKILL.md +1 -1
  265. package/dist/agent-src/skills/upstream-contribute/SKILL.md +120 -125
  266. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +1 -0
  267. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +1 -1
  268. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +71 -2
  269. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +16 -14
  270. package/dist/agent-src/templates/AGENTS.md +1 -1
  271. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  272. package/dist/agent-src/templates/agents/proposal.example.md +1 -1
  273. package/dist/agent-src/templates/github-workflows/advisories-daily.yml +85 -0
  274. package/dist/agent-src/templates/roadmaps.md +44 -2
  275. package/dist/agent-src/templates/scripts/check_memory.ts +2 -2
  276. package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
  277. package/dist/agent-src/templates/scripts/work_engine/cli.ts +17 -0
  278. package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
  279. package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
  280. package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
  281. package/dist/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
  282. package/dist/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
  283. package/dist/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
  284. package/dist/agent-src/templates/scripts/work_engine/state.ts +3 -0
  285. package/dist/cli/commands/uiRender.js +72 -17
  286. package/dist/cli/commands/uiRenderAsset.js +10 -2
  287. package/dist/cli/commands/uiRenderAssetFonts.js +158 -0
  288. package/dist/cli/commands/uiRenderAssetTypes.js +8 -20
  289. package/dist/cli/initRouting.js +1 -1
  290. package/dist/cli/mcp/dispatch.js +31 -9
  291. package/dist/cli/python/knowledge_ingest.js +7 -39
  292. package/dist/cli/python/workspace_secrets.js +4 -177
  293. package/dist/cli/registry.js +4 -1
  294. package/dist/cli-delegate/archive_completed_roadmaps.js +3 -2
  295. package/dist/cli-delegate/check_update_banner.js +635 -266
  296. package/dist/cli-delegate/{chunk-TMWYUOK4.js → chunk-2CX7NWRB.js} +224 -437
  297. package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
  298. package/dist/cli-delegate/chunk-3PK3VZHB.js +235 -0
  299. package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
  300. package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
  301. package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
  302. package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
  303. package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
  304. package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
  305. package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
  306. package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
  307. package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
  308. package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
  309. package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
  310. package/dist/cli-delegate/{chunk-F3QDG2GT.js → chunk-BZJ4Y3CI.js} +259 -159
  311. package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CMZEKSNN.js} +4280 -705
  312. package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
  313. package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-E3CFULNX.js} +67 -13
  314. package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
  315. package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
  316. package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
  317. package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
  318. package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
  319. package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
  320. package/dist/cli-delegate/chunk-KR5ZIFPO.js +581 -0
  321. package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
  322. package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
  323. package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
  324. package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
  325. package/dist/cli-delegate/chunk-QBHEI5N4.js +919 -0
  326. package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
  327. package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
  328. package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
  329. package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
  330. package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
  331. package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-VYZGJLCA.js} +1000 -814
  332. package/dist/cli-delegate/chunk-W5JXMF2T.js +77 -0
  333. package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
  334. package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
  335. package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-XIAPY44N.js} +37 -16
  336. package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
  337. package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-YHAPONWV.js} +54 -40
  338. package/dist/cli-delegate/cmd_adr_effective.js +41 -2
  339. package/dist/cli-delegate/cmd_analyze_session.js +7 -7
  340. package/dist/cli-delegate/cmd_brand_status.js +1287 -10
  341. package/dist/cli-delegate/cmd_ci_settle.js +330 -0
  342. package/dist/cli-delegate/cmd_conformance.js +487 -820
  343. package/dist/cli-delegate/cmd_doctor.js +26 -16
  344. package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
  345. package/dist/cli-delegate/cmd_explain.js +9 -24
  346. package/dist/cli-delegate/cmd_export.js +15 -12
  347. package/dist/cli-delegate/cmd_fleet.js +6 -4
  348. package/dist/cli-delegate/cmd_git_convention.js +8 -4
  349. package/dist/cli-delegate/cmd_handoff.js +79 -242
  350. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  351. package/dist/cli-delegate/cmd_memory_get.js +4 -2
  352. package/dist/cli-delegate/cmd_migrate.js +2 -2
  353. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  354. package/dist/cli-delegate/cmd_preflight.js +8 -6
  355. package/dist/cli-delegate/cmd_prune.js +17 -14
  356. package/dist/cli-delegate/cmd_route_audit.js +11 -8
  357. package/dist/cli-delegate/cmd_route_explain.js +649 -16
  358. package/dist/cli-delegate/cmd_session_recycle.js +15 -6
  359. package/dist/cli-delegate/cmd_settings_check.js +2 -2
  360. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  361. package/dist/cli-delegate/cmd_settings_migrate.js +15 -12
  362. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  363. package/dist/cli-delegate/cmd_sync.js +17 -14
  364. package/dist/cli-delegate/cmd_uninstall.js +186 -32
  365. package/dist/cli-delegate/cmd_update.js +76 -16
  366. package/dist/cli-delegate/cmd_upgrade.js +38 -7
  367. package/dist/cli-delegate/cmd_validate.js +17 -14
  368. package/dist/cli-delegate/cmd_versions.js +1 -1
  369. package/dist/cli-delegate/dashboard_mode.js +1 -1
  370. package/dist/cli-delegate/gate_execute.js +4 -3
  371. package/dist/cli-delegate/roadmap_age.js +22 -0
  372. package/dist/cli-delegate/roadmap_gates.js +4 -3
  373. package/dist/cli-delegate/update_roadmap_progress.js +3 -2
  374. package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
  375. package/dist/discovery/deprecation-report.md +1 -1
  376. package/dist/discovery/discovery-manifest.json +373 -190
  377. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  378. package/dist/discovery/discovery-manifest.summary.md +5 -5
  379. package/dist/discovery/dormancy-report.md +1 -1
  380. package/dist/discovery/orphan-report.md +1 -1
  381. package/dist/discovery/packs.json +21 -16
  382. package/dist/discovery/trust-report.md +3 -3
  383. package/dist/discovery/workspaces.json +16 -11
  384. package/dist/hooks/chat_history.chunk.cjs +6852 -0
  385. package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
  386. package/dist/hooks/dispatch.js +17450 -18612
  387. package/dist/hooks/dispatch.sha256 +1 -1
  388. package/dist/hooks/egress_engine.chunk.cjs +915 -0
  389. package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
  390. package/dist/hooks/svg_rules.chunk.cjs +281 -49
  391. package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
  392. package/dist/install/claudeRuleRewrite.js +10 -3
  393. package/dist/install/conflict.js +59 -7
  394. package/dist/install/conflictTracker.js +93 -8
  395. package/dist/install/detect.js +3 -3
  396. package/dist/install/hostPermissionsAdapter.js +106 -0
  397. package/dist/install/install.mjs +3234 -1961
  398. package/dist/install/installThinLayer.js +2 -1
  399. package/dist/install/loggedWrites.js +142 -0
  400. package/dist/install/manifestFiles.js +21 -0
  401. package/dist/install/noGoDenyRows.js +300 -0
  402. package/dist/install/noGoRules.js +368 -0
  403. package/dist/install/ownershipLedger.js +133 -0
  404. package/dist/install/paths.js +12 -2
  405. package/dist/install/plan.js +1 -1
  406. package/dist/install/preflight.js +39 -8
  407. package/dist/install/preserve.js +96 -13
  408. package/dist/install/recordedOwnership.js +88 -5
  409. package/dist/install/rule_scope.js +20 -3
  410. package/dist/install/stagedRuntime.js +455 -0
  411. package/dist/install/toolsArg.js +19 -0
  412. package/dist/install/txlog.js +10 -6
  413. package/dist/install/userPin.js +47 -0
  414. package/dist/install/wizard-plan.js +26 -4
  415. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  416. package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
  417. package/dist/mcp/registry-manifest.json +6 -5
  418. package/dist/mcp/server.json +3 -3
  419. package/dist/mcp/server.mjs +10716 -5880
  420. package/dist/router.json +1 -1
  421. package/dist/scripts/_lib/agent_settings.js +7 -12
  422. package/dist/scripts/_lib/asset_render_record.js +219 -0
  423. package/dist/scripts/_lib/claude_builtin_names.js +9 -4
  424. package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
  425. package/dist/scripts/_lib/egress_rules.js +769 -0
  426. package/dist/scripts/_lib/environment_detector.js +24 -33
  427. package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
  428. package/dist/scripts/_lib/guidelines_lane.js +10 -1
  429. package/dist/scripts/_lib/identifier_redaction.js +57 -0
  430. package/dist/scripts/_lib/installed_layer.js +17 -0
  431. package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
  432. package/dist/scripts/_lib/lean_projection_mode.js +34 -152
  433. package/dist/scripts/_lib/project_tree_form.js +118 -0
  434. package/dist/scripts/_lib/scoped_projection.js +133 -3
  435. package/dist/scripts/_lib/settings_removed_keys.js +29 -0
  436. package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
  437. package/dist/scripts/_lib/subagent_native_fields.js +35 -0
  438. package/dist/scripts/_lib/svg_filled_counter.js +285 -0
  439. package/dist/scripts/_lib/svg_rules.js +2 -0
  440. package/dist/scripts/_lib/ui_surface.js +19 -0
  441. package/dist/scripts/_lib/verification_command.js +364 -0
  442. package/dist/scripts/_lib/workspace_secrets.js +229 -0
  443. package/dist/scripts/ai_council/seat_policy.js +33 -0
  444. package/dist/scripts/ai_council/transport_resolver.js +9 -10
  445. package/dist/scripts/condense.js +25 -29
  446. package/dist/server/io/substituteTemplate.js +2 -2
  447. package/dist/server/io/yamlIO.js +2 -2
  448. package/dist/server/routes/install.js +5 -1
  449. package/dist/server/routes/settings.js +2 -2
  450. package/dist/server/routes/wizard.js +1 -1
  451. package/dist/server/schemas/settings.js +22 -16
  452. package/dist/server/serverInfo.js +1 -1
  453. package/dist/shared/brandTokenDocument.js +47 -0
  454. package/dist/shared/brandTokenPaths.js +43 -0
  455. package/dist/shared/settingsCarveOut.js +0 -7
  456. package/dist/shared/skillRanking.js +103 -5
  457. package/dist/shared/userMd/formAdapter.js +16 -0
  458. package/dist/shared/userMd/schema.js +17 -0
  459. package/dist/ui/assets/index-w70Ado09.js +23 -0
  460. package/dist/ui/index.html +1 -1
  461. package/docs/MIGRATION.md +89 -2
  462. package/docs/THIRD-PARTY-NOTICES.md +27 -0
  463. package/docs/contracts/settings-classes.md +27 -9
  464. package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
  465. package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
  466. package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
  467. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
  468. package/docs/guidelines/design-antipatterns.md +5 -0
  469. package/docs/guidelines/design-asset-discipline.md +17 -0
  470. package/docs/guidelines/design-fidelity-routing.md +1 -0
  471. package/docs/guidelines/php/api-design.md +10 -1
  472. package/llms.txt +12 -10
  473. package/package.json +13 -4
  474. package/src/agent-src/scripts/dashboard_mode.ts +4 -1
  475. package/src/agent-src/scripts/roadmap_age.ts +175 -0
  476. package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
  477. package/src/agent-src/templates/AGENTS.md +1 -1
  478. package/src/agent-src/templates/scripts/check_memory.ts +2 -2
  479. package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
  480. package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
  481. package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
  482. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
  483. package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
  484. package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
  485. package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
  486. package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
  487. package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
  488. package/src/config/agent-settings.template.yml +120 -57
  489. package/src/config/agents-paths.yml +13 -7
  490. package/src/config/ci-local-parity.yml +45 -1
  491. package/src/config/continuity-surface.json +51 -2
  492. package/src/config/depth-audit-samples.json +5 -0
  493. package/src/config/discovery/command-verbs.yml +1 -0
  494. package/src/config/dispatch-economy-metrics.json +1 -0
  495. package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
  496. package/src/config/egress-mutations/credential-token-restores.json +7 -0
  497. package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
  498. package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
  499. package/src/config/evaluator-budgets.json +4 -4
  500. package/src/config/gate-coverage.yml +176 -10
  501. package/src/config/gate-reachability-exemptions.json +3 -5
  502. package/src/config/gate-violation-baselines.json +32 -22
  503. package/src/config/gitignore-block.txt +6 -3
  504. package/src/config/hook-bundle-budget.json +34 -3
  505. package/src/config/hook-carrier-probes.json +30 -0
  506. package/src/config/hook-latency-budget.json +4 -2
  507. package/src/config/host-injection-effect.json +8 -1
  508. package/src/config/host-skill-frontmatter-keys.json +56 -0
  509. package/src/config/layer-form-brakes.json +4 -0
  510. package/src/config/layer-form-comparison-corpus.json +42 -0
  511. package/src/config/loop-surfaces.yaml +28 -47
  512. package/src/config/memory-twin-verdicts.yml +9 -1
  513. package/src/config/metric-registry.yml +40 -3
  514. package/src/config/pack-size-budget.json +15 -0
  515. package/src/config/procedure-core-budget.json +21 -0
  516. package/src/config/production-entries.json +18 -0
  517. package/src/config/profiles/minimal.ini +1 -1
  518. package/src/config/project-tree-form.json +24 -0
  519. package/src/config/reach-channels.yml +3 -3
  520. package/src/config/reach-prescriptions-intake.yml +1 -1
  521. package/src/config/release-gate-locality.yml +0 -7
  522. package/src/config/roadmap-step-size-baseline.json +118 -0
  523. package/src/config/routing-coverage-seed.json +93 -2
  524. package/src/config/skill-body-budget.json +686 -0
  525. package/src/config/skill-fork-pilot.json +17 -0
  526. package/src/config/skill-lifecycle-probes-codex.json +57 -0
  527. package/src/config/skill-lifecycle-probes.json +57 -0
  528. package/src/config/skill-output-shape.json +316 -0
  529. package/src/config/step-depth-table.json +58 -0
  530. package/src/config/turnaround-budget.json +90 -0
  531. package/src/install/claudeRuleRewrite.ts +10 -1
  532. package/src/install/conflict.ts +61 -6
  533. package/src/install/conflictTracker.ts +143 -9
  534. package/src/install/detect.ts +3 -3
  535. package/src/install/hostPermissionsAdapter.ts +136 -0
  536. package/src/install/installThinLayer.ts +12 -1
  537. package/src/install/loggedWrites.ts +148 -0
  538. package/src/install/manifestFiles.ts +24 -0
  539. package/src/install/noGoDenyRows.ts +368 -0
  540. package/src/install/noGoRules.ts +438 -0
  541. package/src/install/ownershipLedger.ts +180 -0
  542. package/src/install/paths.ts +11 -2
  543. package/src/install/plan.ts +1 -1
  544. package/src/install/preflight.ts +42 -10
  545. package/src/install/preserve.ts +131 -13
  546. package/src/install/recordedOwnership.ts +121 -3
  547. package/src/install/rule_scope.ts +20 -3
  548. package/src/install/stagedRuntime.ts +528 -0
  549. package/src/install/toolsArg.ts +16 -0
  550. package/src/install/txlog.ts +10 -6
  551. package/src/install/types.ts +23 -2
  552. package/src/install/userPin.ts +54 -0
  553. package/src/install/wizard-plan.ts +25 -4
  554. package/src/scripts/_cli/_doctor_emit.ts +24 -0
  555. package/src/scripts/_cli/cmd_brand_status.ts +223 -12
  556. package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
  557. package/src/scripts/_cli/cmd_conformance.ts +3 -2
  558. package/src/scripts/_cli/cmd_doctor.ts +23 -44
  559. package/src/scripts/_cli/cmd_route_explain.ts +176 -2
  560. package/src/scripts/_cli/cmd_uninstall.ts +270 -26
  561. package/src/scripts/_cli/cmd_update.ts +49 -18
  562. package/src/scripts/_cli/cmd_upgrade.ts +38 -2
  563. package/src/scripts/_cli/detection_report.ts +7 -0
  564. package/src/scripts/_cli/doctor_execution.ts +1 -2
  565. package/src/scripts/_cli/doctor_install_mode.ts +39 -0
  566. package/src/scripts/_cli/doctor_network_posture.ts +3 -3
  567. package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
  568. package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
  569. package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
  570. package/src/scripts/_cli/upgrade_unattended.ts +548 -0
  571. package/src/scripts/_dispatch.bash +42 -9
  572. package/src/scripts/_lib/activation_ladder.ts +1 -1
  573. package/src/scripts/_lib/advisory_inventory.ts +405 -0
  574. package/src/scripts/_lib/advisory_notice.ts +270 -0
  575. package/src/scripts/_lib/advisory_sources.ts +752 -0
  576. package/src/scripts/_lib/advisory_verdicts.ts +363 -0
  577. package/src/scripts/_lib/agent_artifact_location.ts +177 -0
  578. package/src/scripts/_lib/agent_settings.ts +7 -12
  579. package/src/scripts/_lib/arrival_record.ts +217 -0
  580. package/src/scripts/_lib/asset_render_record.ts +247 -0
  581. package/src/scripts/_lib/billing_grant.ts +4 -2
  582. package/src/scripts/_lib/brand_voice_slot.ts +258 -0
  583. package/src/scripts/_lib/canary_status.ts +24 -0
  584. package/src/scripts/_lib/cc_transcript.ts +276 -0
  585. package/src/scripts/_lib/changelog_eras.ts +83 -0
  586. package/src/scripts/_lib/claim_phrases.ts +71 -0
  587. package/src/scripts/_lib/classify_update.ts +171 -0
  588. package/src/scripts/_lib/claude_builtin_names.ts +9 -4
  589. package/src/scripts/_lib/claude_hook_scope.ts +195 -0
  590. package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
  591. package/src/scripts/_lib/codex_resident_set.ts +460 -0
  592. package/src/scripts/_lib/codex_skill_finder.ts +225 -0
  593. package/src/scripts/_lib/confusables.ts +19 -0
  594. package/src/scripts/_lib/consumer_impact.ts +199 -0
  595. package/src/scripts/_lib/content_class.ts +127 -0
  596. package/src/scripts/_lib/council_settings_block.ts +9 -2
  597. package/src/scripts/_lib/counted_probe.ts +68 -1
  598. package/src/scripts/_lib/credential_deny_rows.ts +151 -0
  599. package/src/scripts/_lib/credential_files.ts +367 -0
  600. package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
  601. package/src/scripts/_lib/depth_flip.ts +141 -0
  602. package/src/scripts/_lib/design_lock.ts +117 -0
  603. package/src/scripts/_lib/design_sync_ledger.ts +142 -0
  604. package/src/scripts/_lib/design_sync_plan.ts +177 -0
  605. package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
  606. package/src/scripts/_lib/design_sync_verify.ts +99 -0
  607. package/src/scripts/_lib/design_system_claude_design.ts +323 -0
  608. package/src/scripts/_lib/design_system_import.ts +84 -6
  609. package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
  610. package/src/scripts/_lib/egress_credential_env.ts +35 -0
  611. package/src/scripts/_lib/egress_engine.ts +22 -0
  612. package/src/scripts/_lib/egress_known_values.ts +223 -0
  613. package/src/scripts/_lib/egress_normalize.ts +67 -0
  614. package/src/scripts/_lib/egress_prefixes.ts +42 -0
  615. package/src/scripts/_lib/egress_rules.ts +899 -0
  616. package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
  617. package/src/scripts/_lib/egress_sender_scan.ts +290 -0
  618. package/src/scripts/_lib/egress_session_table.ts +510 -0
  619. package/src/scripts/_lib/egress_text.ts +63 -0
  620. package/src/scripts/_lib/egress_token.ts +252 -0
  621. package/src/scripts/_lib/empty_cycles.ts +1 -1
  622. package/src/scripts/_lib/environment_detector.ts +45 -30
  623. package/src/scripts/_lib/exemption_shape.ts +75 -1
  624. package/src/scripts/_lib/floor_posture.ts +185 -0
  625. package/src/scripts/_lib/forge_protection.ts +140 -2
  626. package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
  627. package/src/scripts/_lib/guidelines_lane.ts +12 -1
  628. package/src/scripts/_lib/hand_kinds.ts +65 -0
  629. package/src/scripts/_lib/headless_invocation.ts +3 -3
  630. package/src/scripts/_lib/host_capability.ts +44 -7
  631. package/src/scripts/_lib/host_env_write.ts +39 -18
  632. package/src/scripts/_lib/host_listing_model.ts +14 -7
  633. package/src/scripts/_lib/identifier_redaction.ts +62 -0
  634. package/src/scripts/_lib/impact_bump.ts +70 -0
  635. package/src/scripts/_lib/install_reach_checks.ts +53 -1
  636. package/src/scripts/_lib/installed_layer.ts +31 -0
  637. package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
  638. package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
  639. package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
  640. package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
  641. package/src/scripts/_lib/layer_form_corpus.ts +165 -0
  642. package/src/scripts/_lib/layer_form_decision.ts +248 -0
  643. package/src/scripts/_lib/layer_form_evidence.ts +112 -0
  644. package/src/scripts/_lib/lean_projection_mode.ts +32 -161
  645. package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
  646. package/src/scripts/_lib/loop_guards.ts +8 -120
  647. package/src/scripts/_lib/major_surface.ts +207 -0
  648. package/src/scripts/_lib/mcp_bridge.ts +30 -69
  649. package/src/scripts/_lib/merge_clearance_record.ts +384 -0
  650. package/src/scripts/_lib/neighbour_census.ts +18 -1
  651. package/src/scripts/_lib/orchestration_record.ts +61 -0
  652. package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
  653. package/src/scripts/_lib/pin_advice.ts +49 -0
  654. package/src/scripts/_lib/platform_anchor.ts +222 -0
  655. package/src/scripts/_lib/price_freshness.ts +112 -0
  656. package/src/scripts/_lib/procedure_checks.ts +5 -0
  657. package/src/scripts/_lib/production_reach.ts +194 -0
  658. package/src/scripts/_lib/project_tree_form.ts +134 -0
  659. package/src/scripts/_lib/projection_key_migration.ts +122 -0
  660. package/src/scripts/_lib/prompt_shape.ts +13 -2
  661. package/src/scripts/_lib/provenance_verify.ts +272 -0
  662. package/src/scripts/_lib/quota_parked.ts +29 -14
  663. package/src/scripts/_lib/ratification_artifact.ts +64 -1
  664. package/src/scripts/_lib/ratification_subject.ts +508 -46
  665. package/src/scripts/_lib/release_findings_ingest.ts +36 -311
  666. package/src/scripts/_lib/release_highlights.ts +72 -2
  667. package/src/scripts/_lib/release_settings_surface.ts +392 -0
  668. package/src/scripts/_lib/review_round.ts +134 -0
  669. package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
  670. package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
  671. package/src/scripts/_lib/roadmap_step_size.ts +75 -0
  672. package/src/scripts/_lib/run_checkpoint.ts +60 -3
  673. package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
  674. package/src/scripts/_lib/scope_guard.sh +64 -5
  675. package/src/scripts/_lib/scoped_projection.ts +136 -3
  676. package/src/scripts/_lib/secret_detector.ts +24 -103
  677. package/src/scripts/_lib/security_fix.ts +429 -0
  678. package/src/scripts/_lib/security_fix_context.ts +133 -0
  679. package/src/scripts/_lib/self_repair.ts +69 -39
  680. package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
  681. package/src/scripts/_lib/self_repair_payload.ts +86 -0
  682. package/src/scripts/_lib/session_eol.ts +3 -0
  683. package/src/scripts/_lib/session_pr_watch.ts +207 -0
  684. package/src/scripts/_lib/session_register.ts +51 -1
  685. package/src/scripts/_lib/session_tag.ts +51 -0
  686. package/src/scripts/_lib/settings_removed_keys.ts +30 -0
  687. package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
  688. package/src/scripts/_lib/skill_catalogue.ts +66 -25
  689. package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
  690. package/src/scripts/_lib/skill_leases.ts +203 -0
  691. package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
  692. package/src/scripts/_lib/skill_materialisation.ts +388 -0
  693. package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
  694. package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
  695. package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
  696. package/src/scripts/_lib/skill_origin.ts +21 -1
  697. package/src/scripts/_lib/skill_reach.ts +342 -0
  698. package/src/scripts/_lib/source_shape.ts +7 -2
  699. package/src/scripts/_lib/sqlite_guard.ts +1 -1
  700. package/src/scripts/_lib/step_anatomy.ts +330 -0
  701. package/src/scripts/_lib/subagent_capsule.ts +8 -2
  702. package/src/scripts/_lib/subagent_native_fields.ts +30 -0
  703. package/src/scripts/_lib/subagent_spawn.ts +36 -0
  704. package/src/scripts/_lib/subagent_steering.ts +367 -0
  705. package/src/scripts/_lib/svg_filled_counter.ts +287 -0
  706. package/src/scripts/_lib/svg_rules.ts +2 -0
  707. package/src/scripts/_lib/test_delta.ts +89 -6
  708. package/src/scripts/_lib/tier_downshift_verdict.ts +268 -0
  709. package/src/scripts/_lib/tool_result_census.ts +62 -0
  710. package/src/scripts/_lib/trigger_routers.ts +1 -0
  711. package/src/scripts/_lib/turnaround_throughput.ts +378 -0
  712. package/src/scripts/_lib/ui_surface.ts +22 -0
  713. package/src/scripts/_lib/unattended_gates.ts +100 -0
  714. package/src/scripts/_lib/undeployed_fixes.ts +34 -0
  715. package/src/scripts/_lib/update_check.ts +143 -12
  716. package/src/scripts/_lib/update_invite.ts +116 -0
  717. package/src/scripts/_lib/update_notice.ts +259 -0
  718. package/src/scripts/_lib/verify_clause.ts +4 -2
  719. package/src/scripts/_lib/version_order.ts +146 -0
  720. package/src/scripts/_lib/worker_reuse.ts +191 -0
  721. package/src/scripts/_lib/workspace_secrets.ts +273 -0
  722. package/src/scripts/_lib/worktree_git.ts +67 -0
  723. package/src/scripts/_lib/worktree_ignored.ts +116 -0
  724. package/src/scripts/adoption_status.ts +330 -3
  725. package/src/scripts/adr_cite_check.ts +93 -0
  726. package/src/scripts/advisories.ts +803 -0
  727. package/src/scripts/ai-image/adapters/flux.sh +1 -0
  728. package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
  729. package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
  730. package/src/scripts/ai-image/adapters/recraft.sh +1 -0
  731. package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
  732. package/src/scripts/ai-video/adapters/fal.sh +1 -0
  733. package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
  734. package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
  735. package/src/scripts/ai-video/adapters/kling.sh +1 -0
  736. package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
  737. package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
  738. package/src/scripts/ai-video/adapters/replicate.sh +1 -0
  739. package/src/scripts/ai-video/adapters/sora.sh +1 -0
  740. package/src/scripts/ai-video/adapters/syncso.sh +1 -0
  741. package/src/scripts/ai-video/stitch.sh +115 -2
  742. package/src/scripts/ai_council/airgap.ts +1 -0
  743. package/src/scripts/ai_council/api_transport.ts +27 -4
  744. package/src/scripts/ai_council/budget_guard.ts +300 -11
  745. package/src/scripts/ai_council/bundler.ts +20 -29
  746. package/src/scripts/ai_council/chairman.ts +20 -2
  747. package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
  748. package/src/scripts/ai_council/cli_launch_env.ts +54 -0
  749. package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
  750. package/src/scripts/ai_council/clients.ts +56 -73
  751. package/src/scripts/ai_council/config.ts +16 -22
  752. package/src/scripts/ai_council/council_egress.ts +167 -0
  753. package/src/scripts/ai_council/exposure_ledger.ts +117 -0
  754. package/src/scripts/ai_council/free_hand_shadow.ts +288 -0
  755. package/src/scripts/ai_council/free_route.ts +216 -0
  756. package/src/scripts/ai_council/free_route_catalog.ts +310 -0
  757. package/src/scripts/ai_council/free_route_client.ts +99 -0
  758. package/src/scripts/ai_council/free_rung.ts +61 -0
  759. package/src/scripts/ai_council/hand_payload.ts +338 -0
  760. package/src/scripts/ai_council/hand_schemas.ts +123 -0
  761. package/src/scripts/ai_council/jury_aggregate.ts +155 -1
  762. package/src/scripts/ai_council/kind_flip.ts +221 -0
  763. package/src/scripts/ai_council/kind_flip_state.ts +19 -0
  764. package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
  765. package/src/scripts/ai_council/modification_review.ts +98 -5
  766. package/src/scripts/ai_council/necessity.ts +7 -0
  767. package/src/scripts/ai_council/orchestrator.ts +23 -26
  768. package/src/scripts/ai_council/pricing.ts +10 -0
  769. package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
  770. package/src/scripts/ai_council/response_render.ts +27 -4
  771. package/src/scripts/ai_council/round_reservations.ts +119 -0
  772. package/src/scripts/ai_council/route_chooser.ts +161 -0
  773. package/src/scripts/ai_council/route_liveness.ts +152 -0
  774. package/src/scripts/ai_council/route_member.ts +114 -0
  775. package/src/scripts/ai_council/seat_policy.ts +47 -0
  776. package/src/scripts/ai_council/seat_resume.ts +40 -0
  777. package/src/scripts/ai_council/self_hosted_probe.ts +327 -0
  778. package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
  779. package/src/scripts/ai_council/spend_gate.ts +18 -2
  780. package/src/scripts/ai_council/status_surface.ts +39 -0
  781. package/src/scripts/ai_council/transport_resolver.ts +15 -18
  782. package/src/scripts/analysis_analysts.ts +226 -0
  783. package/src/scripts/analysis_anchors.ts +140 -0
  784. package/src/scripts/analysis_and_optimize.ts +44 -0
  785. package/src/scripts/analysis_emit.ts +150 -0
  786. package/src/scripts/analysis_exchange.ts +186 -0
  787. package/src/scripts/analysis_gate.ts +158 -0
  788. package/src/scripts/analysis_inbox_final.ts +173 -0
  789. package/src/scripts/analysis_ledger.ts +119 -0
  790. package/src/scripts/analysis_pr_optimize.ts +219 -0
  791. package/src/scripts/analysis_pr_review.ts +240 -0
  792. package/src/scripts/analysis_pr_target.ts +121 -0
  793. package/src/scripts/analysis_prompts.ts +130 -0
  794. package/src/scripts/analysis_publish.ts +358 -0
  795. package/src/scripts/analysis_questions.ts +78 -0
  796. package/src/scripts/analysis_run.ts +248 -0
  797. package/src/scripts/analysis_run_record.ts +210 -0
  798. package/src/scripts/analysis_target.ts +343 -0
  799. package/src/scripts/analysis_validate.ts +161 -0
  800. package/src/scripts/anchor_eval_falsify.ts +1 -1
  801. package/src/scripts/arrival_report.ts +115 -0
  802. package/src/scripts/ask_transport.ts +406 -35
  803. package/src/scripts/backfill_model_tier.ts +4 -5
  804. package/src/scripts/before_complete_hook.ts +48 -2
  805. package/src/scripts/bench_hook_latency.ts +3 -3
  806. package/src/scripts/bench_procedure_cursor.ts +440 -0
  807. package/src/scripts/bootstrap.sh +3 -3
  808. package/src/scripts/build_exit_code_register.ts +440 -0
  809. package/src/scripts/build_proof.ts +23 -1
  810. package/src/scripts/cache_realization_report.ts +155 -14
  811. package/src/scripts/canary_liveness.ts +117 -0
  812. package/src/scripts/chat_history.ts +12 -15
  813. package/src/scripts/check_account_surface.ts +318 -0
  814. package/src/scripts/check_agent_artifact_location.ts +17 -160
  815. package/src/scripts/check_bundle_path_leakage.ts +6 -0
  816. package/src/scripts/check_ci_local_parity.ts +21 -13
  817. package/src/scripts/check_claims.ts +77 -2
  818. package/src/scripts/check_completion_review.ts +34 -1
  819. package/src/scripts/check_concern_admissions.ts +41 -5
  820. package/src/scripts/check_consumer_scope_flip.ts +1 -1
  821. package/src/scripts/check_context_paths.ts +2 -0
  822. package/src/scripts/check_council_layout.ts +9 -0
  823. package/src/scripts/check_credential_spelling.ts +267 -0
  824. package/src/scripts/check_egress_mutations.ts +239 -0
  825. package/src/scripts/check_enforcement_coverage.ts +16 -3
  826. package/src/scripts/check_estate_count.ts +16 -1
  827. package/src/scripts/check_finding_dispositions.ts +174 -73
  828. package/src/scripts/check_gate_coverage.ts +123 -21
  829. package/src/scripts/check_gate_reachability.ts +16 -2
  830. package/src/scripts/check_generator_sync.ts +46 -0
  831. package/src/scripts/check_hook_bundle_composition.ts +139 -1
  832. package/src/scripts/check_host_docs_digest.ts +142 -5
  833. package/src/scripts/check_kernel_edit_ratified.ts +301 -76
  834. package/src/scripts/check_kernel_rule_bundle.ts +14 -10
  835. package/src/scripts/check_knowledge_cards.ts +83 -3
  836. package/src/scripts/check_memory.ts +13 -3
  837. package/src/scripts/check_pack_size.ts +1 -1
  838. package/src/scripts/check_permission_deny_syntax.ts +247 -0
  839. package/src/scripts/check_platform_anchor.ts +243 -0
  840. package/src/scripts/check_proposal.ts +183 -1
  841. package/src/scripts/check_reach_channels.ts +5 -3
  842. package/src/scripts/check_references.ts +5 -2
  843. package/src/scripts/check_release_manifest_content.ts +33 -0
  844. package/src/scripts/check_release_pr_shape.ts +8 -3
  845. package/src/scripts/check_rule_invariants.ts +9 -1
  846. package/src/scripts/check_skill_body_budget.ts +343 -0
  847. package/src/scripts/check_skill_requires.ts +137 -1
  848. package/src/scripts/check_step_production_reach.ts +257 -0
  849. package/src/scripts/check_step_receipts.ts +246 -0
  850. package/src/scripts/check_structural_breaking.ts +7 -1
  851. package/src/scripts/check_suppression_hygiene.ts +8 -0
  852. package/src/scripts/check_test_weakening.ts +14 -0
  853. package/src/scripts/check_token_quality_golden.ts +5 -1
  854. package/src/scripts/check_update_banner.ts +50 -3
  855. package/src/scripts/check_verify_expectation_delta.ts +2 -1
  856. package/src/scripts/check_voice_lexicon.ts +531 -0
  857. package/src/scripts/ci_os_attribution.ts +327 -0
  858. package/src/scripts/ci_platform_scope.ts +69 -0
  859. package/src/scripts/ci_settle.ts +4 -1
  860. package/src/scripts/ci_status.ts +0 -1
  861. package/src/scripts/ci_time_to_green.ts +748 -0
  862. package/src/scripts/classify_merge_risk.ts +407 -19
  863. package/src/scripts/code_graph/sqlite_store.ts +1 -1
  864. package/src/scripts/compile_trigger_evals.ts +353 -0
  865. package/src/scripts/condense.ts +25 -31
  866. package/src/scripts/consumer_matrix.ts +61 -3
  867. package/src/scripts/council_availability_hook.ts +12 -4
  868. package/src/scripts/council_cli.ts +56 -44
  869. package/src/scripts/cross_repo_retrieve.ts +9 -72
  870. package/src/scripts/design_lock.ts +106 -0
  871. package/src/scripts/design_slop_rules.ts +30 -0
  872. package/src/scripts/design_sync.ts +264 -0
  873. package/src/scripts/design_system_import.ts +30 -13
  874. package/src/scripts/dispatch_economy_report.ts +46 -1
  875. package/src/scripts/dispatch_r2_reviewer.ts +41 -5
  876. package/src/scripts/egress_canary.ts +166 -0
  877. package/src/scripts/egress_sender_census.ts +101 -0
  878. package/src/scripts/external_sources_denylist.json +94 -12
  879. package/src/scripts/generate_catalog.ts +6 -2
  880. package/src/scripts/generate_owned_digest.ts +163 -0
  881. package/src/scripts/generate_reference_toc.ts +143 -0
  882. package/src/scripts/generate_subagent_floor.ts +11 -1
  883. package/src/scripts/handoff_context_hook.ts +34 -0
  884. package/src/scripts/hook_carrier_census.ts +263 -0
  885. package/src/scripts/hook_chunks.d.mts +12 -0
  886. package/src/scripts/hook_chunks.mjs +114 -0
  887. package/src/scripts/hook_manifest.json +1 -1
  888. package/src/scripts/hook_manifest.yaml +68 -42
  889. package/src/scripts/hooks/block_config_weakening.ts +127 -3
  890. package/src/scripts/hooks/block_credential_reads.ts +165 -0
  891. package/src/scripts/hooks/block_no_verify.ts +47 -23
  892. package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
  893. package/src/scripts/hooks/category_a.ts +202 -25
  894. package/src/scripts/hooks/concern_failure_policy.ts +6 -6
  895. package/src/scripts/hooks/concern_registry.ts +31 -6
  896. package/src/scripts/hooks/concern_registry_types.ts +11 -0
  897. package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
  898. package/src/scripts/hooks/design_pass_hook.ts +42 -10
  899. package/src/scripts/hooks/dispatch_hook.ts +14 -13
  900. package/src/scripts/hooks/egress_engine_loader.ts +125 -0
  901. package/src/scripts/hooks/egress_stage.ts +440 -0
  902. package/src/scripts/hooks/hook_stdin.ts +29 -4
  903. package/src/scripts/hooks/host_docs_pages.ts +194 -0
  904. package/src/scripts/hooks/host_docs_pages.yaml +75 -0
  905. package/src/scripts/hooks/host_lowering.json +1 -1
  906. package/src/scripts/hooks/host_lowering.yaml +22 -21
  907. package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
  908. package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
  909. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
  910. package/src/scripts/hooks/lazy_concern.ts +148 -0
  911. package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
  912. package/src/scripts/hooks/payload_stub.ts +43 -6
  913. package/src/scripts/hooks/permission_gate.ts +7 -7
  914. package/src/scripts/hooks/push_settle_hook.ts +32 -3
  915. package/src/scripts/hooks/replay_hook.ts +43 -0
  916. package/src/scripts/hooks/reread_guard_hook.ts +87 -10
  917. package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
  918. package/src/scripts/hooks/rule_inject_hook.ts +8 -1
  919. package/src/scripts/hooks/session_eol_hook.ts +48 -1
  920. package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
  921. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +162 -10
  922. package/src/scripts/hooks/state_io.ts +2 -2
  923. package/src/scripts/hooks/subagent_ledger_hook.ts +80 -0
  924. package/src/scripts/hooks/svg_obligation.ts +75 -19
  925. package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
  926. package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
  927. package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
  928. package/src/scripts/hooks_doctor.ts +31 -0
  929. package/src/scripts/hooks_status.ts +58 -3
  930. package/src/scripts/inbox_source_census.ts +74 -13
  931. package/src/scripts/install +25 -3
  932. package/src/scripts/install.ts +61 -92
  933. package/src/scripts/interruption_report.ts +11 -1
  934. package/src/scripts/layer_baseline_report.ts +267 -0
  935. package/src/scripts/learning_sidecar.ts +1 -1
  936. package/src/scripts/lint_agents_layout.ts +3 -0
  937. package/src/scripts/lint_blocker_citations.ts +104 -0
  938. package/src/scripts/lint_breaking_changes_index.ts +40 -7
  939. package/src/scripts/lint_consolidation_lineage.ts +144 -16
  940. package/src/scripts/lint_consumer_internal_refs.ts +90 -42
  941. package/src/scripts/lint_context_spine_usage.ts +21 -0
  942. package/src/scripts/lint_decision_classes.ts +34 -0
  943. package/src/scripts/lint_design_antipattern_parity.ts +39 -7
  944. package/src/scripts/lint_evidence_artifacts.ts +31 -0
  945. package/src/scripts/lint_example_fences.ts +11 -2
  946. package/src/scripts/lint_ghostwriter_source.ts +42 -10
  947. package/src/scripts/lint_hook_manifest.ts +118 -0
  948. package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
  949. package/src/scripts/lint_mcp_config_security.ts +9 -11
  950. package/src/scripts/lint_plan_risk_register.ts +28 -1
  951. package/src/scripts/lint_positioning.ts +4 -4
  952. package/src/scripts/lint_provenance.ts +1 -0
  953. package/src/scripts/lint_roadmap_blockers.ts +114 -4
  954. package/src/scripts/lint_roadmap_complexity.ts +98 -0
  955. package/src/scripts/lint_skill_link_reach.ts +251 -9
  956. package/src/scripts/lint_skill_procedures.ts +252 -0
  957. package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
  958. package/src/scripts/lint_subagent_determinism.ts +14 -1
  959. package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
  960. package/src/scripts/mcp_registry_submit.sh +2 -2
  961. package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
  962. package/src/scripts/mcp_server/suggest_skill.ts +89 -4
  963. package/src/scripts/mcp_server/tools.ts +2 -33
  964. package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
  965. package/src/scripts/measure_turn_end_gate.ts +61 -1
  966. package/src/scripts/merge_clearance.ts +225 -0
  967. package/src/scripts/migrate_command_suggestions.ts +1 -1
  968. package/src/scripts/network_sources.ts +236 -0
  969. package/src/scripts/no_go_deny_rows.ts +225 -0
  970. package/src/scripts/orchestration_record.ts +15 -2
  971. package/src/scripts/plan_test_shards.ts +103 -0
  972. package/src/scripts/pr_url_reminder_hook.ts +10 -0
  973. package/src/scripts/print_required_checks.ts +5 -5
  974. package/src/scripts/probe_depth_shadow.ts +406 -0
  975. package/src/scripts/probe_turnaround.ts +342 -10
  976. package/src/scripts/ratification_subject.ts +176 -0
  977. package/src/scripts/rdp_gate_classify.ts +1 -0
  978. package/src/scripts/rdp_quality_eval.ts +1 -0
  979. package/src/scripts/release.ts +31 -64
  980. package/src/scripts/release_drill.ts +63 -188
  981. package/src/scripts/release_env.ts +37 -0
  982. package/src/scripts/release_publication.ts +11 -10
  983. package/src/scripts/report_consumer_gate_reach.ts +233 -0
  984. package/src/scripts/report_merge_gate_load.ts +295 -0
  985. package/src/scripts/report_production_reach.ts +35 -0
  986. package/src/scripts/report_project_contract.ts +123 -0
  987. package/src/scripts/report_reducible_classes.ts +342 -0
  988. package/src/scripts/report_required_checks_drift.ts +5 -3
  989. package/src/scripts/report_skill_host_census.ts +199 -0
  990. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  991. package/src/scripts/retro.ts +758 -0
  992. package/src/scripts/retro_facts.ts +575 -0
  993. package/src/scripts/retro_queue.ts +739 -0
  994. package/src/scripts/retro_session_facts.ts +218 -0
  995. package/src/scripts/retro_sweep.ts +493 -0
  996. package/src/scripts/retro_triage.ts +126 -0
  997. package/src/scripts/roadmap_context.ts +2 -2
  998. package/src/scripts/roadmap_drain_queue.ts +601 -0
  999. package/src/scripts/run_supervise.ts +24 -2
  1000. package/src/scripts/schemas/agent-settings.schema.json +0 -16
  1001. package/src/scripts/schemas/command.schema.json +3 -3
  1002. package/src/scripts/schemas/review-findings.schema.json +8 -0
  1003. package/src/scripts/schemas/skill.schema.json +7 -6
  1004. package/src/scripts/schemas/subagent.schema.json +33 -2
  1005. package/src/scripts/score_skill_selection.ts +5 -2
  1006. package/src/scripts/second_brain_retrieval.ts +1 -0
  1007. package/src/scripts/second_brain_run.ts +1 -0
  1008. package/src/scripts/self_repair_cli.ts +563 -87
  1009. package/src/scripts/self_review_gate.ts +59 -4
  1010. package/src/scripts/session_register_hook.ts +91 -4
  1011. package/src/scripts/sessions_cli.ts +100 -5
  1012. package/src/scripts/skill_collision_clusters.ts +1 -1
  1013. package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
  1014. package/src/scripts/skill_trigger_eval.ts +4 -2
  1015. package/src/scripts/source_adapters.ts +183 -0
  1016. package/src/scripts/step_receipt.ts +100 -0
  1017. package/src/scripts/sync_pr_branch.ts +4 -0
  1018. package/src/scripts/test_council_qualification.ts +1 -1
  1019. package/src/scripts/trigger_eval_grandfather.json +3 -49
  1020. package/src/scripts/trigger_eval_rotation.ts +31 -3
  1021. package/src/scripts/ui_conformance_probe.ts +405 -1
  1022. package/src/scripts/update_counts.ts +230 -11
  1023. package/src/scripts/update_invite_hook.ts +245 -0
  1024. package/src/scripts/update_notice_hook.ts +298 -0
  1025. package/src/scripts/validate_frontmatter.ts +85 -0
  1026. package/src/scripts/worker_reuse_shadow_report.ts +519 -0
  1027. package/src/scripts/worktree_cleanup_check.ts +915 -121
  1028. package/src/server/io/yamlIO.ts +2 -2
  1029. package/src/server/schemas/settings.ts +37 -23
  1030. package/src/shared/brandTokenDocument.ts +46 -0
  1031. package/src/shared/brandTokenPaths.ts +43 -0
  1032. package/src/shared/settingsCarveOut.ts +0 -8
  1033. package/src/shared/skillRanking.ts +106 -5
  1034. package/src/shared/userMd/formAdapter.ts +15 -1
  1035. package/src/shared/userMd/schema.ts +22 -0
  1036. package/src/templates/agent-user.md +4 -0
  1037. package/src/templates/agent-user.yml +4 -0
  1038. package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
  1039. package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
  1040. package/dist/cli-delegate/chunk-A4QJ6ENT.js +0 -50
  1041. package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
  1042. package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
  1043. package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
  1044. package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
  1045. package/dist/ui/assets/index-C3djEJah.js +0 -23
  1046. package/src/scripts/_lib/continuation_ladder.ts +0 -335
  1047. package/src/scripts/hooks/run_continuation_hook.ts +0 -1524
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Tie a published version's provenance attestation to THIS package's OIDC
3
+ * publish workflow.
4
+ *
5
+ * The gate this replaces read `dist.attestations.provenance.predicateType` out
6
+ * of the packument and accepted anything starting with the SLSA provenance
7
+ * URL. That is a presence check wearing a verification's clothes: any workflow
8
+ * in any repository with `id-token: write` produces a document that passes it,
9
+ * so an attacker who can publish from their own CI already satisfies it. The
10
+ * step that opened this file (`road-to-an-update-that-installs-itself-only-when-it-is-safe`
11
+ * 2.1) named exactly that gap — *"does not verify the attestation's signature
12
+ * or tie it to `publish-npm.yml`"* — and this module closes the second half.
13
+ *
14
+ * **The first half is only partly closed here, and the distinction is
15
+ * load-bearing.** `provenance_matches_publish` parses an UNSIGNED reading of
16
+ * the DSSE payload. `verify_attestation_signature` below checks the envelope's
17
+ * signature against the certificate the bundle carries, and requires the
18
+ * payload it verified to name the same workflow — but checks no trust root
19
+ * (see its own note). The registry-key half is `npm audit signatures`, which
20
+ * verifies against npm's own trusted keys and is run by the caller as a
21
+ * separate step; these functions are only meaningful WITH it, and the caller
22
+ * says so where it composes them.
23
+ *
24
+ * Why not verify the signature in-process: it needs a sigstore/cosign
25
+ * verification path, which is a dependency this package does not carry and
26
+ * which the hook and pack byte budgets would both have to absorb. Shelling out
27
+ * to the npm client — already a hard dependency of an upgrade — buys the same
28
+ * property for nothing.
29
+ */
30
+
31
+ /**
32
+ * The workflow path every legitimate release of this package is built by.
33
+ *
34
+ * A literal rather than a read of `.github/workflows/`: the question is which
35
+ * workflow the REGISTRY says produced the tarball, and answering it from the
36
+ * local tree would let a checkout vouch for itself.
37
+ */
38
+ export const EXPECTED_WORKFLOW_REF = '.github/workflows/publish-npm.yml';
39
+
40
+ /** The repository every legitimate release of this package is built from. */
41
+ export const EXPECTED_REPOSITORY = 'https://github.com/event4u-app/agent-config';
42
+
43
+ function asRecord(v: unknown): Record<string, unknown> | null {
44
+ return v !== null && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : null;
45
+ }
46
+
47
+ /** Decode the DSSE payload of the first attestation; `null` when unreadable. */
48
+ function decode_payload(doc: unknown): Record<string, unknown> | null {
49
+ const list = asRecord(doc)?.['attestations'];
50
+ if (!Array.isArray(list) || list.length === 0) return null;
51
+ for (const entry of list) {
52
+ const payload = asRecord(asRecord(asRecord(entry)?.['bundle'])?.['dsseEnvelope'])?.['payload'];
53
+ if (typeof payload !== 'string' || payload === '') continue;
54
+ try {
55
+ const parsed: unknown = JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));
56
+ const rec = asRecord(parsed);
57
+ if (rec !== null) return rec;
58
+ } catch {
59
+ // A payload that is not base64 JSON is not evidence of anything.
60
+ // Keep looking: npm may serve several attestations and only one of
61
+ // them has to be the provenance statement.
62
+ }
63
+ }
64
+ return null;
65
+ }
66
+
67
+ function external_workflow(doc: unknown): Record<string, unknown> | null {
68
+ const payload = decode_payload(doc);
69
+ if (payload === null) return null;
70
+ const predicate = asRecord(payload['predicate']);
71
+ const external = asRecord(asRecord(predicate?.['buildDefinition'])?.['externalParameters']);
72
+ return asRecord(external?.['workflow']);
73
+ }
74
+
75
+ /**
76
+ * The workflow path named by the attestation, or `null` when the document
77
+ * carries none that can be read.
78
+ */
79
+ export function attestation_workflow_ref(doc: unknown): string | null {
80
+ const path_value = external_workflow(doc)?.['path'];
81
+ return typeof path_value === 'string' && path_value !== '' ? path_value : null;
82
+ }
83
+
84
+ /** The repository named by the attestation, or `null`. */
85
+ export function attestation_repository(doc: unknown): string | null {
86
+ const repo = external_workflow(doc)?.['repository'];
87
+ return typeof repo === 'string' && repo !== '' ? repo : null;
88
+ }
89
+
90
+ /**
91
+ * Does this attestation say the tarball was built by this package's publish
92
+ * workflow, in this package's repository?
93
+ *
94
+ * Both halves are required and both reject on absence: a document that names
95
+ * no workflow is not a document that names the right one. Repository is
96
+ * compared with the trailing `.git` and any trailing slash removed, because
97
+ * the same remote is written both ways and neither spelling is an attacker
98
+ * signal.
99
+ */
100
+ export function provenance_matches_publish(doc: unknown): boolean {
101
+ return payload_names_publish(decode_payload(doc));
102
+ }
103
+
104
+ /** The workflow and repository check, over one already-decoded payload. */
105
+ function payload_names_publish(payload: Record<string, unknown> | null): boolean {
106
+ const predicate = asRecord(payload?.['predicate']);
107
+ const workflow = asRecord(asRecord(asRecord(predicate?.['buildDefinition'])?.['externalParameters'])?.['workflow']);
108
+ if (workflow?.['path'] !== EXPECTED_WORKFLOW_REF) return false;
109
+ const repo = workflow['repository'];
110
+ if (typeof repo !== 'string' || repo === '') return false;
111
+ return repo.replace(/\.git$/, '').replace(/\/$/, '') === EXPECTED_REPOSITORY;
112
+ }
113
+
114
+ /**
115
+ * Does the certificate's SAN carry the workflow identity as a whole URI entry?
116
+ * Anchored: the entry is the expected workflow followed by `@<ref>`, never a
117
+ * SAN that merely contains the string.
118
+ */
119
+ function san_names_workflow(san: string): boolean {
120
+ return san.split(/,\s*/).some((e) => e.startsWith(`URI:${SAN_WORKFLOW_MARKER}@`));
121
+ }
122
+
123
+ // --- the signature half -------------------------------------------------------
124
+
125
+ /**
126
+ * What the clauses below do and do not establish.
127
+ *
128
+ * The header above says the signature half is not closed here. It is now
129
+ * HALF-closed, and the half that is missing is stated first so nothing below
130
+ * reads as more than it is.
131
+ *
132
+ * **Closed:** the DSSE envelope's signature is verified against the public key
133
+ * of the certificate the bundle itself carries, over the DSSE
134
+ * pre-authentication encoding — so a payload edited after signing is caught,
135
+ * and a bundle whose signature does not belong to its own certificate is
136
+ * caught. And the certificate's own SAN is required to name the expected
137
+ * workflow, so a bundle whose PAYLOAD claims `publish-npm.yml` while its
138
+ * certificate was issued to some other identity is caught. Before this, both
139
+ * were a base64 decode and a string compare.
140
+ *
141
+ * **Not closed, and this is the residue:** there is no trust root. Nothing
142
+ * here checks that the certificate was issued by Fulcio, and nothing checks a
143
+ * Rekor inclusion proof. An attacker who can serve a registry response can mint
144
+ * a self-signed certificate carrying the expected SAN, sign their own payload
145
+ * with it, and pass every check in this file. Closing that needs a sigstore
146
+ * verification path with pinned roots — a dependency decision, not a line in
147
+ * this function, and it is registered as the `dsse-trust-root` blocker on
148
+ * `road-to-an-update-that-installs-itself-only-when-it-is-safe`.
149
+ *
150
+ * So the honest statement of what the provenance gate is worth today: it
151
+ * defeats a partial compromise — a mis-scoped workflow, an edited payload, a
152
+ * bundle reused from another build — and it does not defeat a forged bundle
153
+ * from someone who already controls what the install reads.
154
+ */
155
+
156
+ /** Why the signature does not verify, or `null` when it does. */
157
+ export type SignatureVerdict = string | null;
158
+
159
+ /** The SAN extension OID the Fulcio leaf carries the workflow identity in. */
160
+ const SAN_WORKFLOW_MARKER = `${EXPECTED_REPOSITORY}/${EXPECTED_WORKFLOW_REF}`;
161
+
162
+ /**
163
+ * The DSSE pre-authentication encoding — the exact bytes a DSSE signature is
164
+ * taken over.
165
+ *
166
+ * `DSSEv1 SP len(payloadType) SP payloadType SP len(payload) SP payload`, with
167
+ * both lengths in BYTES rather than characters. Built as a Buffer throughout
168
+ * because the payload is arbitrary bytes and a string round-trip would mangle
169
+ * any that are not valid UTF-8.
170
+ */
171
+ export function dssePae(payloadType: string, payload: Buffer): Buffer {
172
+ const type = Buffer.from(payloadType, 'utf8');
173
+ return Buffer.concat([
174
+ Buffer.from(`DSSEv1 ${String(type.length)} `, 'utf8'),
175
+ type,
176
+ Buffer.from(` ${String(payload.length)} `, 'utf8'),
177
+ payload,
178
+ ]);
179
+ }
180
+
181
+ interface Envelope {
182
+ readonly payloadType: string;
183
+ readonly payload: Buffer;
184
+ readonly sig: Buffer;
185
+ readonly certDer: Buffer;
186
+ }
187
+
188
+ function readEnvelope(entry: unknown): Envelope | null {
189
+ const bundle = asRecord(asRecord(entry)?.['bundle']);
190
+ const dsse = asRecord(bundle?.['dsseEnvelope']);
191
+ if (dsse === null) return null;
192
+ const payloadB64 = dsse['payload'];
193
+ const payloadType = dsse['payloadType'];
194
+ const sigs = dsse['signatures'];
195
+ if (typeof payloadB64 !== 'string' || typeof payloadType !== 'string' || !Array.isArray(sigs) || sigs.length === 0) return null;
196
+ const sigB64 = asRecord(sigs[0])?.['sig'];
197
+ if (typeof sigB64 !== 'string' || sigB64 === '') return null;
198
+
199
+ const material = asRecord(bundle?.['verificationMaterial']);
200
+ // Both shapes sigstore has used: a single certificate, and a chain.
201
+ const single = asRecord(material?.['certificate'])?.['rawBytes'];
202
+ const chain = asRecord(material?.['x509CertificateChain'])?.['certificates'];
203
+ const first = Array.isArray(chain) ? asRecord(chain[0])?.['rawBytes'] : undefined;
204
+ const certB64 = typeof single === 'string' ? single : typeof first === 'string' ? first : null;
205
+ if (certB64 === null || certB64 === '') return null;
206
+
207
+ return {
208
+ payloadType,
209
+ payload: Buffer.from(payloadB64, 'base64'),
210
+ sig: Buffer.from(sigB64, 'base64'),
211
+ certDer: Buffer.from(certB64, 'base64'),
212
+ };
213
+ }
214
+
215
+ /**
216
+ * Verify the first readable attestation's DSSE signature against its own
217
+ * certificate, and require that certificate to name this package's workflow.
218
+ *
219
+ * Returns a reason on every failure rather than a boolean, because the caller
220
+ * prints it: a refusal a user cannot act on is a refusal they route around.
221
+ * `crypto` is imported lazily so a caller that never verifies a signature does
222
+ * not pay for the module — this runs on an install path, never in a hook.
223
+ */
224
+ export async function verify_attestation_signature(doc: unknown): Promise<SignatureVerdict> {
225
+ const list = asRecord(doc)?.['attestations'];
226
+ if (!Array.isArray(list) || list.length === 0) return 'the attestation bundle carries no attestations';
227
+ const crypto = await import('node:crypto');
228
+
229
+ let lastReason = 'no attestation carried a readable DSSE envelope';
230
+ for (const entry of list) {
231
+ const env = readEnvelope(entry);
232
+ if (env === null) continue;
233
+ let cert: InstanceType<typeof crypto.X509Certificate>;
234
+ try {
235
+ cert = new crypto.X509Certificate(env.certDer);
236
+ } catch {
237
+ lastReason = 'the signing certificate could not be parsed';
238
+ continue;
239
+ }
240
+ // The certificate's own identity, not the payload's claim about it.
241
+ const san = cert.subjectAltName ?? '';
242
+ if (!san_names_workflow(san)) {
243
+ lastReason = `the signing certificate names ${san === '' ? 'no identity' : san}, not ${SAN_WORKFLOW_MARKER}`;
244
+ continue;
245
+ }
246
+ let ok = false;
247
+ try {
248
+ ok = crypto.verify(null, dssePae(env.payloadType, env.payload), cert.publicKey, env.sig);
249
+ } catch {
250
+ ok = false;
251
+ }
252
+ if (!ok) {
253
+ lastReason = 'the DSSE signature does not verify against the certificate in the bundle';
254
+ continue;
255
+ }
256
+ // The payload this signature covers must itself name the workflow:
257
+ // otherwise a valid signature on one entry vouches for a claim made in
258
+ // another, which is all the unsigned check reads.
259
+ let verified: Record<string, unknown> | null = null;
260
+ try {
261
+ verified = asRecord(JSON.parse(env.payload.toString('utf8')));
262
+ } catch {
263
+ verified = null;
264
+ }
265
+ if (!payload_names_publish(verified)) {
266
+ lastReason = 'the signed payload does not name this package\'s publish workflow';
267
+ continue;
268
+ }
269
+ return null;
270
+ }
271
+ return lastReason;
272
+ }
@@ -42,6 +42,8 @@ export interface QuotaParkedMarker {
42
42
  /** Providers whose plan quota was exhausted, sorted and deduplicated. */
43
43
  readonly providers: string[];
44
44
  readonly parked_at: string;
45
+ /** Who established the exhaustion: the council's own seat gate, or the host's `StopFailure`. */
46
+ readonly source: 'council' | 'host';
45
47
  }
46
48
 
47
49
  /** Filesystem-safe path for a run's marker. Mirrors `billing_grant.grantFile`. */
@@ -58,21 +60,26 @@ export function markerFile(repoRoot: string, runId: string): string {
58
60
  *
59
61
  * Idempotent on the timestamp: a second park inside one run keeps the original
60
62
  * `parked_at` and merges the provider set, so "when did this run first hit the
61
- * cliff" survives a round that parks twice.
63
+ * cliff" survives a round that parks twice. A host park is the exception: it
64
+ * sets its own `source` and refreshes `parked_at`, since the host's rate window
65
+ * starts at its own signal, not at an earlier council park.
62
66
  */
63
67
  export function writeQuotaParked(
64
68
  repoRoot: string,
65
69
  runId: string,
66
70
  providers: readonly string[],
67
71
  now: () => Date = () => new Date(),
72
+ source: 'council' | 'host' = 'council',
68
73
  ): QuotaParkedMarker {
69
74
  const file = markerFile(repoRoot, runId);
70
75
  const existing = readMarker(file);
76
+ const host = source === 'host';
71
77
  const merged = [...new Set([...(existing?.providers ?? []), ...providers])].sort();
72
78
  const marker: QuotaParkedMarker = {
73
79
  run_id: runId,
74
80
  providers: merged,
75
- parked_at: existing?.parked_at ?? now().toISOString(),
81
+ parked_at: (host ? null : existing?.parked_at) ?? now().toISOString(),
82
+ source: host ? source : (existing?.source ?? source),
76
83
  };
77
84
  fs.mkdirSync(path.dirname(file), { recursive: true });
78
85
  fs.writeFileSync(file, `${JSON.stringify(marker, null, 2)}\n`, 'utf8');
@@ -102,20 +109,27 @@ export function clearQuotaParked(repoRoot: string, runId: string): void {
102
109
  * per parked run, so the scan is cheap by construction.
103
110
  */
104
111
  export function findQuotaParked(repoRoot: string, sessionId: string): QuotaParkedMarker | null {
105
- const direct = readMarker(markerFile(repoRoot, sessionId));
106
- if (direct !== null) return direct;
107
- let names: string[];
112
+ return readMarker(markerFile(repoRoot, sessionId)) ?? allMarkers(repoRoot).find((m) => m.run_id === sessionId) ?? null;
113
+ }
114
+
115
+ /** The plan's rolling rate window; a host marker older than this no longer describes it. */
116
+ export const HOST_RATE_WINDOW_MS = 5 * 3_600_000;
117
+
118
+ /** True when a host-sourced marker was parked inside the rate window ending at `nowMs`. */
119
+ export function recentHostMarker(repoRoot: string, nowMs: number = Date.now(), windowMs: number = HOST_RATE_WINDOW_MS): boolean {
120
+ return allMarkers(repoRoot).some((m) => {
121
+ const age = nowMs - Date.parse(m.parked_at);
122
+ return m.source === 'host' && age >= 0 && age < windowMs;
123
+ });
124
+ }
125
+
126
+ function allMarkers(repoRoot: string): QuotaParkedMarker[] {
127
+ const dir = path.join(repoRoot, QUOTA_PARKED_DIR_REL);
108
128
  try {
109
- names = fs.readdirSync(path.join(repoRoot, QUOTA_PARKED_DIR_REL));
129
+ return fs.readdirSync(dir).flatMap((n) => (n.endsWith('.json') ? (readMarker(path.join(dir, n)) ?? []) : []));
110
130
  } catch {
111
- return null;
112
- }
113
- for (const name of names) {
114
- if (!name.endsWith('.json')) continue;
115
- const m = readMarker(path.join(repoRoot, QUOTA_PARKED_DIR_REL, name));
116
- if (m !== null && m.run_id === sessionId) return m;
131
+ return [];
117
132
  }
118
- return null;
119
133
  }
120
134
 
121
135
  function readMarker(file: string): QuotaParkedMarker | null {
@@ -126,7 +140,8 @@ function readMarker(file: string): QuotaParkedMarker | null {
126
140
  if (typeof o['run_id'] !== 'string' || typeof o['parked_at'] !== 'string') return null;
127
141
  if (!Array.isArray(o['providers'])) return null;
128
142
  const providers = o['providers'].filter((p): p is string => typeof p === 'string');
129
- return { run_id: o['run_id'], providers, parked_at: o['parked_at'] };
143
+ const source = o['source'] === 'host' ? 'host' : 'council';
144
+ return { run_id: o['run_id'], providers, parked_at: o['parked_at'], source };
130
145
  } catch {
131
146
  return null;
132
147
  }
@@ -84,6 +84,18 @@ export interface RatificationArtifact {
84
84
  verdict: RatificationVerdict;
85
85
  /** `merge`, or an ISO-8601 instant. Never a bare "later". */
86
86
  effective_after: string;
87
+ /**
88
+ * The digest of the gated content this record reviewed, or `null` on a
89
+ * record that carries none.
90
+ *
91
+ * Not in {@link RATIFICATION_FIELDS}: those six are required of every
92
+ * record, and the 23 records on the trunk predate this field. What makes
93
+ * it required in practice is the CALLER — `check_kernel_edit_ratified`
94
+ * passes an expected digest on every run, and a record with no `subject`
95
+ * then fails `subject-absent`. A record is only ever read as part of the
96
+ * diff it ships in, so nothing on the trunk is re-judged.
97
+ */
98
+ subject: string | null;
87
99
  }
88
100
 
89
101
  export interface RatificationProblem {
@@ -103,7 +115,10 @@ export interface RatificationProblem {
103
115
  | 'unknown-seat-verdict'
104
116
  | 'seat-dissent'
105
117
  | 'providers-exceed-seats'
106
- | 'header-not-derived';
118
+ | 'header-not-derived'
119
+ | 'subject-absent'
120
+ | 'subject-malformed'
121
+ | 'subject-mismatch';
107
122
  message: string;
108
123
  }
109
124
 
@@ -322,6 +337,16 @@ export interface RatificationReading {
322
337
  problems: RatificationProblem[];
323
338
  }
324
339
 
340
+ /**
341
+ * A `subject` digest: the lower-case hex sha-256 `subjectDigest` produces.
342
+ *
343
+ * Shape is checked apart from equality on purpose. A typo'd digest and a
344
+ * digest that moved because a gated file was edited after the review are
345
+ * different failures, and a reader that reported both as "mismatch" would
346
+ * send an author looking for an edit that never happened.
347
+ */
348
+ export const SUBJECT_RE = /^[0-9a-f]{64}$/u;
349
+
325
350
  /** `merge`, or an ISO-8601 instant with a timezone. */
326
351
  const EFFECTIVE_AFTER_RE =
327
352
  /^(merge|\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2}))$/;
@@ -364,10 +389,18 @@ export function readProviders(fm: AdrFrontmatter): string[] {
364
389
  * Pass `null` when it could not be established — the diversity rule then does
365
390
  * not fire, and the caller says so, because an unmeasured count is not
366
391
  * evidence that diversity was unavailable.
392
+ *
393
+ * `expectedSubject` is the digest of the gated content the record is being
394
+ * read against, recomputed from the tree by the caller. Pass `null` to read a
395
+ * record's shape without binding it to any content — which is what a reader
396
+ * that is not judging a diff does. Pass a digest and the record must carry
397
+ * `subject`, and carry that one: a record whose `subject` is absent or
398
+ * different did not review this content, whatever its verdict says.
367
399
  */
368
400
  export function readRatification(
369
401
  text: string,
370
402
  configuredProviders: number | null,
403
+ expectedSubject: string | null = null,
371
404
  ): RatificationReading {
372
405
  const problems: RatificationProblem[] = [];
373
406
  const fm = readAdrFrontmatter(text);
@@ -427,6 +460,35 @@ export function readRatification(
427
460
 
428
461
  problems.push(...seatProblems(readSeats(fm, text), providers, verdict));
429
462
 
463
+ // The content binding. Shape first, then equality, so a malformed digest is
464
+ // never reported as content that moved.
465
+ const subject = scalarOf(fm, 'subject');
466
+ if (subject !== null && !SUBJECT_RE.test(subject)) {
467
+ problems.push({
468
+ code: 'subject-malformed',
469
+ message:
470
+ `subject \`${subject}\` is not a sha-256 hex digest (${String(SUBJECT_RE)}) — ` +
471
+ 'print it with `ratification_subject`',
472
+ });
473
+ } else if (expectedSubject !== null) {
474
+ if (subject === null) {
475
+ problems.push({
476
+ code: 'subject-absent',
477
+ message:
478
+ 'missing `subject:` — a record names who reviewed; without a digest it does not ' +
479
+ `name WHAT, so the gated content may have changed since. Expected \`${expectedSubject}\``,
480
+ });
481
+ } else if (subject !== expectedSubject) {
482
+ problems.push({
483
+ code: 'subject-mismatch',
484
+ message:
485
+ `subject \`${subject}\` is not the digest of this diff's gated content ` +
486
+ `(\`${expectedSubject}\`) — the record reviewed different content, so it does not ` +
487
+ 'answer for this change',
488
+ });
489
+ }
490
+ }
491
+
430
492
  // Diversity, against the REQUIRED count.
431
493
  //
432
494
  // Round 1 refused the previous shape: the count came from the user-global
@@ -465,6 +527,7 @@ export function readRatification(
465
527
  providers,
466
528
  verdict: verdict as RatificationVerdict,
467
529
  effective_after: effective as string,
530
+ subject,
468
531
  },
469
532
  problems: [],
470
533
  };