@event4u/agent-config 14.23.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 (503) 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 +198 -0
  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 +1 -1
  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 +1 -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 +1 -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 +2 -2
  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/skills/activation-design/SKILL.md +2 -2
  249. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  250. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  251. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
  252. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  253. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  254. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
  255. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  256. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  257. package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
  258. package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
  259. package/dist/agent-src/skills/code-review/SKILL.md +3 -3
  260. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  261. package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
  262. package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
  263. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  264. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
  265. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  266. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
  267. package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
  268. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  269. package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
  270. package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
  271. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  272. package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
  273. package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
  274. package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
  275. package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
  276. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
  277. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  278. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
  279. package/dist/agent-src/skills/design-review/SKILL.md +4 -4
  280. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
  281. package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
  282. package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
  283. package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
  284. package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
  285. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
  286. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
  287. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
  288. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
  289. package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
  290. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  291. package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
  292. package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
  293. package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
  294. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
  295. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  296. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  297. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  298. package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
  299. package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
  300. package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
  301. package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
  302. package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
  303. package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
  304. package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
  305. package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
  306. package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
  307. package/dist/agent-src/skills/iconography/SKILL.md +3 -3
  308. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  309. package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
  310. package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
  311. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
  312. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  313. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  314. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  315. package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
  316. package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
  317. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  318. package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
  319. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  320. package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
  321. package/dist/agent-src/skills/org-design/SKILL.md +1 -1
  322. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
  323. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  324. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  325. package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
  326. package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
  327. package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
  328. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
  329. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  330. package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
  331. package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
  332. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
  333. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  334. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
  335. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  336. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  337. package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
  338. package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
  339. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  340. package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
  341. package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
  342. package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
  343. package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
  344. package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
  345. package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
  346. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  347. package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
  348. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
  349. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
  350. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
  351. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  352. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
  353. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  354. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
  355. package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
  356. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  357. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  358. package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
  359. package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
  360. package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
  361. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  362. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  363. package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
  364. package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
  365. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
  366. package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
  367. package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
  368. package/dist/agent-src/templates/agent-settings.md +6 -6
  369. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  370. package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
  371. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  372. package/dist/agent-src/templates/roadmaps.md +1 -1
  373. package/dist/agent-src/templates/scripts/README.md +2 -2
  374. package/dist/agent-src/user-types/_template/user-type.md +1 -1
  375. package/dist/cli-delegate/check_update_banner.js +12 -1
  376. package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
  377. package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
  378. package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
  379. package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
  380. package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
  381. package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
  382. package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
  383. package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
  384. package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
  385. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  386. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  387. package/dist/cli-delegate/cmd_conformance.js +3 -3
  388. package/dist/cli-delegate/cmd_doctor.js +3 -3
  389. package/dist/cli-delegate/cmd_explain.js +2 -2
  390. package/dist/cli-delegate/cmd_export.js +4 -4
  391. package/dist/cli-delegate/cmd_handoff.js +4 -4
  392. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  393. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  394. package/dist/cli-delegate/cmd_migrate.js +2 -2
  395. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  396. package/dist/cli-delegate/cmd_prune.js +4 -4
  397. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  398. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  399. package/dist/cli-delegate/cmd_session_recycle.js +1 -1
  400. package/dist/cli-delegate/cmd_settings_get.js +15 -9
  401. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  402. package/dist/cli-delegate/cmd_settings_set.js +41 -11
  403. package/dist/cli-delegate/cmd_sync.js +4 -4
  404. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  405. package/dist/cli-delegate/cmd_update.js +1 -1
  406. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  407. package/dist/cli-delegate/cmd_validate.js +4 -4
  408. package/dist/cli-delegate/cmd_versions.js +1 -1
  409. package/dist/discovery/deprecation-report.md +1 -1
  410. package/dist/discovery/discovery-manifest.json +22 -75
  411. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  412. package/dist/discovery/discovery-manifest.summary.md +3 -3
  413. package/dist/discovery/dormancy-report.md +1 -1
  414. package/dist/discovery/orphan-report.md +1 -1
  415. package/dist/discovery/packs.json +5 -7
  416. package/dist/discovery/trust-report.md +2 -2
  417. package/dist/discovery/workspaces.json +4 -6
  418. package/dist/hooks/dispatch.js +8607 -8930
  419. package/dist/install/install.mjs +35 -8
  420. package/dist/mcp/registry-manifest.json +3 -3
  421. package/dist/mcp/server.json +2 -2
  422. package/dist/mcp/server.mjs +1433 -1342
  423. package/dist/router.json +1 -1
  424. package/dist/scripts/_lib/agent_settings.js +73 -0
  425. package/dist/scripts/_lib/agent_src.js +20 -0
  426. package/dist/scripts/_lib/guidelines_lane.js +158 -0
  427. package/dist/scripts/condense.js +2 -5
  428. package/dist/server/io/yamlIO.js +125 -17
  429. package/dist/server/schemas/settings.js +18 -4
  430. package/dist/shared/settingsSurface.js +6 -1
  431. package/docs/contracts/settings-classes.md +18 -9
  432. package/docs/guidelines/abstraction-thresholds.md +35 -0
  433. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
  434. package/docs/guidelines/agent-infra/false-green.md +2 -2
  435. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  436. package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
  437. package/docs/guidelines/design-fidelity-mechanics.md +4 -0
  438. package/docs/guidelines/design-fidelity-routing.md +78 -0
  439. package/docs/guidelines/design-reconciliation.md +172 -0
  440. package/docs/guidelines/gtm-handoff.md +2 -2
  441. package/docs/guidelines/wing4-handoff.md +2 -2
  442. package/package.json +7 -3
  443. package/src/config/agent-settings.template.yml +55 -8
  444. package/src/config/ci-local-parity.yml +34 -0
  445. package/src/config/continuity-surface.json +4 -32
  446. package/src/config/gate-coverage.yml +31 -8
  447. package/src/config/gate-reachability-exemptions.json +1 -0
  448. package/src/config/gate-violation-baselines.json +3 -3
  449. package/src/config/hook-token-budget.json +1 -1
  450. package/src/config/host-injection-effect.json +2 -2
  451. package/src/config/pack-size-budget.json +55 -4
  452. package/src/config/platform-anchor.json +47 -0
  453. package/src/config/preamble-payload-budget.json +2 -3
  454. package/src/config/publish-surface.json +4 -2
  455. package/src/config/ratification-policy.json +7 -0
  456. package/src/config/rule-stub-ceilings.json +16 -9
  457. package/src/scripts/_cli/cmd_settings_get.ts +22 -7
  458. package/src/scripts/_lib/agent_settings.ts +85 -0
  459. package/src/scripts/_lib/agent_src.ts +21 -0
  460. package/src/scripts/_lib/artifact_maturity.ts +242 -0
  461. package/src/scripts/_lib/conformance_report.ts +403 -0
  462. package/src/scripts/_lib/continuity_writer.ts +72 -13
  463. package/src/scripts/_lib/design_system_import.ts +20 -0
  464. package/src/scripts/_lib/design_tolerance.ts +281 -0
  465. package/src/scripts/_lib/guidelines_lane.ts +164 -0
  466. package/src/scripts/_lib/obligation_frequency.ts +2 -3
  467. package/src/scripts/_lib/platform_anchor.ts +1053 -0
  468. package/src/scripts/_lib/ratification_artifact.ts +278 -0
  469. package/src/scripts/_lib/security_lint.ts +23 -2
  470. package/src/scripts/_lib/self_repair.ts +21 -0
  471. package/src/scripts/_lib/session_index_trust.ts +42 -1
  472. package/src/scripts/_lib/standing_bound_ratchet.ts +103 -37
  473. package/src/scripts/_lib/tolerance_shadow.ts +177 -0
  474. package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
  475. package/src/scripts/autonomy_friction_traffic.ts +379 -0
  476. package/src/scripts/check_kernel_edit_ratified.ts +462 -0
  477. package/src/scripts/check_loss_class_declared.ts +793 -46
  478. package/src/scripts/check_platform_anchor.ts +390 -0
  479. package/src/scripts/check_preamble_payload_budget.ts +292 -4
  480. package/src/scripts/check_projected_rule_routes.ts +395 -0
  481. package/src/scripts/code_graph/cli.ts +6 -0
  482. package/src/scripts/condense.ts +2 -6
  483. package/src/scripts/generate_host_cost_table.ts +354 -0
  484. package/src/scripts/hook_manifest.json +1 -1
  485. package/src/scripts/hook_manifest.yaml +35 -27
  486. package/src/scripts/hooks/category_a.ts +1 -1
  487. package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
  488. package/src/scripts/hooks/session_eol_hook.ts +68 -154
  489. package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
  490. package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
  491. package/src/scripts/hot_context_hook.ts +41 -401
  492. package/src/scripts/lint_evidence_artifacts.ts +1 -0
  493. package/src/scripts/lint_knowledge_scale.ts +0 -26
  494. package/src/scripts/memory_lookup.ts +9 -9
  495. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  496. package/src/scripts/session_memory_index.ts +5 -0
  497. package/src/scripts/sync_agent_settings.ts +270 -10
  498. package/src/server/io/yamlIO.ts +127 -17
  499. package/src/server/schemas/settings.ts +25 -5
  500. package/src/shared/settingsSurface.ts +13 -2
  501. package/src/templates/compact-instructions.md +8 -3
  502. package/dist/agent-src/commands/chat-history/import.md +0 -170
  503. package/dist/agent-src/commands/chat-history.md +0 -63
@@ -45,6 +45,7 @@ import * as path from 'node:path';
45
45
  import { assertScanned, DeadScopeError } from './_lib/scan_scope.js';
46
46
  import { censusClaudeMdHierarchy, censusRuleDir, censusSkillsCatalog } from './preamble_byte_census.js';
47
47
  import { PREFIX_STABLE_SURFACES, prefixStableRoots } from './_lib/prefix_stable_surfaces.js';
48
+ import { HOST_SURFACES } from './_lib/host_projection_reach.js';
48
49
  import { attributeGrowth, buildLedger, renderAttribution } from './_lib/asset_delivery_ledger.js';
49
50
  import { resolveBaseRef } from './_lib/ratchet_base_ref.js';
50
51
  import {
@@ -149,6 +150,174 @@ export function measureDeterministicPayload(
149
150
  ];
150
151
  }
151
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
+
152
321
  /**
153
322
  * A caller-supplied ceiling, and the one direction it may go.
154
323
  *
@@ -201,6 +370,8 @@ export interface DecideOptions {
201
370
  git?: GitRunner;
202
371
  /** Test seam: pin the base ref instead of resolving it. `null` = none resolved. */
203
372
  baseRef?: string | null;
373
+ /** Refuse instead of skipping when the shrink-only bound cannot be verified. */
374
+ requireBase?: boolean;
204
375
  }
205
376
 
206
377
  export function decide(opts: DecideOptions = {}): Decision {
@@ -215,6 +386,7 @@ export function decide(opts: DecideOptions = {}): Decision {
215
386
  baseRef,
216
387
  git,
217
388
  headGraceCeiling: opts.overrideCeiling ?? budget.grace_ceiling ?? 0,
389
+ requireBase: opts.requireBase === true,
218
390
  });
219
391
  return { verdict, bounds, ok: bounds.ok && verdict.withinBudget };
220
392
  }
@@ -280,6 +452,13 @@ function attributeGrowthAgainstBase(): string[] | null {
280
452
  }
281
453
  }
282
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
+
283
462
  /**
284
463
  * The bound check, rendered for a human — on BOTH paths, green and red.
285
464
  *
@@ -287,11 +466,24 @@ function attributeGrowthAgainstBase(): string[] | null {
287
466
  * already load-bearing. Printing the compared ref and the earlier bound on the
288
467
  * passing path is also the only way a reader can tell "verified and unchanged"
289
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.
290
476
  */
291
- function renderBounds(b: BoundsRatchetVerdict): string {
292
- if (b.note !== null) {
477
+ export function renderBounds(b: BoundsRatchetVerdict): string {
478
+ if (b.note !== null && b.ok) {
293
479
  return ` ${'grace ceiling ratchet'.padEnd(38)} ${'SKIPPED'.padStart(8)} — ${b.note}\n`;
294
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
+ }
295
487
  const base = b.baseGraceCeiling === null ? 'n/a' : String(b.baseGraceCeiling);
296
488
  const state = b.ok ? 'ok' : 'ROSE';
297
489
  return (
@@ -308,9 +500,64 @@ export function main(argv: string[] = process.argv.slice(2)): number {
308
500
  // tighter-than-design value is IGNORED rather than honoured — see `evaluate`.
309
501
  const ci = argv.indexOf('--ceiling');
310
502
  const override = ci !== -1 && argv[ci + 1] !== undefined ? Number(argv[ci + 1]) : undefined;
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
+
311
555
  let decision: Decision;
312
556
  try {
313
- decision = decide(override === undefined ? {} : { overrideCeiling: override });
557
+ decision = decide({
558
+ ...(override === undefined ? {} : { overrideCeiling: override }),
559
+ requireBase,
560
+ });
314
561
  } catch (err) {
315
562
  process.stderr.write(`❌ preamble-payload budget: ${(err as Error).message}\n`);
316
563
  return 2;
@@ -341,6 +588,19 @@ export function main(argv: string[] = process.argv.slice(2)): number {
341
588
  JSON.stringify(
342
589
  {
343
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,
344
604
  ok: decision.ok,
345
605
  bound_ratchet: {
346
606
  ok: decision.bounds.ok,
@@ -368,13 +628,41 @@ export function main(argv: string[] = process.argv.slice(2)): number {
368
628
  );
369
629
  process.stdout.write(renderBounds(decision.bounds));
370
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
+
371
656
  // The bound is checked BEFORE the size question and independently of it. A
372
657
  // change that lifts its own ceiling has already defeated the gate, and
373
658
  // reporting that as "within budget" would be the config-weakening move
374
659
  // wearing a green checkmark.
375
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.
376
664
  process.stderr.write(
377
- '❌ the standing-payload ceiling rose in this change:\n' +
665
+ boundsRefusalHeader(decision.bounds) +
378
666
  decision.bounds.violations.map((v) => ` · ${v}\n`).join(''),
379
667
  );
380
668
  return 1;