@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
@@ -3,10 +3,12 @@
3
3
  * Spawn-guard — SHADOW ONLY (road-to-subagent-lifecycle-integrity Phase 3
4
4
  * Step 1, activated per `docs/contracts/concern-activation-policy.md`).
5
5
  *
6
- * What it does: on every `Agent` / `Task` tool call, read the open-dispatch
7
- * set the Phase-1 ledger maintains, and append one `spawn_guard_shadow` line
8
- * recording what a guard WOULD have done at several candidate thresholds.
9
- * It emits nothing to the model and it never blocks. Exit is always 0.
6
+ * What it does: on every `Agent` / `Task` call and every resume (`SendMessage`),
7
+ * read the open-dispatch set the Phase-1 ledger maintains, and append one
8
+ * `spawn_guard_shadow` line recording what a guard WOULD have done at several
9
+ * candidate thresholds; a spawn also records whether a warm worker would have
10
+ * been re-tasked instead (`reuse`). It emits nothing to the model and it never
11
+ * blocks. Exit is always 0.
10
12
  *
11
13
  * ── Why shadow and not warn ───────────────────────────────────────────────
12
14
  *
@@ -46,14 +48,29 @@
46
48
  * rides along as context and becomes a real measurement only when Phase 0
47
49
  * Step 4 establishes whether `agent_id` reaches a PreToolUse payload.
48
50
  *
49
- * PRIVACY BY CONSTRUCTION: counts and candidate verdicts only. No prompt, no
50
- * agent id, no tool input — the record type has no field able to hold any.
51
+ * PRIVACY BY CONSTRUCTION: counts, candidate verdicts, and a reuse verdict whose
52
+ * only free string is a worker's durable name from the register. A name read
53
+ * from the tool input reaches disk only as a session-bound digest. No prompt, no
54
+ * message, no recipient, no agent id.
51
55
  */
52
56
  import * as fs from 'node:fs';
53
57
  import * as path from 'node:path';
54
58
  import { fileURLToPath, pathToFileURL } from 'node:url';
55
59
 
56
- import { appendLedgerLine, openRecordStats, resolveConsumerRoot } from './subagent_ledger_hook.js';
60
+ import { probeHostCapabilities } from '../_lib/host_capability.js';
61
+ import { recentHostMarker } from '../_lib/quota_parked.js';
62
+ import { shadowReuseVerdict, type ReuseContext, type WorkerState } from '../_lib/worker_reuse.js';
63
+ import {
64
+ appendLedgerLine,
65
+ openRecordStats,
66
+ readIndexEntry,
67
+ readOpenRecords,
68
+ refFor,
69
+ resolveConsumerRoot,
70
+ stateStamp,
71
+ stopIndexKey,
72
+ writeIndexEntry,
73
+ } from './subagent_ledger_hook.js';
57
74
  import { readHookStdin } from './hook_stdin.js';
58
75
  import { EXIT_ALLOW } from './exit_codes.js';
59
76
 
@@ -67,6 +84,97 @@ function isObject(v: unknown): v is JsonObject {
67
84
  /** The two subagent-dispatch tool names this repo has observed across hosts. */
68
85
  export const DISPATCH_TOOL_NAMES: ReadonlySet<string> = new Set(['Agent', 'Task']);
69
86
 
87
+ /**
88
+ * The tool that re-tasks a finished worker — and also messages a running one,
89
+ * a teammate, or the lead. The host's concurrency cap checks new spawns only
90
+ * and admits a resume past it, so a guard that counted spawns only would
91
+ * undercount exactly the runs the host does not bound. Only a send the ledger
92
+ * can place on a finished leg is called a resume; see {@link classifySend}.
93
+ */
94
+ export const RESUME_TOOL_NAMES: ReadonlySet<string> = new Set(['SendMessage']);
95
+
96
+ /**
97
+ * `resume` — the recipient hashes to a ledger ref that is not open and whose
98
+ * stop this same session recorded: a finished leg of this session is
99
+ * re-entered, which starts a run.
100
+ * `message_running` — the ref is open: the message starts no run.
101
+ * `message_or_resume` — the ledger cannot place the recipient in this session
102
+ * (a name, a teammate, the lead, another session's leg, no session id, a stop
103
+ * older than the scan window). Recorded, never called a resume.
104
+ *
105
+ * The verdict describes the attempted send at `pre_tool_use`; whether the host
106
+ * then accepts it is not visible here.
107
+ */
108
+ export type SendKind = 'resume' | 'message_running' | 'message_or_resume';
109
+
110
+ /** Longer names are neither recorded nor resolved: a name is an address, not a payload. */
111
+ export const NAME_MAX = 128;
112
+
113
+ /** Domain-separated digest of (session, name); the only form a tool-input name takes on disk. */
114
+ function nameKey(sessionId: string, name: string): string {
115
+ return refFor(`subagent-name\0${sessionId}\0${name}`);
116
+ }
117
+
118
+ /**
119
+ * Classify one send. `recipient_kind: name` is resolved through the register a
120
+ * named spawn of this session left; any other recipient is taken as an agent id
121
+ * and hashed with the ledger's own `refFor`. Neither the recipient nor its ref
122
+ * is written.
123
+ */
124
+ export function classifySend(
125
+ root: string,
126
+ toolInput: unknown,
127
+ sessionId: string | null,
128
+ now: Date = new Date(),
129
+ ): SendKind {
130
+ const input = isObject(toolInput) ? toolInput : {};
131
+ const recipient = input['to'];
132
+ if (typeof recipient !== 'string' || recipient === '') return 'message_or_resume';
133
+ if (sessionId === null || sessionId === '') return 'message_or_resume';
134
+ const ref =
135
+ input['recipient_kind'] !== 'name'
136
+ ? refFor(recipient)
137
+ : recipient.length > NAME_MAX
138
+ ? null
139
+ : readIndexEntry(root, nameKey(sessionId, recipient), now);
140
+ if (!ref) return 'message_or_resume';
141
+ if (readOpenRecords(root).has(ref)) return 'message_running';
142
+ return readIndexEntry(root, stopIndexKey(sessionId, ref), now) === null ? 'message_or_resume' : 'resume';
143
+ }
144
+
145
+ /**
146
+ * On a completed named spawn, record which ledger ref the name now addresses.
147
+ * Neither the name nor the agent id reaches disk in clear; both are digested first.
148
+ */
149
+ export function recordNamedSpawn(root: string, payload: JsonObject, sessionId: string | null, nowIso: string): void {
150
+ const input = isObject(payload['tool_input']) ? payload['tool_input'] : {};
151
+ const result = isObject(payload['tool_response']) ? payload['tool_response'] : {};
152
+ const name = input['name'];
153
+ const agentId = result['agentId'];
154
+ if (typeof name !== 'string' || name === '' || name.length > NAME_MAX || typeof agentId !== 'string' || agentId === '') return;
155
+ if (!sessionId) return;
156
+ const key = nameKey(sessionId, name);
157
+ appendLedgerLine(root, nowIso, { event: 'subagent_named', ts: nowIso, ref: refFor(agentId), name_key: key, session_id: sessionId });
158
+ writeIndexEntry(root, nowIso, key, refFor(agentId));
159
+ }
160
+
161
+ /**
162
+ * Platforms where `pre_tool_use` was observed firing on the resume tool, with a
163
+ * deny honoured there. Elsewhere the line says the resume half is unobserved.
164
+ */
165
+ export const RESUME_ADMISSION_OBSERVED: ReadonlySet<string> = new Set(['claude']);
166
+
167
+ /**
168
+ * Inputs to the reuse verdict. Production passes none: `host_resume` comes
169
+ * from the host row, and no worker register is recorded yet, which the verdict
170
+ * names as `worker_register_unrecorded` rather than reading as empty.
171
+ */
172
+ export interface ShadowDeps {
173
+ host_resume?: boolean;
174
+ workers?: readonly WorkerState[] | null;
175
+ context?: ReuseContext | null;
176
+ }
177
+
70
178
  /** One candidate guard configuration under shadow evaluation. */
71
179
  export interface Candidate {
72
180
  readonly label: string;
@@ -136,12 +244,46 @@ function extractToolName(payload: JsonObject): string | null {
136
244
  return typeof v === 'string' && v ? v : null;
137
245
  }
138
246
 
139
- export function processEnvelope(envelope: JsonValue, consumerRoot: string): number {
247
+ export function processEnvelope(envelope: JsonValue, consumerRoot: string, deps: ShadowDeps = {}): number {
140
248
  try {
141
249
  if (!isObject(envelope)) return EXIT_ALLOW;
142
250
  const payload = unwrapPayload(envelope);
143
251
  const toolName = extractToolName(payload);
144
- if (toolName === null || !DISPATCH_TOOL_NAMES.has(toolName)) return EXIT_ALLOW;
252
+ if (toolName === null) return EXIT_ALLOW;
253
+ if (envelope['event'] === 'post_tool_use' || payload['hook_event_name'] === 'PostToolUse') {
254
+ if (DISPATCH_TOOL_NAMES.has(toolName)) {
255
+ const sid = payload['session_id'] ?? envelope['session_id'];
256
+ recordNamedSpawn(consumerRoot, payload, typeof sid === 'string' ? sid : null, new Date().toISOString());
257
+ }
258
+ return EXIT_ALLOW;
259
+ }
260
+ const isResume = RESUME_TOOL_NAMES.has(toolName);
261
+ if (!isResume && !DISPATCH_TOOL_NAMES.has(toolName)) return EXIT_ALLOW;
262
+ const platform = typeof envelope['platform'] === 'string' ? envelope['platform'] : null;
263
+ const toolInput = isObject(payload['tool_input']) ? payload['tool_input'] : {};
264
+ const sessionRaw = payload['session_id'] ?? envelope['session_id'];
265
+ const sessionId = typeof sessionRaw === 'string' ? sessionRaw : null;
266
+ const sendKind: SendKind | null = isResume ? classifySend(consumerRoot, toolInput, sessionId) : null;
267
+ // A spawn's definition and requested name (as its session digest), so a
268
+ // report can join the request to the named worker a reuse would address.
269
+ const reqName = toolInput['name'];
270
+ const spawnFacts = isResume
271
+ ? {}
272
+ : {
273
+ ...stateStamp(payload['cwd']),
274
+ agent_type: typeof toolInput['subagent_type'] === 'string' ? toolInput['subagent_type'] : null,
275
+ ...(typeof reqName === 'string' && reqName && reqName.length <= NAME_MAX && sessionId
276
+ ? { name_key: nameKey(sessionId, reqName) }
277
+ : {}),
278
+ };
279
+ // Only the verdict's label and reason codes reach disk — never the tool input.
280
+ const reuse = isResume
281
+ ? null
282
+ : shadowReuseVerdict({
283
+ host_resume: deps.host_resume ?? probeHostCapabilities(platform).worker_resume,
284
+ workers: deps.workers ?? null,
285
+ context: deps.context ?? null,
286
+ });
145
287
 
146
288
  const stats = openRecordStats(consumerRoot);
147
289
  // Pre-spawn there is no agent id to resolve a parent from; the deepest
@@ -167,7 +309,17 @@ export function processEnvelope(envelope: JsonValue, consumerRoot: string): numb
167
309
  // one the ledger already fixed for itself.
168
310
  ledger_present: stats.ledger_present,
169
311
  stale_open_excluded: stats.stale_excluded,
170
- candidates: verdicts.map((v) => ({ label: v.label, would_deny: v.would_deny, on: v.on })),
312
+ // A message to a running worker starts no run, so it is not set
313
+ // against a threshold that counts runs.
314
+ ...(sendKind === 'message_running'
315
+ ? {}
316
+ : { candidates: verdicts.map((v) => ({ label: v.label, would_deny: v.would_deny, on: v.on })) }),
317
+ dispatch_kind: sendKind ?? 'spawn',
318
+ ...spawnFacts,
319
+ resume_admission: platform !== null && RESUME_ADMISSION_OBSERVED.has(platform) ? 'counted' : 'unobserved',
320
+ ...(reuse === null ? {} : { reuse }),
321
+ // A recent host-sourced rate marker: a new spawn would have waited.
322
+ ...(isResume ? {} : { rate_window: recentHostMarker(consumerRoot) ? 'would_wait' : 'clear' }),
171
323
  // Shadow posture is a property of this file, not of a setting —
172
324
  // there is no code path here that can deny.
173
325
  posture: 'shadow',
@@ -280,7 +280,7 @@ export function atomic_write_text(target: string, text: string): void {
280
280
  *
281
281
  * PLATFORM AND VERSION the guarantee is claimed on: **local filesystems on the
282
282
  * platforms this package supports** — macOS/APFS and Linux/ext4|btrfs|xfs, on
283
- * Node >= 20.11.0 (`package.json` `engines`). Native Windows is explicitly not
283
+ * Node >= 22.6.0 (`package.json` `engines`). Native Windows is explicitly not
284
284
  * a first-class target (`docs/installation.md` § Windows names WSL2 or Git
285
285
  * Bash), so no claim is made for it. Verified locally on Darwin 24.6.0 arm64.
286
286
  *
@@ -708,7 +708,7 @@ export function session_state_file(dir: string, session_id: string): string {
708
708
  * FILESYSTEMS WITHOUT HARD LINKS fall back to the racy sequence, deliberately.
709
709
  * The peer-review round asked for this before accepting `link` as the fix, and
710
710
  * it was the one condition of the three not already met: `linkSync` is the
711
- * tree's first, `engines` only pins Node >= 20.11, and `installation.md` names
711
+ * tree's first, `engines` only pins Node >= 22.6, and `installation.md` names
712
712
  * Windows — so a share, a FUSE mount, or a restricted container can answer
713
713
  * `EPERM` / `ENOSYS` / `EXDEV` / `EOPNOTSUPP` / `EMLINK`. Throwing there would
714
714
  * be caught by the pruner's outer handler and leave the tombstone behind, which
@@ -107,6 +107,7 @@
107
107
  * undercount landed precisely in parallel fan-out, the mode this instrument
108
108
  * exists to measure.
109
109
  */
110
+ import { execFileSync } from 'node:child_process';
110
111
  import * as crypto from 'node:crypto';
111
112
  import * as fs from 'node:fs';
112
113
  import * as path from 'node:path';
@@ -500,6 +501,78 @@ export function appendLedgerLine(root: string, ts: string, line: Record<string,
500
501
  fs.appendFileSync(file, `${JSON.stringify(line)}\n`, 'utf8');
501
502
  }
502
503
 
504
+ /**
505
+ * The register's index: one file per key under `index/<YYYY-MM>/`, so a reader
506
+ * answers "did this session stop that leg" or "which ref does this name
507
+ * address" with one stat or read instead of scanning a ledger tail that heavy
508
+ * traffic can push the answer out of. Keys are digests only (`refFor` over a
509
+ * domain-separated string), so no session id, agent id or name is a file name.
510
+ */
511
+ const INDEX_SUBDIR = 'index';
512
+
513
+ export function writeIndexEntry(root: string, ts: string, key: string, value: string): void {
514
+ if (is_replay_mode()) return;
515
+ const dir = path.join(root, LEDGER_DIR, INDEX_SUBDIR, ts.slice(0, 7));
516
+ fs.mkdirSync(dir, { recursive: true });
517
+ const tmp = path.join(dir, `.${key}.${process.pid}.tmp`);
518
+ try {
519
+ fs.writeFileSync(tmp, value, 'utf8');
520
+ fs.renameSync(tmp, path.join(dir, key));
521
+ } finally {
522
+ fs.rmSync(tmp, { force: true });
523
+ }
524
+ }
525
+
526
+ /** The entry for `key` in this month or the previous one; null when neither holds it. */
527
+ export function readIndexEntry(root: string, key: string, now: Date): string | null {
528
+ const prev = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 1, 1));
529
+ for (const month of [now.toISOString().slice(0, 7), prev.toISOString().slice(0, 7)]) {
530
+ try {
531
+ return fs.readFileSync(path.join(root, LEDGER_DIR, INDEX_SUBDIR, month, key), 'utf8');
532
+ } catch {
533
+ // Not in this month.
534
+ }
535
+ }
536
+ return null;
537
+ }
538
+
539
+ /** The commit the checkout containing `dir` is on; null outside a repository or on any failure. */
540
+ export function headOf(dir: string): string | null {
541
+ try {
542
+ // An inherited GIT_DIR / GIT_WORK_TREE would override `-C`.
543
+ const env = Object.fromEntries(Object.entries(process.env).filter(([k]) => !k.startsWith('GIT_')));
544
+ return execFileSync('git', ['-C', dir, 'rev-parse', 'HEAD'], { encoding: 'utf8', timeout: 2000, stdio: ['ignore', 'pipe', 'ignore'], env }).trim() || null;
545
+ } catch {
546
+ return null;
547
+ }
548
+ }
549
+
550
+ /**
551
+ * What a reuse decision compares between a worker's stop and a later spawn,
552
+ * stamped at both so a report can reconstruct it after the fact: the commit,
553
+ * a digest of the directory, and the install epoch (the running bundle's
554
+ * mtime, which changes whenever the package is rebuilt or reinstalled).
555
+ */
556
+ export function stateStamp(cwd: unknown): { head: string | null; cwd_key: string | null; epoch: number | null } {
557
+ let epoch: number | null = null;
558
+ try {
559
+ epoch = fs.statSync(fileURLToPath(import.meta.url)).mtimeMs;
560
+ } catch {
561
+ // No file behind the module; the epoch stays unknown.
562
+ }
563
+ return typeof cwd === 'string' && cwd
564
+ ? { head: headOf(cwd), cwd_key: refFor(cwd), epoch }
565
+ : { head: null, cwd_key: null, epoch };
566
+ }
567
+
568
+ export function stopIndexKey(sessionId: string, ref: string): string {
569
+ return refFor(`subagent-stop\0${sessionId}\0${ref}`);
570
+ }
571
+
572
+ export function recordStopIndex(root: string, ts: string, sessionId: string, ref: string): void {
573
+ writeIndexEntry(root, ts, stopIndexKey(sessionId, ref), '');
574
+ }
575
+
503
576
  /**
504
577
  * Candidate wall-clock stop-loss arms — Phase 3 Step 3, shadow only.
505
578
  *
@@ -750,7 +823,14 @@ function handleStop(root: string, payload: JsonObject, nowIso: string, sessionId
750
823
  // candidate was, this says whether it was aimed at the envelope.
751
824
  envelope_field_hits: parse.field_hits,
752
825
  concurrent_open: countOpen(root),
826
+ ...stateStamp(payload['cwd']),
753
827
  });
828
+ // After the line, and on its own: a failed index write must not cost the stop record.
829
+ try {
830
+ if (sessionId !== null) recordStopIndex(root, nowIso, sessionId, ref);
831
+ } catch {
832
+ // The guard then reads this stop as unplaced, the safe reading.
833
+ }
754
834
  }
755
835
 
756
836
  /** Process an ALREADY-PARSED dispatcher envelope. Always returns EXIT_ALLOW. */
@@ -54,6 +54,15 @@
54
54
  * paragraph promised more than the code did (finding 2 of this
55
55
  * change's own completion review), and a gate whose documented
56
56
  * assurance outruns its implementation is quoted as written.
57
+ *
58
+ * SUPERSEDED WHERE A RECORD EXISTS. On a host whose `post_tool_use`
59
+ * recorder is live, the transcript reading above is not consulted at all: a manifest counts
60
+ * only when its current bytes hash to the digest the hook recorded as
61
+ * a standalone render of that file finished (`_lib/asset_render_record.ts`).
62
+ * No write-route pattern list stands in for that observation, so a
63
+ * manifest written by ANY other route discharges nothing. The paragraph
64
+ * above remains the rule only where no record exists, and the refusal
65
+ * says so.
57
66
  * (iv) A deleted `.svg` opens no obligation — it has no current digest, so
58
67
  * there is nothing a render could be bound to.
59
68
  *
@@ -74,6 +83,14 @@ import * as fs from 'node:fs';
74
83
  import * as path from 'node:path';
75
84
 
76
85
  import { isAssetRenderCommand } from '../_lib/verification_command.js';
86
+ import {
87
+ RENDER_REL,
88
+ hasInstrumentGap,
89
+ isPureRender,
90
+ readAssetRenderRecords,
91
+ recordedManifest,
92
+ type AssetRenderRecord,
93
+ } from '../_lib/asset_render_record.js';
77
94
  import type { ToolCall } from '../_lib/turn_end_transcript.js';
78
95
 
79
96
  /**
@@ -83,7 +100,7 @@ import type { ToolCall } from '../_lib/turn_end_transcript.js';
83
100
  * Two copies of a command-shape regex is how the two detectors come to
84
101
  * disagree about what a render is.
85
102
  */
86
- export { isAssetRenderCommand };
103
+ export { isAssetRenderCommand, isPureRender, RENDER_REL };
87
104
 
88
105
  /**
89
106
  * Tools that WRITE. One copy, here rather than imported from the gate: the
@@ -91,9 +108,6 @@ export { isAssetRenderCommand };
91
108
  */
92
109
  const EDIT_TOOLS = new Set(['Edit', 'Write', 'MultiEdit', 'NotebookEdit']);
93
110
 
94
- /** Where `ui:render` writes. One copy of the path, shared with the CLI by value. */
95
- export const RENDER_REL = path.join('agents', 'runtime', 'state', 'render');
96
-
97
111
  /**
98
112
  * Paths whose `.svg` files are planted on purpose. Precision (ii).
99
113
  *
@@ -255,6 +269,44 @@ export interface SvgObligationInputs {
255
269
  * none of them discharges anything (16.5.0 release review).
256
270
  */
257
271
  renderDirTampered?: boolean;
272
+ /**
273
+ * The renders the `post_tool_use` recorder saw finish this turn, or
274
+ * `null` where no recorder is live. An array — even an empty one — is the
275
+ * ONLY evidence read: the transcript fields above are then ignored.
276
+ */
277
+ recorded?: readonly AssetRenderRecord[] | null;
278
+ }
279
+
280
+ /** Appended to every refusal on a host with no live recorder. Pinned verbatim. */
281
+ export const TRANSCRIPT_FALLBACK_REASON =
282
+ 'transcript fallback: no readable `post_tool_use` render record exists for this turn — no live ' +
283
+ 'recorder on this host (`agent-config hooks:status`), or a render whose exit status the host did not ' +
284
+ 'report — so the manifest was read under the transcript rule — ' +
285
+ 'an omission check, not an attestation';
286
+
287
+ /** The record-path verdict for one file. */
288
+ function recordVerdict(
289
+ root: string,
290
+ abs: string,
291
+ digest: string,
292
+ records: readonly AssetRenderRecord[],
293
+ ): DischargeKind | string {
294
+ let changed = false;
295
+ for (const r of records) {
296
+ if (path.resolve(root, r.file) !== abs || r.file_digest !== digest) continue;
297
+ const read = recordedManifest(root, r);
298
+ if (read === null) continue;
299
+ if ('changed' in read) {
300
+ changed = true;
301
+ continue;
302
+ }
303
+ const kind = dischargeFor([read.manifest as AssetManifestish], digest);
304
+ if (kind !== null) return kind;
305
+ }
306
+ return changed
307
+ ? 'the manifest the observed render left has changed since, so it is no longer the record of that render'
308
+ : 'no successful `ui:render --profile asset` of these bytes was observed by the hook this turn with a ' +
309
+ 'manifest that discharges them — a manifest written by any other route discharges nothing';
258
310
  }
259
311
 
260
312
  /**
@@ -294,6 +346,13 @@ export function readSvgObligations(root: string, inputs: SvgObligationInputs): S
294
346
  }
295
347
  const digest = crypto.createHash('sha256').update(bytes).digest('hex');
296
348
 
349
+ if (Array.isArray(inputs.recorded)) {
350
+ const verdict = recordVerdict(root, path.resolve(root, abs), digest, inputs.recorded);
351
+ if (verdict === 'verified' || verdict === 'static-only') discharged.push({ file: relPath, kind: verdict });
352
+ else open.push({ file: relPath, reason: verdict });
353
+ continue;
354
+ }
355
+
297
356
  // (iii) The manifests are only consulted once a render was observed.
298
357
  // Reading them first and then discarding the verdict would make the
299
358
  // ordering look like a performance detail rather than the rule.
@@ -365,19 +424,6 @@ export function renderNames(commands: readonly string[], relPath: string): boole
365
424
  });
366
425
  }
367
426
 
368
- /**
369
- * A render call standing alone — no second command chained to it and no
370
- * redirect — so its text cannot also carry a write. A leading `cd <dir> &&`,
371
- * piping its output to a read-only filter, and folding stderr into stdout are
372
- * allowed.
373
- */
374
- export function isPureRender(command: string): boolean {
375
- if (!isAssetRenderCommand(command)) return false;
376
- const [head, ...pipes] = command.replace(/^\s*cd\s+[^;&|<>`$\n]+&&\s*/, '').replace(/\s\d?>&\d\b/g, ' ').replace(/\s2>\s*\/dev\/null\b/g, ' ').split('|');
377
- if (/[;&<>`\n]|\$\(/.test(head ?? '')) return false;
378
- return pipes.every((p) => /^\s*(tail|head|grep|jq|cat|less|wc)\b[^;&<>`|]*$/.test(p) && !/\$\(/.test(p));
379
- }
380
-
381
427
  /**
382
428
  * Does a shell command (other than a pure render) write somewhere a render
383
429
  * manifest could live? Read by shape: a write operator, together with the
@@ -430,7 +476,12 @@ function escapeRe(s: string): string {
430
476
  export function openSvgObligation(
431
477
  workspaceRoot: string,
432
478
  toolCalls: readonly ToolCall[],
479
+ recordedRaw: readonly unknown[] | null = null,
433
480
  ): { detector: 'verification'; evidence: string; reason: string; mode: 'transcript' } | null {
481
+ // A render the host reported no exit for is an instrument gap, never a
482
+ // missing render: refusing on it would refuse honest work for the host's
483
+ // silence, so the transcript rule answers instead.
484
+ const recordedRenders = recordedRaw === null || hasInstrumentGap(recordedRaw) ? null : recordedRaw;
434
485
  // Precision (iii). The render has to come AFTER the edit it describes, on
435
486
  // both evidence paths — `toolCalls` is assembled for both, so one rule
436
487
  // covers them rather than two that can disagree.
@@ -470,7 +521,11 @@ export function openSvgObligation(
470
521
 
471
522
  let reading: SvgObligationReading;
472
523
  try {
473
- reading = readSvgObligations(workspaceRoot, { edits, renderDirTampered });
524
+ reading = readSvgObligations(workspaceRoot, {
525
+ edits,
526
+ renderDirTampered,
527
+ recorded: recordedRenders === null ? null : readAssetRenderRecords(recordedRenders),
528
+ });
474
529
  } catch {
475
530
  // A gate that crashed on its own instrument is a new failure mode on a
476
531
  // path meant to be inert. An unreadable render directory is no finding.
@@ -492,6 +547,7 @@ export function openSvgObligation(
492
547
  reason:
493
548
  `this turn edited an .svg and no render describes it${more} — ${first.reason}. ` +
494
549
  'A bare `ui:render --profile asset` that rendered nothing, and a test or lint run over other ' +
495
- 'files, both discharge nothing: the gate reads the render, never the call.',
550
+ 'files, both discharge nothing: the gate reads the render, never the call.' +
551
+ (recordedRenders === null ? ` (${TRANSCRIPT_FALLBACK_REASON})` : ''),
496
552
  };
497
553
  }
@@ -47,9 +47,17 @@
47
47
  * identical while the cost came back. The `RESULT_KEYS` literals below are the
48
48
  * key NAMES this concern looks under, not a read of the body.
49
49
  *
50
- * TWO COUNTS, ONE OF THEM REDUNDANT TODAY. `raw_bytes` is what
51
- * the host handed the dispatcher; `delivered_bytes` is what reached the
52
- * model. Today they are EQUAL BY CONSTRUCTION, and the construction is
50
+ * TWO COUNTS, ONE OF THEM REDUNDANT TODAY. Both count the host's HOOK
51
+ * ENVELOPE — the serialised `tool_response` the host hands a post_tool_use
52
+ * hook — and NOT what reached the model. The two differ by tool: for Edit and
53
+ * Write the hook envelope carries the whole original file while the model
54
+ * receives a short confirmation, so for those two tools the envelope is many
55
+ * times what the model saw, and for a text Read it is about the same. The
56
+ * payload the model received is a separate metric,
57
+ * `tool-result-payload-bytes`, read from transcripts. `raw_bytes` is
58
+ * the hook envelope the host handed the dispatcher; `delivered_bytes` is the
59
+ * hook envelope after any rewrite a concern could apply on its way back.
60
+ * Today they are EQUAL BY CONSTRUCTION, and the construction is
53
61
  * checkable: nothing under `src/` or `docs/` emits the host's result-rewrite
54
62
  * field, so no concern can rewrite a tool result on its way past. That
55
63
  * absence is a grep, and the grep lives in this concern's test rather than
@@ -196,10 +204,11 @@ function censusFile(consumerRoot: string): string {
196
204
  export interface CensusLine {
197
205
  ts: string;
198
206
  tool: string | null;
199
- /** UTF-8 bytes the host handed the dispatcher. `null` ⇒ unmeasurable. */
207
+ /** UTF-8 bytes of the hook envelope the host handed the dispatcher. `null` ⇒ unmeasurable. */
200
208
  raw_bytes: number | null;
201
209
  /**
202
- * UTF-8 bytes that reached the model.
210
+ * UTF-8 bytes of the hook envelope after any rewrite — NOT what reached
211
+ * the model (see the header; that figure is `tool-result-payload-bytes`).
203
212
  *
204
213
  * Equal to {@link CensusLine.raw_bytes} by construction today — nothing in
205
214
  * this tree rewrites a tool result. It is recorded anyway so that a later
@@ -1282,7 +1282,7 @@ function runDetectors(inputs: DetectorInputs): Finding[] {
1282
1282
  // on a completion CLAIM, and a turn waiting on a subagent has not
1283
1283
  // finished — so its closing is not the claim F is about. Same slot,
1284
1284
  // opposite trigger, opposite treatment of `dispatchOpen`.
1285
- openSvgObligation(workspaceRoot, toolCalls),
1285
+ openSvgObligation(workspaceRoot, toolCalls, runState?.asset_renders ?? null),
1286
1286
  dispatchOpen ? null : detectUntestedChange(lastAssistant, toolCalls, runState),
1287
1287
  ]) {
1288
1288
  if (f) findings.push(f);
@@ -46,7 +46,7 @@ import * as path from 'node:path';
46
46
  import { fileURLToPath, pathToFileURL } from 'node:url';
47
47
 
48
48
  import { hookSectionEnabled } from '../_lib/hook_settings.js';
49
- import { isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
49
+ import { isHandoverShape, isUiPath, isUiTreePath } from '../_lib/ui_surface.js';
50
50
  import { readHookStdin } from './hook_stdin.js';
51
51
  import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
52
52
 
@@ -164,17 +164,7 @@ export function isUiWrite(event: ToolEvent): boolean {
164
164
  * read-before-write, and `report_consultation_rate`'s output says so.
165
165
  */
166
166
  export function isArtifactRead(event: ToolEvent): boolean {
167
- if (event.isWrite || !event.file) return false;
168
- const normalized = event.file.replace(/\\/g, '/').toLowerCase();
169
- return (
170
- normalized.endsWith('design.html') ||
171
- // The Claude Design canvas artboard. NOT covered by the line above:
172
- // `ToDo.dc.html` does not end in `design.html`, which is exactly why
173
- // the rule needed a second file pattern (2.5) and why the drift guard
174
- // below reds when one is added here without the other.
175
- normalized.endsWith('.dc.html') ||
176
- normalized.includes('.claude/design-system/')
177
- );
167
+ return !event.isWrite && isHandoverShape(event.file);
178
168
  }
179
169
 
180
170
  export interface SessionState {
@@ -46,6 +46,17 @@ import {
46
46
  type RefusalStats,
47
47
  } from "./_lib/turn_end_refusals.js";
48
48
  import { ledgerWritable, readDelivered } from "./_lib/obligations.js";
49
+ import {
50
+ defaultFloorPostureDeps,
51
+ readFloorPosture,
52
+ renderFloorPosture,
53
+ type FloorPosture,
54
+ } from "./_lib/floor_posture.js";
55
+ import {
56
+ readCredentialDenyTier,
57
+ renderCredentialDenyTier,
58
+ type CredentialDenyReport,
59
+ } from "./_lib/credential_deny_rows.js";
49
60
 
50
61
  // src/scripts/hooks_doctor.ts → parents[2] (../../..) is the repo root,
51
62
  // mirroring the Python `Path(__file__).resolve().parents[2]`.
@@ -205,6 +216,18 @@ export interface DoctorPayload {
205
216
  obligation_ledger: ObligationLedgerStats;
206
217
  /** The machine's install stamp, for reading the version split below it. */
207
218
  install_boundary: InstallBoundary;
219
+ /**
220
+ * What carries the destructive-action floor here: whether the hook runtime
221
+ * resolves at all, the host sandbox keys, and any neighbour PreToolUse hook.
222
+ * Report only — it never changes the exit code and never writes a setting.
223
+ */
224
+ floor_posture: FloorPosture;
225
+ /**
226
+ * The host's own deny rows for the credential classes the read guard refuses:
227
+ * which are in force, and which the user would paste. Offered, never written:
228
+ * a written row would break the published no-host-setting-write commitment.
229
+ */
230
+ credential_deny: CredentialDenyReport;
208
231
  }
209
232
 
210
233
  /** What the doctor can say about the ledger without interpreting a single row. */
@@ -316,6 +339,8 @@ export function collect(
316
339
  turn_end_refusals,
317
340
  obligation_ledger: collectLedgerStats(project_root),
318
341
  install_boundary: readInstallBoundary(),
342
+ floor_posture: readFloorPosture(defaultFloorPostureDeps(project_root)),
343
+ credential_deny: readCredentialDenyTier(defaultFloorPostureDeps(project_root)),
319
344
  };
320
345
  }
321
346
 
@@ -500,6 +525,12 @@ export function _render_table(payload: DoctorPayload): string {
500
525
  lines.push(..._render_refusals(payload));
501
526
  lines.push("");
502
527
  lines.push(..._render_ledger(payload));
528
+ lines.push("");
529
+ lines.push("Floor posture");
530
+ lines.push("-".repeat(60));
531
+ lines.push(...renderFloorPosture(payload.floor_posture));
532
+ lines.push("");
533
+ lines.push(...renderCredentialDenyTier(payload.credential_deny));
503
534
  // Dispatch-issues detail — last 20 grouped by concern.
504
535
  if (payload.dispatch_issues.length > 0) {
505
536
  lines.push("");