@event4u/agent-config 14.22.0 → 15.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 (557) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +333 -356
  5. package/README.md +1 -1
  6. package/dist/agent-src/commands/agent-handoff.md +8 -7
  7. package/dist/agent-src/commands/agents/init.md +1 -1
  8. package/dist/agent-src/commands/agents/user/accept.md +4 -4
  9. package/dist/agent-src/commands/agents/user/delete.md +2 -2
  10. package/dist/agent-src/commands/agents/user/init.md +3 -3
  11. package/dist/agent-src/commands/agents/user/review.md +3 -3
  12. package/dist/agent-src/commands/agents/user/show.md +3 -3
  13. package/dist/agent-src/commands/agents/user/update.md +2 -2
  14. package/dist/agent-src/commands/agents/user.md +6 -6
  15. package/dist/agent-src/commands/analytics/prune.md +1 -1
  16. package/dist/agent-src/commands/analytics/show.md +2 -2
  17. package/dist/agent-src/commands/analyze/decision.md +2 -2
  18. package/dist/agent-src/commands/analyze/inbox.md +5 -5
  19. package/dist/agent-src/commands/analyze/incident.md +3 -3
  20. package/dist/agent-src/commands/analyze/near-miss.md +3 -3
  21. package/dist/agent-src/commands/analyze/postmortem.md +4 -4
  22. package/dist/agent-src/commands/analyze/premortem.md +2 -2
  23. package/dist/agent-src/commands/analyze.md +2 -2
  24. package/dist/agent-src/commands/bug/fix.md +1 -1
  25. package/dist/agent-src/commands/bug/investigate.md +2 -2
  26. package/dist/agent-src/commands/cost/profile.md +3 -3
  27. package/dist/agent-src/commands/design.md +1 -1
  28. package/dist/agent-src/commands/feature/explore.md +1 -1
  29. package/dist/agent-src/commands/feature/plan.md +2 -2
  30. package/dist/agent-src/commands/feature/roadmap.md +2 -2
  31. package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
  32. package/dist/agent-src/commands/ghostwriter/list.md +1 -1
  33. package/dist/agent-src/commands/ghostwriter/show.md +1 -1
  34. package/dist/agent-src/commands/ghostwriter/write.md +9 -9
  35. package/dist/agent-src/commands/humanize.md +6 -6
  36. package/dist/agent-src/commands/jira-ticket.md +1 -1
  37. package/dist/agent-src/commands/judge/solo.md +1 -1
  38. package/dist/agent-src/commands/judge.md +1 -1
  39. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
  40. package/dist/agent-src/commands/knowledge/forget.md +1 -1
  41. package/dist/agent-src/commands/knowledge/ingest.md +2 -2
  42. package/dist/agent-src/commands/knowledge/list.md +1 -1
  43. package/dist/agent-src/commands/memory/add.md +3 -3
  44. package/dist/agent-src/commands/memory/load.md +4 -4
  45. package/dist/agent-src/commands/memory/mine-session.md +1 -1
  46. package/dist/agent-src/commands/memory/promote.md +4 -4
  47. package/dist/agent-src/commands/memory/propose.md +2 -2
  48. package/dist/agent-src/commands/mode.md +5 -5
  49. package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
  50. package/dist/agent-src/commands/post-as/me.md +7 -7
  51. package/dist/agent-src/commands/pr/create.md +1 -1
  52. package/dist/agent-src/commands/pr/merge.md +48 -39
  53. package/dist/agent-src/commands/profile/activate.md +1 -1
  54. package/dist/agent-src/commands/profile/show.md +1 -1
  55. package/dist/agent-src/commands/research/deep.md +2 -2
  56. package/dist/agent-src/commands/research/report.md +2 -2
  57. package/dist/agent-src/commands/review/changes.md +1 -1
  58. package/dist/agent-src/commands/review/routing.md +1 -1
  59. package/dist/agent-src/commands/roadmap/create.md +1 -1
  60. package/dist/agent-src/commands/roadmap/materialize.md +2 -2
  61. package/dist/agent-src/commands/roadmap/next.md +9 -1
  62. package/dist/agent-src/commands/roadmap/process-full.md +2 -2
  63. package/dist/agent-src/commands/security-audit-config.md +3 -3
  64. package/dist/agent-src/commands/skill/preview.md +1 -1
  65. package/dist/agent-src/commands/skills/discover.md +1 -1
  66. package/dist/agent-src/commands/sync/agent-settings.md +2 -2
  67. package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
  68. package/dist/agent-src/commands/tests/create.md +1 -1
  69. package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
  70. package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
  71. package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
  72. package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
  73. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
  74. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
  75. package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
  76. package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
  77. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
  78. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  79. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +13 -1
  80. package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
  81. package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
  82. package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
  83. package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
  84. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
  85. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
  86. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
  87. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
  88. package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
  89. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
  90. package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
  91. package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
  92. package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
  93. package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
  94. package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
  95. package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
  96. package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
  97. package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
  98. package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
  99. package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
  100. package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
  101. package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
  102. package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
  103. package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
  104. package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
  105. package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
  106. package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
  107. package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
  108. package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
  109. package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
  110. package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  111. package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
  112. package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
  113. package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  114. package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
  115. package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
  116. package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
  117. package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  118. package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
  119. package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
  120. package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
  121. package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  122. package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
  123. package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
  124. package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
  125. package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
  126. package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
  127. package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
  128. package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
  129. package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
  130. package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
  131. package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
  132. package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
  133. package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
  134. package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
  135. package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
  136. package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
  137. package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
  138. package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  139. package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
  140. package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  141. package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  142. package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
  143. package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
  144. package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
  145. package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
  146. package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
  147. package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
  148. package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
  149. package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
  150. package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
  151. package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
  152. package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
  153. package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
  154. package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
  155. package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
  156. package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
  157. package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  158. package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
  159. package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
  160. package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
  161. package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
  162. package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
  163. package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
  164. package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
  165. package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
  166. package/dist/agent-src/guidelines/code-clarity.md +350 -0
  167. package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
  168. package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
  169. package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
  170. package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
  171. package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
  172. package/dist/agent-src/guidelines/design-canon.md +63 -0
  173. package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
  174. package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
  175. package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
  176. package/dist/agent-src/guidelines/design-modes.md +143 -0
  177. package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
  178. package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
  179. package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
  180. package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
  181. package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
  182. package/dist/agent-src/guidelines/php/api-design.md +115 -0
  183. package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
  184. package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
  185. package/dist/agent-src/guidelines/php/controllers.md +90 -0
  186. package/dist/agent-src/guidelines/php/database.md +194 -0
  187. package/dist/agent-src/guidelines/php/eloquent.md +208 -0
  188. package/dist/agent-src/guidelines/php/flux.md +80 -0
  189. package/dist/agent-src/guidelines/php/general.md +207 -0
  190. package/dist/agent-src/guidelines/php/git.md +164 -0
  191. package/dist/agent-src/guidelines/php/jobs.md +111 -0
  192. package/dist/agent-src/guidelines/php/livewire.md +71 -0
  193. package/dist/agent-src/guidelines/php/logging.md +79 -0
  194. package/dist/agent-src/guidelines/php/naming.md +89 -0
  195. package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
  196. package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
  197. package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
  198. package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
  199. package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
  200. package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
  201. package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
  202. package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
  203. package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
  204. package/dist/agent-src/guidelines/php/patterns.md +28 -0
  205. package/dist/agent-src/guidelines/php/performance.md +92 -0
  206. package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
  207. package/dist/agent-src/guidelines/php/resources.md +100 -0
  208. package/dist/agent-src/guidelines/php/security.md +110 -0
  209. package/dist/agent-src/guidelines/php/sql.md +97 -0
  210. package/dist/agent-src/guidelines/php/validations.md +119 -0
  211. package/dist/agent-src/guidelines/php/websocket.md +100 -0
  212. package/dist/agent-src/guidelines/prompt-templates.md +189 -0
  213. package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
  214. package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
  215. package/dist/agent-src/personas/README.md +1 -1
  216. package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
  217. package/dist/agent-src/personas/product-owner.md +1 -1
  218. package/dist/agent-src/rules/active-remediation.md +1 -1
  219. package/dist/agent-src/rules/architecture.md +2 -2
  220. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  221. package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
  222. package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
  223. package/dist/agent-src/rules/code-comment-discipline.md +2 -2
  224. package/dist/agent-src/rules/code-provenance.md +1 -1
  225. package/dist/agent-src/rules/content-quoting-floor.md +1 -1
  226. package/dist/agent-src/rules/context-hygiene.md +5 -5
  227. package/dist/agent-src/rules/cross-source-consistency.md +1 -1
  228. package/dist/agent-src/rules/design-fidelity.md +36 -46
  229. package/dist/agent-src/rules/direct-answers.md +2 -2
  230. package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
  231. package/dist/agent-src/rules/evaluator-independence.md +1 -1
  232. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
  233. package/dist/agent-src/rules/icon-consistency.md +5 -1
  234. package/dist/agent-src/rules/improve-before-implement.md +1 -1
  235. package/dist/agent-src/rules/language-and-tone.md +3 -3
  236. package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
  237. package/dist/agent-src/rules/notes-first-reasoning.md +36 -25
  238. package/dist/agent-src/rules/recurring-criticism.md +1 -1
  239. package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
  240. package/dist/agent-src/rules/role-mode-adherence.md +2 -2
  241. package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
  242. package/dist/agent-src/rules/size-enforcement.md +1 -1
  243. package/dist/agent-src/rules/source-confidentiality.md +2 -2
  244. package/dist/agent-src/rules/think-before-action.md +1 -1
  245. package/dist/agent-src/rules/token-efficiency.md +7 -5
  246. package/dist/agent-src/rules/ui-audit-gate.md +3 -2
  247. package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
  248. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  249. package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
  250. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  251. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  252. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
  253. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  254. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  255. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
  256. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  257. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  258. package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
  259. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -1
  260. package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
  261. package/dist/agent-src/skills/code-review/SKILL.md +3 -3
  262. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  263. package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
  264. package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
  265. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  266. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
  267. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  268. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
  269. package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
  270. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  271. package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
  272. package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
  273. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  274. package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
  275. package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
  276. package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
  277. package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
  278. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
  279. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  280. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
  281. package/dist/agent-src/skills/design-review/SKILL.md +4 -4
  282. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
  283. package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
  284. package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
  285. package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
  286. package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
  287. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
  288. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
  289. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
  290. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
  291. package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
  292. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  293. package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
  294. package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
  295. package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
  296. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
  297. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  298. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  299. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  300. package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
  301. package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
  302. package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
  303. package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
  304. package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +9 -0
  305. package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
  306. package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
  307. package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
  308. package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
  309. package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
  310. package/dist/agent-src/skills/iconography/SKILL.md +3 -3
  311. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  312. package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
  313. package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
  314. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
  315. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  316. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  317. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  318. package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
  319. package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
  320. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  321. package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
  322. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  323. package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
  324. package/dist/agent-src/skills/org-design/SKILL.md +1 -1
  325. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
  326. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  327. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  328. package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
  329. package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
  330. package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
  331. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
  332. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  333. package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
  334. package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
  335. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
  336. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  337. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
  338. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  339. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  340. package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
  341. package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
  342. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  343. package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
  344. package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
  345. package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
  346. package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
  347. package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
  348. package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
  349. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  350. package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
  351. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
  352. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
  353. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
  354. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  355. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
  356. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  357. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +60 -4
  358. package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
  359. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  360. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  361. package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
  362. package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
  363. package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
  364. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  365. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  366. package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
  367. package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
  368. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
  369. package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
  370. package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
  371. package/dist/agent-src/templates/agent-settings.md +6 -6
  372. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  373. package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
  374. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  375. package/dist/agent-src/templates/roadmaps.md +1 -1
  376. package/dist/agent-src/templates/scripts/README.md +2 -2
  377. package/dist/agent-src/user-types/_template/user-type.md +1 -1
  378. package/dist/cli/registry.js +1 -1
  379. package/dist/cli-delegate/archive_completed_roadmaps.js +52 -4
  380. package/dist/cli-delegate/check_update_banner.js +12 -1
  381. package/dist/cli-delegate/{chunk-TGIPZBCW.js → chunk-2KKXJW25.js} +22 -8
  382. package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
  383. package/dist/cli-delegate/{chunk-4FS4WRXP.js → chunk-3FKR64R5.js} +34 -6
  384. package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
  385. package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
  386. package/dist/cli-delegate/{chunk-BIXEDQPZ.js → chunk-AK6HODNQ.js} +4 -4
  387. package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
  388. package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
  389. package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
  390. package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
  391. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  392. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  393. package/dist/cli-delegate/cmd_conformance.js +3 -3
  394. package/dist/cli-delegate/cmd_doctor.js +3 -3
  395. package/dist/cli-delegate/cmd_explain.js +2 -2
  396. package/dist/cli-delegate/cmd_export.js +4 -4
  397. package/dist/cli-delegate/cmd_handoff.js +24 -16
  398. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  399. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  400. package/dist/cli-delegate/cmd_migrate.js +2 -2
  401. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  402. package/dist/cli-delegate/cmd_prune.js +4 -4
  403. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  404. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  405. package/dist/cli-delegate/cmd_session_recycle.js +4 -14
  406. package/dist/cli-delegate/cmd_settings_get.js +15 -9
  407. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  408. package/dist/cli-delegate/cmd_settings_set.js +41 -11
  409. package/dist/cli-delegate/cmd_sync.js +4 -4
  410. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  411. package/dist/cli-delegate/cmd_update.js +1 -1
  412. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  413. package/dist/cli-delegate/cmd_validate.js +4 -4
  414. package/dist/cli-delegate/cmd_versions.js +1 -1
  415. package/dist/discovery/deprecation-report.md +1 -1
  416. package/dist/discovery/discovery-manifest.json +27 -80
  417. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  418. package/dist/discovery/discovery-manifest.summary.md +3 -3
  419. package/dist/discovery/dormancy-report.md +1 -1
  420. package/dist/discovery/orphan-report.md +1 -1
  421. package/dist/discovery/packs.json +5 -7
  422. package/dist/discovery/trust-report.md +2 -2
  423. package/dist/discovery/workspaces.json +4 -6
  424. package/dist/hooks/dispatch.js +9249 -8981
  425. package/dist/install/install.mjs +47 -8
  426. package/dist/mcp/registry-manifest.json +3 -3
  427. package/dist/mcp/server.json +2 -2
  428. package/dist/mcp/server.mjs +5496 -2400
  429. package/dist/router.json +1 -1
  430. package/dist/scripts/_lib/agent_settings.js +73 -0
  431. package/dist/scripts/_lib/agent_src.js +20 -0
  432. package/dist/scripts/_lib/guidelines_lane.js +158 -0
  433. package/dist/scripts/_lib/lean_projection_mode.js +108 -0
  434. package/dist/scripts/_lib/router_match.js +243 -0
  435. package/dist/scripts/_lib/rule_injection.js +216 -0
  436. package/dist/scripts/condense.js +22 -25
  437. package/dist/scripts/project_thin_rules.js +139 -19
  438. package/dist/server/io/yamlIO.js +125 -17
  439. package/dist/server/schemas/settings.js +32 -5
  440. package/dist/shared/settingsSurface.js +6 -1
  441. package/docs/MIGRATION.md +56 -0
  442. package/docs/contracts/settings-classes.md +48 -7
  443. package/docs/guidelines/abstraction-thresholds.md +35 -0
  444. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
  445. package/docs/guidelines/agent-infra/false-green.md +2 -2
  446. package/docs/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
  447. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  448. package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
  449. package/docs/guidelines/design-fidelity-mechanics.md +4 -0
  450. package/docs/guidelines/design-fidelity-routing.md +78 -0
  451. package/docs/guidelines/design-reconciliation.md +172 -0
  452. package/docs/guidelines/gtm-handoff.md +2 -2
  453. package/docs/guidelines/wing4-handoff.md +2 -2
  454. package/llms.txt +1 -1
  455. package/package.json +7 -3
  456. package/src/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
  457. package/src/config/agent-settings.template.yml +94 -1
  458. package/src/config/ci-local-parity.yml +34 -0
  459. package/src/config/continuity-surface.json +8 -29
  460. package/src/config/evaluator-budgets.json +4 -4
  461. package/src/config/gate-coverage.yml +31 -8
  462. package/src/config/gate-reachability-exemptions.json +1 -0
  463. package/src/config/gate-violation-baselines.json +3 -3
  464. package/src/config/hook-token-budget.json +8 -7
  465. package/src/config/host-injection-effect.json +2 -2
  466. package/src/config/pack-size-budget.json +55 -4
  467. package/src/config/packed-binary-manifest.json +1 -1
  468. package/src/config/platform-anchor.json +47 -0
  469. package/src/config/preamble-payload-budget.json +2 -3
  470. package/src/config/publish-surface.json +4 -2
  471. package/src/config/ratification-policy.json +7 -0
  472. package/src/config/routing-coverage-seed.json +9 -2
  473. package/src/config/rule-stub-ceilings.json +16 -9
  474. package/src/scripts/_cli/cmd_session_recycle.ts +2 -25
  475. package/src/scripts/_cli/cmd_settings_get.ts +22 -7
  476. package/src/scripts/_cli/handoff_sessions.ts +14 -44
  477. package/src/scripts/_lib/agent_settings.ts +85 -0
  478. package/src/scripts/_lib/agent_src.ts +21 -0
  479. package/src/scripts/_lib/artifact_maturity.ts +242 -0
  480. package/src/scripts/_lib/conformance_report.ts +403 -0
  481. package/src/scripts/_lib/continuity_slot.ts +295 -0
  482. package/src/scripts/_lib/continuity_writer.ts +312 -0
  483. package/src/scripts/_lib/design_system_import.ts +20 -0
  484. package/src/scripts/_lib/design_tolerance.ts +281 -0
  485. package/src/scripts/_lib/guidelines_lane.ts +164 -0
  486. package/src/scripts/_lib/hook_settings.ts +85 -0
  487. package/src/scripts/_lib/lean_projection_mode.ts +127 -0
  488. package/src/scripts/_lib/obligation_frequency.ts +2 -3
  489. package/src/scripts/_lib/packed_binary_predicate.ts +37 -0
  490. package/src/scripts/_lib/platform_anchor.ts +1053 -0
  491. package/src/scripts/_lib/ratification_artifact.ts +278 -0
  492. package/src/scripts/_lib/recycle_envelope_paths.ts +109 -21
  493. package/src/scripts/_lib/regression_neighbourhood.ts +159 -22
  494. package/src/scripts/_lib/security_lint.ts +23 -2
  495. package/src/scripts/_lib/self_repair.ts +21 -0
  496. package/src/scripts/_lib/session_eol.ts +44 -0
  497. package/src/scripts/_lib/session_index_trust.ts +387 -0
  498. package/src/scripts/_lib/standing_bound_ratchet.ts +220 -0
  499. package/src/scripts/_lib/tolerance_shadow.ts +177 -0
  500. package/src/scripts/_lib/vendored_grammar_upstream.ts +280 -0
  501. package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
  502. package/src/scripts/audit_mcp_tools.ts +69 -25
  503. package/src/scripts/autonomy_friction_traffic.ts +379 -0
  504. package/src/scripts/build_mcp_catalog.ts +24 -1
  505. package/src/scripts/check_host_tree_parity.ts +291 -0
  506. package/src/scripts/check_kernel_edit_ratified.ts +462 -0
  507. package/src/scripts/check_loss_class_declared.ts +793 -46
  508. package/src/scripts/check_platform_anchor.ts +390 -0
  509. package/src/scripts/check_preamble_payload_budget.ts +424 -7
  510. package/src/scripts/check_projected_rule_routes.ts +395 -0
  511. package/src/scripts/check_rule_projection_integrity.ts +102 -2
  512. package/src/scripts/ci_settle.ts +205 -5
  513. package/src/scripts/code_graph/build.ts +79 -0
  514. package/src/scripts/code_graph/cli.ts +264 -7
  515. package/src/scripts/code_graph/detect.ts +38 -0
  516. package/src/scripts/code_graph/query.ts +25 -2
  517. package/src/scripts/code_graph/sqlite_store.ts +16 -1
  518. package/src/scripts/code_graph/types.ts +52 -3
  519. package/src/scripts/code_graph/validate.ts +3 -1
  520. package/src/scripts/code_graph/verbs.ts +590 -0
  521. package/src/scripts/condense.ts +22 -26
  522. package/src/scripts/generate_host_cost_table.ts +354 -0
  523. package/src/scripts/handoff_context_hook.ts +39 -1
  524. package/src/scripts/hook_manifest.json +1 -1
  525. package/src/scripts/hook_manifest.yaml +59 -28
  526. package/src/scripts/hooks/block_speaking_inbox_dir.ts +182 -16
  527. package/src/scripts/hooks/category_a.ts +1 -1
  528. package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
  529. package/src/scripts/hooks/code_graph_context_hook.ts +7 -18
  530. package/src/scripts/hooks/push_settle_hook.ts +3 -2
  531. package/src/scripts/hooks/rule_inject_hook.ts +107 -20
  532. package/src/scripts/hooks/session_eol_hook.ts +177 -145
  533. package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
  534. package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
  535. package/src/scripts/hot_context_hook.ts +103 -408
  536. package/src/scripts/lint_evidence_artifacts.ts +1 -0
  537. package/src/scripts/lint_knowledge_scale.ts +0 -26
  538. package/src/scripts/lint_roadmap_blockers.ts +164 -1
  539. package/src/scripts/mcp_server/consumer_tool_catalog.json +152 -2
  540. package/src/scripts/mcp_server/graph_tools.ts +294 -0
  541. package/src/scripts/mcp_server/path_util.ts +31 -0
  542. package/src/scripts/mcp_server/tool_catalog_source.ts +7 -1
  543. package/src/scripts/mcp_server/tools.ts +3 -13
  544. package/src/scripts/memory_lookup.ts +9 -9
  545. package/src/scripts/model_rule_injection.ts +61 -4
  546. package/src/scripts/project_thin_rules.ts +149 -16
  547. package/src/scripts/report_standing_payload_by_host.ts +650 -0
  548. package/src/scripts/schemas/agent-settings.schema.json +7 -1
  549. package/src/scripts/session_memory_index.ts +86 -8
  550. package/src/scripts/sync_agent_settings.ts +270 -10
  551. package/src/server/io/yamlIO.ts +127 -17
  552. package/src/server/schemas/settings.ts +45 -6
  553. package/src/shared/settingsSurface.ts +13 -2
  554. package/src/templates/compact-instructions.md +8 -3
  555. package/src/vendor/grammars/README.md +27 -2
  556. package/dist/agent-src/commands/chat-history/import.md +0 -170
  557. package/dist/agent-src/commands/chat-history.md +0 -63
@@ -18,7 +18,24 @@
18
18
  * bucket has no local source at all — the census reports that one as an explicit
19
19
  * residual rather than pretending to measure it.
20
20
  *
21
- * Exit codes: 0 within budget · 1 over budget · 2 misuse / unreadable budget.
21
+ * THE BOUND IS SHRINK-ONLY, AND NOW CHECKED
22
+ * ------------------------------------------
23
+ * `ci_delivery.why_a_grace_ceiling` says of the grace ceiling *"It may never
24
+ * move UP"*, and `grace_ceiling_history` in the same file records it moving up
25
+ * twice. ADR-264 resolved that against the practice — the sentence stands — and
26
+ * left the sentence unenforced, which is exactly the state that produced both
27
+ * raises. `_lib/standing_bound_ratchet.ts` is the enforcement: the effective
28
+ * ceiling is compared against the one at the base ref and a rise refuses the run,
29
+ * whether it arrived by editing the config or by passing a bigger `--ceiling`.
30
+ *
31
+ * It is also ALL that `road-to-a-standing-budget-with-headroom` step 1.3 ships.
32
+ * That step designed a 128-token Iron Law reserve; an AI council refused to
33
+ * activate it 2/2 on 2026-09-08 because the verifier is inside the change under
34
+ * review, so a protected approval record grants nothing. ADR-265 carries the
35
+ * verdict and the activation prerequisites.
36
+ *
37
+ * Exit codes: 0 within budget · 1 over budget or the bound rose · 2 misuse /
38
+ * unreadable budget.
22
39
  */
23
40
  import { execFileSync } from 'node:child_process';
24
41
  import * as fs from 'node:fs';
@@ -28,7 +45,15 @@ import * as path from 'node:path';
28
45
  import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
29
46
  import { censusClaudeMdHierarchy, censusRuleDir, censusSkillsCatalog } from './preamble_byte_census.js';
30
47
  import { PREFIX_STABLE_SURFACES, prefixStableRoots } from './_lib/prefix_stable_surfaces.js';
48
+ import { HOST_SURFACES } from './_lib/host_projection_reach.js';
31
49
  import { attributeGrowth, buildLedger, renderAttribution } from './_lib/asset_delivery_ledger.js';
50
+ import { resolveBaseRef } from './_lib/ratchet_base_ref.js';
51
+ import {
52
+ assertBoundsDidNotRise,
53
+ type BoundsRatchetVerdict,
54
+ type GitRunner,
55
+ realGit,
56
+ } from './_lib/standing_bound_ratchet.js';
32
57
 
33
58
  const HERE = path.dirname(new URL(import.meta.url).pathname);
34
59
  const REPO_ROOT = path.resolve(HERE, '..', '..');
@@ -38,6 +63,15 @@ interface Budget {
38
63
  baseline_tokens: number;
39
64
  headroom_pct: number;
40
65
  target_tokens: { median: number; p95: number };
66
+ /**
67
+ * `ci_delivery.grace_ceiling`, or `null` when the file carries none.
68
+ *
69
+ * Read here only so the shrink-only ratchet has a head-side value on a local
70
+ * run that passes no `--ceiling`. The number the payload is COMPARED against
71
+ * still arrives through the flag, so this does not become a second home for
72
+ * the ceiling.
73
+ */
74
+ grace_ceiling: number | null;
41
75
  }
42
76
 
43
77
  export interface BudgetVerdict {
@@ -60,10 +94,13 @@ export function readBudget(file: string = BUDGET_FILE): Budget {
60
94
  throw new Error(`${file}: baseline_tokens and headroom_pct must both be numbers`);
61
95
  }
62
96
  const target = (raw['target_tokens'] ?? {}) as Record<string, unknown>;
97
+ const delivery = (raw['ci_delivery'] ?? {}) as Record<string, unknown>;
98
+ const grace = Number(delivery['grace_ceiling']);
63
99
  return {
64
100
  baseline_tokens: baseline,
65
101
  headroom_pct: headroom,
66
102
  target_tokens: { median: Number(target['median']), p95: Number(target['p95']) },
103
+ grace_ceiling: Number.isFinite(grace) ? grace : null,
67
104
  };
68
105
  }
69
106
 
@@ -113,6 +150,174 @@ export function measureDeterministicPayload(
113
150
  ];
114
151
  }
115
152
 
153
+ /**
154
+ * THE HOST READING — additive, and deliberately not the ratchet's surface.
155
+ *
156
+ * `measureDeterministicPayload` above measures `dist/agent-src/rules`: the
157
+ * projection SOURCE. That is the right surface for the shrink-only ratchet,
158
+ * because the source is what every host tree is written FROM and what a pull
159
+ * request actually edits. It is the wrong surface for one question: how many
160
+ * standing tokens does a session on host X start with? Under a per-host
161
+ * `delivery` projection the two answers diverge by design — measured 2026-09-07,
162
+ * `.claude/rules` went 99,598 tok to 24,166 tok while the source stayed at
163
+ * 138,200 either side of the flip.
164
+ *
165
+ * So this adds a SECOND reading and changes nothing about the first. AI council
166
+ * of 2026-09-09 (2/2 present, converged on option 1A):
167
+ *
168
+ * - the no-argument source measurement, the blocking CI invocation, the
169
+ * `task ci` invocation and the base-ref ratchet are untouched, so no
170
+ * existing baseline or history entry is reinterpreted;
171
+ * - the host reading is reported alongside and NEVER changes the exit code —
172
+ * an informational census, not a second gate.
173
+ *
174
+ * Both seats were explicit that the host id must resolve through the existing
175
+ * projection registry rather than a path map invented here, which is why the
176
+ * roots come from `HOST_SURFACES` in `_lib/host_projection_reach.ts` — the same
177
+ * committed constant `check_host_projection_reach` walks.
178
+ */
179
+ export interface HostPayload {
180
+ /** The host id as given, or `null` when a raw rules-dir override was used. */
181
+ host: string | null;
182
+ /** Repo-relative rules root actually measured. */
183
+ rules_path: string;
184
+ buckets: Array<{ name: string; tokens: number; files: number }>;
185
+ total: number;
186
+ /**
187
+ * Rule files in the host tree, against rule files in the projection source.
188
+ *
189
+ * A maintainer checkout is NOT a consumer install and its host tree is
190
+ * routinely smaller for reasons that have nothing to do with a projection
191
+ * mode: the installer deduplicates a project rule against the same rule
192
+ * already present at user scope, and a dev tree may hold a partial
193
+ * projection. Measured in this repository 2026-09-09: 13 files under
194
+ * `.claude/rules` against 119 in `dist/agent-src/rules`.
195
+ *
196
+ * A bare token total cannot tell a genuine saving from a tree that was never
197
+ * fully written, and those two send a reader to completely different places.
198
+ * So the counts travel with the number, and `complete` is false whenever the
199
+ * host tree holds fewer rule files than the source.
200
+ */
201
+ completeness: { host_rule_files: number; source_rule_files: number; complete: boolean };
202
+ }
203
+
204
+ /** Every host id this reading accepts, in registry order. */
205
+ export function hostPayloadIds(): string[] {
206
+ return HOST_SURFACES.map((h) => h.id);
207
+ }
208
+
209
+ /**
210
+ * Split a host declared projections into the standing-payload buckets.
211
+ *
212
+ * Classification is derived from the registry rather than restated: a projection
213
+ * ending in `/skills` is the skills catalogue, one ending in `/commands` is
214
+ * EXCLUDED because a command is invoked rather than standing, and whatever
215
+ * remains is the rules surface — a directory on the per-rule hosts, a single
216
+ * `.md` file on the single-surface hosts, which is also that host root
217
+ * instruction file.
218
+ *
219
+ * The one conditional is `claude-code`, and it is a conditional rather than a
220
+ * map row: the `CLAUDE.md` / `CLAUDE.local.md` pair is already declared in
221
+ * `PREFIX_STABLE_SURFACES` as `project-claude-md` and `project-claude-local-md`,
222
+ * it is that host root instruction file, and no other host reads it.
223
+ */
224
+ export function hostPayloadRoots(hostId: string): {
225
+ rules: string;
226
+ skills: string | null;
227
+ claudeMd: boolean;
228
+ } {
229
+ const surface = HOST_SURFACES.find((h) => h.id === hostId);
230
+ if (surface === undefined) {
231
+ throw new Error(
232
+ `unknown host '${hostId}' — known ids: ${hostPayloadIds().join(', ')}. ` +
233
+ 'The set is HOST_SURFACES in _lib/host_projection_reach.ts; a host absent there has no ' +
234
+ 'declared projection for this reading to measure.',
235
+ );
236
+ }
237
+ const skills = surface.projections.find((r) => r.endsWith('/skills')) ?? null;
238
+ const rules = surface.projections.find(
239
+ (r) => !r.endsWith('/skills') && !r.endsWith('/commands'),
240
+ );
241
+ if (rules === undefined) {
242
+ throw new Error(
243
+ `host '${hostId}' declares no rules-bearing projection in HOST_SURFACES ` +
244
+ `(projections: ${surface.projections.join(', ') || 'none'}) — nothing to measure`,
245
+ );
246
+ }
247
+ return { rules, skills, claudeMd: hostId === 'claude-code' };
248
+ }
249
+
250
+ /** Char count for one root, whether it is a rules directory or a single file. */
251
+ function charsAtRoot(abs: string): { chars: number; files: number } {
252
+ let st: fs.Stats;
253
+ try {
254
+ st = fs.statSync(abs);
255
+ } catch {
256
+ return { chars: 0, files: 0 };
257
+ }
258
+ if (st.isFile()) return { chars: fs.readFileSync(abs, 'utf-8').length, files: 1 };
259
+ const c = censusRuleDir(abs);
260
+ return { chars: c.chars, files: c.files };
261
+ }
262
+
263
+ /**
264
+ * Measure the standing payload of the tree ONE host loads.
265
+ *
266
+ * `rulesDirOverride` is the low-level escape for a tree no host id names — a
267
+ * fixture, a consumer-shaped root, a comparison against a never-flipped tree.
268
+ * It is mutually exclusive with `host` at the CLI layer.
269
+ */
270
+ export function measureHostPayload(
271
+ repoRoot: string,
272
+ opts: { host?: string; rulesDirOverride?: string },
273
+ ): HostPayload {
274
+ const roots = opts.rulesDirOverride === undefined ? hostPayloadRoots(opts.host ?? '') : null;
275
+ const rulesRel = opts.rulesDirOverride ?? (roots as { rules: string }).rules;
276
+ const rulesAbs = path.isAbsolute(rulesRel) ? rulesRel : path.join(repoRoot, rulesRel);
277
+ if (!fs.existsSync(rulesAbs)) {
278
+ throw new Error(
279
+ `rules root '${rulesRel}' does not exist under ${repoRoot} — a host tree that was never ` +
280
+ 'projected reads as zero tokens, which is indistinguishable from a tiny one, so this ' +
281
+ 'refuses rather than reporting a green nothing',
282
+ );
283
+ }
284
+ const buckets: Array<{ name: string; tokens: number; files: number }> = [];
285
+ const rulesCensus = charsAtRoot(rulesAbs);
286
+ buckets.push({
287
+ name: `rules (${rulesRel})`,
288
+ tokens: tokens(rulesCensus.chars),
289
+ files: rulesCensus.files,
290
+ });
291
+
292
+ if (roots !== null && roots.skills !== null) {
293
+ const sk = censusSkillsCatalog(path.join(repoRoot, roots.skills));
294
+ buckets.push({
295
+ name: `skills catalog (${roots.skills})`,
296
+ tokens: tokens(sk.chars),
297
+ files: sk.skills,
298
+ });
299
+ }
300
+ if (roots !== null && roots.claudeMd) {
301
+ const md = censusClaudeMdHierarchy(repoRoot, path.join(repoRoot, '.no-such-home'));
302
+ const chars = md.project_claude_md_chars + md.project_claude_local_md_chars;
303
+ const files =
304
+ (md.project_claude_md_present ? 1 : 0) + (md.project_claude_local_md_present ? 1 : 0);
305
+ buckets.push({ name: 'CLAUDE.md hierarchy (project only)', tokens: tokens(chars), files });
306
+ }
307
+ const sourceRules = censusRuleDir(path.join(repoRoot, surfaceRoot('project-scope-rules')));
308
+ return {
309
+ host: opts.rulesDirOverride === undefined ? (opts.host ?? null) : null,
310
+ rules_path: rulesRel,
311
+ buckets,
312
+ total: buckets.reduce((n, b) => n + b.tokens, 0),
313
+ completeness: {
314
+ host_rule_files: rulesCensus.files,
315
+ source_rule_files: sourceRules.files,
316
+ complete: rulesCensus.files >= sourceRules.files,
317
+ },
318
+ };
319
+ }
320
+
116
321
  /**
117
322
  * A caller-supplied ceiling, and the one direction it may go.
118
323
  *
@@ -142,6 +347,50 @@ export function evaluate(repoRoot?: string, budgetFile?: string, overrideCeiling
142
347
  return { measured, baseline: budget.baseline_tokens, ceiling, withinBudget: measured <= ceiling, buckets };
143
348
  }
144
349
 
350
+ /**
351
+ * The measurement plus the shrink-only bound check.
352
+ *
353
+ * `evaluate` above answers "how big is the tree" and touches no ref;
354
+ * this answers "may this tree ship" and needs the base one. They stay separate
355
+ * because a census that silently depended on a remote ref would behave
356
+ * differently in a shallow clone, and the census is the half other callers use.
357
+ */
358
+ export interface Decision {
359
+ verdict: BudgetVerdict;
360
+ bounds: BoundsRatchetVerdict;
361
+ /** False when the payload is over the ceiling, or the ceiling itself rose. */
362
+ ok: boolean;
363
+ }
364
+
365
+ export interface DecideOptions {
366
+ repoRoot?: string;
367
+ budgetFile?: string;
368
+ overrideCeiling?: number;
369
+ env?: NodeJS.ProcessEnv;
370
+ git?: GitRunner;
371
+ /** Test seam: pin the base ref instead of resolving it. `null` = none resolved. */
372
+ baseRef?: string | null;
373
+ /** Refuse instead of skipping when the shrink-only bound cannot be verified. */
374
+ requireBase?: boolean;
375
+ }
376
+
377
+ export function decide(opts: DecideOptions = {}): Decision {
378
+ const repoRoot = opts.repoRoot ?? REPO_ROOT;
379
+ const git = opts.git ?? realGit;
380
+ const budget = readBudget(opts.budgetFile);
381
+ const verdict = evaluate(repoRoot, opts.budgetFile, opts.overrideCeiling);
382
+ const baseRef =
383
+ opts.baseRef !== undefined ? opts.baseRef : resolveBaseRef(repoRoot, opts.env ?? process.env, git);
384
+ const bounds = assertBoundsDidNotRise({
385
+ repoRoot,
386
+ baseRef,
387
+ git,
388
+ headGraceCeiling: opts.overrideCeiling ?? budget.grace_ceiling ?? 0,
389
+ requireBase: opts.requireBase === true,
390
+ });
391
+ return { verdict, bounds, ok: bounds.ok && verdict.withinBudget };
392
+ }
393
+
145
394
  /**
146
395
  * Per-asset attribution for a refusal, against the merge-base tree.
147
396
  *
@@ -203,6 +452,46 @@ function attributeGrowthAgainstBase(): string[] | null {
203
452
  }
204
453
  }
205
454
 
455
+ /** The stderr header for a refused bound. Exported so both refusals are testable. */
456
+ export function boundsRefusalHeader(b: BoundsRatchetVerdict): string {
457
+ return b.verified
458
+ ? '❌ the standing-payload ceiling rose in this change:\n'
459
+ : '❌ the standing-payload ceiling could not be VERIFIED, and this run requires it:\n';
460
+ }
461
+
462
+ /**
463
+ * The bound check, rendered for a human — on BOTH paths, green and red.
464
+ *
465
+ * A check that only speaks when it fails is a check nobody audits until it is
466
+ * already load-bearing. Printing the compared ref and the earlier bound on the
467
+ * passing path is also the only way a reader can tell "verified and unchanged"
468
+ * from "skipped because no base ref resolved", which are different facts.
469
+ *
470
+ * THREE STATES, not two, and the third is why this was rewritten. An
471
+ * unverifiable bound and a risen one are both `ok: false` and need opposite
472
+ * actions — repair the checkout, or lower the addition. The first cut of the
473
+ * enforcing posture rendered both as `ROSE`, which a completion review caught:
474
+ * it sends an operator to shrink a rule over a fetch problem. `SKIPPED` is
475
+ * reserved for the ADVISORY skip, where nothing was refused at all.
476
+ */
477
+ export function renderBounds(b: BoundsRatchetVerdict): string {
478
+ if (b.note !== null && b.ok) {
479
+ return ` ${'grace ceiling ratchet'.padEnd(38)} ${'SKIPPED'.padStart(8)} — ${b.note}\n`;
480
+ }
481
+ if (!b.verified) {
482
+ return (
483
+ ` ${'grace ceiling ratchet'.padEnd(38)} ${'UNVERIFIED'.padStart(8)} — ` +
484
+ `${b.note ?? 'the bound could not be read'} (this run requires it)\n`
485
+ );
486
+ }
487
+ const base = b.baseGraceCeiling === null ? 'n/a' : String(b.baseGraceCeiling);
488
+ const state = b.ok ? 'ok' : 'ROSE';
489
+ return (
490
+ ` ${'grace ceiling ratchet'.padEnd(38)} ${state.padStart(8)} — ` +
491
+ `${base} at ${b.baseRef ?? 'n/a'}, shrink-only (ADR-264)\n`
492
+ );
493
+ }
494
+
206
495
  export function main(argv: string[] = process.argv.slice(2)): number {
207
496
  const json = argv.includes('--format=json') || argv.includes('--json');
208
497
  // `--ceiling <n>`: the grace ceiling the CI step reads out of
@@ -211,13 +500,69 @@ export function main(argv: string[] = process.argv.slice(2)): number {
211
500
  // tighter-than-design value is IGNORED rather than honoured — see `evaluate`.
212
501
  const ci = argv.indexOf('--ceiling');
213
502
  const override = ci !== -1 && argv[ci + 1] !== undefined ? Number(argv[ci + 1]) : undefined;
214
- let verdict: BudgetVerdict;
503
+
504
+ // `--require-base`: refuse instead of skipping when the shrink-only bound
505
+ // cannot be verified. An AI council (2/2, 2026-09-10) made this blocking
506
+ // before the ceiling may be measured at the base ref rather than stored,
507
+ // because an unreadable base costs a comparison today and would grant an
508
+ // unbounded budget there. Opt-in rather than the default, and rather than
509
+ // derived from `GITHUB_ACTIONS`: a shallow clone, a first commit and a
510
+ // detached build all legitimately have no base, and a gate that reds on a
511
+ // developer's machine gets switched off.
512
+ const requireBase = argv.includes('--require-base');
513
+
514
+ // `--host <id>` / `--project-rules-dir <path>`: the additive host reading
515
+ // (AI council 2026-09-09, option 1A). Mutually exclusive on purpose — a call
516
+ // passing both is asking two different questions and would silently get one
517
+ // answer, so it is a usage error rather than a precedence rule nobody reads.
518
+ const hi = argv.indexOf('--host');
519
+ const hostArg = hi !== -1 ? argv[hi + 1] : undefined;
520
+ const pi = argv.indexOf('--project-rules-dir');
521
+ const rulesDirArg = pi !== -1 ? argv[pi + 1] : undefined;
522
+ if (hostArg !== undefined && rulesDirArg !== undefined) {
523
+ process.stderr.write(
524
+ '❌ preamble-payload budget: --host and --project-rules-dir are mutually exclusive. ' +
525
+ 'Pass a host id to measure a declared projection, or a path to measure an ' +
526
+ 'undeclared tree — never both.\n',
527
+ );
528
+ return 2;
529
+ }
530
+ if (hi !== -1 && (hostArg === undefined || hostArg.startsWith('--'))) {
531
+ process.stderr.write(
532
+ `❌ preamble-payload budget: --host needs an id — one of ${hostPayloadIds().join(', ')}.\n`,
533
+ );
534
+ return 2;
535
+ }
536
+ if (pi !== -1 && (rulesDirArg === undefined || rulesDirArg.startsWith('--'))) {
537
+ process.stderr.write('❌ preamble-payload budget: --project-rules-dir needs a path.\n');
538
+ return 2;
539
+ }
540
+ let host: HostPayload | null = null;
541
+ if (hostArg !== undefined || rulesDirArg !== undefined) {
542
+ try {
543
+ host = measureHostPayload(
544
+ REPO_ROOT,
545
+ hostArg !== undefined
546
+ ? { host: hostArg }
547
+ : { rulesDirOverride: rulesDirArg as string },
548
+ );
549
+ } catch (err) {
550
+ process.stderr.write(`❌ preamble-payload budget: ${(err as Error).message}\n`);
551
+ return 2;
552
+ }
553
+ }
554
+
555
+ let decision: Decision;
215
556
  try {
216
- verdict = evaluate(undefined, undefined, override);
557
+ decision = decide({
558
+ ...(override === undefined ? {} : { overrideCeiling: override }),
559
+ requireBase,
560
+ });
217
561
  } catch (err) {
218
562
  process.stderr.write(`❌ preamble-payload budget: ${(err as Error).message}\n`);
219
563
  return 2;
220
564
  }
565
+ const verdict = decision.verdict;
221
566
 
222
567
  // A ratchet over a measurement of nothing always passes: move
223
568
  // `dist/agent-src/` and every census returns zero, which is trivially under
@@ -239,8 +584,37 @@ export function main(argv: string[] = process.argv.slice(2)): number {
239
584
  }
240
585
 
241
586
  if (json) {
242
- process.stdout.write(JSON.stringify(verdict, null, 2) + '\n');
243
- return verdict.withinBudget ? 0 : 1;
587
+ process.stdout.write(
588
+ JSON.stringify(
589
+ {
590
+ ...verdict,
591
+ // `source_corpus` and `host_payload` are structurally
592
+ // separate, and both seats of the 2026-09-09 council asked
593
+ // for exactly that: until the two are named apart, every
594
+ // ceiling discussion risks comparing unlike quantities. The
595
+ // legacy top-level fields stay so no existing reader breaks.
596
+ measurement_scope: host === null ? 'source-corpus' : 'source-corpus+host-payload',
597
+ source_corpus: {
598
+ measured: verdict.measured,
599
+ baseline: verdict.baseline,
600
+ ceiling: verdict.ceiling,
601
+ buckets: verdict.buckets,
602
+ },
603
+ host_payload: host,
604
+ ok: decision.ok,
605
+ bound_ratchet: {
606
+ ok: decision.bounds.ok,
607
+ base_ref: decision.bounds.baseRef,
608
+ base_grace_ceiling: decision.bounds.baseGraceCeiling,
609
+ note: decision.bounds.note,
610
+ violations: decision.bounds.violations,
611
+ },
612
+ },
613
+ null,
614
+ 2,
615
+ ) + '\n',
616
+ );
617
+ return decision.ok ? 0 : 1;
244
618
  }
245
619
 
246
620
  for (const b of verdict.buckets) {
@@ -252,6 +626,48 @@ export function main(argv: string[] = process.argv.slice(2)): number {
252
626
  ` ${'measured total'.padEnd(38)} ${String(verdict.measured).padStart(8)} tok ` +
253
627
  `(baseline ${verdict.baseline}, ${sign}${delta}; ceiling ${verdict.ceiling})\n`,
254
628
  );
629
+ process.stdout.write(renderBounds(decision.bounds));
630
+
631
+ // The host reading prints AFTER the source verdict and never touches the
632
+ // exit code below. The label says which surface each number describes,
633
+ // because the whole defect this reading fixes was two different quantities
634
+ // sharing one name.
635
+ if (host !== null) {
636
+ const label = host.host === null ? host.rules_path : host.host;
637
+ process.stdout.write(`\n host payload — ${label} (informational, not gated)\n`);
638
+ for (const b of host.buckets) {
639
+ process.stdout.write(` ${('· ' + b.name).padEnd(38)} ${String(b.tokens).padStart(8)} tok\n`);
640
+ }
641
+ process.stdout.write(` ${'· host total'.padEnd(38)} ${String(host.total).padStart(8)} tok\n`);
642
+ const c = host.completeness;
643
+ if (!c.complete) {
644
+ process.stdout.write(
645
+ ` ${'· PARTIAL TREE'.padEnd(38)} ${c.host_rule_files} rule file(s) vs ` +
646
+ `${c.source_rule_files} in the source.\n` +
647
+ ' This total is NOT a consumer reading. A maintainer checkout deduplicates a\n' +
648
+ ' project rule against the same rule at user scope, and a dev tree may hold a\n' +
649
+ ' partial projection — both shrink this number for reasons unrelated to the\n' +
650
+ ' projection mode. Measure a clean consumer-shaped root with\n' +
651
+ ' --project-rules-dir <path> to get the number a consumer would load.\n',
652
+ );
653
+ }
654
+ }
655
+
656
+ // The bound is checked BEFORE the size question and independently of it. A
657
+ // change that lifts its own ceiling has already defeated the gate, and
658
+ // reporting that as "within budget" would be the config-weakening move
659
+ // wearing a green checkmark.
660
+ if (!decision.bounds.ok) {
661
+ // Two refusals, two different fixes. `verified: false` means the bound
662
+ // could not be READ under `--require-base`; the header must not send the
663
+ // reader to lower a ceiling that never moved.
664
+ process.stderr.write(
665
+ boundsRefusalHeader(decision.bounds) +
666
+ decision.bounds.violations.map((v) => ` · ${v}\n`).join(''),
667
+ );
668
+ return 1;
669
+ }
670
+
255
671
  if (!verdict.withinBudget) {
256
672
  // road-to-delivered-cost-truth 2.2 — a gate names its own "no". The
257
673
  // ceiling message alone states a fact and leaves the reader to find the
@@ -268,8 +684,9 @@ export function main(argv: string[] = process.argv.slice(2)): number {
268
684
  process.stderr.write(
269
685
  `❌ per-spawn preamble payload grew past the ratchet: ${verdict.measured} > ${verdict.ceiling} tok.\n` +
270
686
  ` Every rule and skill description here is re-written on EVERY subagent spawn, so growth\n` +
271
- ` is paid per spawn, not once. Either shrink the addition, or raise baseline_tokens in\n` +
272
- ` src/config/preamble-payload-budget.json with the reason in the same commit.\n`,
687
+ ` is paid per spawn, not once. Shrink the addition, or migrate the prose out of the\n` +
688
+ ` standing rule. The grace ceiling may NOT be raised to fit it: ADR-264, enforced by\n` +
689
+ ` the shrink-only ratchet above.\n`,
273
690
  );
274
691
  // Three distinct states, and conflating the last two is a diagnostic
275
692
  // defect rather than a cosmetic one: "I could not look" and "I looked