@event4u/agent-config 16.5.0 → 17.0.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 (1026) 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 +463 -498
  6. package/CONTRIBUTING.md +47 -0
  7. package/README.md +25 -25
  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 +6 -0
  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 +39 -1
  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-F3QDG2GT.js → chunk-2SFOOFJJ.js} +259 -159
  298. package/dist/cli-delegate/chunk-2Y5AMLMY.js +136 -0
  299. package/dist/cli-delegate/{chunk-OKJUIAPS.js → chunk-4E2W63DA.js} +1 -62
  300. package/dist/cli-delegate/{chunk-6SRJTYJS.js → chunk-4SHNERBL.js} +37 -16
  301. package/dist/cli-delegate/chunk-5VO3RTMV.js +208 -0
  302. package/dist/cli-delegate/chunk-6E2LDY4F.js +27 -0
  303. package/dist/cli-delegate/{chunk-XQTPXKFA.js → chunk-6ZD2QZMN.js} +8 -17
  304. package/dist/cli-delegate/{chunk-6V5FMA3P.js → chunk-7CEI2YPS.js} +1 -1
  305. package/dist/cli-delegate/{chunk-DMSZHXZS.js → chunk-7DRWULEQ.js} +80 -7
  306. package/dist/cli-delegate/chunk-7NXCZSDL.js +54 -0
  307. package/dist/cli-delegate/chunk-AX3U3UWJ.js +328 -0
  308. package/dist/cli-delegate/{chunk-WOKWX5PL.js → chunk-BKALSTBZ.js} +18 -3
  309. package/dist/cli-delegate/chunk-BMGUGSY6.js +103 -0
  310. package/dist/cli-delegate/chunk-BYV46VRM.js +3309 -0
  311. package/dist/cli-delegate/{chunk-5GPULQBE.js → chunk-CAL76ADI.js} +4215 -682
  312. package/dist/cli-delegate/chunk-DSY6LLCQ.js +127 -0
  313. package/dist/cli-delegate/chunk-E6XNBVE4.js +581 -0
  314. package/dist/cli-delegate/{chunk-ZUZKZYCN.js → chunk-ESUNQ5XR.js} +46 -10
  315. package/dist/cli-delegate/{chunk-G5VVIZRC.js → chunk-F7HLSW6P.js} +1 -1
  316. package/dist/cli-delegate/chunk-FIEEOH5C.js +133 -0
  317. package/dist/cli-delegate/chunk-FKYZOWVD.js +719 -0
  318. package/dist/cli-delegate/chunk-GOMILC3O.js +918 -0
  319. package/dist/cli-delegate/chunk-I4KJYVPB.js +69 -0
  320. package/dist/cli-delegate/{chunk-JQOM7TTM.js → chunk-IDAOTDPE.js} +1 -100
  321. package/dist/cli-delegate/chunk-IROAQ77A.js +137 -0
  322. package/dist/cli-delegate/chunk-J2SJZICO.js +698 -0
  323. package/dist/cli-delegate/{chunk-6YQC2HLF.js → chunk-JHMMWNJ2.js} +54 -40
  324. package/dist/cli-delegate/{chunk-WQWXGIWB.js → chunk-M6CRG5O6.js} +165 -15
  325. package/dist/cli-delegate/{chunk-PHD7OOLE.js → chunk-MQ2UDEGV.js} +14 -3
  326. package/dist/cli-delegate/chunk-NTM7G2V4.js +220 -0
  327. package/dist/cli-delegate/chunk-PV7S5DPJ.js +175 -0
  328. package/dist/cli-delegate/{chunk-F7DQWYR5.js → chunk-RAXQOETZ.js} +6 -2
  329. package/dist/cli-delegate/{chunk-T7XSJSUQ.js → chunk-SIOMDAKL.js} +980 -784
  330. package/dist/cli-delegate/{chunk-KR6EM23A.js → chunk-TULVDQ4L.js} +3 -48
  331. package/dist/cli-delegate/chunk-UUYEKXKR.js +20 -0
  332. package/dist/cli-delegate/{chunk-7XGD2OEU.js → chunk-UXWHY6CQ.js} +2 -1
  333. package/dist/cli-delegate/{chunk-PWX7CKMD.js → chunk-VC3ECUEK.js} +1 -1
  334. package/dist/cli-delegate/{chunk-KXXWJTDO.js → chunk-WMNYVIYX.js} +1 -1
  335. package/dist/cli-delegate/chunk-XCY5KKUC.js +181 -0
  336. package/dist/cli-delegate/{chunk-H76PHZBI.js → chunk-XLY5G3CM.js} +14 -19
  337. package/dist/cli-delegate/cmd_adr_effective.js +41 -2
  338. package/dist/cli-delegate/cmd_analyze_session.js +7 -7
  339. package/dist/cli-delegate/cmd_brand_status.js +1287 -10
  340. package/dist/cli-delegate/cmd_ci_settle.js +330 -0
  341. package/dist/cli-delegate/cmd_conformance.js +483 -817
  342. package/dist/cli-delegate/cmd_doctor.js +26 -16
  343. package/dist/cli-delegate/cmd_doctor_neighbours.js +10 -7
  344. package/dist/cli-delegate/cmd_explain.js +9 -24
  345. package/dist/cli-delegate/cmd_export.js +14 -11
  346. package/dist/cli-delegate/cmd_fleet.js +5 -3
  347. package/dist/cli-delegate/cmd_git_convention.js +8 -4
  348. package/dist/cli-delegate/cmd_handoff.js +79 -242
  349. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  350. package/dist/cli-delegate/cmd_memory_get.js +4 -2
  351. package/dist/cli-delegate/cmd_migrate.js +2 -2
  352. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  353. package/dist/cli-delegate/cmd_preflight.js +7 -5
  354. package/dist/cli-delegate/cmd_prune.js +16 -13
  355. package/dist/cli-delegate/cmd_route_audit.js +11 -8
  356. package/dist/cli-delegate/cmd_route_explain.js +649 -16
  357. package/dist/cli-delegate/cmd_session_recycle.js +15 -6
  358. package/dist/cli-delegate/cmd_settings_check.js +2 -2
  359. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  360. package/dist/cli-delegate/cmd_settings_migrate.js +14 -11
  361. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  362. package/dist/cli-delegate/cmd_sync.js +16 -13
  363. package/dist/cli-delegate/cmd_uninstall.js +185 -31
  364. package/dist/cli-delegate/cmd_update.js +67 -3
  365. package/dist/cli-delegate/cmd_upgrade.js +38 -7
  366. package/dist/cli-delegate/cmd_validate.js +16 -13
  367. package/dist/cli-delegate/cmd_versions.js +1 -1
  368. package/dist/cli-delegate/dashboard_mode.js +1 -1
  369. package/dist/cli-delegate/gate_execute.js +4 -3
  370. package/dist/cli-delegate/roadmap_age.js +22 -0
  371. package/dist/cli-delegate/roadmap_gates.js +4 -3
  372. package/dist/cli-delegate/update_roadmap_progress.js +3 -2
  373. package/dist/cli-delegate/upgrade_unattended-VVL6JLSX.js +541 -0
  374. package/dist/discovery/deprecation-report.md +1 -1
  375. package/dist/discovery/discovery-manifest.json +373 -190
  376. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  377. package/dist/discovery/discovery-manifest.summary.md +5 -5
  378. package/dist/discovery/dormancy-report.md +1 -1
  379. package/dist/discovery/orphan-report.md +1 -1
  380. package/dist/discovery/packs.json +21 -16
  381. package/dist/discovery/trust-report.md +3 -3
  382. package/dist/discovery/workspaces.json +16 -11
  383. package/dist/hooks/chat_history.chunk.cjs +6852 -0
  384. package/dist/hooks/chat_history.chunk.cjs.sha256 +1 -0
  385. package/dist/hooks/dispatch.js +17506 -18692
  386. package/dist/hooks/dispatch.sha256 +1 -1
  387. package/dist/hooks/egress_engine.chunk.cjs +915 -0
  388. package/dist/hooks/egress_engine.chunk.cjs.sha256 +1 -0
  389. package/dist/hooks/svg_rules.chunk.cjs +281 -49
  390. package/dist/hooks/svg_rules.chunk.cjs.sha256 +1 -1
  391. package/dist/install/conflict.js +36 -6
  392. package/dist/install/conflictTracker.js +81 -7
  393. package/dist/install/detect.js +3 -3
  394. package/dist/install/hostPermissionsAdapter.js +106 -0
  395. package/dist/install/install.mjs +3117 -1949
  396. package/dist/install/installThinLayer.js +1 -1
  397. package/dist/install/manifestFiles.js +21 -0
  398. package/dist/install/noGoDenyRows.js +300 -0
  399. package/dist/install/noGoRules.js +368 -0
  400. package/dist/install/ownershipLedger.js +133 -0
  401. package/dist/install/plan.js +1 -1
  402. package/dist/install/preflight.js +39 -8
  403. package/dist/install/preserve.js +74 -12
  404. package/dist/install/recordedOwnership.js +88 -5
  405. package/dist/install/rule_scope.js +20 -3
  406. package/dist/install/stagedRuntime.js +455 -0
  407. package/dist/install/toolsArg.js +19 -0
  408. package/dist/install/userPin.js +47 -0
  409. package/dist/install/wizard-plan.js +26 -4
  410. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  411. package/dist/mcp/mcp-cloudflare-catalogue.json +3 -2
  412. package/dist/mcp/registry-manifest.json +6 -5
  413. package/dist/mcp/server.json +3 -3
  414. package/dist/mcp/server.mjs +9831 -5546
  415. package/dist/router.json +1 -1
  416. package/dist/scripts/_lib/agent_settings.js +7 -12
  417. package/dist/scripts/_lib/asset_render_record.js +219 -0
  418. package/dist/scripts/_lib/claude_builtin_names.js +9 -4
  419. package/dist/scripts/_lib/claude_settings_hooks.js +102 -34
  420. package/dist/scripts/_lib/egress_rules.js +766 -0
  421. package/dist/scripts/_lib/environment_detector.js +24 -33
  422. package/dist/scripts/_lib/global_deploy_inventory.js +146 -9
  423. package/dist/scripts/_lib/guidelines_lane.js +10 -1
  424. package/dist/scripts/_lib/identifier_redaction.js +24 -0
  425. package/dist/scripts/_lib/installed_layer.js +17 -0
  426. package/dist/scripts/_lib/installed_layer_normalise.js +72 -0
  427. package/dist/scripts/_lib/lean_projection_mode.js +34 -152
  428. package/dist/scripts/_lib/project_tree_form.js +118 -0
  429. package/dist/scripts/_lib/scoped_projection.js +133 -3
  430. package/dist/scripts/_lib/settings_removed_keys.js +29 -0
  431. package/dist/scripts/_lib/settings_renamed_keys.js +17 -5
  432. package/dist/scripts/_lib/subagent_native_fields.js +35 -0
  433. package/dist/scripts/_lib/svg_filled_counter.js +285 -0
  434. package/dist/scripts/_lib/svg_rules.js +2 -0
  435. package/dist/scripts/_lib/ui_surface.js +19 -0
  436. package/dist/scripts/_lib/verification_command.js +364 -0
  437. package/dist/scripts/_lib/workspace_secrets.js +229 -0
  438. package/dist/scripts/ai_council/seat_policy.js +27 -0
  439. package/dist/scripts/ai_council/transport_resolver.js +9 -10
  440. package/dist/scripts/condense.js +25 -29
  441. package/dist/server/io/substituteTemplate.js +2 -2
  442. package/dist/server/io/yamlIO.js +2 -2
  443. package/dist/server/routes/install.js +5 -1
  444. package/dist/server/routes/settings.js +2 -2
  445. package/dist/server/routes/wizard.js +1 -1
  446. package/dist/server/schemas/settings.js +22 -16
  447. package/dist/server/serverInfo.js +1 -1
  448. package/dist/shared/brandTokenDocument.js +47 -0
  449. package/dist/shared/brandTokenPaths.js +43 -0
  450. package/dist/shared/settingsCarveOut.js +0 -7
  451. package/dist/shared/skillRanking.js +103 -5
  452. package/dist/shared/userMd/formAdapter.js +16 -0
  453. package/dist/shared/userMd/schema.js +17 -0
  454. package/dist/ui/assets/index-w70Ado09.js +23 -0
  455. package/dist/ui/index.html +1 -1
  456. package/docs/MIGRATION.md +89 -2
  457. package/docs/THIRD-PARTY-NOTICES.md +27 -0
  458. package/docs/contracts/settings-classes.md +27 -9
  459. package/docs/guidelines/agent-infra/api-cost-levers.md +4 -3
  460. package/docs/guidelines/agent-infra/model-recommendation.md +11 -5
  461. package/docs/guidelines/agent-infra/rule-body-migration-inventory.md +1 -1
  462. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +47 -24
  463. package/docs/guidelines/design-antipatterns.md +5 -0
  464. package/docs/guidelines/design-asset-discipline.md +17 -0
  465. package/docs/guidelines/design-fidelity-routing.md +1 -0
  466. package/docs/guidelines/php/api-design.md +10 -1
  467. package/llms.txt +12 -10
  468. package/package.json +13 -4
  469. package/src/agent-src/scripts/dashboard_mode.ts +4 -1
  470. package/src/agent-src/scripts/roadmap_age.ts +175 -0
  471. package/src/agent-src/scripts/update_roadmap_progress.ts +10 -2
  472. package/src/agent-src/templates/AGENTS.md +1 -1
  473. package/src/agent-src/templates/scripts/check_memory.ts +2 -2
  474. package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +13 -1
  475. package/src/agent-src/templates/scripts/work_engine/cli.ts +17 -0
  476. package/src/agent-src/templates/scripts/work_engine/cli_args.ts +10 -0
  477. package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +22 -13
  478. package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +18 -4
  479. package/src/agent-src/templates/scripts/work_engine/procedure/checks.ts +283 -0
  480. package/src/agent-src/templates/scripts/work_engine/procedure/run.ts +432 -0
  481. package/src/agent-src/templates/scripts/work_engine/procedure/sidecar.ts +185 -0
  482. package/src/agent-src/templates/scripts/work_engine/state.ts +3 -0
  483. package/src/config/agent-settings.template.yml +120 -57
  484. package/src/config/agents-paths.yml +13 -7
  485. package/src/config/ci-local-parity.yml +44 -0
  486. package/src/config/continuity-surface.json +51 -2
  487. package/src/config/depth-audit-samples.json +5 -0
  488. package/src/config/discovery/command-verbs.yml +1 -0
  489. package/src/config/dispatch-economy-metrics.json +1 -0
  490. package/src/config/egress-mutations/class-precedence-swapped.json +7 -0
  491. package/src/config/egress-mutations/credential-token-restores.json +7 -0
  492. package/src/config/egress-mutations/iban-checksum-disabled.json +7 -0
  493. package/src/config/egress-mutations/raw-value-in-the-count-record.json +7 -0
  494. package/src/config/evaluator-budgets.json +4 -4
  495. package/src/config/gate-coverage.yml +149 -3
  496. package/src/config/gate-reachability-exemptions.json +3 -5
  497. package/src/config/gate-violation-baselines.json +26 -22
  498. package/src/config/gitignore-block.txt +6 -3
  499. package/src/config/hook-bundle-budget.json +34 -3
  500. package/src/config/hook-carrier-probes.json +30 -0
  501. package/src/config/hook-latency-budget.json +4 -2
  502. package/src/config/host-injection-effect.json +8 -1
  503. package/src/config/host-skill-frontmatter-keys.json +56 -0
  504. package/src/config/layer-form-brakes.json +4 -0
  505. package/src/config/layer-form-comparison-corpus.json +42 -0
  506. package/src/config/loop-surfaces.yaml +28 -47
  507. package/src/config/memory-twin-verdicts.yml +9 -1
  508. package/src/config/metric-registry.yml +40 -3
  509. package/src/config/pack-size-budget.json +15 -0
  510. package/src/config/procedure-core-budget.json +21 -0
  511. package/src/config/profiles/minimal.ini +1 -1
  512. package/src/config/project-tree-form.json +24 -0
  513. package/src/config/reach-channels.yml +3 -3
  514. package/src/config/reach-prescriptions-intake.yml +1 -1
  515. package/src/config/roadmap-step-size-baseline.json +118 -0
  516. package/src/config/routing-coverage-seed.json +93 -2
  517. package/src/config/skill-body-budget.json +686 -0
  518. package/src/config/skill-fork-pilot.json +17 -0
  519. package/src/config/skill-lifecycle-probes-codex.json +57 -0
  520. package/src/config/skill-lifecycle-probes.json +57 -0
  521. package/src/config/skill-output-shape.json +316 -0
  522. package/src/config/step-depth-table.json +58 -0
  523. package/src/config/turnaround-budget.json +90 -0
  524. package/src/install/conflict.ts +38 -6
  525. package/src/install/conflictTracker.ts +126 -8
  526. package/src/install/detect.ts +3 -3
  527. package/src/install/hostPermissionsAdapter.ts +136 -0
  528. package/src/install/installThinLayer.ts +6 -1
  529. package/src/install/manifestFiles.ts +24 -0
  530. package/src/install/noGoDenyRows.ts +368 -0
  531. package/src/install/noGoRules.ts +438 -0
  532. package/src/install/ownershipLedger.ts +180 -0
  533. package/src/install/plan.ts +1 -1
  534. package/src/install/preflight.ts +42 -10
  535. package/src/install/preserve.ts +94 -12
  536. package/src/install/recordedOwnership.ts +121 -3
  537. package/src/install/rule_scope.ts +20 -3
  538. package/src/install/stagedRuntime.ts +528 -0
  539. package/src/install/toolsArg.ts +16 -0
  540. package/src/install/types.ts +23 -2
  541. package/src/install/userPin.ts +54 -0
  542. package/src/install/wizard-plan.ts +25 -4
  543. package/src/scripts/_cli/_doctor_emit.ts +24 -0
  544. package/src/scripts/_cli/cmd_brand_status.ts +223 -12
  545. package/src/scripts/_cli/cmd_ci_settle.ts +32 -0
  546. package/src/scripts/_cli/cmd_doctor.ts +23 -44
  547. package/src/scripts/_cli/cmd_route_explain.ts +176 -2
  548. package/src/scripts/_cli/cmd_uninstall.ts +270 -26
  549. package/src/scripts/_cli/cmd_update.ts +34 -1
  550. package/src/scripts/_cli/cmd_upgrade.ts +38 -2
  551. package/src/scripts/_cli/detection_report.ts +7 -0
  552. package/src/scripts/_cli/doctor_execution.ts +1 -2
  553. package/src/scripts/_cli/doctor_install_mode.ts +39 -0
  554. package/src/scripts/_cli/doctor_network_posture.ts +3 -3
  555. package/src/scripts/_cli/doctor_ownership_ledger.ts +126 -0
  556. package/src/scripts/_cli/doctor_update_verdict.ts +104 -0
  557. package/src/scripts/_cli/explain_last/scrubber.ts +9 -21
  558. package/src/scripts/_cli/upgrade_unattended.ts +548 -0
  559. package/src/scripts/_dispatch.bash +42 -9
  560. package/src/scripts/_lib/activation_ladder.ts +1 -1
  561. package/src/scripts/_lib/advisory_inventory.ts +405 -0
  562. package/src/scripts/_lib/advisory_notice.ts +270 -0
  563. package/src/scripts/_lib/advisory_sources.ts +752 -0
  564. package/src/scripts/_lib/advisory_verdicts.ts +363 -0
  565. package/src/scripts/_lib/agent_artifact_location.ts +177 -0
  566. package/src/scripts/_lib/agent_settings.ts +7 -12
  567. package/src/scripts/_lib/arrival_record.ts +217 -0
  568. package/src/scripts/_lib/asset_render_record.ts +247 -0
  569. package/src/scripts/_lib/billing_grant.ts +4 -2
  570. package/src/scripts/_lib/brand_voice_slot.ts +258 -0
  571. package/src/scripts/_lib/canary_status.ts +24 -0
  572. package/src/scripts/_lib/cc_transcript.ts +276 -0
  573. package/src/scripts/_lib/changelog_eras.ts +83 -0
  574. package/src/scripts/_lib/claim_phrases.ts +71 -0
  575. package/src/scripts/_lib/classify_update.ts +171 -0
  576. package/src/scripts/_lib/claude_builtin_names.ts +9 -4
  577. package/src/scripts/_lib/claude_hook_scope.ts +195 -0
  578. package/src/scripts/_lib/claude_settings_hooks.ts +118 -34
  579. package/src/scripts/_lib/codex_resident_set.ts +460 -0
  580. package/src/scripts/_lib/codex_skill_finder.ts +225 -0
  581. package/src/scripts/_lib/confusables.ts +19 -0
  582. package/src/scripts/_lib/consumer_impact.ts +199 -0
  583. package/src/scripts/_lib/content_class.ts +127 -0
  584. package/src/scripts/_lib/counted_probe.ts +68 -1
  585. package/src/scripts/_lib/credential_deny_rows.ts +151 -0
  586. package/src/scripts/_lib/credential_files.ts +367 -0
  587. package/src/scripts/_lib/delivery_arm_experiment.ts +2 -2
  588. package/src/scripts/_lib/depth_flip.ts +141 -0
  589. package/src/scripts/_lib/design_lock.ts +117 -0
  590. package/src/scripts/_lib/design_sync_ledger.ts +142 -0
  591. package/src/scripts/_lib/design_sync_plan.ts +177 -0
  592. package/src/scripts/_lib/design_sync_reconcile.ts +159 -0
  593. package/src/scripts/_lib/design_sync_verify.ts +99 -0
  594. package/src/scripts/_lib/design_system_claude_design.ts +323 -0
  595. package/src/scripts/_lib/design_system_import.ts +84 -6
  596. package/src/scripts/_lib/dispatch_import_closure.ts +42 -11
  597. package/src/scripts/_lib/egress_credential_env.ts +35 -0
  598. package/src/scripts/_lib/egress_engine.ts +22 -0
  599. package/src/scripts/_lib/egress_known_values.ts +223 -0
  600. package/src/scripts/_lib/egress_normalize.ts +67 -0
  601. package/src/scripts/_lib/egress_prefixes.ts +42 -0
  602. package/src/scripts/_lib/egress_rules.ts +896 -0
  603. package/src/scripts/_lib/egress_rules_linearity.ts +56 -0
  604. package/src/scripts/_lib/egress_sender_scan.ts +290 -0
  605. package/src/scripts/_lib/egress_session_table.ts +510 -0
  606. package/src/scripts/_lib/egress_text.ts +63 -0
  607. package/src/scripts/_lib/egress_token.ts +252 -0
  608. package/src/scripts/_lib/empty_cycles.ts +1 -1
  609. package/src/scripts/_lib/environment_detector.ts +45 -30
  610. package/src/scripts/_lib/exemption_shape.ts +75 -1
  611. package/src/scripts/_lib/floor_posture.ts +185 -0
  612. package/src/scripts/_lib/forge_protection.ts +140 -2
  613. package/src/scripts/_lib/global_deploy_inventory.ts +159 -6
  614. package/src/scripts/_lib/guidelines_lane.ts +12 -1
  615. package/src/scripts/_lib/hand_kinds.ts +65 -0
  616. package/src/scripts/_lib/headless_invocation.ts +3 -3
  617. package/src/scripts/_lib/host_capability.ts +34 -2
  618. package/src/scripts/_lib/host_env_write.ts +39 -18
  619. package/src/scripts/_lib/host_listing_model.ts +14 -7
  620. package/src/scripts/_lib/identifier_redaction.ts +26 -0
  621. package/src/scripts/_lib/impact_bump.ts +70 -0
  622. package/src/scripts/_lib/install_reach_checks.ts +53 -1
  623. package/src/scripts/_lib/installed_layer.ts +31 -0
  624. package/src/scripts/_lib/installed_layer_normalise.ts +75 -0
  625. package/src/scripts/_lib/instructions_loaded_classify.ts +75 -0
  626. package/src/scripts/_lib/instructions_loaded_event.ts +53 -0
  627. package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
  628. package/src/scripts/_lib/layer_form_corpus.ts +165 -0
  629. package/src/scripts/_lib/layer_form_decision.ts +248 -0
  630. package/src/scripts/_lib/layer_form_evidence.ts +112 -0
  631. package/src/scripts/_lib/lean_projection_mode.ts +32 -161
  632. package/src/scripts/_lib/llm_proposer_transport.ts +1 -0
  633. package/src/scripts/_lib/loop_guards.ts +8 -120
  634. package/src/scripts/_lib/major_surface.ts +207 -0
  635. package/src/scripts/_lib/mcp_bridge.ts +30 -69
  636. package/src/scripts/_lib/merge_clearance_record.ts +384 -0
  637. package/src/scripts/_lib/neighbour_census.ts +18 -1
  638. package/src/scripts/_lib/orchestration_record.ts +61 -0
  639. package/src/scripts/_lib/outcome_vocabularies.ts +15 -23
  640. package/src/scripts/_lib/pin_advice.ts +49 -0
  641. package/src/scripts/_lib/platform_anchor.ts +222 -0
  642. package/src/scripts/_lib/procedure_checks.ts +5 -0
  643. package/src/scripts/_lib/project_tree_form.ts +134 -0
  644. package/src/scripts/_lib/projection_key_migration.ts +122 -0
  645. package/src/scripts/_lib/prompt_shape.ts +13 -2
  646. package/src/scripts/_lib/provenance_verify.ts +272 -0
  647. package/src/scripts/_lib/quota_parked.ts +27 -1
  648. package/src/scripts/_lib/ratification_artifact.ts +64 -1
  649. package/src/scripts/_lib/ratification_subject.ts +508 -46
  650. package/src/scripts/_lib/release_findings_ingest.ts +52 -5
  651. package/src/scripts/_lib/release_highlights.ts +72 -2
  652. package/src/scripts/_lib/release_settings_surface.ts +392 -0
  653. package/src/scripts/_lib/review_round.ts +134 -0
  654. package/src/scripts/_lib/roadmap_checkboxes.ts +1 -1
  655. package/src/scripts/_lib/roadmap_slug_lock.ts +254 -0
  656. package/src/scripts/_lib/roadmap_step_size.ts +75 -0
  657. package/src/scripts/_lib/run_checkpoint.ts +60 -3
  658. package/src/scripts/_lib/runtime_wiring_checks.ts +15 -1
  659. package/src/scripts/_lib/scope_guard.sh +64 -5
  660. package/src/scripts/_lib/scoped_projection.ts +136 -3
  661. package/src/scripts/_lib/secret_detector.ts +24 -103
  662. package/src/scripts/_lib/security_fix.ts +429 -0
  663. package/src/scripts/_lib/security_fix_context.ts +133 -0
  664. package/src/scripts/_lib/self_repair.ts +69 -39
  665. package/src/scripts/_lib/self_repair_outgoing.ts +209 -0
  666. package/src/scripts/_lib/self_repair_payload.ts +86 -0
  667. package/src/scripts/_lib/session_eol.ts +3 -0
  668. package/src/scripts/_lib/session_pr_watch.ts +207 -0
  669. package/src/scripts/_lib/session_register.ts +51 -1
  670. package/src/scripts/_lib/session_tag.ts +51 -0
  671. package/src/scripts/_lib/settings_removed_keys.ts +30 -0
  672. package/src/scripts/_lib/settings_renamed_keys.ts +19 -5
  673. package/src/scripts/_lib/skill_catalogue.ts +66 -25
  674. package/src/scripts/_lib/skill_fork_pilot.ts +121 -0
  675. package/src/scripts/_lib/skill_leases.ts +203 -0
  676. package/src/scripts/_lib/skill_listing_overrides.ts +294 -0
  677. package/src/scripts/_lib/skill_materialisation.ts +388 -0
  678. package/src/scripts/_lib/skill_materialisation_gate.ts +210 -0
  679. package/src/scripts/_lib/skill_materialisation_lock.ts +149 -0
  680. package/src/scripts/_lib/skill_materialisation_triggers.ts +96 -0
  681. package/src/scripts/_lib/skill_origin.ts +21 -1
  682. package/src/scripts/_lib/skill_reach.ts +342 -0
  683. package/src/scripts/_lib/source_shape.ts +7 -2
  684. package/src/scripts/_lib/sqlite_guard.ts +1 -1
  685. package/src/scripts/_lib/step_anatomy.ts +330 -0
  686. package/src/scripts/_lib/subagent_capsule.ts +8 -2
  687. package/src/scripts/_lib/subagent_native_fields.ts +30 -0
  688. package/src/scripts/_lib/subagent_spawn.ts +36 -0
  689. package/src/scripts/_lib/subagent_steering.ts +367 -0
  690. package/src/scripts/_lib/svg_filled_counter.ts +287 -0
  691. package/src/scripts/_lib/svg_rules.ts +2 -0
  692. package/src/scripts/_lib/test_delta.ts +89 -6
  693. package/src/scripts/_lib/tier_downshift_verdict.ts +222 -0
  694. package/src/scripts/_lib/tool_result_census.ts +62 -0
  695. package/src/scripts/_lib/trigger_routers.ts +1 -0
  696. package/src/scripts/_lib/turnaround_throughput.ts +378 -0
  697. package/src/scripts/_lib/ui_surface.ts +22 -0
  698. package/src/scripts/_lib/unattended_gates.ts +100 -0
  699. package/src/scripts/_lib/undeployed_fixes.ts +34 -0
  700. package/src/scripts/_lib/update_check.ts +143 -12
  701. package/src/scripts/_lib/update_invite.ts +116 -0
  702. package/src/scripts/_lib/update_notice.ts +259 -0
  703. package/src/scripts/_lib/verify_clause.ts +4 -2
  704. package/src/scripts/_lib/version_order.ts +146 -0
  705. package/src/scripts/_lib/worker_reuse.ts +191 -0
  706. package/src/scripts/_lib/workspace_secrets.ts +273 -0
  707. package/src/scripts/_lib/worktree_git.ts +67 -0
  708. package/src/scripts/_lib/worktree_ignored.ts +116 -0
  709. package/src/scripts/adoption_status.ts +330 -3
  710. package/src/scripts/adr_cite_check.ts +93 -0
  711. package/src/scripts/advisories.ts +803 -0
  712. package/src/scripts/ai-image/adapters/flux.sh +1 -0
  713. package/src/scripts/ai-image/adapters/gemini-image.sh +1 -0
  714. package/src/scripts/ai-image/adapters/ideogram.sh +1 -0
  715. package/src/scripts/ai-image/adapters/recraft.sh +1 -0
  716. package/src/scripts/ai-video/adapters/comfyui.sh +1 -0
  717. package/src/scripts/ai-video/adapters/fal.sh +1 -0
  718. package/src/scripts/ai-video/adapters/gemini-veo.sh +1 -0
  719. package/src/scripts/ai-video/adapters/higgsfield.sh +1 -0
  720. package/src/scripts/ai-video/adapters/kling.sh +1 -0
  721. package/src/scripts/ai-video/adapters/musetalk.sh +1 -0
  722. package/src/scripts/ai-video/adapters/openai-images.sh +1 -0
  723. package/src/scripts/ai-video/adapters/replicate.sh +1 -0
  724. package/src/scripts/ai-video/adapters/sora.sh +1 -0
  725. package/src/scripts/ai-video/adapters/syncso.sh +1 -0
  726. package/src/scripts/ai-video/stitch.sh +115 -2
  727. package/src/scripts/ai_council/airgap.ts +1 -0
  728. package/src/scripts/ai_council/api_transport.ts +27 -4
  729. package/src/scripts/ai_council/budget_guard.ts +300 -11
  730. package/src/scripts/ai_council/bundler.ts +20 -29
  731. package/src/scripts/ai_council/chairman.ts +17 -2
  732. package/src/scripts/ai_council/cli_agency_bounds.ts +158 -0
  733. package/src/scripts/ai_council/cli_launch_env.ts +54 -0
  734. package/src/scripts/ai_council/cli_least_agency_canary.ts +18 -2
  735. package/src/scripts/ai_council/clients.ts +55 -73
  736. package/src/scripts/ai_council/config.ts +16 -22
  737. package/src/scripts/ai_council/council_egress.ts +167 -0
  738. package/src/scripts/ai_council/exposure_ledger.ts +117 -0
  739. package/src/scripts/ai_council/free_hand_shadow.ts +276 -0
  740. package/src/scripts/ai_council/free_route.ts +216 -0
  741. package/src/scripts/ai_council/free_route_catalog.ts +173 -0
  742. package/src/scripts/ai_council/free_route_client.ts +95 -0
  743. package/src/scripts/ai_council/free_rung.ts +61 -0
  744. package/src/scripts/ai_council/hand_payload.ts +230 -0
  745. package/src/scripts/ai_council/hand_schemas.ts +123 -0
  746. package/src/scripts/ai_council/jury_aggregate.ts +155 -1
  747. package/src/scripts/ai_council/kind_flip.ts +221 -0
  748. package/src/scripts/ai_council/kind_flip_state.ts +19 -0
  749. package/src/scripts/ai_council/learn_low_impact_preview.ts +50 -22
  750. package/src/scripts/ai_council/modification_review.ts +98 -5
  751. package/src/scripts/ai_council/necessity.ts +7 -0
  752. package/src/scripts/ai_council/orchestrator.ts +16 -16
  753. package/src/scripts/ai_council/pricing.ts +10 -0
  754. package/src/scripts/ai_council/redact_low_impact_entry.ts +5 -2
  755. package/src/scripts/ai_council/response_render.ts +27 -4
  756. package/src/scripts/ai_council/round_reservations.ts +119 -0
  757. package/src/scripts/ai_council/route_chooser.ts +161 -0
  758. package/src/scripts/ai_council/route_liveness.ts +152 -0
  759. package/src/scripts/ai_council/route_member.ts +52 -0
  760. package/src/scripts/ai_council/seat_policy.ts +40 -0
  761. package/src/scripts/ai_council/seat_resume.ts +40 -0
  762. package/src/scripts/ai_council/shadow_dispatch.ts +13 -3
  763. package/src/scripts/ai_council/spend_gate.ts +18 -2
  764. package/src/scripts/ai_council/status_surface.ts +37 -0
  765. package/src/scripts/ai_council/transport_resolver.ts +15 -18
  766. package/src/scripts/analysis_analysts.ts +226 -0
  767. package/src/scripts/analysis_anchors.ts +140 -0
  768. package/src/scripts/analysis_and_optimize.ts +44 -0
  769. package/src/scripts/analysis_emit.ts +150 -0
  770. package/src/scripts/analysis_exchange.ts +186 -0
  771. package/src/scripts/analysis_gate.ts +158 -0
  772. package/src/scripts/analysis_inbox_final.ts +173 -0
  773. package/src/scripts/analysis_ledger.ts +119 -0
  774. package/src/scripts/analysis_pr_optimize.ts +219 -0
  775. package/src/scripts/analysis_pr_review.ts +240 -0
  776. package/src/scripts/analysis_pr_target.ts +121 -0
  777. package/src/scripts/analysis_prompts.ts +130 -0
  778. package/src/scripts/analysis_publish.ts +358 -0
  779. package/src/scripts/analysis_questions.ts +78 -0
  780. package/src/scripts/analysis_run.ts +248 -0
  781. package/src/scripts/analysis_run_record.ts +210 -0
  782. package/src/scripts/analysis_target.ts +343 -0
  783. package/src/scripts/analysis_validate.ts +161 -0
  784. package/src/scripts/anchor_eval_falsify.ts +1 -1
  785. package/src/scripts/arrival_report.ts +115 -0
  786. package/src/scripts/ask_transport.ts +284 -35
  787. package/src/scripts/backfill_model_tier.ts +4 -5
  788. package/src/scripts/before_complete_hook.ts +48 -2
  789. package/src/scripts/bench_hook_latency.ts +3 -3
  790. package/src/scripts/bench_procedure_cursor.ts +440 -0
  791. package/src/scripts/bootstrap.sh +3 -3
  792. package/src/scripts/build_exit_code_register.ts +440 -0
  793. package/src/scripts/build_proof.ts +23 -1
  794. package/src/scripts/cache_realization_report.ts +155 -14
  795. package/src/scripts/canary_liveness.ts +117 -0
  796. package/src/scripts/chat_history.ts +12 -15
  797. package/src/scripts/check_account_surface.ts +318 -0
  798. package/src/scripts/check_agent_artifact_location.ts +17 -160
  799. package/src/scripts/check_bundle_path_leakage.ts +6 -0
  800. package/src/scripts/check_ci_local_parity.ts +21 -13
  801. package/src/scripts/check_claims.ts +77 -2
  802. package/src/scripts/check_completion_review.ts +34 -1
  803. package/src/scripts/check_concern_admissions.ts +41 -5
  804. package/src/scripts/check_consumer_scope_flip.ts +1 -1
  805. package/src/scripts/check_context_paths.ts +2 -0
  806. package/src/scripts/check_council_layout.ts +9 -0
  807. package/src/scripts/check_credential_spelling.ts +267 -0
  808. package/src/scripts/check_egress_mutations.ts +239 -0
  809. package/src/scripts/check_enforcement_coverage.ts +16 -3
  810. package/src/scripts/check_estate_count.ts +16 -1
  811. package/src/scripts/check_finding_dispositions.ts +147 -0
  812. package/src/scripts/check_gate_coverage.ts +123 -21
  813. package/src/scripts/check_gate_reachability.ts +16 -2
  814. package/src/scripts/check_generator_sync.ts +46 -0
  815. package/src/scripts/check_hook_bundle_composition.ts +139 -1
  816. package/src/scripts/check_host_docs_digest.ts +142 -5
  817. package/src/scripts/check_kernel_edit_ratified.ts +301 -76
  818. package/src/scripts/check_kernel_rule_bundle.ts +14 -10
  819. package/src/scripts/check_knowledge_cards.ts +83 -3
  820. package/src/scripts/check_memory.ts +13 -3
  821. package/src/scripts/check_pack_size.ts +1 -1
  822. package/src/scripts/check_permission_deny_syntax.ts +247 -0
  823. package/src/scripts/check_platform_anchor.ts +243 -0
  824. package/src/scripts/check_proposal.ts +183 -1
  825. package/src/scripts/check_reach_channels.ts +5 -3
  826. package/src/scripts/check_references.ts +5 -2
  827. package/src/scripts/check_release_manifest_content.ts +33 -0
  828. package/src/scripts/check_release_pr_shape.ts +5 -0
  829. package/src/scripts/check_rule_invariants.ts +9 -1
  830. package/src/scripts/check_skill_body_budget.ts +343 -0
  831. package/src/scripts/check_skill_requires.ts +137 -1
  832. package/src/scripts/check_step_receipts.ts +246 -0
  833. package/src/scripts/check_structural_breaking.ts +7 -1
  834. package/src/scripts/check_suppression_hygiene.ts +8 -0
  835. package/src/scripts/check_test_weakening.ts +14 -0
  836. package/src/scripts/check_token_quality_golden.ts +5 -1
  837. package/src/scripts/check_update_banner.ts +50 -3
  838. package/src/scripts/check_verify_expectation_delta.ts +2 -1
  839. package/src/scripts/check_voice_lexicon.ts +531 -0
  840. package/src/scripts/ci_os_attribution.ts +327 -0
  841. package/src/scripts/ci_platform_scope.ts +69 -0
  842. package/src/scripts/ci_settle.ts +4 -1
  843. package/src/scripts/ci_status.ts +0 -1
  844. package/src/scripts/ci_time_to_green.ts +748 -0
  845. package/src/scripts/classify_merge_risk.ts +407 -19
  846. package/src/scripts/code_graph/sqlite_store.ts +1 -1
  847. package/src/scripts/compile_trigger_evals.ts +353 -0
  848. package/src/scripts/condense.ts +25 -31
  849. package/src/scripts/consumer_matrix.ts +61 -3
  850. package/src/scripts/council_availability_hook.ts +12 -4
  851. package/src/scripts/council_cli.ts +48 -38
  852. package/src/scripts/cross_repo_retrieve.ts +9 -72
  853. package/src/scripts/design_lock.ts +106 -0
  854. package/src/scripts/design_slop_rules.ts +30 -0
  855. package/src/scripts/design_sync.ts +264 -0
  856. package/src/scripts/design_system_import.ts +30 -13
  857. package/src/scripts/dispatch_economy_report.ts +46 -1
  858. package/src/scripts/dispatch_r2_reviewer.ts +41 -5
  859. package/src/scripts/egress_canary.ts +166 -0
  860. package/src/scripts/egress_sender_census.ts +101 -0
  861. package/src/scripts/external_sources_denylist.json +94 -12
  862. package/src/scripts/generate_catalog.ts +6 -2
  863. package/src/scripts/generate_owned_digest.ts +163 -0
  864. package/src/scripts/generate_reference_toc.ts +143 -0
  865. package/src/scripts/generate_subagent_floor.ts +11 -1
  866. package/src/scripts/handoff_context_hook.ts +34 -0
  867. package/src/scripts/hook_carrier_census.ts +263 -0
  868. package/src/scripts/hook_chunks.d.mts +12 -0
  869. package/src/scripts/hook_chunks.mjs +114 -0
  870. package/src/scripts/hook_manifest.json +1 -1
  871. package/src/scripts/hook_manifest.yaml +65 -42
  872. package/src/scripts/hooks/block_config_weakening.ts +127 -3
  873. package/src/scripts/hooks/block_credential_reads.ts +165 -0
  874. package/src/scripts/hooks/block_no_verify.ts +47 -23
  875. package/src/scripts/hooks/block_speaking_inbox_dir.ts +38 -7
  876. package/src/scripts/hooks/category_a.ts +202 -25
  877. package/src/scripts/hooks/concern_failure_policy.ts +6 -6
  878. package/src/scripts/hooks/concern_registry.ts +31 -6
  879. package/src/scripts/hooks/concern_registry_types.ts +11 -0
  880. package/src/scripts/hooks/delegation_nudge_hook.ts +105 -15
  881. package/src/scripts/hooks/design_pass_hook.ts +42 -10
  882. package/src/scripts/hooks/dispatch_hook.ts +13 -12
  883. package/src/scripts/hooks/egress_engine_loader.ts +125 -0
  884. package/src/scripts/hooks/egress_stage.ts +440 -0
  885. package/src/scripts/hooks/hook_stdin.ts +29 -4
  886. package/src/scripts/hooks/host_docs_pages.ts +194 -0
  887. package/src/scripts/hooks/host_docs_pages.yaml +75 -0
  888. package/src/scripts/hooks/host_lowering.json +1 -1
  889. package/src/scripts/hooks/host_lowering.yaml +22 -21
  890. package/src/scripts/hooks/host_rate_marker_hook.ts +73 -0
  891. package/src/scripts/hooks/instructions_observer_hook.ts +170 -0
  892. package/src/scripts/hooks/interruption_ledger_hook.ts +1 -1
  893. package/src/scripts/hooks/lazy_concern.ts +148 -0
  894. package/src/scripts/hooks/orchestration_record_hook.ts +80 -2
  895. package/src/scripts/hooks/payload_stub.ts +16 -6
  896. package/src/scripts/hooks/permission_gate.ts +7 -7
  897. package/src/scripts/hooks/push_settle_hook.ts +32 -3
  898. package/src/scripts/hooks/replay_hook.ts +43 -0
  899. package/src/scripts/hooks/reread_guard_hook.ts +87 -10
  900. package/src/scripts/hooks/rtk_wrap_hook.ts +4 -3
  901. package/src/scripts/hooks/rule_inject_hook.ts +8 -1
  902. package/src/scripts/hooks/session_eol_hook.ts +48 -1
  903. package/src/scripts/hooks/source_first_gate_hook.ts +6 -8
  904. package/src/scripts/hooks/spawn_guard_shadow_hook.ts +203 -10
  905. package/src/scripts/hooks/state_io.ts +2 -2
  906. package/src/scripts/hooks/svg_obligation.ts +75 -19
  907. package/src/scripts/hooks/tool_result_bytes_hook.ts +14 -5
  908. package/src/scripts/hooks/turn_end_gate_hook.ts +1 -1
  909. package/src/scripts/hooks/ui_route_nudge_hook.ts +2 -12
  910. package/src/scripts/hooks_doctor.ts +31 -0
  911. package/src/scripts/hooks_status.ts +58 -3
  912. package/src/scripts/inbox_source_census.ts +74 -13
  913. package/src/scripts/install +25 -3
  914. package/src/scripts/install.ts +60 -91
  915. package/src/scripts/interruption_report.ts +11 -1
  916. package/src/scripts/layer_baseline_report.ts +267 -0
  917. package/src/scripts/learning_sidecar.ts +1 -1
  918. package/src/scripts/lint_agents_layout.ts +3 -0
  919. package/src/scripts/lint_blocker_citations.ts +104 -0
  920. package/src/scripts/lint_breaking_changes_index.ts +40 -7
  921. package/src/scripts/lint_consolidation_lineage.ts +144 -16
  922. package/src/scripts/lint_consumer_internal_refs.ts +90 -42
  923. package/src/scripts/lint_context_spine_usage.ts +21 -0
  924. package/src/scripts/lint_design_antipattern_parity.ts +39 -7
  925. package/src/scripts/lint_evidence_artifacts.ts +31 -0
  926. package/src/scripts/lint_example_fences.ts +11 -2
  927. package/src/scripts/lint_ghostwriter_source.ts +42 -10
  928. package/src/scripts/lint_hook_manifest.ts +94 -0
  929. package/src/scripts/lint_marketplace_install_completeness.ts +4 -0
  930. package/src/scripts/lint_mcp_config_security.ts +9 -11
  931. package/src/scripts/lint_plan_risk_register.ts +28 -1
  932. package/src/scripts/lint_positioning.ts +4 -4
  933. package/src/scripts/lint_provenance.ts +1 -0
  934. package/src/scripts/lint_roadmap_blockers.ts +65 -4
  935. package/src/scripts/lint_roadmap_complexity.ts +98 -0
  936. package/src/scripts/lint_skill_link_reach.ts +251 -9
  937. package/src/scripts/lint_skill_procedures.ts +252 -0
  938. package/src/scripts/lint_skill_scripts_readonly.ts +12 -1
  939. package/src/scripts/lint_subagent_determinism.ts +14 -1
  940. package/src/scripts/lint_ticked_unmet_criteria.ts +300 -21
  941. package/src/scripts/mcp_registry_submit.sh +2 -2
  942. package/src/scripts/mcp_server/consumer_tool_catalog.json +4 -4
  943. package/src/scripts/mcp_server/suggest_skill.ts +89 -4
  944. package/src/scripts/mcp_server/tools.ts +2 -33
  945. package/src/scripts/measure_skill_ranker_baseline.ts +203 -5
  946. package/src/scripts/measure_turn_end_gate.ts +61 -1
  947. package/src/scripts/merge_clearance.ts +225 -0
  948. package/src/scripts/migrate_command_suggestions.ts +1 -1
  949. package/src/scripts/network_sources.ts +236 -0
  950. package/src/scripts/no_go_deny_rows.ts +225 -0
  951. package/src/scripts/orchestration_record.ts +15 -2
  952. package/src/scripts/plan_test_shards.ts +103 -0
  953. package/src/scripts/pr_url_reminder_hook.ts +10 -0
  954. package/src/scripts/print_required_checks.ts +5 -5
  955. package/src/scripts/probe_depth_shadow.ts +406 -0
  956. package/src/scripts/probe_turnaround.ts +342 -10
  957. package/src/scripts/ratification_subject.ts +176 -0
  958. package/src/scripts/rdp_gate_classify.ts +1 -0
  959. package/src/scripts/rdp_quality_eval.ts +1 -0
  960. package/src/scripts/release.ts +26 -55
  961. package/src/scripts/release_drill.ts +52 -23
  962. package/src/scripts/release_env.ts +37 -0
  963. package/src/scripts/release_publication.ts +11 -1
  964. package/src/scripts/report_consumer_gate_reach.ts +233 -0
  965. package/src/scripts/report_merge_gate_load.ts +295 -0
  966. package/src/scripts/report_project_contract.ts +123 -0
  967. package/src/scripts/report_reducible_classes.ts +342 -0
  968. package/src/scripts/report_required_checks_drift.ts +5 -3
  969. package/src/scripts/report_skill_host_census.ts +199 -0
  970. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  971. package/src/scripts/retro.ts +758 -0
  972. package/src/scripts/retro_facts.ts +575 -0
  973. package/src/scripts/retro_queue.ts +739 -0
  974. package/src/scripts/retro_session_facts.ts +218 -0
  975. package/src/scripts/retro_sweep.ts +493 -0
  976. package/src/scripts/retro_triage.ts +126 -0
  977. package/src/scripts/roadmap_context.ts +2 -2
  978. package/src/scripts/roadmap_drain_queue.ts +601 -0
  979. package/src/scripts/run_supervise.ts +24 -2
  980. package/src/scripts/schemas/agent-settings.schema.json +0 -16
  981. package/src/scripts/schemas/command.schema.json +3 -3
  982. package/src/scripts/schemas/review-findings.schema.json +8 -0
  983. package/src/scripts/schemas/skill.schema.json +7 -6
  984. package/src/scripts/schemas/subagent.schema.json +33 -2
  985. package/src/scripts/score_skill_selection.ts +5 -2
  986. package/src/scripts/second_brain_retrieval.ts +1 -0
  987. package/src/scripts/second_brain_run.ts +1 -0
  988. package/src/scripts/self_repair_cli.ts +563 -87
  989. package/src/scripts/self_review_gate.ts +59 -4
  990. package/src/scripts/session_register_hook.ts +91 -4
  991. package/src/scripts/sessions_cli.ts +100 -5
  992. package/src/scripts/skill_collision_clusters.ts +1 -1
  993. package/src/scripts/skill_tools/score_skill_relevance.ts +31 -2
  994. package/src/scripts/skill_trigger_eval.ts +4 -2
  995. package/src/scripts/source_adapters.ts +183 -0
  996. package/src/scripts/step_receipt.ts +100 -0
  997. package/src/scripts/sync_pr_branch.ts +4 -0
  998. package/src/scripts/test_council_qualification.ts +1 -1
  999. package/src/scripts/trigger_eval_grandfather.json +3 -49
  1000. package/src/scripts/trigger_eval_rotation.ts +31 -3
  1001. package/src/scripts/ui_conformance_probe.ts +405 -1
  1002. package/src/scripts/update_counts.ts +230 -11
  1003. package/src/scripts/update_invite_hook.ts +245 -0
  1004. package/src/scripts/update_notice_hook.ts +298 -0
  1005. package/src/scripts/validate_frontmatter.ts +85 -0
  1006. package/src/scripts/worker_reuse_shadow_report.ts +121 -0
  1007. package/src/scripts/worktree_cleanup_check.ts +915 -121
  1008. package/src/server/io/yamlIO.ts +2 -2
  1009. package/src/server/schemas/settings.ts +37 -23
  1010. package/src/shared/brandTokenDocument.ts +46 -0
  1011. package/src/shared/brandTokenPaths.ts +43 -0
  1012. package/src/shared/settingsCarveOut.ts +0 -8
  1013. package/src/shared/skillRanking.ts +106 -5
  1014. package/src/shared/userMd/formAdapter.ts +15 -1
  1015. package/src/shared/userMd/schema.ts +22 -0
  1016. package/src/templates/agent-user.md +4 -0
  1017. package/src/templates/agent-user.yml +4 -0
  1018. package/dist/cli-delegate/chunk-4DBG5K7M.js +0 -1123
  1019. package/dist/cli-delegate/chunk-523HCFYO.js +0 -90
  1020. package/dist/cli-delegate/chunk-AL3RZ22D.js +0 -74
  1021. package/dist/cli-delegate/chunk-KB5FZ655.js +0 -208
  1022. package/dist/cli-delegate/chunk-MDPPKQCQ.js +0 -875
  1023. package/dist/cli-delegate/chunk-OAFSJBHH.js +0 -272
  1024. package/dist/ui/assets/index-C3djEJah.js +0 -23
  1025. package/src/scripts/_lib/continuation_ladder.ts +0 -335
  1026. 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,26 @@
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
+ LEDGER_DIR,
65
+ appendLedgerLine,
66
+ openRecordStats,
67
+ readOpenRecords,
68
+ refFor,
69
+ resolveConsumerRoot,
70
+ } from './subagent_ledger_hook.js';
57
71
  import { readHookStdin } from './hook_stdin.js';
58
72
  import { EXIT_ALLOW } from './exit_codes.js';
59
73
 
@@ -67,6 +81,154 @@ function isObject(v: unknown): v is JsonObject {
67
81
  /** The two subagent-dispatch tool names this repo has observed across hosts. */
68
82
  export const DISPATCH_TOOL_NAMES: ReadonlySet<string> = new Set(['Agent', 'Task']);
69
83
 
84
+ /**
85
+ * The tool that re-tasks a finished worker — and also messages a running one,
86
+ * a teammate, or the lead. The host's concurrency cap checks new spawns only
87
+ * and admits a resume past it, so a guard that counted spawns only would
88
+ * undercount exactly the runs the host does not bound. Only a send the ledger
89
+ * can place on a finished leg is called a resume; see {@link classifySend}.
90
+ */
91
+ export const RESUME_TOOL_NAMES: ReadonlySet<string> = new Set(['SendMessage']);
92
+
93
+ /**
94
+ * `resume` — the recipient hashes to a ledger ref that is not open and whose
95
+ * stop this same session recorded: a finished leg of this session is
96
+ * re-entered, which starts a run.
97
+ * `message_running` — the ref is open: the message starts no run.
98
+ * `message_or_resume` — the ledger cannot place the recipient in this session
99
+ * (a name, a teammate, the lead, another session's leg, no session id, a stop
100
+ * older than the scan window). Recorded, never called a resume.
101
+ *
102
+ * The verdict describes the attempted send at `pre_tool_use`; whether the host
103
+ * then accepts it is not visible here.
104
+ */
105
+ export type SendKind = 'resume' | 'message_running' | 'message_or_resume';
106
+
107
+ /** Bytes read from the end of each monthly ledger file when looking for a stop. */
108
+ export const STOP_SCAN_BYTES = 1024 * 1024;
109
+
110
+ function tailOf(file: string): string {
111
+ let fd: number;
112
+ try {
113
+ fd = fs.openSync(file, 'r');
114
+ } catch {
115
+ return '';
116
+ }
117
+ try {
118
+ const size = fs.fstatSync(fd).size;
119
+ const length = Math.min(size, STOP_SCAN_BYTES);
120
+ const buf = Buffer.alloc(length);
121
+ fs.readSync(fd, buf, 0, length, size - length);
122
+ return buf.toString('utf8');
123
+ } finally {
124
+ fs.closeSync(fd);
125
+ }
126
+ }
127
+
128
+ function stoppedInSession(root: string, ref: string, sessionId: string, now: Date): boolean {
129
+ const prev = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 1, 1));
130
+ for (const month of [now.toISOString().slice(0, 7), prev.toISOString().slice(0, 7)]) {
131
+ for (const line of tailOf(path.join(root, LEDGER_DIR, `${month}.jsonl`)).split('\n')) {
132
+ if (!line.includes(ref)) continue;
133
+ try {
134
+ const rec = JSON.parse(line) as Record<string, unknown>;
135
+ if (rec['event'] === 'subagent_stop' && rec['ref'] === ref && rec['session_id'] === sessionId) {
136
+ return true;
137
+ }
138
+ } catch {
139
+ // The first line of a tail is usually cut; a torn line is no evidence.
140
+ }
141
+ }
142
+ }
143
+ return false;
144
+ }
145
+
146
+ /**
147
+ * The ref a named spawn of this session left in the register, read from the
148
+ * same bounded tails as a stop; null when this session named no such worker.
149
+ */
150
+ /** Longer names are neither recorded nor resolved: a name is an address, not a payload. */
151
+ export const NAME_MAX = 128;
152
+
153
+ /** Domain-separated digest of (session, name); the only form a tool-input name takes on disk. */
154
+ function nameKey(sessionId: string, name: string): string {
155
+ return refFor(`subagent-name\0${sessionId}\0${name}`);
156
+ }
157
+
158
+ function refForName(root: string, name: string, sessionId: string, now: Date): string | null {
159
+ if (name.length > NAME_MAX) return null;
160
+ const key = nameKey(sessionId, name);
161
+ let found: string | null = null;
162
+ const prev = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 1, 1));
163
+ for (const month of [prev.toISOString().slice(0, 7), now.toISOString().slice(0, 7)]) {
164
+ for (const line of tailOf(path.join(root, LEDGER_DIR, `${month}.jsonl`)).split('\n')) {
165
+ if (!line.includes('subagent_named')) continue;
166
+ try {
167
+ const rec = JSON.parse(line) as Record<string, unknown>;
168
+ if (rec['event'] === 'subagent_named' && rec['name_key'] === key && typeof rec['ref'] === 'string') {
169
+ found = rec['ref'];
170
+ }
171
+ } catch {
172
+ // A torn line is no evidence.
173
+ }
174
+ }
175
+ }
176
+ return found;
177
+ }
178
+
179
+ /**
180
+ * Classify one send. `recipient_kind: name` is resolved through the register a
181
+ * named spawn of this session left; any other recipient is taken as an agent id
182
+ * and hashed with the ledger's own `refFor`. Neither the recipient nor its ref
183
+ * is written.
184
+ */
185
+ export function classifySend(
186
+ root: string,
187
+ toolInput: unknown,
188
+ sessionId: string | null,
189
+ now: Date = new Date(),
190
+ ): SendKind {
191
+ const input = isObject(toolInput) ? toolInput : {};
192
+ const recipient = input['to'];
193
+ if (typeof recipient !== 'string' || recipient === '') return 'message_or_resume';
194
+ if (sessionId === null || sessionId === '') return 'message_or_resume';
195
+ const ref = input['recipient_kind'] === 'name' ? refForName(root, recipient, sessionId, now) : refFor(recipient);
196
+ if (ref === null) return 'message_or_resume';
197
+ if (readOpenRecords(root).has(ref)) return 'message_running';
198
+ return stoppedInSession(root, ref, sessionId, now) ? 'resume' : 'message_or_resume';
199
+ }
200
+
201
+ /**
202
+ * On a completed named spawn, record which ledger ref the name now addresses.
203
+ * Neither the name nor the agent id reaches disk in clear; both are digested first.
204
+ */
205
+ export function recordNamedSpawn(root: string, payload: JsonObject, sessionId: string | null, nowIso: string): void {
206
+ const input = isObject(payload['tool_input']) ? payload['tool_input'] : {};
207
+ const result = isObject(payload['tool_response']) ? payload['tool_response'] : {};
208
+ const name = input['name'];
209
+ const agentId = result['agentId'];
210
+ if (typeof name !== 'string' || name === '' || name.length > NAME_MAX || typeof agentId !== 'string' || agentId === '') return;
211
+ if (sessionId === null) return;
212
+ appendLedgerLine(root, nowIso, { event: 'subagent_named', ts: nowIso, ref: refFor(agentId), name_key: nameKey(sessionId, name), session_id: sessionId });
213
+ }
214
+
215
+ /**
216
+ * Platforms where `pre_tool_use` was observed firing on the resume tool, with a
217
+ * deny honoured there. Elsewhere the line says the resume half is unobserved.
218
+ */
219
+ export const RESUME_ADMISSION_OBSERVED: ReadonlySet<string> = new Set(['claude']);
220
+
221
+ /**
222
+ * Inputs to the reuse verdict. Production passes none: `host_resume` comes
223
+ * from the host row, and no worker register is recorded yet, which the verdict
224
+ * names as `worker_register_unrecorded` rather than reading as empty.
225
+ */
226
+ export interface ShadowDeps {
227
+ host_resume?: boolean;
228
+ workers?: readonly WorkerState[] | null;
229
+ context?: ReuseContext | null;
230
+ }
231
+
70
232
  /** One candidate guard configuration under shadow evaluation. */
71
233
  export interface Candidate {
72
234
  readonly label: string;
@@ -136,12 +298,34 @@ function extractToolName(payload: JsonObject): string | null {
136
298
  return typeof v === 'string' && v ? v : null;
137
299
  }
138
300
 
139
- export function processEnvelope(envelope: JsonValue, consumerRoot: string): number {
301
+ export function processEnvelope(envelope: JsonValue, consumerRoot: string, deps: ShadowDeps = {}): number {
140
302
  try {
141
303
  if (!isObject(envelope)) return EXIT_ALLOW;
142
304
  const payload = unwrapPayload(envelope);
143
305
  const toolName = extractToolName(payload);
144
- if (toolName === null || !DISPATCH_TOOL_NAMES.has(toolName)) return EXIT_ALLOW;
306
+ if (toolName === null) return EXIT_ALLOW;
307
+ if (envelope['event'] === 'post_tool_use' || payload['hook_event_name'] === 'PostToolUse') {
308
+ if (DISPATCH_TOOL_NAMES.has(toolName)) {
309
+ const sid = payload['session_id'] ?? envelope['session_id'];
310
+ recordNamedSpawn(consumerRoot, payload, typeof sid === 'string' ? sid : null, new Date().toISOString());
311
+ }
312
+ return EXIT_ALLOW;
313
+ }
314
+ const isResume = RESUME_TOOL_NAMES.has(toolName);
315
+ if (!isResume && !DISPATCH_TOOL_NAMES.has(toolName)) return EXIT_ALLOW;
316
+ const platform = typeof envelope['platform'] === 'string' ? envelope['platform'] : null;
317
+ const toolInput = isObject(payload['tool_input']) ? payload['tool_input'] : {};
318
+ const sessionRaw = payload['session_id'] ?? envelope['session_id'];
319
+ const sessionId = typeof sessionRaw === 'string' ? sessionRaw : null;
320
+ const sendKind: SendKind | null = isResume ? classifySend(consumerRoot, toolInput, sessionId) : null;
321
+ // Only the verdict's label and reason codes reach disk — never the tool input.
322
+ const reuse = isResume
323
+ ? null
324
+ : shadowReuseVerdict({
325
+ host_resume: deps.host_resume ?? probeHostCapabilities(platform).worker_resume,
326
+ workers: deps.workers ?? null,
327
+ context: deps.context ?? null,
328
+ });
145
329
 
146
330
  const stats = openRecordStats(consumerRoot);
147
331
  // Pre-spawn there is no agent id to resolve a parent from; the deepest
@@ -167,7 +351,16 @@ export function processEnvelope(envelope: JsonValue, consumerRoot: string): numb
167
351
  // one the ledger already fixed for itself.
168
352
  ledger_present: stats.ledger_present,
169
353
  stale_open_excluded: stats.stale_excluded,
170
- candidates: verdicts.map((v) => ({ label: v.label, would_deny: v.would_deny, on: v.on })),
354
+ // A message to a running worker starts no run, so it is not set
355
+ // against a threshold that counts runs.
356
+ ...(sendKind === 'message_running'
357
+ ? {}
358
+ : { candidates: verdicts.map((v) => ({ label: v.label, would_deny: v.would_deny, on: v.on })) }),
359
+ dispatch_kind: sendKind ?? 'spawn',
360
+ resume_admission: platform !== null && RESUME_ADMISSION_OBSERVED.has(platform) ? 'counted' : 'unobserved',
361
+ ...(reuse === null ? {} : { reuse }),
362
+ // A recent host-sourced rate marker: a new spawn would have waited.
363
+ ...(isResume ? {} : { rate_window: recentHostMarker(consumerRoot) ? 'would_wait' : 'clear' }),
171
364
  // Shadow posture is a property of this file, not of a setting —
172
365
  // there is no code path here that can deny.
173
366
  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
@@ -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("");