@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
@@ -0,0 +1,462 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * check_kernel_edit_ratified — ADR-268 § 4's CI gate, ADDED ALONGSIDE the
4
+ * tool-call deny, not in place of it.
5
+ *
6
+ * ADR-268 § 4 says the deny "is replaced by a CI gate reading the artifact —
7
+ * one mechanism, not two". This lands the gate and does NOT perform that
8
+ * replacement, and the distinction is the whole reason this header exists.
9
+ *
10
+ * A two-round independent ratification review REFUSED the replacement, 2/2 in
11
+ * round 2, on a defect neither the ADR nor the first implementation saw: the
12
+ * workflow file that decides whether the gate runs at all lives in the
13
+ * candidate branch. Running the gate's CODE from the base revision — which the
14
+ * workflow now does — closes the "candidate judges itself" hole one level
15
+ * down and leaves the level above it open, because a PR can still edit the
16
+ * step that invokes it. Closing that needs a platform-anchored required check
17
+ * (a protected reusable workflow, an org ruleset), which is a repository
18
+ * setting and not a diff. So the replacement waits on an owner action, and
19
+ * until then BOTH mechanisms stand.
20
+ *
21
+ * Two mechanisms is a state ADR-268 § 4 argues against, and it is the correct
22
+ * interim anyway: this gate ADDS a refusal and removes none, so it is pure
23
+ * tightening — the discriminator ADR-268 § 0 gives for a narrowing. Removing
24
+ * the deny is the authority change, and that is what was refused.
25
+ *
26
+ * What the gate buys over the deny, today, with the deny still in place: it
27
+ * reaches every host rather than the one that honours a deny, and its unit is
28
+ * the cumulative DIFF rather than one tool call — so the two-step
29
+ * write-to-staging-then-`mv` sequence that laundered past the hook is caught.
30
+ *
31
+ * Gated: a diff touching a kernel rule under `src/rules/` (the nine of
32
+ * `_lib/kernel_rules.ts`), a governance hook (`src/scripts/hooks/block_*.ts`),
33
+ * or this gate itself — so it cannot be weakened without its own record. Such
34
+ * a diff must carry a ratification artifact under
35
+ * the ratifications directory with `verdict: ratified`, valid per the
36
+ * ratification-artifact contract.
37
+ *
38
+ * Every kernel diff is gated, not only the authority-EXPANDING ones.
39
+ * ADR-268 § 4 makes the artifact required for authority-expanding edits. Which
40
+ * edits expand authority is a judgement over rule prose — not decidable from a
41
+ * diff, and a gate that guesses is a gate that is quietly wrong in the
42
+ * direction nobody notices. This gate therefore applies the strictly stronger
43
+ * and fully decidable rule: every kernel-rule and governance-hook diff carries
44
+ * a record. A narrowing edit pays one artifact it did not strictly owe; an
45
+ * expanding edit cannot slip through a misclassification.
46
+ *
47
+ * Provider diversity fails closed. The required count comes from
48
+ * `src/config/ratification-policy.json`, committed in this repository so it is
49
+ * present on every runner. The first review round refused reading it from the
50
+ * user-global council config: that file is absent on CI, so the rule printed
51
+ * "unmeasured" and passed, on the one surface where it most needed to fire. A
52
+ * missing or unparseable policy is now a refusal.
53
+ *
54
+ * Inputs:
55
+ * --base-ref REF git ref to diff against (default: origin/main, then main)
56
+ * --files F [F …] override the changed-file list (testing and CI)
57
+ * --root DIR repo root the diff and artifacts are read from (testing)
58
+ * --policy-root DIR where the quorum policy is read from (testing); defaults
59
+ * to THIS script's tree, so a base-revision run reads the
60
+ * base's policy rather than one the candidate lowered
61
+ * --quiet verdict line only
62
+ *
63
+ * Exit codes: 0 = pass (or nothing gated) · 1 = fail · 3 = internal error.
64
+ */
65
+
66
+ import { spawnSync } from 'node:child_process';
67
+ import * as fs from 'node:fs';
68
+ import * as path from 'node:path';
69
+ import { fileURLToPath, pathToFileURL } from 'node:url';
70
+
71
+ import { GateLedger } from './_lib/gate_ledger.js';
72
+ import { is_kernel_rule } from './_lib/kernel_rules.js';
73
+ import { reportScanned } from './_lib/scan_scope.js';
74
+ import {
75
+ isRatified,
76
+ RATIFICATION_DIR,
77
+ readRatification,
78
+ readRequiredProviders,
79
+ type RatificationProblem,
80
+ } from './_lib/ratification_artifact.js';
81
+
82
+ const _HERE = fileURLToPath(import.meta.url);
83
+ const REPO = path.resolve(path.dirname(_HERE), '..', '..');
84
+
85
+ /** This gate's own path, relative to the repo root. Watched by itself. */
86
+ export const SELF_PATH = 'src/scripts/check_kernel_edit_ratified.ts';
87
+
88
+ /** The reader this gate shares with the artifact contract, also self-watched. */
89
+ export const READER_PATH = 'src/scripts/_lib/ratification_artifact.ts';
90
+
91
+ /** The in-repo quorum policy. Present on every runner; absent means refuse. */
92
+ export const POLICY_PATH = 'src/config/ratification-policy.json';
93
+
94
+ /**
95
+ * The workflow that invokes this gate.
96
+ *
97
+ * On the watch list because a round-3 reviewer named its absence: running the
98
+ * gate's CODE from the base revision closes "the candidate judges itself" one
99
+ * level down and leaves the level above it open, since the step that decides
100
+ * whether to run at all lives in the candidate branch. Watching the file does
101
+ * not close that — a PR editing it still edits it — but it makes the edit
102
+ * carry a record instead of passing silently. One more level, not an anchor.
103
+ */
104
+ export const WORKFLOW_PATH = '.github/workflows/consistency.yml';
105
+
106
+ /**
107
+ * The platform-anchor limb: the committed expectation, its pure evaluator and
108
+ * its gate.
109
+ *
110
+ * Watched for the reason the expectation file is committed at all. The
111
+ * expectation could otherwise be lowered by a diff nobody ratified, which would
112
+ * make the anchor as head-controlled as the settings it exists to check. The
113
+ * embedded floor in `_lib/platform_anchor.ts` stops a lowering from being
114
+ * honoured; this list is what makes the attempt visible.
115
+ */
116
+ export const ANCHOR_PATHS: readonly string[] = [
117
+ 'src/config/platform-anchor.json',
118
+ 'src/scripts/_lib/platform_anchor.ts',
119
+ 'src/scripts/check_platform_anchor.ts',
120
+ ];
121
+
122
+ /** Governance hooks: the blocking PreToolUse guards. */
123
+ const GOVERNANCE_HOOK_RE = /^src\/scripts\/hooks\/block_[a-z0-9_]+\.ts$/;
124
+
125
+ /**
126
+ * A kernel rule, in the source tree or in any projection.
127
+ *
128
+ * The reach is deliberately the same as the retired hook's: any path whose
129
+ * basename is a kernel rule filename and which sits under a `rules/` path
130
+ * segment. `src/rules/commit-policy.md` is the source; `.claude/rules/…`,
131
+ * `.augment/rules/…` and `dist/agent-src/rules/…` are projections. A
132
+ * hand-edited projection reaches consumers without the source ever changing,
133
+ * so narrowing this to the source alone would have quietly dropped half of
134
+ * what the deny covered — a retirement is not supposed to be a reduction.
135
+ *
136
+ * A kernel-NAMED file outside a `rules/` directory (a doc, a fixture) is not a
137
+ * rule file and is not matched.
138
+ */
139
+ const KERNEL_RULE_PATH_RE = /(?:^|\/)rules\/([a-z0-9-]+)\.md$/;
140
+
141
+ export interface GatedPaths {
142
+ kernelRules: string[];
143
+ governanceHooks: string[];
144
+ self: boolean;
145
+ }
146
+
147
+ /** Partition a changed-file list into the surfaces this gate watches. */
148
+ export function classifyPaths(files: readonly string[]): GatedPaths {
149
+ const kernelRules: string[] = [];
150
+ const governanceHooks: string[] = [];
151
+ let self = false;
152
+ for (const raw of files) {
153
+ const p = raw.replace(/\\/g, '/').trim();
154
+ if (p === '') {
155
+ continue;
156
+ }
157
+ if (
158
+ p === SELF_PATH ||
159
+ p === READER_PATH ||
160
+ p === POLICY_PATH ||
161
+ p === WORKFLOW_PATH ||
162
+ ANCHOR_PATHS.includes(p)
163
+ ) {
164
+ self = true;
165
+ continue;
166
+ }
167
+ const m = KERNEL_RULE_PATH_RE.exec(p);
168
+ if (m !== null && is_kernel_rule(m[1] ?? '')) {
169
+ kernelRules.push(p);
170
+ continue;
171
+ }
172
+ if (GOVERNANCE_HOOK_RE.test(p)) {
173
+ governanceHooks.push(p);
174
+ }
175
+ }
176
+ return { kernelRules, governanceHooks, self };
177
+ }
178
+
179
+ /** True when anything in the diff requires a ratification artifact. */
180
+ export function requiresRatification(gated: GatedPaths): boolean {
181
+ return gated.kernelRules.length > 0 || gated.governanceHooks.length > 0 || gated.self;
182
+ }
183
+
184
+ /** Ratification artifacts present in the diff, as repo-relative paths. */
185
+ export function ratificationArtifactsIn(files: readonly string[]): string[] {
186
+ return files
187
+ .map((f) => f.replace(/\\/g, '/').trim())
188
+ .filter((f) => f.startsWith(`${RATIFICATION_DIR}/`) && f.endsWith('.md'));
189
+ }
190
+
191
+ /**
192
+ * The configured council member count, or `null` when it could not be read.
193
+ *
194
+ * Deliberately best-effort and deliberately silent on failure: the config is
195
+ * user-global, so "not found" is the NORMAL state in CI and is not an error.
196
+ */
197
+ export function configuredProviderCount(policyRoot: string): number | null {
198
+ try {
199
+ return readRequiredProviders(fs.readFileSync(path.join(policyRoot, POLICY_PATH), 'utf8'));
200
+ } catch {
201
+ return null;
202
+ }
203
+ }
204
+
205
+ function gitChangedFiles(baseRef: string, root: string): string[] | null {
206
+ const res = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
207
+ cwd: root,
208
+ encoding: 'utf8',
209
+ });
210
+ if (res.status !== 0) {
211
+ return null;
212
+ }
213
+ return (res.stdout ?? '').split('\n').filter((l) => l.trim() !== '');
214
+ }
215
+
216
+ function resolveBaseRef(explicit: string | null, root: string): string {
217
+ if (explicit !== null) {
218
+ return explicit;
219
+ }
220
+ for (const candidate of ['origin/main', 'origin/master', 'main', 'master']) {
221
+ const res = spawnSync('git', ['rev-parse', '--verify', candidate], {
222
+ cwd: root,
223
+ stdio: ['ignore', 'ignore', 'ignore'],
224
+ });
225
+ if (res.status === 0) {
226
+ return candidate;
227
+ }
228
+ }
229
+ return 'HEAD~1';
230
+ }
231
+
232
+ export interface GateResult {
233
+ exitCode: 0 | 1 | 3;
234
+ lines: string[];
235
+ /** Number of changed paths inspected — the honest `scanned:` count. */
236
+ scanned: number;
237
+ }
238
+
239
+ export function evaluate(
240
+ files: readonly string[],
241
+ root: string,
242
+ providerCount: number | null,
243
+ ): GateResult {
244
+ const lines: string[] = [];
245
+ const gated = classifyPaths(files);
246
+ const scanned = files.length;
247
+
248
+ // Every changed path is a planned target: the gate's denominator is the
249
+ // whole diff, and a path it decided was out of scope is a decision worth
250
+ // counting rather than a silence.
251
+ const ledger = new GateLedger('check_kernel_edit_ratified');
252
+ ledger.plan(files.map((f) => f.replace(/\\/g, '/').trim()).filter((f) => f !== ''));
253
+ const gatedSet = new Set<string>([
254
+ ...gated.kernelRules,
255
+ ...gated.governanceHooks,
256
+ ...(gated.self ? [SELF_PATH] : []),
257
+ ]);
258
+ const artifactSet = new Set(ratificationArtifactsIn(files));
259
+ for (const target of ledger.unaccountedTargets()) {
260
+ if (!gatedSet.has(target) && !artifactSet.has(target)) {
261
+ ledger.outOfScope(target, 'not_applicable_kind');
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Resolve every target that has not reached an outcome yet, then close.
267
+ *
268
+ * `finalize()` throws on an unaccounted target, which is the point — it is
269
+ * what stops a path from being enumerated and then quietly not decided.
270
+ */
271
+ const close = (ok: boolean): void => {
272
+ for (const target of ledger.unaccountedTargets()) {
273
+ if (ok) {
274
+ ledger.complete(target);
275
+ } else {
276
+ ledger.fail(target, 'no valid ratified artifact covers this diff');
277
+ }
278
+ }
279
+ const tally = ledger.finalize();
280
+ lines.push('');
281
+ lines.push(
282
+ `ledger: planned ${tally.planned} · completed ${tally.completed} · ` +
283
+ `failed ${tally.failed} · out_of_scope ${tally.out_of_scope}`,
284
+ );
285
+ };
286
+
287
+ if (!requiresRatification(gated)) {
288
+ lines.push(
289
+ '✅ no kernel rule, governance hook or self edit in the diff — nothing to ratify',
290
+ );
291
+ close(true);
292
+ return { exitCode: 0, lines, scanned };
293
+ }
294
+
295
+ const touched = [
296
+ ...gated.kernelRules.map((p) => `kernel rule ${p}`),
297
+ ...gated.governanceHooks.map((p) => `governance hook ${p}`),
298
+ ...(gated.self ? ['the ratification mechanism itself (gate, reader, policy or workflow)'] : []),
299
+ ];
300
+ lines.push(`Gated surfaces in this diff (${touched.length}):`);
301
+ for (const t of touched) {
302
+ lines.push(` · ${t}`);
303
+ }
304
+
305
+ const artifacts = ratificationArtifactsIn(files);
306
+ if (artifacts.length === 0) {
307
+ lines.push('');
308
+ lines.push(
309
+ `❌ no ratification artifact under \`${RATIFICATION_DIR}/\` in this diff. ` +
310
+ 'ADR-268 § 4: an agent may modify its constitution and may not ratify its own ' +
311
+ 'increase in power. See docs/contracts/ratification-artifact.md.',
312
+ );
313
+ close(false);
314
+ return { exitCode: 1, lines, scanned };
315
+ }
316
+
317
+ if (providerCount === null) {
318
+ lines.push('');
319
+ lines.push(
320
+ `❌ \`${POLICY_PATH}\` is missing or unparseable, so the required provider count ` +
321
+ 'is unknown. This gate fails closed rather than skipping the diversity rule — a ' +
322
+ 'control that passes when it cannot measure is advisory.',
323
+ );
324
+ }
325
+
326
+ let anyRatified = false;
327
+ const failures: string[] = [];
328
+ for (const rel of artifacts) {
329
+ const abs = path.join(root, rel);
330
+ let text: string;
331
+ try {
332
+ text = fs.readFileSync(abs, 'utf8');
333
+ } catch {
334
+ failures.push(`${rel}: listed in the diff but not readable on disk`);
335
+ continue;
336
+ }
337
+ const reading = readRatification(text, providerCount);
338
+ if (isRatified(reading)) {
339
+ anyRatified = true;
340
+ lines.push('');
341
+ lines.push(
342
+ `✅ ${rel} — ratified by ${reading.artifact?.reviewed_by} ` +
343
+ `(providers: ${reading.artifact?.providers.join(', ')}; ` +
344
+ `effective after ${reading.artifact?.effective_after})`,
345
+ );
346
+ continue;
347
+ }
348
+ if (reading.artifact !== null) {
349
+ failures.push(`${rel}: verdict is \`${reading.artifact.verdict}\`, not \`ratified\``);
350
+ continue;
351
+ }
352
+ for (const p of reading.problems as RatificationProblem[]) {
353
+ failures.push(`${rel}: ${p.message}`);
354
+ }
355
+ }
356
+
357
+ if (!anyRatified) {
358
+ lines.push('');
359
+ lines.push('❌ no valid `verdict: ratified` artifact for this diff:');
360
+ for (const f of failures) {
361
+ lines.push(` · ${f}`);
362
+ }
363
+ close(false);
364
+ return { exitCode: 1, lines, scanned };
365
+ }
366
+
367
+ if (failures.length > 0) {
368
+ lines.push('');
369
+ lines.push('⚠️ other ratification artifacts in the diff did not validate:');
370
+ for (const f of failures) {
371
+ lines.push(` · ${f}`);
372
+ }
373
+ }
374
+ close(true);
375
+ return { exitCode: 0, lines, scanned };
376
+ }
377
+
378
+ export function main(argv: readonly string[] = process.argv.slice(2)): number {
379
+ let baseRef: string | null = null;
380
+ let root = REPO;
381
+ // The policy is read relative to THIS SCRIPT's tree, never to `--root`.
382
+ //
383
+ // Round 1 refused the previous shape for a bootstrap reason: CI ran the
384
+ // gate from the PR head, so a candidate diff supplied the code that judged
385
+ // it. The workflow now runs the BASE revision's copy of this script with
386
+ // `--root <head>`, so the judging code is one the PR did not write — and
387
+ // that only holds if the quorum policy comes from the base too. Reading it
388
+ // from `--root` would let the same PR lower `required_providers` and have
389
+ // the base gate honour the lowered number.
390
+ let policyRoot = REPO;
391
+ let quiet = false;
392
+ const files: string[] = [];
393
+ let collectingFiles = false;
394
+
395
+ for (let i = 0; i < argv.length; i += 1) {
396
+ const a = argv[i];
397
+ if (a === '--base-ref') {
398
+ baseRef = argv[i + 1] ?? null;
399
+ i += 1;
400
+ collectingFiles = false;
401
+ } else if (a === '--root') {
402
+ root = path.resolve(argv[i + 1] ?? root);
403
+ i += 1;
404
+ collectingFiles = false;
405
+ } else if (a === '--policy-root') {
406
+ policyRoot = path.resolve(argv[i + 1] ?? policyRoot);
407
+ i += 1;
408
+ collectingFiles = false;
409
+ } else if (a === '--quiet') {
410
+ quiet = true;
411
+ collectingFiles = false;
412
+ } else if (a === '--files') {
413
+ collectingFiles = true;
414
+ } else if (collectingFiles && a !== undefined) {
415
+ files.push(a);
416
+ }
417
+ }
418
+
419
+ let changed: string[];
420
+ if (files.length > 0) {
421
+ changed = files;
422
+ } else {
423
+ const fromGit = gitChangedFiles(resolveBaseRef(baseRef, root), root);
424
+ if (fromGit === null) {
425
+ process.stderr.write('❌ check_kernel_edit_ratified: git diff failed\n');
426
+ return 3;
427
+ }
428
+ changed = fromGit;
429
+ }
430
+
431
+ const result = evaluate(changed, root, configuredProviderCount(policyRoot));
432
+
433
+ // OUTSIDE the quiet guard: CI passes --quiet, and a coverage guard that
434
+ // sees no count reports the gate silent.
435
+ //
436
+ // Through `reportScanned` rather than a bare write, which is what makes the
437
+ // gate HARDENED — `check_gate_coverage`'s predicate is "routes through
438
+ // _lib/scan_scope OR emits the line AND is registered with a floor", and a
439
+ // diff-scoped gate can carry no honest floor (an empty diff scans zero by
440
+ // construction). A bare write put it in the unhardened population and made
441
+ // it owe a `gate-coverage.yml` row it cannot fill.
442
+ reportScanned({
443
+ gate: 'check_kernel_edit_ratified',
444
+ scanned: result.scanned,
445
+ units: 'changed path(s)',
446
+ roots: ['<the diff against the base ref>'],
447
+ allowEmpty:
448
+ 'EMPTY_VALID: the corpus is one diff. A commit range that changed nothing is a ' +
449
+ 'real state, and there is then no kernel rule, governance hook or mechanism file ' +
450
+ 'to ratify — the gate has read everything there was.',
451
+ });
452
+ if (!quiet || result.exitCode !== 0) {
453
+ for (const l of result.lines) {
454
+ process.stdout.write(`${l}\n`);
455
+ }
456
+ }
457
+ return result.exitCode;
458
+ }
459
+
460
+ if (import.meta.url === pathToFileURL(process.argv[1] ?? '').href) {
461
+ process.exit(main());
462
+ }