@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
@@ -1,21 +1,35 @@
1
- Surface Class,Threat,Source Refs,Abuse Case,Required Controls,Negative Tests,Severity
2
- authentication,Credential stuffing / brute force,"ATT&CK T1110, CWE-307",Attacker replays breached credential lists against login,Rate-limit per account+IP; lockout with jitter; breached-password check; MFA,Test: >N failed logins → 429/lockout; lockout not bypassable via case-variant email,HIGH
3
- authentication,Session fixation / insufficient invalidation,"CWE-384, ATT&CK T1563",Attacker fixes a session id pre-login or reuses one post-logout/password-change,Rotate session id on login + privilege change; invalidate all sessions on password reset,Test: session id differs pre/post login; old token rejected after reset,HIGH
4
- authentication,Password-reset token abuse,CWE-640,Attacker enumerates/reuses reset tokens or intercepts via referrer leak,"Single-use, short-TTL, hashed-at-rest tokens; uniform response on unknown email; no token in URL logs",Test: token unusable twice; expired token rejected; response identical for known/unknown email,HIGH
5
- authorization,IDOR / missing object-level check,"CWE-639, OWASP API1",Authenticated user swaps an id in the request and reads/writes another user's object,Object-level ownership check in policy (never only route middleware); deny-by-default,"Test: user A GET/PUT on B's resource id → 403/404, for EVERY verb",CRITICAL
6
- authorization,Privilege escalation via mass assignment,CWE-915,Attacker posts role/is_admin fields the endpoint binds blindly,Explicit allowlist DTO/fillable; server-side role assignment only via admin flow,Test: POST with role=admin → field ignored AND audit-logged,HIGH
7
- tenancy,Cross-tenant read via unscoped query,CWE-639,Missing tenant_id scope on a query/report/export leaks another tenant's rows,Global scope at the ORM/repository layer; tenant from session never from request; scoped test fixtures,Test: tenant A token + tenant B resource id across list/show/export/report → empty/403,CRITICAL
8
- tenancy,Cross-tenant write via background job,CWE-862,Queued job re-resolves tenant from payload an attacker influenced,Jobs carry tenant context sealed at dispatch; consumer re-asserts scope before write,Test: forged job payload with foreign tenant_id → rejected,HIGH
9
- file-upload,Malicious file / polyglot upload,"CWE-434, ATT&CK T1105",Attacker uploads webshell/polyglot accepted by extension-only check,Content-sniff + allowlist MIME; store outside webroot with random names; never execute; AV scan if executable risk,Test: .php/.svg-with-script renamed .jpg → rejected or neutralized; direct URL fetch of stored file cannot execute,HIGH
10
- file-upload,SSRF via user-supplied URL,"CWE-918, ATT&CK T1090",URL-fetch feature pointed at cloud metadata / internal services,Deny private/link-local ranges post-DNS-resolution; scheme allowlist; egress proxy; response-size cap,Test: http://169.254.169.254/ and DNS-rebinding host → blocked,CRITICAL
11
- external-integration,Webhook forgery / replay,CWE-345,Attacker posts forged or replayed events to the webhook consumer,HMAC signature verification with rotation; timestamp tolerance window; idempotency key store,Test: bad signature → 401; stale timestamp → rejected; duplicate event id processed once,HIGH
12
- public-endpoint,Resource exhaustion / scraping,"CWE-770, ATT&CK T1499",Unauthenticated endpoint hammered for DoS or bulk data harvest,Rate limit + cache; no expensive queries pre-auth; pagination caps; no PII in public responses,Test: response carries rate-limit headers; page size capped server-side,MEDIUM
13
- billing,Race condition on balance / double-spend,CWE-362,Parallel requests redeem the same credit/refund twice,DB-level constraint or SELECT FOR UPDATE / idempotency key on money mutations; ledger over mutable balance,Test: N parallel redeems of one voucher → exactly one success,CRITICAL
14
- billing,Price/amount tampering,CWE-602,Client-supplied price or currency trusted at checkout,Recompute amounts server-side from catalog; signed cart or server-held cart only,Test: tampered client amount → server total unchanged,CRITICAL
15
- secrets,Secret leakage via logs / errors / VCS,"CWE-532, ATT&CK T1552","Key appears in exception payload, debug log, or committed .env",Centralized secret manager; logger redaction list; pre-commit secret scan; scoped short-lived tokens,Test: forced exception on auth path → no credential substring in log sink,HIGH
16
- data-exposure,Over-broad serializer / API resource,"CWE-213, OWASP API3","Serializer returns internal fields (cost, flags, foreign tenant refs) the UI ignores but attackers read",Explicit field allowlist per resource; separate admin vs public serializers; contract test on response shape,Test: schema-diff response against documented contract → no undocumented fields,MEDIUM
17
- infrastructure,Unrestricted ingress to a management or database port,"CWE-1327, ATT&CK T1190",Attacker reaches SSH/RDP or a database engine straight from the internet because a security-group or firewall rule allows 0.0.0.0/0,"Deny-by-default ingress; management and database ports reachable only via bastion, VPN, or private link; CIDR scoped to known ranges; never 0.0.0.0/0 on 22/3389/3306/5432/6379/27017","Test: a rule with cidr_blocks 0.0.0.0/0 on a management or database port is rejected. Decided by: NO CHECK IN THIS REPOSITORY - nothing here parses HCL or cloud config; the deciding check is the consumer's own IaC policy scanner",CRITICAL
18
- infrastructure,Object storage public by default,"CWE-732, OWASP A05",Bucket or container created without a block-public-access setting so any object URL is world-readable,Block public access at account AND bucket level; explicit policy allowlist instead of a public ACL; serve objects via signed URLs or a CDN origin identity,"Test: storage created with no explicit public-access block is rejected; anonymous GET of a stored object returns 403. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own IaC policy scanner or a cloud posture tool",HIGH
19
- infrastructure,Missing encryption at rest or in transit,"CWE-311, CWE-319",Volume snapshot bucket or database instance created with no encryption block; endpoint accepts a plaintext connection,Encryption block mandatory on every storage and database resource; customer-managed key where the data class requires it; TLS-only bucket policy and listener; reject plaintext listeners,"Test: a storage or database resource with no encryption block is rejected; a plaintext connection to the endpoint is refused. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own IaC policy scanner",HIGH
1
+ Surface Class,Threat,Source Refs,Abuse Case,Required Controls,Negative Tests,Severity
2
+ authentication,Credential stuffing / brute force / password spraying,"ATT&CK T1110, CWE-307, ASVS 5.0 V6 Authentication","Attacker replays breached credential lists against login, or sprays one common password across many accounts so no single account trips its own counter; the code resend, the MFA challenge and the invite endpoint are hit the same way and are usually left unthrottled","Rate-limit per account and per source, and separately on the failure rate across accounts so spraying is visible where a per-account counter is not; lockout with jitter; breached-password check; MFA; throttle the one-time-code resend, the MFA challenge and the invite endpoint like the login itself, and never let a resend reset the failure counter; recovery stays reachable while an account is throttled, so throttling is not a denial of service against the owner; admit the verifier's cost for an unknown identity too, so response time does not say which addresses exist","Test: >N failed logins -> 429/lockout; lockout not bypassable via case-variant email, a Unicode-equivalent address, or a rotated source address; one password tried across many accounts trips the cross-account rate; a code resend does not reset the counter; response time for a known and an unknown identity is not separable. Decided by: NO CHECK IN THIS REPOSITORY - nothing here exercises a consumer's login endpoint; the deciding check is the consumer's own test suite",HIGH
3
+ authentication,Session fixation / insufficient invalidation,"CWE-384, ATT&CK T1563",Attacker fixes a session id pre-login or reuses one post-logout/password-change,Rotate session id on login + privilege change; invalidate all sessions on password reset,Test: session id differs pre/post login; old token rejected after reset,HIGH
4
+ authentication,Password-reset token abuse,CWE-640,Attacker enumerates/reuses reset tokens or intercepts via referrer leak,"Single-use, short-TTL, hashed-at-rest tokens; uniform response on unknown email; no token in URL logs",Test: token unusable twice; expired token rejected; response identical for known/unknown email,HIGH
5
+ authentication,Account enumeration through an observable difference,"CWE-204, CWE-203, CWE-208, ASVS 5.0 V6 Authentication","The login, reset, sign-up or verification response says whether an email address is already registered: a different message, status code, redirect target or cookie, or an early return before the verifier runs, tells the attacker which account exists","One response shape for known and unknown identities at every identity entry point; the verifier path runs for an unknown identity too; sign-up for an address that already exists returns the same response as a new one and mails the owner a notice instead; a deliberately disclosing flow is a written project decision recorded with the flow, never a default and never a defect when it is written down","Test: a known and an unknown identity produce the same status, body category, redirect and cookies on login, reset request, sign-up and verification resend; sign-up for a registered address emits a notice to the owner and no distinguishing response. Decided by: NO CHECK IN THIS REPOSITORY - nothing here runs a consumer's identity flow; the deciding check is the consumer's own test suite, written as the equivalence case test-case-discovery names",HIGH
6
+ authentication,Unverified email ownership granting privilege,"CWE-287, CWE-640, ASVS 5.0 V6 Authentication","An address nobody proved they control reaches a privileged state: sign-up grants access before verification, a mail scanner's GET on the verification or magic link consumes it before the person sees it, or two concurrent requests both spend a verification token that was never single-use","No privilege before proven ownership; the link's GET is safe and the state change needs an explicit confirmation a scanner will not perform; the token is single-use, short-lived and consumed atomically under concurrency; a resend invalidates the previous token; changing the address returns the account to the unverified state",Test: an account whose address is unverified cannot reach the privileged action; a plain GET on the verification link does not consume it; two concurrent consumptions of one token yield exactly one success; a resend makes the previous token unusable. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,HIGH
7
+ authentication,Password acceptance weakened by composition and handling rules,"CWE-521, ASVS 5.0 V6 Authentication","Composition rules, forced periodic rotation, a low maximum length, a blocked paste or a missing breached-and-common screen push people towards predictable passwords the attacker already holds","Accept the length and character range the authority sets, without composition rules and without scheduled rotation; rotate on evidence of compromise only; allow paste and password managers; screen against a breached-and-common list; normalise Unicode before the check; every value defers to ASVS 5.0 V6 Authentication and NIST SP 800-63B, never to this corpus",Test: a long passphrase and a pasted password are accepted; a password on the breached list is refused with a reason the person can act on; no scheduled expiry forces a change. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite against the authority named in Required Controls,MEDIUM
8
+ authentication,Fast or home-made password storage,"CWE-916, CWE-759, ASVS 5.0 V6 Authentication, ASVS 5.0 V11 Cryptography","Passwords stored under a general-purpose hash, salted or not, or under a hand-rolled salt scheme, so a stolen table is cracked at speed; or an over-long input is silently truncated at the algorithm's own limit; or the pepper sits in the repository or in the same store as the hash","A password hashing function the authority names, with its parameters taken from the authority and never from this corpus; never a general-purpose hash - MD5, SHA-1 and every SHA-2 included, salted or not - and never an invented salt scheme; the salt is per-password and generated by the library; rehash on a successful login once the parameters have moved; refuse or pre-digest an input past the algorithm's own length limit rather than truncating it; a pepper, where one is used, lives outside the credential store with a rotation plan and is never a literal in the tree - its absence is not a finding","Test: the stored value is produced by the platform's password hashing API and checked through its verify primitive, never by comparing digests; an input past the algorithm's limit is refused or pre-digested, never silently cut; a login under outdated parameters rewrites the stored value. Decided by: PARTIAL CHECK IN THIS REPOSITORY - ai-code-blindspots carries a password-scoped fast-hash grep that catches the authoring-time shape; the deciding check is the consumer's own test suite and static analysis",CRITICAL
9
+ authentication,Unsafe secret comparison and home-made credential primitives,"CWE-208, CWE-338, ASVS 5.0 V11 Cryptography","A token, one-time code, signature or MAC compared with the language's ordinary equality leaks its prefix through timing; or the project mints its own token or one-time code from a non-cryptographic source an attacker can predict from a seed","Compare every secret with the platform's constant-time primitive and respect that primitive's length precondition; draw every token, one-time code and salt from the platform's cryptographically secure random source; never invent a credential primitive where the library ships one","Test: no equality operator compares a token, one-time code, signature or MAC anywhere on the identity path; codes drawn repeatedly show no sequence reproducible from a seed. Decided by: PARTIAL CHECK IN THIS REPOSITORY - ai-code-blindspots carries a raw-secret-equality grep that catches the authoring-time shape; the deciding check is the consumer's own test suite and static analysis",HIGH
10
+ authentication,Password reset beyond the token,"CWE-640, CWE-362, ASVS 5.0 V6 Authentication, ASVS 5.0 V7 Session Management","The reset link is built from an attacker-controlled Host header, or leaks through the Referrer of a third-party asset on the reset page; or the reset signs the person straight in, leaves the other sessions alive, satisfies the second factor, or is spent twice by concurrent requests","Build the link from server configuration, never from a request header; no third-party asset and no secret in the query string on the reset page; the reset ends every other session and the remembered-device state; it does not sign the person in and does not satisfy the second factor; single use enforced atomically under concurrency; the owner is notified on the channel that was already verified",Test: a forged Host header does not change the link's origin; the reset page loads no third-party asset; after a reset the pre-reset session token is rejected and a second factor is still demanded; two concurrent uses of one token yield exactly one success. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,HIGH
11
+ authentication,Identity or credential change without fresh re-authentication or notice,"CWE-620, CWE-778, ASVS 5.0 V6 Authentication, ASVS 5.0 V16 Security Logging and Error Handling","A hijacked session can change the account's email address, phone number, password, MFA factor, passkey, recovery codes or a linked identity without proving the person is still present, and nobody is told: the channel that was already verified gets no notice, and a sign-in from an unrecognised device is silent","Every identity mutation demands fresh re-authentication at the assurance the factor being changed already carries; the previously verified address or number is notified and the change is reversible for a window the project states; a sign-in from an unrecognised device notifies the owner; each event is logged with actor, time and outcome, and never with the secret","Test: each identity mutation refuses without a fresh re-authentication, and a lower-assurance factor does not satisfy it; the previously verified channel receives the notice; the log line for each event carries no credential substring. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite",HIGH
12
+ authentication,MFA enforced only in the interface or undercut by its recovery path,"CWE-308, ASVS 5.0 V6 Authentication",The second factor is a screen the client can skip because the server already issued a full session; or the recovery path is weaker than the factor it replaces; or the TOTP seed sits in the credential store in plaintext and the backup codes are stored unhashed or stay valid after use,"The server issues no privileged session until the factor is verified - the challenge is a state the server holds, not a screen the client renders; recovery is at least as strong as the factor it replaces, and is itself throttled and notified; the shared seed is encrypted at rest under a key held outside the credential store; backup codes are hashed like passwords and are single-use; enrolling or removing a factor is an identity mutation under its own row",Test: a request that skips the challenge step reaches no privileged action; a backup code fails on its second use; the stored seed is not readable from the credential store alone. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,HIGH
13
+ authentication,Persistent login and incomplete logout,"CWE-613, CWE-539, ASVS 5.0 V7 Session Management","A remember-me token lifted from a device reaches a sensitive action without a fresh login; or logout clears the client and leaves the server session, the remembered-device record and the federated session alive","A remembered session carries a lower assurance and never satisfies a sensitive action on its own; the remember-me token is per-device, rotated on use, and revocable from a session list the owner can see; logout invalidates the server-side state, the remember-me record and the cookie, and offers to end the federated session too; every session ends on a credential change","Test: a remembered session is re-challenged at a sensitive action; after logout the previous token is rejected server-side, not merely absent from the client; revoking a device from the session list rejects that device's token. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite",MEDIUM
14
+ authentication,Authentication token in script-readable browser storage,CWE-922,"A session, access or refresh token is written to localStorage, sessionStorage, IndexedDB or another store page script can read, so any injected script reads it and replays it from the attacker's own device for as long as the token lives","Carry the session in a cookie marked HttpOnly, Secure and SameSite, which page script cannot read; never persist a session, access or refresh token in Web Storage or IndexedDB; where an architecture requires a script-held bearer token, keep it in memory only, short-lived and narrowly scoped, and treat that as shortening the exposure rather than preventing theft during a script compromise; a cookie-borne session still needs the login and state-changing CSRF controls of its own rows","Test: after sign-in and after the federated callback, no session, access or refresh token value is present in localStorage, sessionStorage or IndexedDB, whether written with setItem or by property assignment; the session cookie carries HttpOnly, Secure and SameSite. Decided by: check_account_surface reports the setItem and property-assignment writes lexically; the deciding check is the consumer's own browser test suite",HIGH
15
+ authentication,Federated sign-in account takeover,"CWE-287, CWE-352, ASVS 5.0 V10 OAuth and OIDC","A provider sign-in is linked on email equality, so any identity provider that lets an attacker assert someone else's mailbox takes the local login over; or an email claim the provider never verified is trusted; or the authorization response is never bound to the request that began it, or arrives from a different issuer than the one the flow asked","Identity is issuer plus subject, never the address alone; an unverified email claim links nothing and grants nothing; bind the response to the request with a state and a nonce checked server-side against the session that started the flow; pin the issuer and the audience per provider and refuse a response from any other; linking a provider onto an existing local account is an identity mutation under its own row",Test: a provider response carrying a known address but a different issuer or subject creates no link; an unverified email claim grants nothing; a response with a missing or replayed state is refused; a token minted for another audience is refused. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,CRITICAL
16
+ authentication,Self-contained token validation bypass,"CWE-347, ASVS 5.0 V9 Self-contained Tokens","The verifier accepts an unsigned algorithm, takes the verification key from the token's own header, skips the issuer audience or expiry check, or accepts an ID token where an access token was required","Pin the accepted algorithms and the key source server-side; never read a key or a key location out of the token; check issuer, audience, expiry and not-before on every request; keep ID tokens and access tokens distinct and refuse the wrong kind; call the library's verify entry point rather than decoding the payload and inspecting claims by hand",Test: a token declaring no signature algorithm is refused; a token signed with a key named in its own header is refused; an expired token and a token for another audience are refused; an ID token presented as an access token is refused. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,CRITICAL
17
+ authentication,Login cross-site request forgery,"CWE-352, ASVS 5.0 V6 Authentication","An attacker makes the victim's browser log in to an account the attacker controls, so the victim's later activity accrues to it; the federated callback is the same shape when its state is not bound to the session",The login form and the federated callback carry a per-request anti-forgery token bound to the pre-login session; the session identifier rotates on login; the post-login landing performs no action on a cross-site request,Test: a cross-site POST to the login endpoint without the bound token is refused; the session identifier differs before and after login. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own test suite,MEDIUM
18
+ authentication,Signup abuse and disposable addresses as a policy choice,"CWE-799, ASVS 5.0 V2 Validation and Business Logic","Automated sign-up drains invites, trial credit, outbound mail reputation or a free tier; the reflex is a disposable-domain blocklist that also shuts out privacy-conscious people and quietly becomes a third-party call on the registration path","State the product's posture first - allow, warn, challenge or block - because the right answer differs between a consumer product and a paid B2B one; this is a policy row and names no list: any blocklist or reputation feed is a consumer dependency the consumer owns and ages; never a synchronous third-party call per registration request - decide asynchronously and degrade to allow when the dependency is unreachable; throttle and cost the sign-up path itself; verification before privilege carries most of the weight a blocklist is reached for","Test: registration completes with the reputation dependency unreachable; the posture is written down with the flow and the implemented outcome matches it; a scripted burst of sign-ups from one source is throttled. Decided by: NO CHECK IN THIS REPOSITORY - this is a product policy, not a defect class; the deciding check is the consumer's own written posture and test suite",MEDIUM
19
+ authorization,IDOR / missing object-level check,"CWE-639, OWASP API1",Authenticated user swaps an id in the request and reads/writes another user's object,Object-level ownership check in policy (never only route middleware); deny-by-default,"Test: user A GET/PUT on B's resource id → 403/404, for EVERY verb",CRITICAL
20
+ authorization,Privilege escalation via mass assignment,CWE-915,Attacker posts role/is_admin fields the endpoint binds blindly,Explicit allowlist DTO/fillable; server-side role assignment only via admin flow,Test: POST with role=admin → field ignored AND audit-logged,HIGH
21
+ tenancy,Cross-tenant read via unscoped query,CWE-639,Missing tenant_id scope on a query/report/export leaks another tenant's rows,Global scope at the ORM/repository layer; tenant from session never from request; scoped test fixtures,Test: tenant A token + tenant B resource id across list/show/export/report → empty/403,CRITICAL
22
+ tenancy,Cross-tenant write via background job,CWE-862,Queued job re-resolves tenant from payload an attacker influenced,Jobs carry tenant context sealed at dispatch; consumer re-asserts scope before write,Test: forged job payload with foreign tenant_id → rejected,HIGH
23
+ file-upload,Malicious file / polyglot upload,"CWE-434, ATT&CK T1105",Attacker uploads webshell/polyglot accepted by extension-only check,Content-sniff + allowlist MIME; store outside webroot with random names; never execute; AV scan if executable risk,Test: .php/.svg-with-script renamed .jpg → rejected or neutralized; direct URL fetch of stored file cannot execute,HIGH
24
+ file-upload,SSRF via user-supplied URL,"CWE-918, ATT&CK T1090",URL-fetch feature pointed at cloud metadata / internal services,Deny private/link-local ranges post-DNS-resolution; scheme allowlist; egress proxy; response-size cap,Test: http://169.254.169.254/ and DNS-rebinding host → blocked,CRITICAL
25
+ external-integration,Webhook forgery / replay,CWE-345,Attacker posts forged or replayed events to the webhook consumer,HMAC signature verification with rotation; timestamp tolerance window; idempotency key store,Test: bad signature → 401; stale timestamp → rejected; duplicate event id processed once,HIGH
26
+ public-endpoint,Resource exhaustion / scraping,"CWE-770, ATT&CK T1499",Unauthenticated endpoint hammered for DoS or bulk data harvest,Rate limit + cache; no expensive queries pre-auth; pagination caps; no PII in public responses,Test: response carries rate-limit headers; page size capped server-side,MEDIUM
27
+ billing,Race condition on balance / double-spend,CWE-362,Parallel requests redeem the same credit/refund twice,DB-level constraint or SELECT FOR UPDATE / idempotency key on money mutations; ledger over mutable balance,Test: N parallel redeems of one voucher → exactly one success,CRITICAL
28
+ billing,Price/amount tampering,CWE-602,Client-supplied price or currency trusted at checkout,Recompute amounts server-side from catalog; signed cart or server-held cart only,Test: tampered client amount → server total unchanged,CRITICAL
29
+ secrets,Secret leakage via logs / errors / VCS,"CWE-532, ATT&CK T1552","Key appears in exception payload, debug log, or committed .env",Centralized secret manager; logger redaction list; pre-commit secret scan; scoped short-lived tokens,Test: forced exception on auth path → no credential substring in log sink,HIGH
30
+ data-exposure,Over-broad serializer / API resource,"CWE-213, OWASP API3","Serializer returns internal fields (cost, flags, foreign tenant refs) the UI ignores but attackers read",Explicit field allowlist per resource; separate admin vs public serializers; contract test on response shape,Test: schema-diff response against documented contract → no undocumented fields,MEDIUM
31
+ infrastructure,Unrestricted ingress to a management or database port,"CWE-1327, ATT&CK T1190",Attacker reaches SSH/RDP or a database engine straight from the internet because a security-group or firewall rule allows 0.0.0.0/0,"Deny-by-default ingress; management and database ports reachable only via bastion, VPN, or private link; CIDR scoped to known ranges; never 0.0.0.0/0 on 22/3389/3306/5432/6379/27017",Test: a rule with cidr_blocks 0.0.0.0/0 on a management or database port is rejected. Decided by: NO CHECK IN THIS REPOSITORY - nothing here parses HCL or cloud config; the deciding check is the consumer's own IaC policy scanner,CRITICAL
32
+ infrastructure,Object storage public by default,"CWE-732, OWASP A05",Bucket or container created without a block-public-access setting so any object URL is world-readable,Block public access at account AND bucket level; explicit policy allowlist instead of a public ACL; serve objects via signed URLs or a CDN origin identity,Test: storage created with no explicit public-access block is rejected; anonymous GET of a stored object returns 403. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own IaC policy scanner or a cloud posture tool,HIGH
33
+ infrastructure,Missing encryption at rest or in transit,"CWE-311, CWE-319",Volume snapshot bucket or database instance created with no encryption block; endpoint accepts a plaintext connection,Encryption block mandatory on every storage and database resource; customer-managed key where the data class requires it; TLS-only bucket policy and listener; reject plaintext listeners,Test: a storage or database resource with no encryption block is rejected; a plaintext connection to the endpoint is refused. Decided by: NO CHECK IN THIS REPOSITORY - the deciding check is the consumer's own IaC policy scanner,HIGH
20
34
  infrastructure,Wildcard IAM action or resource,"CWE-269, ATT&CK T1078.004",A role policy grants Action * or Resource * so one compromised workload credential reaches every service and object in the account,Enumerate actions and resource ARNs; one role per workload; permission boundary or service control policy on privileged roles; no wildcard outside a named reviewed exception,"Test: a policy document containing Action ""*"" or Resource ""*"" is rejected or carries a named exception. Decided by: NO CHECK IN THIS REPOSITORY - nothing here parses IAM policy documents; the deciding check is the consumer's own IaC policy scanner",CRITICAL
21
- infrastructure,Credential in an IaC or vars file instead of a secret manager,"CWE-798, ATT&CK T1552.001",Password token or key written as a literal into a .tf .tfvars or .yaml file and committed,Secret-manager reference or runtime-injected env var; never a literal in IaC or vars files; treat the state file as sensitive and store it encrypted with restricted access,"Test: a literal credential in a tracked IaC or vars file fails the build. Decided by: check_secret_leak (src/scripts/check_secret_leak.ts) inside THIS repository - it has no extension allowlist so .tf and .yaml are in scope; for a CONSUMER the deciding check is the gitleaks workflow the package ships as a template that the consumer must copy",HIGH
35
+ infrastructure,Credential in an IaC or vars file instead of a secret manager,"CWE-798, ATT&CK T1552.001",Password token or key written as a literal into a .tf .tfvars or .yaml file and committed,Secret-manager reference or runtime-injected env var; never a literal in IaC or vars files; treat the state file as sensitive and store it encrypted with restricted access,Test: a literal credential in a tracked IaC or vars file fails the build. Decided by: check_secret_leak (src/scripts/check_secret_leak.ts) inside THIS repository - it has no extension allowlist so .tf and .yaml are in scope; for a CONSUMER the deciding check is the gitleaks workflow the package ships as a template that the consumer must copy,HIGH
@@ -0,0 +1,196 @@
1
+ ---
2
+ model_tier: high
3
+ name: type-design
4
+ description: "Build an original font from lettering or a brief — measured spec, code-built outlines, gated build, rendered proof. Use to turn a wordmark into a font."
5
+ domain: product
6
+ personas:
7
+ - design-director
8
+ workspaces:
9
+ - engineering
10
+ packs:
11
+ - frontend-design
12
+ trust:
13
+ level: experimental
14
+ install:
15
+ removable: true
16
+ scope:
17
+ write: []
18
+ verification_reason: "execution declares no handler, so this skill runs nothing of its own — every write is the calling agent's, under the rules that govern it. No command can prove a scope the skill never executes."
19
+ execution:
20
+ type: manual
21
+ ---
22
+
23
+ # type-design
24
+
25
+ Design an original font as a **constructed system**: measure parameters, let
26
+ code build every outline from measured parts, set spacing before kerning, and
27
+ build through gates that measure outlines, metrics, coverage and fidelity — with
28
+ a rendered proof the agent looked at. The model perceives, decides and judges;
29
+ code writes every coordinate.
30
+
31
+ The skill bundles no script and no font. It runs a pinned peer-side toolchain in
32
+ the consumer's environment ([`references/toolchain.md`](references/toolchain.md)).
33
+
34
+ ## When to use
35
+
36
+ - "Turn this wordmark into a font", "the rest of the alphabet in this lettering".
37
+ - "Design an original display face for our brand" from a written brief.
38
+ - A logo or a lettering image exists and the person wants a typeable family.
39
+
40
+ ## When NOT to use
41
+
42
+ - Choosing or pairing existing fonts, or building a type scale →
43
+ `typography-system`.
44
+ - Making a logo or a single mark → `logo-generation`; tracing one icon or mark
45
+ → `svg-authoring`; an icon font from an existing set → `iconography`.
46
+ - Reproducing a typeface someone else published — license it instead (§ Rights gate).
47
+
48
+ ## The honest limit
49
+
50
+ A coherent **display or brand family** — one weight, Latin, shared stems,
51
+ overshoot and spacing — is in reach. **Text-grade optical refinement** (hinting,
52
+ optical compensation at small sizes, a multi-weight interpolated family) is a
53
+ type designer's work. Say so before the first build, and never label a result
54
+ beyond what the gates showed (§ Maturity).
55
+
56
+ ## Rights gate — before any trace
57
+
58
+ 1. **Own or commissioned lettering** proceeds.
59
+ 2. **Lettering set in an existing typeface** — name the typeface and recommend
60
+ licensing it instead of reconstructing it. Proceed only on a stated decision
61
+ that the result is a different design.
62
+ 3. **A third party's mark** stops until its owner's rights are stated.
63
+ 4. **An origin the agent cannot establish** is treated as not owned, and asked
64
+ about. Never assume a lettering image is the person's own.
65
+
66
+ Record the class (`own`, `commissioned`, `typeface-named`, `third-party`,
67
+ `unknown`) in the spec's source block.
68
+
69
+ ## License — asked, never stamped
70
+
71
+ Ask which license the new font carries. Record the answer in `font-spec.yaml`
72
+ and in the font's name table (license description and URL). With no answer the
73
+ license is `unknown`, written as such in both places. **Never** choose one on
74
+ the person's behalf: a default license is a commitment made for someone else.
75
+
76
+ ## No freehand outlines
77
+
78
+ The model never writes path data for a glyph by hand and never ships a freehand
79
+ SVG glyph. To change a shape, change a spec parameter or a construction rule and
80
+ let code rebuild. A glyph that cannot be expressed through the spec is a sign the
81
+ spec is missing a parameter — add it.
82
+
83
+ ## Procedure
84
+
85
+ 0. **Toolchain** — install the pinned set from
86
+ [`references/toolchain.md`](references/toolchain.md) into an isolated
87
+ environment in the consumer tree. Missing and not installable → stop and say
88
+ which tool; never substitute a hand-written approximation.
89
+ 1. **Spec first** — write `font-spec.yaml` per
90
+ [`references/font-spec.md`](references/font-spec.md): units per em, vertical
91
+ metrics, stems, contrast, stress angle, overshoot, aperture, terminals,
92
+ spacing, the coverage tier, license and source blocks.
93
+ 2. **Path A — from lettering** (raster or SVG, including a wordmark just made by
94
+ `logo-generation` or `image-generation`):
95
+ 1. **Ingest** — parse the SVG, or threshold and deskew the raster.
96
+ 2. **Segment** — code splits the letters; the model labels a numbered
97
+ **contact sheet** of the segments, never the raw image by eye.
98
+ 3. **Trace** with the fill rule declared and counters wound opposite to their
99
+ outer contour (`svg-authoring` § Trace to measure, construct to deliver).
100
+ 4. **Measure** the spec from the traced letters, then **normalise** the
101
+ present letters to it, and extend per step 4.
102
+ 5. A wordmark's one-off tweaks become **alternates or ligatures**, never the
103
+ default forms. A **signature letter** the brief names is a **locked
104
+ glyph**; its drift fails the fidelity gate.
105
+ 6. A source below 600 px cap height (or an SVG under 1,000 units) is reported
106
+ as **low confidence** and cannot reach `validated-static` on fidelity —
107
+ a stated default, not a measured one; the benchmark is what can move it.
108
+ 3. **Path B — from a brief**: brief → spec with numbers → build `n o H O` →
109
+ render the proof sheet → the person asking **approves the four control
110
+ glyphs** before anything else is built. A rejection changes the spec, and
111
+ the four are rebuilt.
112
+ 4. **Construction order** — `n o H O` first, then the **derivation chains**:
113
+ n → h m u r · o → c e b d p q · H → E F I L T · O → C D G Q. Then the
114
+ diagonals (A K M N V W X Y k v w x y), then the free shapes (a g s S f t z and
115
+ the figures), then composites for diacritics through anchors — the German set
116
+ (ä ö ü Ä Ö Ü ß ẞ „ “ ‚ ‘) included when the tier asks for it.
117
+ 5. **Spacing before kerning** — sidebearings from edge classes first, kerning
118
+ classes only afterwards ([`references/gates.md`](references/gates.md) § 4).
119
+ 6. **Build and gate** — UFO source → compiled `ttf` and `woff2`. Run every gate
120
+ in [`references/gates.md`](references/gates.md); each prints a threshold and
121
+ a failure message to act on.
122
+ 7. **Rendered proof** — generate a proof SVG whose specimens are `<text>`
123
+ elements set in the new family (waterfall 12 to 72 px, `HHOHH nnonn`, every
124
+ letter between n and n and between o and o, the kerning strings, the wordmark
125
+ text), the built `woff2` in its own `@font-face`; witness the SVG itself
126
+ (an `.html` target reports no text — gates § 5):
127
+ ```bash
128
+ agent-config ui:render proof/proof.svg --profile asset
129
+ ```
130
+ The new family must read `loaded`. Open the PNG and state what you saw.
131
+ 8. **Fidelity (path A)** — the wordmark text set in the new font against the
132
+ source by silhouette IoU (gates § 6); produce the diff overlay and look at it.
133
+ 9. **Fallback** — emit the metric-matched fallback `@font-face` (gates § 7).
134
+ 10. **Repair budget** — a failing gate gets at most **three** repair rounds.
135
+ After that the QA report names the gate and the label stays below
136
+ `validated-static`.
137
+
138
+ ## Outputs — in the consumer tree
139
+
140
+ UFO source, `font-spec.yaml`, built `woff2` and `ttf`, the proof page with its
141
+ PNG, and the QA report — at the location `design-system-capture` conventions
142
+ give the project's design-system assets, **never inside the package**. Record
143
+ the family there as a custom family with its source and license.
144
+
145
+ ### Maturity — exactly one label
146
+
147
+ | Label | Means |
148
+ |---|---|
149
+ | `concept` | spec and control glyphs exist; the tier is not covered |
150
+ | `prototype` | the tier is covered and the font builds; at least one gate is open |
151
+ | `validated-static` | every gate in `references/gates.md` that applies to the path is green (gate 6 applies to path A only), the witness read `loaded`, and the proof was looked at |
152
+
153
+ Never a claim the run cannot show.
154
+
155
+ ## Output format
156
+
157
+ 1. **QA report** — coverage tier, maturity label, the license (or `unknown`),
158
+ the rights class, and each gate with its measured value, threshold and
159
+ result.
160
+ 2. **Witness reading** — the face state the asset profile reported for the new
161
+ family, the PNG path, and one sentence on what the agent saw in it.
162
+ 3. **Fidelity (path A)** — per-glyph and per-word IoU, the locked glyph's IoU,
163
+ the registration they were measured against, and the overlay path.
164
+ 4. **Files** — every output path, read back from disk, with byte size.
165
+
166
+ ## Gotcha
167
+
168
+ - **A plausible font is not a system.** Glyphs that each look fine and share no
169
+ stems, overshoot or spacing pass a glance and fail the consistency gate —
170
+ run it, do not eyeball it.
171
+ - **Same-direction counters paint solid.** Under `fill-rule: nonzero`, the default, an
172
+ `o` whose inner contour winds like its outer one fills its counter.
173
+ - **Kerning cannot rescue spacing.** Kerning pairs on unspaced glyphs grow
174
+ without bound and still look uneven; set sidebearings first.
175
+ - **The witness reads the face, not the look.** A fallback face that resembles
176
+ the new one reads `error` there — trust the state, not the screenshot.
177
+
178
+ ## Do NOT
179
+
180
+ - Do NOT trace lettering whose rights class is `unknown`, or `third-party` until
181
+ the owner's rights are stated and it is recorded as `commissioned`.
182
+ - Do NOT write or ship glyph path data by hand.
183
+ - Do NOT stamp a license the person did not give.
184
+ - Do NOT claim a coverage tier the font does not cover, or `validated-static`
185
+ with a gate open.
186
+ - Do NOT write outputs into the package, or add a font binary to it.
187
+
188
+ ## See also
189
+
190
+ Named rather than linked: some of these neighbours ship in other packs.
191
+
192
+ - `typography-system` — choosing and pairing fonts; consumes a custom family.
193
+ - `svg-authoring` — trace-to-measure and the counter rule this skill reuses.
194
+ - `logo-generation`, `brand-identity` — where a wordmark is born and handed here.
195
+ - `design-system-capture` — where the finished family is recorded.
196
+ - `supply-chain-intake` — the gate every toolchain pin passed.
@@ -0,0 +1,90 @@
1
+ # `font-spec.yaml` — the parameters every outline is built from
2
+
3
+ The spec is the only place a shape decision lives. Code reads it and builds the
4
+ outlines; the model changes it and lets code rebuild. A value the run measured
5
+ carries `measured: true` and the glyphs it came from; a value the brief set
6
+ carries `measured: false`.
7
+
8
+ ```yaml
9
+ family: "Acme Display"
10
+ style: "Regular"
11
+ units_per_em: 1000
12
+
13
+ vertical: # font units, baseline = 0
14
+ baseline: 0
15
+ x_height: 520
16
+ cap_height: 700
17
+ ascender: 760
18
+ descender: -220
19
+
20
+ stems: # font units, measured by ray-cast (gates § 3)
21
+ lowercase_vertical: 92 # n h m u l i
22
+ lowercase_horizontal: 80 # e bar, t crossbar
23
+ capital_vertical: 100 # H I L
24
+ capital_horizontal: 86 # H bar, E arms
25
+
26
+ contrast: 0.86 # thinnest / thickest stroke on o and O
27
+ stress_angle: 0 # degrees from vertical; negative leans left
28
+ overshoot: # share of x-height / cap height, 0.01–0.03
29
+ round: 0.015
30
+ pointed: 0.010
31
+ aperture: 0.42 # opening of c e s a, share of the bowl width
32
+ terminal: "flat" # flat | angled | round | ball
33
+ serif: "none" # none | slab | bracketed | hairline
34
+
35
+ spacing: # sidebearings in font units, per edge class
36
+ straight: 62
37
+ round: 38
38
+ diagonal: 8
39
+
40
+ coverage: "latin-basic" # wordmark | latin-basic | latin-de
41
+
42
+ license:
43
+ id: "unknown" # the answer the person gave, or unknown
44
+ url: ""
45
+ name_table: true # written into the name table at build
46
+
47
+ source:
48
+ path: "brand/wordmark.png" # path A; omitted for path B
49
+ rights: "own" # own | commissioned | typeface-named | third-party | unknown
50
+ digest: "sha256:…" # of the source file, so a later run knows it is the same image
51
+ resolution_confidence: "ok" # ok | low
52
+ locked_glyphs: ["g"] # signature letters; drift fails gates § 6
53
+ ```
54
+
55
+ ## Fields
56
+
57
+ - **`units_per_em`** — 1000 unless the build target asks for 2048.
58
+ - **`vertical`** — baseline, x-height, cap height, ascender, descender. The
59
+ vertical metrics tables are derived from these (gates § 2), never set apart
60
+ from them.
61
+ - **`stems`** — lowercase and capitals, vertical and horizontal. Every straight
62
+ stroke a construction rule draws takes its width from here.
63
+ - **`contrast`** and **`stress angle`** — the ratio of thin to thick on the
64
+ round letters and the axis it rotates around. A monoline face is `1.0` at
65
+ stress angle `0`.
66
+ - **`overshoot`** — how far round and pointed letters cross the baseline and the
67
+ x-height or cap height, as a share of that height.
68
+ - **`aperture`**, **`terminal`**, **`serif`** — the open letters' opening, how
69
+ strokes end, and what sits at their ends.
70
+ - **`spacing`** — sidebearings per edge class, set on H, n, O and o before any
71
+ other glyph (gates § 4).
72
+ - **`license`** — never filled by default (`SKILL.md` § License).
73
+ - **`source`** — path A only: the file, its rights class from the rights gate,
74
+ its digest, whether its resolution is enough for fidelity, and the locked
75
+ glyphs.
76
+
77
+ ## Coverage tiers
78
+
79
+ Defined by this skill, not copied from an external glyph-set definition. The
80
+ tier is written into the spec and into the QA report, and nothing claims a tier
81
+ it does not cover.
82
+
83
+ | Tier | Glyphs |
84
+ |---|---|
85
+ | `wordmark` | the letters present in the source, plus their alternates and ligatures, plus `space` and `.notdef` |
86
+ | `latin-basic` | A–Z, a–z, 0–9, `space`, `.notdef`, and `. , : ; ! ? ' " ‘ ’ “ ” - – — ( ) / & @ # % *` |
87
+ | `latin-de` | `latin-basic` plus ä ö ü Ä Ö Ü, both forms of sharp s (ß and ẞ), and the German quotation marks „ “ ‚ ‘ |
88
+
89
+ The coverage gate (gates § 1) lists every glyph the tier names and fails on any
90
+ that is absent.
@@ -0,0 +1,113 @@
1
+ # Gates — every one a peer-side command with a threshold
2
+
3
+ <!-- reference-toc:start (generated by generate_reference_toc — do not edit) -->
4
+ **Contents**
5
+
6
+ - [1. Outline hygiene and coverage](#1-outline-hygiene-and-coverage)
7
+ - [2. Vertical metrics](#2-vertical-metrics)
8
+ - [3. System consistency](#3-system-consistency)
9
+ - [4. Spacing before kerning](#4-spacing-before-kerning)
10
+ - [5. Rendered proof](#5-rendered-proof)
11
+ - [6. Source fidelity — path A](#6-source-fidelity--path-a)
12
+ - [7. Metric-matched fallback](#7-metric-matched-fallback)
13
+ <!-- reference-toc:end -->
14
+
15
+ Each gate runs in the toolchain environment (`toolchain.md`) against the built
16
+ UFO and the compiled `ttf`, prints its measured value beside its threshold, and
17
+ on failure prints a message naming the glyph and what to change in the spec.
18
+ A gate the run did not execute is reported as `not run`, never as passed.
19
+
20
+ The thresholds below are stated defaults (own analysis). The reconstruction
21
+ benchmark is what may move them; nothing else does.
22
+
23
+ ## 1. Outline hygiene and coverage
24
+
25
+ - **Every contour closed.** An open contour fails with the glyph and the point
26
+ index.
27
+ - **Counters per glyph** equal an expected table: o 1, e 1, a 1, b d p q 1,
28
+ A 1, D O P Q 1, R 1, B 2, 8 2, 0 1, 4 1 (closed form) or 0 (open form, as the
29
+ spec says), 6 1, 9 1, g 1 or 2 (single- or
30
+ double-storey, as the spec says). A filled or a doubled counter fails.
31
+ - **Points at extrema** on every curve, within 1 unit.
32
+ - **No contour under the size threshold** — an area below 0.05 % of the em
33
+ square is a stray fragment and fails.
34
+ - **Direction correct for the outline format** — outer contours clockwise in
35
+ TrueType (`glyf`) output and counter-clockwise in CFF output, counters wound
36
+ opposite to their outer contour in both.
37
+ - **Fill rule declared before overlap removal** — overlap removal runs on a
38
+ glyph only after its fill rule and contour directions are settled; running it
39
+ first is how a counter disappears.
40
+ - **Coverage** — every glyph the spec's tier names exists and is non-empty
41
+ (`space` excepted). A missing glyph fails with the tier and the name.
42
+
43
+ ## 2. Vertical metrics
44
+
45
+ - `OS/2` typo ascender, descender and line gap agree with `hhea` ascender,
46
+ descender and line gap.
47
+ - Both line gaps are `0`.
48
+ - `USE_TYPO_METRICS` (`OS/2.fsSelection` bit 7) is set.
49
+ - `usWinAscent` and `usWinDescent` cover the family's extremes: the highest and
50
+ lowest point of any glyph, diacritics included. A clipped extreme fails with
51
+ the glyph.
52
+
53
+ ## 3. System consistency
54
+
55
+ - **Stems by ray-cast at half x-height** — a horizontal ray at `x_height / 2`
56
+ across n h m u l i; every vertical stem it crosses is within **3 %** of the
57
+ spec's `lowercase_vertical`. Capitals the same at half cap height across
58
+ H I L E F T against `capital_vertical`.
59
+ - **Overshoot** — o O e c s reach **1 to 3 %** beyond baseline and x-height or
60
+ cap height, and within 0.5 % of the spec's `overshoot.round`; pointed apexes
61
+ (A V W v w) within 0.5 % of `overshoot.pointed`.
62
+ - **Ink area per glyph group** — the filled share of each glyph's advance box,
63
+ grouped (straight lowercase, round lowercase, capitals, figures), within
64
+ **±12 %** of its group's median. An outlier fails with the glyph.
65
+
66
+ ## 4. Spacing before kerning
67
+
68
+ - **Sidebearings from edge classes first** — straight, round and diagonal edges
69
+ take the spec's `spacing` values. Set them on H, n, O and o, check `HHOHH`
70
+ and `nnonn` in the proof, and only then propagate to the derived glyphs.
71
+ - **Kerning classes from edge groups only afterwards** — a kerning class is an
72
+ edge group, never a single glyph, except for a named exception pair.
73
+ - **Collision check** — render the kerning strings (`AVATAR`, `To`, `Ty`, `LT`,
74
+ `P.`, `r,`, `f)` and their German counterparts for `latin-de`) and fail on any
75
+ two glyphs whose outlines intersect.
76
+ - **Features built** — `kern`, `mark` (diacritic anchors), `liga` (where the
77
+ spec defines ligatures) and, where figures exist, `tnum`.
78
+ - **Shaping confirms the features apply** — shape the kerning strings, an
79
+ accented word and a ligature through the shaping binding and fail when the
80
+ shaped advances or glyph ids equal the unshaped ones.
81
+
82
+ ## 5. Rendered proof
83
+
84
+ The witness reading, not a gate script: `ui:render --profile asset` over the
85
+ proof SVG reads `loaded` for the new family (`SKILL.md` step 7). `error`,
86
+ `unloaded`, `timeout` or `synthesised` fails, and so does a reading with no text
87
+ in it — the shape an HTML target produces. The agent has looked at the PNG.
88
+
89
+ ## 6. Source fidelity — path A
90
+
91
+ Applies to path A only. On path B the QA report reads `not applicable` for this
92
+ gate, which is neither `not run` nor passed.
93
+
94
+ The wordmark text set in the new font, aligned to the source by baseline and
95
+ cap height, compared by **silhouette IoU** with the method `svg-authoring` uses
96
+ for a raster-to-vector conversion (saturated regions, registration recorded as
97
+ `x,y,w,h` in the source's pixel frame, scorer and sample resolution named).
98
+
99
+ - per glyph **≥ 0.90**
100
+ - per word **≥ 0.85**
101
+ - a **locked signature glyph ≥ 0.95**
102
+
103
+ Produce the diff overlay (source and render in two colours, overlap neutral) and
104
+ look at it. A source flagged `resolution_confidence: low` reports these numbers
105
+ but cannot pass this gate.
106
+
107
+ ## 7. Metric-matched fallback
108
+
109
+ Emit the fallback `@font-face` for the new family over a named local system face,
110
+ with `size-adjust`, `ascent-override`, `descent-override` and
111
+ `line-gap-override` derived from the built font's own tables — the derivation is
112
+ the one in `docs/guidelines/design-asset-discipline.md` (the swapped-face
113
+ bullet). That is what catalogue tell T12 asks a swapped webfont to carry.
@@ -0,0 +1,66 @@
1
+ # Toolchain — pinned, peer-side, never bundled
2
+
3
+ The package ships no Python and no font tooling. The type-design build runs in
4
+ an isolated environment **in the consumer's tree**, from the exact versions
5
+ below. A version moves only by a pull request that repeats the intake below for
6
+ the new version — never floating, never `latest`.
7
+
8
+ | Role | Package | Pin | License |
9
+ |---|---|---|---|
10
+ | outline library, compiler back end | `fonttools` | `fonttools==4.66.1` | MIT |
11
+ | path booleans (overlap removal) | `skia-pathops` | `skia-pathops==0.9.2` | BSD-3-Clause |
12
+ | UFO source library | `ufoLib2` | `ufoLib2==0.18.1` | Apache-2.0 |
13
+ | font compiler | `fontmake` | `fontmake==3.12.1` | Apache-2.0 |
14
+ | shaping binding (feature checks) | `uharfbuzz` | `uharfbuzz==0.56.2` | Apache-2.0 |
15
+ | raster tracer | `vtracer` | `vtracer==0.6.15` | MIT |
16
+
17
+ Write the pins to `.type-design/pins.txt` in the consumer tree:
18
+
19
+ ```text
20
+ fonttools==4.66.1
21
+ skia-pathops==0.9.2
22
+ ufoLib2==0.18.1
23
+ fontmake==3.12.1
24
+ uharfbuzz==0.56.2
25
+ vtracer==0.6.15
26
+ ```
27
+
28
+ Create a virtual environment under `.type-design/`, install that file into it
29
+ with the environment's own package installer, and freeze the resolved set to
30
+ `.type-design/pins.lock`.
31
+
32
+ Commit the lock file with the font sources: `fontmake` resolves further packages
33
+ (`ufo2ft`, `glyphsLib`, `fontMath`), and the lock records which ones built this
34
+ font. The raster tracer is MIT-licensed on purpose: a copyleft tracer is not the
35
+ default builder.
36
+
37
+ ## Intake record — 2026-10-18
38
+
39
+ Taken through `supply-chain-intake` against the live registry on 2026-10-18.
40
+ The figures below are as that run reported them; the raw registry and OSV
41
+ responses were not stored, so re-query the registry before relying on one.
42
+
43
+ | Pin | Exists | Published | Downloads, last month | Known vulnerabilities |
44
+ |---|---|---|---|---|
45
+ | `fonttools==4.66.1` | yes | 2026-09-29 | 189,260,520 | none |
46
+ | `skia-pathops==0.9.2` | yes | 2026-02-16 | 325,892 | none |
47
+ | `ufoLib2==0.18.1` | yes | 2025-07-10 | 79,359 | none |
48
+ | `fontmake==3.12.1` | yes | 2026-06-02 | 23,711 | none |
49
+ | `uharfbuzz==0.56.2` | yes | 2026-09-21 | 1,509,780 | none |
50
+ | `vtracer==0.6.15` | yes | 2026-03-23 | 477,912 | none |
51
+
52
+ - **Existence and publish date** — the registry's JSON API for each package
53
+ and version; none is yanked.
54
+ - **Age** — each pin is the newest release at least two weeks old on the intake
55
+ date. A newer release existed for `fonttools`, `ufoLib2`, `fontmake` and
56
+ `uharfbuzz` and was passed over for being days old.
57
+ - **Compatibility** — `fontmake==3.12.1` requires `ufoLib2>=0.18.1` and
58
+ `fonttools>=4.59.2`; `ufoLib2==0.18.1` requires `fonttools>=4.58.0`. All six
59
+ need Python 3.11 or newer because `fonttools` does.
60
+ - **Vulnerabilities** — the OSV database returned no advisory for any of the six
61
+ pinned versions. Run `pip-audit` over the frozen lock before the first build;
62
+ the intake covered the six named packages, not what they resolve.
63
+ - **Typo-adjacency** — each registry entry declares its source repository
64
+ (`fonttools/fonttools`, `fonttools/skia-pathops`, `fonttools/ufoLib2`,
65
+ `googlei18n/fontmake`, `trufont/uharfbuzz`, and visioncortex for `vtracer`);
66
+ `potracer` and `pypotrace` were considered for tracing and rejected as GPL.