@event4u/agent-config 14.23.0 → 16.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 (541) 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 +144 -152
  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 +4 -3
  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 +51 -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/rules/user-interaction.md +31 -30
  249. package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
  250. package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
  251. package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
  252. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
  253. package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
  254. package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
  255. package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
  256. package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
  257. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  258. package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
  259. package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
  260. package/dist/agent-src/skills/code-review/SKILL.md +3 -3
  261. package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
  262. package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
  263. package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
  264. package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
  265. package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
  266. package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
  267. package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
  268. package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
  269. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
  270. package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
  271. package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
  272. package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
  273. package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
  274. package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
  275. package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
  276. package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
  277. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
  278. package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
  279. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
  280. package/dist/agent-src/skills/design-review/SKILL.md +4 -4
  281. package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
  282. package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
  283. package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
  284. package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
  285. package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
  286. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
  287. package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
  288. package/dist/agent-src/skills/error-handling-patterns/SKILL.md +9 -0
  289. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
  290. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
  291. package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
  292. package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
  293. package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
  294. package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
  295. package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
  296. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
  297. package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
  298. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  299. package/dist/agent-src/skills/flux/SKILL.md +1 -1
  300. package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
  301. package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
  302. package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
  303. package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
  304. package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
  305. package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
  306. package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
  307. package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
  308. package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
  309. package/dist/agent-src/skills/iconography/SKILL.md +3 -3
  310. package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
  311. package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
  312. package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
  313. package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
  314. package/dist/agent-src/skills/livewire/SKILL.md +1 -1
  315. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  316. package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
  317. package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
  318. package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
  319. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
  320. package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
  321. package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
  322. package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
  323. package/dist/agent-src/skills/org-design/SKILL.md +1 -1
  324. package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
  325. package/dist/agent-src/skills/override-management/SKILL.md +1 -1
  326. package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
  327. package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
  328. package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
  329. package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
  330. package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
  331. package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
  332. package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
  333. package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
  334. package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
  335. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  336. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
  337. package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
  338. package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
  339. package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
  340. package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
  341. package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
  342. package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
  343. package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
  344. package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
  345. package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
  346. package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
  347. package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
  348. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  349. package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
  350. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
  351. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
  352. package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
  353. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
  354. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
  355. package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
  356. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +11 -5
  357. package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
  358. package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
  359. package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
  360. package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
  361. package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
  362. package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
  363. package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
  364. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
  365. package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
  366. package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
  367. package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
  368. package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
  369. package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
  370. package/dist/agent-src/templates/agent-settings.md +6 -6
  371. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  372. package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
  373. package/dist/agent-src/templates/copilot-instructions.md +1 -1
  374. package/dist/agent-src/templates/roadmaps.md +1 -1
  375. package/dist/agent-src/templates/scripts/README.md +2 -2
  376. package/dist/agent-src/user-types/_template/user-type.md +1 -1
  377. package/dist/cli-delegate/check_update_banner.js +12 -1
  378. package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
  379. package/dist/cli-delegate/{chunk-IAI3XL43.js → chunk-3FKR64R5.js} +22 -6
  380. package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
  381. package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
  382. package/dist/cli-delegate/{chunk-KCNTUSPI.js → chunk-AK6HODNQ.js} +4 -4
  383. package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
  384. package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-H32DGUJH.js} +15 -84
  385. package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
  386. package/dist/cli-delegate/chunk-NUHLI2RX.js +80 -0
  387. package/dist/cli-delegate/{chunk-TYSY33MD.js → chunk-QJWAUMJW.js} +12 -2
  388. package/dist/cli-delegate/{chunk-2KKXJW25.js → chunk-S3VFXMTM.js} +1 -1
  389. package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
  390. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  391. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  392. package/dist/cli-delegate/cmd_conformance.js +834 -275
  393. package/dist/cli-delegate/cmd_doctor.js +3 -3
  394. package/dist/cli-delegate/cmd_explain.js +5 -3
  395. package/dist/cli-delegate/cmd_export.js +4 -4
  396. package/dist/cli-delegate/cmd_handoff.js +6 -6
  397. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  398. package/dist/cli-delegate/cmd_memory_get.js +1 -1
  399. package/dist/cli-delegate/cmd_migrate.js +2 -2
  400. package/dist/cli-delegate/cmd_packs_active.js +3 -2
  401. package/dist/cli-delegate/cmd_prune.js +4 -4
  402. package/dist/cli-delegate/cmd_route_audit.js +3 -3
  403. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  404. package/dist/cli-delegate/cmd_session_recycle.js +3 -3
  405. package/dist/cli-delegate/cmd_settings_get.js +15 -9
  406. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  407. package/dist/cli-delegate/cmd_settings_set.js +54 -11
  408. package/dist/cli-delegate/cmd_sync.js +4 -4
  409. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  410. package/dist/cli-delegate/cmd_update.js +1 -1
  411. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  412. package/dist/cli-delegate/cmd_validate.js +4 -4
  413. package/dist/cli-delegate/cmd_versions.js +1 -1
  414. package/dist/discovery/deprecation-report.md +1 -1
  415. package/dist/discovery/discovery-manifest.json +25 -78
  416. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  417. package/dist/discovery/discovery-manifest.summary.md +3 -3
  418. package/dist/discovery/dormancy-report.md +1 -1
  419. package/dist/discovery/orphan-report.md +1 -1
  420. package/dist/discovery/packs.json +5 -7
  421. package/dist/discovery/trust-report.md +2 -2
  422. package/dist/discovery/workspaces.json +4 -6
  423. package/dist/hooks/dispatch.js +9684 -9304
  424. package/dist/install/install.mjs +36 -8
  425. package/dist/mcp/registry-manifest.json +3 -3
  426. package/dist/mcp/server.json +2 -2
  427. package/dist/mcp/server.mjs +2147 -1470
  428. package/dist/router.json +1 -1
  429. package/dist/scripts/_lib/agent_settings.js +73 -0
  430. package/dist/scripts/_lib/agent_src.js +20 -0
  431. package/dist/scripts/_lib/guidelines_lane.js +158 -0
  432. package/dist/scripts/_lib/installed_lock.js +1 -1
  433. package/dist/scripts/condense.js +2 -5
  434. package/dist/server/io/yamlIO.js +175 -17
  435. package/dist/server/schemas/settings.js +18 -4
  436. package/dist/shared/settingsSurface.js +6 -1
  437. package/docs/contracts/settings-classes.md +18 -9
  438. package/docs/guidelines/abstraction-thresholds.md +35 -0
  439. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
  440. package/docs/guidelines/agent-infra/false-green.md +2 -2
  441. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  442. package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
  443. package/docs/guidelines/design-fidelity-mechanics.md +4 -0
  444. package/docs/guidelines/design-fidelity-routing.md +78 -0
  445. package/docs/guidelines/design-reconciliation.md +172 -0
  446. package/docs/guidelines/gtm-handoff.md +2 -2
  447. package/docs/guidelines/wing4-handoff.md +2 -2
  448. package/package.json +7 -3
  449. package/src/config/agent-settings.template.yml +55 -8
  450. package/src/config/ci-local-parity.yml +34 -0
  451. package/src/config/continuity-surface.json +11 -32
  452. package/src/config/gate-coverage.yml +31 -8
  453. package/src/config/gate-reachability-exemptions.json +1 -0
  454. package/src/config/gate-violation-baselines.json +3 -3
  455. package/src/config/hook-token-budget.json +1 -1
  456. package/src/config/host-injection-effect.json +2 -2
  457. package/src/config/pack-size-budget.json +55 -4
  458. package/src/config/platform-anchor.json +47 -0
  459. package/src/config/preamble-payload-budget.json +12 -8
  460. package/src/config/preamble-payload-exceptions.json +28 -0
  461. package/src/config/publish-surface.json +4 -2
  462. package/src/config/ratification-policy.json +7 -0
  463. package/src/config/rule-stub-ceilings.json +16 -9
  464. package/src/scripts/_cli/cmd_settings_get.ts +22 -7
  465. package/src/scripts/_dispatch.bash +3 -1
  466. package/src/scripts/_lib/agent_settings.ts +85 -0
  467. package/src/scripts/_lib/agent_src.ts +21 -0
  468. package/src/scripts/_lib/artifact_maturity.ts +242 -0
  469. package/src/scripts/_lib/base_ref_payload.ts +315 -0
  470. package/src/scripts/_lib/conformance_report.ts +403 -0
  471. package/src/scripts/_lib/continuity_writer.ts +72 -13
  472. package/src/scripts/_lib/design_system_import.ts +20 -0
  473. package/src/scripts/_lib/design_tolerance.ts +281 -0
  474. package/src/scripts/_lib/dropped_decision.ts +142 -0
  475. package/src/scripts/_lib/guidelines_lane.ts +164 -0
  476. package/src/scripts/_lib/installed_lock.ts +1 -1
  477. package/src/scripts/_lib/measured_payload_ceiling.ts +424 -0
  478. package/src/scripts/_lib/obligation_frequency.ts +2 -3
  479. package/src/scripts/_lib/payload_catalogue_completeness.ts +211 -0
  480. package/src/scripts/_lib/platform_anchor.ts +1053 -0
  481. package/src/scripts/_lib/ratification_artifact.ts +278 -0
  482. package/src/scripts/_lib/release_findings_ingest.ts +324 -0
  483. package/src/scripts/_lib/release_tag_dispatch.ts +63 -0
  484. package/src/scripts/_lib/review_baseline.ts +254 -0
  485. package/src/scripts/_lib/review_skipped_record.ts +61 -1
  486. package/src/scripts/_lib/security_lint.ts +23 -2
  487. package/src/scripts/_lib/self_repair.ts +21 -0
  488. package/src/scripts/_lib/session_index_trust.ts +42 -1
  489. package/src/scripts/_lib/standing_bound_ratchet.ts +267 -88
  490. package/src/scripts/_lib/tolerance_shadow.ts +177 -0
  491. package/src/scripts/_lib/turn_end_refusals.ts +51 -4
  492. package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
  493. package/src/scripts/autonomy_friction_traffic.ts +379 -0
  494. package/src/scripts/check_beta_review_markers.ts +35 -4
  495. package/src/scripts/check_finding_dispositions.ts +167 -16
  496. package/src/scripts/check_held_object_arrivals.ts +381 -0
  497. package/src/scripts/check_kernel_edit_ratified.ts +462 -0
  498. package/src/scripts/check_loss_class_declared.ts +793 -46
  499. package/src/scripts/check_platform_anchor.ts +390 -0
  500. package/src/scripts/check_preamble_payload_budget.ts +672 -107
  501. package/src/scripts/check_projected_rule_routes.ts +395 -0
  502. package/src/scripts/check_release_published.ts +1 -1
  503. package/src/scripts/check_reply_consistency.ts +86 -17
  504. package/src/scripts/code_graph/cli.ts +6 -0
  505. package/src/scripts/condense.ts +2 -6
  506. package/src/scripts/generate_host_cost_table.ts +354 -0
  507. package/src/scripts/hook_manifest.json +1 -1
  508. package/src/scripts/hook_manifest.yaml +74 -30
  509. package/src/scripts/hooks/block_kernel_rule_writes.ts +12 -2
  510. package/src/scripts/hooks/category_a.ts +1 -1
  511. package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
  512. package/src/scripts/hooks/concern_registry.ts +2 -0
  513. package/src/scripts/hooks/end_review_nudge_hook.ts +101 -21
  514. package/src/scripts/hooks/review_baseline_hook.ts +130 -0
  515. package/src/scripts/hooks/session_eol_hook.ts +68 -154
  516. package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
  517. package/src/scripts/hooks/turn_end_gate_hook.ts +232 -14
  518. package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
  519. package/src/scripts/hooks_doctor.ts +4 -1
  520. package/src/scripts/hot_context_hook.ts +41 -401
  521. package/src/scripts/install.ts +1 -1
  522. package/src/scripts/interruption_report.ts +8 -2
  523. package/src/scripts/janitor.ts +8 -1
  524. package/src/scripts/lint_evidence_artifacts.ts +1 -0
  525. package/src/scripts/lint_knowledge_scale.ts +0 -26
  526. package/src/scripts/measure_turn_end_gate.ts +302 -5
  527. package/src/scripts/memory_lookup.ts +9 -9
  528. package/src/scripts/release.ts +52 -64
  529. package/src/scripts/release_drill.ts +193 -14
  530. package/src/scripts/release_env.ts +1 -1
  531. package/src/scripts/release_publication.ts +1 -1
  532. package/src/scripts/report_held_object_arrivals.ts +456 -0
  533. package/src/scripts/report_standing_payload_by_host.ts +7 -7
  534. package/src/scripts/session_memory_index.ts +5 -0
  535. package/src/scripts/sync_agent_settings.ts +394 -12
  536. package/src/server/io/yamlIO.ts +175 -17
  537. package/src/server/schemas/settings.ts +25 -5
  538. package/src/shared/settingsSurface.ts +13 -2
  539. package/src/templates/compact-instructions.md +8 -3
  540. package/dist/agent-src/commands/chat-history/import.md +0 -170
  541. package/dist/agent-src/commands/chat-history.md +0 -63
@@ -0,0 +1,403 @@
1
+ /**
2
+ * Per-dimension conformance of a port against the artifact it was ported from.
3
+ *
4
+ * WHY A DIMENSION REPORT AND NOT A SCORE. `internal/bench/ui` already scores a
5
+ * port on pixel / dom / tokens / interactions and produces one weighted number.
6
+ * A number answers "how close", which is the right question for a benchmark and
7
+ * the wrong one for a fidelity gate: a port can be pixel-identical and still
8
+ * have dropped a keyboard interaction, inlined every value the project has a
9
+ * token for, or lost a breakpoint. Averaged into a weighted score those
10
+ * disappear, because the axis that carries them is small and the axis that
11
+ * hides them is large.
12
+ *
13
+ * A GREEN PIXEL DIFF ALONE CANNOT PRODUCE A PASS, and that is enforced by
14
+ * construction rather than by policy: pixel similarity is not one of the
15
+ * dimensions below. It is evidence a human may read; it is never an input to
16
+ * `overall`.
17
+ *
18
+ * WHAT EACH ROW OWES. Every finding cites BOTH sides — what the artifact has
19
+ * and what the implementation has. A finding that names only the implementation
20
+ * is unactionable: the reader cannot tell whether the port dropped something or
21
+ * whether the artifact never had it.
22
+ *
23
+ * SCOPE, stated because the honest version is narrower than the obvious one.
24
+ * These are static checks over two documents' text. They catch the deviations
25
+ * that leave a textual trace — a value gone, a handler gone, a breakpoint gone.
26
+ * They do NOT catch a deviation that is only visible when rendered, and they do
27
+ * not claim to. Where a rendered comparison is available it belongs beside this
28
+ * report, not inside it.
29
+ */
30
+ import { type TokenCandidate, type ValueKind, type ValueRow, reconcileValue } from './design_tolerance.js';
31
+ import { recordToleranceShadow } from './tolerance_shadow.js';
32
+
33
+ export type Dimension = 'structure' | 'values' | 'behaviour' | 'responsive' | 'icons' | 'carrier';
34
+
35
+ export const DIMENSIONS: readonly Dimension[] = [
36
+ 'structure',
37
+ 'values',
38
+ 'behaviour',
39
+ 'responsive',
40
+ 'icons',
41
+ 'carrier',
42
+ ];
43
+
44
+ export interface Finding {
45
+ dimension: Dimension;
46
+ /** What the artifact carries. Never omitted — see the header. */
47
+ artifact: string;
48
+ /** What the implementation carries in its place. */
49
+ implementation: string;
50
+ detail: string;
51
+ }
52
+
53
+ export interface DimensionVerdict {
54
+ dimension: Dimension;
55
+ verdict: 'conforms' | 'deviates';
56
+ findings: Finding[];
57
+ }
58
+
59
+ export interface ConformanceReport {
60
+ dimensions: DimensionVerdict[];
61
+ /** Value rows with their distance, reported whether or not they deviate. */
62
+ values: ValueRow[];
63
+ overall: 'conforms' | 'deviates';
64
+ /** Dimensions that deviated, in `DIMENSIONS` order. */
65
+ deviating: Dimension[];
66
+ }
67
+
68
+ // ------------------------------------------------------------- extraction
69
+
70
+ const HEX_RE = /#[0-9a-fA-F]{3}\b|#[0-9a-fA-F]{6}\b/g;
71
+ const LENGTH_RE = /\b\d*\.?\d+(?:px|rem)\b/g;
72
+ const TAG_RE = /<([a-zA-Z][a-zA-Z0-9-]*)\b/g;
73
+ // EVERY width bound in a query, not the first. `@media (min-width: 48rem) and
74
+ // (max-width: 80rem)` has two, and capturing one left `80rem` counted as a
75
+ // VALUE — which reds two dimensions for one corruption and breaks the
76
+ // one-dimension property 4.1's verify clause rests on. Found by a blind review.
77
+ const MEDIA_QUERY_RE = /@media[^{]+/g;
78
+ const MEDIA_BOUND_RE = /\(\s*(?:min|max)-width\s*:\s*([^)]+)\)/g;
79
+ // Case-insensitive on the listener name: the first version required an
80
+ // all-lowercase quoted name, so `addEventListener('DOMContentLoaded', …)` and
81
+ // any camelCase custom event were invisible to the behavior dimension that
82
+ // exists to catch a dropped interaction. Blind-review finding.
83
+ const LISTENER_RE = /addEventListener\(\s*['"]([A-Za-z][A-Za-z0-9_:.-]*)['"]/g;
84
+
85
+ /**
86
+ * `on*` ATTRIBUTES, matched against a closed set rather than by shape.
87
+ *
88
+ * A word boundary does not separate `onclick` from `onboarding` — both begin
89
+ * with `on` and both are followed by `=`, so a shape rule reads the second as a
90
+ * hook named `boarding`. It is the inline-handler namespace that is closed, so
91
+ * the set is what discriminates. A custom event never appears as an attribute
92
+ * anyway; it appears in `addEventListener`, which the regex above reads openly.
93
+ */
94
+ const INLINE_EVENTS = new Set([
95
+ 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseenter', 'mouseleave',
96
+ 'mousemove', 'mouseover', 'mouseout', 'keydown', 'keyup', 'keypress',
97
+ 'input', 'change', 'submit', 'reset', 'focus', 'blur', 'focusin',
98
+ 'focusout', 'scroll', 'wheel', 'load', 'error', 'resize', 'toggle',
99
+ 'select', 'drag', 'dragstart', 'dragend', 'dragover', 'drop', 'touchstart',
100
+ 'touchend', 'touchmove', 'pointerdown', 'pointerup', 'pointermove',
101
+ 'animationend', 'transitionend', 'contextmenu', 'copy', 'cut', 'paste',
102
+ 'invalid', 'play', 'pause', 'ended',
103
+ ]);
104
+ const ON_ATTR_RE = /(?:^|[\s"'`<])on([a-z]+)\s*=/g;
105
+ // Attribute-bounded and quote-agnostic. Unbounded, it false-positived on any
106
+ // attribute ENDING in `style` (`data-style=`, `hover-style=`); double-quote-only,
107
+ // it missed `style='…'` entirely. Blind-review finding.
108
+ const INLINE_STYLE_RE = /(?:^|[\s"'`<])style\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
109
+
110
+ /** Landmark and control tags — the structural skeleton, not every `<div>`. */
111
+ const STRUCTURAL_TAGS = new Set([
112
+ 'main',
113
+ 'header',
114
+ 'footer',
115
+ 'nav',
116
+ 'aside',
117
+ 'section',
118
+ 'article',
119
+ 'form',
120
+ 'table',
121
+ 'dialog',
122
+ 'button',
123
+ 'input',
124
+ 'select',
125
+ 'textarea',
126
+ 'a',
127
+ 'label',
128
+ 'svg',
129
+ ]);
130
+
131
+ function setMinus(a: Set<string>, b: Set<string>): Set<string> {
132
+ const out = new Set<string>();
133
+ for (const v of a) if (!b.has(v)) out.add(v);
134
+ return out;
135
+ }
136
+
137
+ function matchSet(text: string, re: RegExp, group = 0): Set<string> {
138
+ const out = new Set<string>();
139
+ for (const m of text.matchAll(re)) {
140
+ const v = m[group];
141
+ if (typeof v === 'string' && v !== '') out.add(v.toLowerCase().trim());
142
+ }
143
+ return out;
144
+ }
145
+
146
+ /** Counts per structural tag; a dropped control is a count change, not absence. */
147
+ export function structuralCounts(html: string): Map<string, number> {
148
+ const counts = new Map<string, number>();
149
+ for (const m of html.matchAll(TAG_RE)) {
150
+ const tag = (m[1] as string).toLowerCase();
151
+ if (!STRUCTURAL_TAGS.has(tag)) continue;
152
+ counts.set(tag, (counts.get(tag) ?? 0) + 1);
153
+ }
154
+ return counts;
155
+ }
156
+
157
+ /** Event names the document wires, from listeners and from `on*` attributes. */
158
+ export function behaviourHooks(html: string): Set<string> {
159
+ const out = new Set<string>();
160
+ for (const m of html.matchAll(LISTENER_RE)) {
161
+ out.add((m[1] as string).toLowerCase());
162
+ }
163
+ for (const m of html.matchAll(ON_ATTR_RE)) {
164
+ const name = (m[1] as string).toLowerCase();
165
+ if (INLINE_EVENTS.has(name)) out.add(name);
166
+ }
167
+ return out;
168
+ }
169
+
170
+ /** Breakpoints, normalised so `48rem` and `48 rem` are one value. */
171
+ export function breakpoints(html: string): Set<string> {
172
+ const out = new Set<string>();
173
+ for (const q of html.matchAll(MEDIA_QUERY_RE)) {
174
+ for (const b of (q[0] as string).matchAll(MEDIA_BOUND_RE)) {
175
+ const v = (b[1] as string).toLowerCase().trim();
176
+ if (v !== '') out.add(v);
177
+ }
178
+ }
179
+ return out;
180
+ }
181
+
182
+ /**
183
+ * Static declarations sitting in a `style=` attribute.
184
+ *
185
+ * The carrier axis: static presentation belongs in CSS or classes, and `style=`
186
+ * is for what only the runtime knows. A port that moves the artifact's inline
187
+ * styles into classes is CONFORMING as long as the resolved value is identical
188
+ * — which is why this counts declarations the IMPLEMENTATION added, never ones
189
+ * it removed.
190
+ */
191
+ export function inlineStaticDeclarations(html: string): string[] {
192
+ const out: string[] = [];
193
+ for (const m of html.matchAll(INLINE_STYLE_RE)) {
194
+ for (const decl of ((m[1] ?? m[2] ?? '') as string).split(';')) {
195
+ const trimmed = decl.trim();
196
+ if (trimmed === '') continue;
197
+ // A custom property or a `var()` is plausibly runtime-driven.
198
+ if (trimmed.startsWith('--') || trimmed.includes('var(')) continue;
199
+ out.push(trimmed.toLowerCase());
200
+ }
201
+ }
202
+ return out;
203
+ }
204
+
205
+ /** Inline `<svg>` occurrences — the icon carrier a port reproduces. */
206
+ export function inlineSvgCount(html: string): number {
207
+ return (html.match(/<svg\b/gi) ?? []).length;
208
+ }
209
+
210
+ // ------------------------------------------------------------------ report
211
+
212
+ function verdictFor(dimension: Dimension, findings: Finding[]): DimensionVerdict {
213
+ return { dimension, verdict: findings.length > 0 ? 'deviates' : 'conforms', findings };
214
+ }
215
+
216
+ export interface ReportInput {
217
+ artifact: string;
218
+ implementation: string;
219
+ /** Project tokens, so a value row can carry its distance. */
220
+ tokens?: readonly TokenCandidate[];
221
+ /**
222
+ * Repo root. When given, every measurable value row is appended to the
223
+ * shadow log as a `tolerance_shadow` record.
224
+ *
225
+ * OPT-IN, and that is the whole design: a report is also built by tests and
226
+ * by a reader inspecting a port, and a window that recorded those would be
227
+ * measuring its own test fixtures. The caller that wants the window says so.
228
+ */
229
+ shadowRoot?: string;
230
+ }
231
+
232
+ /**
233
+ * Build the report. Pure over two strings, so a test can corrupt exactly one
234
+ * dimension and assert that exactly one reds.
235
+ */
236
+ export function buildConformanceReport(input: ReportInput): ConformanceReport {
237
+ const { artifact, implementation } = input;
238
+ const tokens = input.tokens ?? [];
239
+
240
+ // --- structure
241
+ const structureFindings: Finding[] = [];
242
+ const aCounts = structuralCounts(artifact);
243
+ const iCounts = structuralCounts(implementation);
244
+ for (const tag of new Set([...aCounts.keys(), ...iCounts.keys()])) {
245
+ const a = aCounts.get(tag) ?? 0;
246
+ const i = iCounts.get(tag) ?? 0;
247
+ // `svg` is the icons dimension's subject; counting it here too would
248
+ // red two dimensions for one corruption and break the step's verify.
249
+ if (tag === 'svg' || a === i) continue;
250
+ structureFindings.push({
251
+ dimension: 'structure',
252
+ artifact: `${String(a)} × <${tag}>`,
253
+ implementation: `${String(i)} × <${tag}>`,
254
+ detail: `structural element count differs for <${tag}>`,
255
+ });
256
+ }
257
+
258
+ // --- values, and their distances
259
+ const aHex = matchSet(artifact, HEX_RE);
260
+ const iHex = matchSet(implementation, HEX_RE);
261
+ // A breakpoint's own length belongs to `responsive`, not to `values`.
262
+ // Without this both axes red on one corruption — measured: dropping
263
+ // `@media (min-width: 48rem)` also dropped `48rem` from the value set, so
264
+ // the responsive case reported `['values', 'responsive']` and the step's
265
+ // "and no other" clause could not hold. Same shape as the `svg` exclusion
266
+ // in the structure loop above.
267
+ const aLen = setMinus(matchSet(artifact, LENGTH_RE), breakpoints(artifact));
268
+ const iLen = setMinus(matchSet(implementation, LENGTH_RE), breakpoints(implementation));
269
+ const valueFindings: Finding[] = [];
270
+ const valueRows: ValueRow[] = [];
271
+ // Parallel to `valueRows`: a row does not carry its own kind, and the
272
+ // shadow record needs it to pick the right candidate-threshold spread.
273
+ const valueKinds: ValueKind[] = [];
274
+
275
+ for (const hex of aHex) {
276
+ // Reported on every value, present or missing — the distance is the
277
+ // point, not the verdict (`design_tolerance.ts` header).
278
+ valueRows.push(reconcileValue('color', hex, tokens));
279
+ valueKinds.push('color');
280
+ if (!iHex.has(hex)) {
281
+ valueFindings.push({
282
+ dimension: 'values',
283
+ artifact: hex,
284
+ implementation: iHex.size > 0 ? `absent (port uses ${[...iHex].join(', ')})` : 'absent',
285
+ detail: 'a colour the artifact states does not appear in the port',
286
+ });
287
+ }
288
+ }
289
+ for (const len of aLen) {
290
+ valueRows.push(reconcileValue('length', len, tokens));
291
+ valueKinds.push('length');
292
+ if (!iLen.has(len)) {
293
+ valueFindings.push({
294
+ dimension: 'values',
295
+ artifact: len,
296
+ implementation: 'absent',
297
+ detail: 'a length the artifact states does not appear in the port',
298
+ });
299
+ }
300
+ }
301
+
302
+ // --- behaviour
303
+ const aHooks = behaviourHooks(artifact);
304
+ const iHooks = behaviourHooks(implementation);
305
+ const behaviourFindings: Finding[] = [];
306
+ for (const hook of aHooks) {
307
+ if (iHooks.has(hook)) continue;
308
+ behaviourFindings.push({
309
+ dimension: 'behaviour',
310
+ artifact: `wires \`${hook}\``,
311
+ implementation: 'not wired',
312
+ detail: `an interaction the artifact wires is missing from the port`,
313
+ });
314
+ }
315
+
316
+ // --- responsive
317
+ const aBp = breakpoints(artifact);
318
+ const iBp = breakpoints(implementation);
319
+ const responsiveFindings: Finding[] = [];
320
+ for (const bp of aBp) {
321
+ if (iBp.has(bp)) continue;
322
+ responsiveFindings.push({
323
+ dimension: 'responsive',
324
+ artifact: `breakpoint ${bp}`,
325
+ implementation: iBp.size > 0 ? `only ${[...iBp].join(', ')}` : 'no breakpoints',
326
+ detail: 'a breakpoint the artifact declares is missing from the port',
327
+ });
328
+ }
329
+
330
+ // --- icons
331
+ const aSvg = inlineSvgCount(artifact);
332
+ const iSvg = inlineSvgCount(implementation);
333
+ const iconFindings: Finding[] = [];
334
+ if (aSvg !== iSvg) {
335
+ iconFindings.push({
336
+ dimension: 'icons',
337
+ artifact: `${String(aSvg)} inline <svg>`,
338
+ implementation: `${String(iSvg)} inline <svg>`,
339
+ detail: 'the port does not carry the artifact’s icon count',
340
+ });
341
+ }
342
+
343
+ // --- carrier
344
+ const aInline = new Set(inlineStaticDeclarations(artifact));
345
+ const carrierFindings: Finding[] = [];
346
+ for (const decl of inlineStaticDeclarations(implementation)) {
347
+ if (aInline.has(decl)) continue;
348
+ carrierFindings.push({
349
+ dimension: 'carrier',
350
+ artifact: 'not inline in the artifact',
351
+ implementation: `style="${decl}"`,
352
+ detail: 'a static declaration the port put inline; static presentation belongs in a class',
353
+ });
354
+ }
355
+
356
+ const dimensions: DimensionVerdict[] = [
357
+ verdictFor('structure', structureFindings),
358
+ verdictFor('values', valueFindings),
359
+ verdictFor('behaviour', behaviourFindings),
360
+ verdictFor('responsive', responsiveFindings),
361
+ verdictFor('icons', iconFindings),
362
+ verdictFor('carrier', carrierFindings),
363
+ ];
364
+ const deviating = dimensions.filter((d) => d.verdict === 'deviates').map((d) => d.dimension);
365
+
366
+ // The one place the shadow window is fed. Without this the records the
367
+ // flip criterion is meant to read never exist, and its reverse trigger is
368
+ // satisfied by construction — the defect a blind review caught on the
369
+ // branch that introduced the module.
370
+ if (input.shadowRoot !== undefined) {
371
+ recordToleranceShadow(
372
+ input.shadowRoot,
373
+ valueRows.map((row, i) => ({ kind: valueKinds[i] as ValueKind, row })),
374
+ );
375
+ }
376
+
377
+ return {
378
+ dimensions,
379
+ values: valueRows,
380
+ overall: deviating.length > 0 ? 'deviates' : 'conforms',
381
+ deviating,
382
+ };
383
+ }
384
+
385
+ /** One line per dimension, then the value rows with their distances. */
386
+ export function formatConformanceReport(report: ConformanceReport): string {
387
+ const lines: string[] = [];
388
+ for (const d of report.dimensions) {
389
+ const mark = d.verdict === 'conforms' ? '✅' : '❌';
390
+ lines.push(`${mark} ${d.dimension}: ${d.verdict} (${String(d.findings.length)} finding(s))`);
391
+ for (const f of d.findings) {
392
+ lines.push(` artifact: ${f.artifact} · port: ${f.implementation} — ${f.detail}`);
393
+ }
394
+ }
395
+ lines.push(
396
+ `\noverall: ${report.overall}` +
397
+ (report.deviating.length > 0 ? ` (${report.deviating.join(', ')})` : ''),
398
+ );
399
+ // Stated on every report, not only on a failing one: a reader who sees a
400
+ // pass has to know what it did NOT measure.
401
+ lines.push('pixel similarity is not a dimension here and cannot produce a pass on its own.');
402
+ return lines.join('\n');
403
+ }
@@ -4,9 +4,11 @@
4
4
  * `road-to-continuity-writer-activation` step 1.2. Until this module existed
5
5
  * `agent-config session:recycle` was the ONLY writer of the continuity record
6
6
  * in the tree, which is why `verb:session:recycle` counts on the
7
- * `public_continuity_commands` axis and why an advisory has to tell a human to
7
+ * `public_continuity_commands` axis and why an advisory had to tell a human to
8
8
  * run it before `/clear`: continuity did not happen unless somebody
9
- * remembered.
9
+ * remembered. Since step 3.2 (2026-09-10) this module is armed by default and
10
+ * that advisory is gone; the verb is retained as an explicit affordance, not
11
+ * as the normal path.
10
12
  *
11
13
  * Every field here is computed from on-disk state and nothing is asked of a
12
14
  * model. That is not a cost optimisation, it is what makes the record a
@@ -18,9 +20,11 @@
18
20
  *
19
21
  * Two gates, and both are needed:
20
22
  *
21
- * 1. `continuity.auto_record` must be `on`. It ships `off`, so with the
22
- * shipped default this module is never reached and the tree behaves
23
- * exactly as it does today.
23
+ * 1. `continuity.auto_record` must be `on`. It ships `on` since 2026-09-10
24
+ * (step 3.2, AI council under the owner's written delegation); before
25
+ * that it shipped `off` and this module was never reached on a default
26
+ * install. The switch still exists and still fails CLOSED, so an
27
+ * unreadable settings cascade disarms the producer rather than arming it.
24
28
  * 2. The session must be SUBSTANTIVE by the committed floor
25
29
  * (`is_substantive`) and must have a resolvable task. Both come from the
26
30
  * concern's own counters and claim state, never from file presence.
@@ -35,28 +39,72 @@
35
39
  */
36
40
  import * as fs from 'node:fs';
37
41
 
38
- import { load_agent_settings } from './agent_settings.js';
42
+ import { load_agent_settings, settings_layer_states } from './agent_settings.js';
39
43
  import { resolvePredecessor } from './recycle_envelope_paths.js';
40
44
  import { CHECKBOX_LINE, phaseLines } from './roadmap_checkboxes.js';
41
45
  import { readHead, roadmapPath } from './run_checkpoint.js';
42
46
  import { is_substantive, type StoredEolCounters } from './session_eol.js';
43
47
  import { CAPSULE_SCHEMA_VERSION, MAX_ENTRIES, MAX_LINE_CHARS } from './subagent_capsule.js';
44
48
 
45
- /** Settings key that arms this writer. Ships `off`. */
49
+ /** Settings key that arms this writer. Ships `on` since 2026-09-10 (step 3.2). */
46
50
  export const AUTO_RECORD_KEY = 'continuity.auto_record';
47
51
 
48
52
  /**
49
53
  * Read `continuity.auto_record` from the merged settings cascade.
50
54
  *
51
55
  * The cascade merges the shipped template, so a workspace with no settings file
52
- * resolves `off` through the template rather than through the trailing
53
- * `return false` — which is why that line is defence against an unreadable
54
- * cascade and not the path a default install takes. Both directions are pinned
55
- * by fixtures, because "absent" and "off" arriving by different routes is
56
- * exactly the kind of thing a reader assumes and a test has to establish.
56
+ * resolves the TEMPLATE's value. That is what the 2026-09-10 flip acts on:
57
+ * changing the template to `on` arms a default install.
58
+ *
59
+ * FAIL-CLOSED, AND IT IS NOW CARRIED BY CODE RATHER THAN BY THE DEFAULT.
60
+ *
61
+ * This function is documented — here, in `docs/contracts/continuity-rollback.md`
62
+ * and in step 1.4 of its roadmap — as failing closed: a settings cascade the
63
+ * user has broken must leave the producer disarmed. Until 2026-09-10 that
64
+ * property was carried by the TEMPLATE saying `off`, not by the `catch` below:
65
+ * measured, `load_agent_settings` does not throw on a malformed
66
+ * `.agent-settings.yml`; it skips the layer and returns the template's value.
67
+ * So the catch never ran for that case, and the flip to `on` removed the
68
+ * property outright — found by the fixture that was written to pin it.
69
+ *
70
+ * The repair is the property, not the wording. An AI council of 2026-09-10
71
+ * (2 seats, convergent, under the owner's written delegation) ruled option (A):
72
+ * openai — *"The defective implementation is grounds to repair the protection,
73
+ * not authority to repeal it."* Both seats classified the alternative (flipping
74
+ * the documented polarity to fail-open, matching `run_checkpoints_enabled`) as
75
+ * a WEAKENING of a class-C `consent` protection and therefore owner-reserved,
76
+ * not council-decidable, even done openly.
77
+ *
78
+ * So the malformed case is now decided by `settings_layer_states`, which
79
+ * reports per-layer validity instead of letting a resolved value stand in for
80
+ * it. The `catch` stays as the last resort for a genuine throw, and it is no
81
+ * longer the thing the claim rests on.
82
+ *
83
+ * The diagnostic is a required ATTEMPT with non-guaranteed delivery, which is
84
+ * the strongest promise this path can honestly make: the Stop slot never blocks
85
+ * and the dispatcher does not forward a concern's stderr on every host, so a
86
+ * line written here may reach nobody. Saying "warns you" would be the same
87
+ * class of claim this whole comment exists to correct.
57
88
  */
58
89
  export function auto_record_enabled(root: string): boolean {
59
90
  try {
91
+ // Fail-closed on a layer the USER can break, before the value is read.
92
+ // Order matters: reading first and checking second would let a valid
93
+ // template value decide a case in which the user's own file is broken.
94
+ const broken = settings_layer_states({ cwd: root }).filter((l) => l.state === 'malformed');
95
+ if (broken.length > 0) {
96
+ try {
97
+ process.stderr.write(
98
+ `continuity: ${AUTO_RECORD_KEY} disabled for this invocation — ` +
99
+ `unreadable or malformed settings layer(s): ` +
100
+ `${broken.map((l) => l.path).join(', ')}. ` +
101
+ `Validate the file; the shipped default cannot be trusted while a layer above it is broken.\n`,
102
+ );
103
+ } catch {
104
+ // a diagnostic that cannot be written must not change the verdict
105
+ }
106
+ return false;
107
+ }
60
108
  const settings = load_agent_settings({ cwd: root });
61
109
  const section = settings['continuity'];
62
110
  if (section && typeof section === 'object' && !Array.isArray(section)) {
@@ -65,7 +113,7 @@ export function auto_record_enabled(root: string): boolean {
65
113
  return v === 'on' || v === true;
66
114
  }
67
115
  } catch {
68
- // fail-closed: unreadable settings leave the writer disarmed
116
+ // last resort: a genuine throw leaves the writer disarmed
69
117
  }
70
118
  return false;
71
119
  }
@@ -81,6 +129,17 @@ export const RUN_CHECKPOINTS_KEY = 'continuity.run_checkpoints';
81
129
  * leave it running. Its sibling arms something new, so an unreadable cascade
82
130
  * must leave that disarmed. A single helper with one polarity would have been
83
131
  * wrong for one of the two.
132
+ *
133
+ * ONE HONEST QUALIFICATION, from the 2026-09-10 audit of its sibling. This
134
+ * function's `catch` is unreachable for a malformed settings file too — the
135
+ * loader skips a broken layer instead of throwing. Its fail-OPEN claim is true
136
+ * anyway, because the template says `on` and a malformed layer therefore
137
+ * resolves to `on`. So the polarity holds while the shipped default happens to
138
+ * agree with it, which is exactly the accident that broke the sibling when its
139
+ * default flipped. It is left as it is deliberately: the behaviour is correct
140
+ * today, and hardening a reader whose claim is currently true is a change with
141
+ * no observable effect. If this key's default ever moves to `off`, this comment
142
+ * is the notice that the claim moves with it.
84
143
  */
85
144
  export function run_checkpoints_enabled(root: string): boolean {
86
145
  try {
@@ -77,8 +77,21 @@ export interface ComponentObservation {
77
77
  }
78
78
 
79
79
  /** The contract shape. Only `source` is mandatory; every other key is optional. */
80
+ /**
81
+ * The artefact-maturity block. Two-valued on the axis `design-fidelity`
82
+ * branches on, with the rung that decided it and the concrete signal — never a
83
+ * restatement of the verdict. Resolved by `_lib/artifact_maturity.ts`; OPTIONAL
84
+ * in the file, because absent resolves `finished` by the same rule.
85
+ */
86
+ export interface SpecBlock {
87
+ maturity?: string;
88
+ maturity_source?: string;
89
+ maturity_signal?: string;
90
+ }
91
+
80
92
  export interface DesignSystem {
81
93
  source: SourceBlock;
94
+ spec?: SpecBlock;
82
95
  colors?: { light?: Record<string, string>; dark?: Record<string, string> };
83
96
  typography?: { families?: FontFamily[]; scale?: ScaleStep[] };
84
97
  spacing?: { base?: string; scale?: string[] };
@@ -259,6 +272,13 @@ const NATIVE_KEY_SHAPE: Record<string, 'object' | 'array'> = {
259
272
  shadow: 'object',
260
273
  motion: 'object',
261
274
  components: 'array',
275
+ // The artefact-maturity block (`road-to-design-intent-conformance` 3.1,
276
+ // resolved by `_lib/artifact_maturity.ts`). Added here in the same change
277
+ // that documented it: without a row the native lane routes it to
278
+ // `_meta.unmapped` with an "unknown top-level key" note, so the contract
279
+ // would say the field exists while the importer said it did not. Caught by
280
+ // a blind review, which read the two surfaces against each other.
281
+ spec: 'object',
262
282
  _meta: 'object',
263
283
  };
264
284