@event4u/agent-config 14.11.0 → 14.12.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 (350) 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 +156 -538
  5. package/README.md +1 -1
  6. package/dist/agent-src/contexts/execution/evidence-discipline.md +26 -0
  7. package/dist/agent-src/skills/code-refactoring/SKILL.md +45 -1
  8. package/dist/agent-src/skills/code-review/SKILL.md +65 -6
  9. package/dist/agent-src/skills/command-writing/SKILL.md +35 -0
  10. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +8 -1
  11. package/dist/agent-src/skills/project-analysis-core/SKILL.md +23 -0
  12. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +29 -12
  13. package/dist/agent-src/skills/skill-writing/references/procedure.md +24 -2
  14. package/dist/agent-src/skills/storybook-workshop/SKILL.md +9 -0
  15. package/dist/agent-src/skills/ui-component-architect/SKILL.md +8 -0
  16. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  17. package/dist/cli-delegate/{chunk-L43NCYPB.js → chunk-JCW7ZLHK.js} +5 -0
  18. package/dist/cli-delegate/{chunk-236PNQZK.js → chunk-JJA2QEWA.js} +1 -1
  19. package/dist/cli-delegate/cmd_export.js +2 -2
  20. package/dist/cli-delegate/cmd_prune.js +2 -2
  21. package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
  22. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  23. package/dist/cli-delegate/cmd_sync.js +2 -2
  24. package/dist/cli-delegate/cmd_uninstall.js +2 -2
  25. package/dist/cli-delegate/cmd_validate.js +2 -2
  26. package/dist/discovery/deprecation-report.md +1 -1
  27. package/dist/discovery/discovery-manifest.json +10 -10
  28. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  29. package/dist/discovery/discovery-manifest.summary.md +1 -1
  30. package/dist/discovery/dormancy-report.md +1 -1
  31. package/dist/discovery/orphan-report.md +1 -1
  32. package/dist/discovery/packs.json +2 -2
  33. package/dist/discovery/trust-report.md +1 -1
  34. package/dist/discovery/workspaces.json +2 -2
  35. package/dist/hooks/dispatch.js +1081 -879
  36. package/dist/install/install.mjs +5 -0
  37. package/dist/mcp/registry-manifest.json +2 -2
  38. package/dist/mcp/server.json +2 -2
  39. package/dist/server/schemas/settings.js +3 -0
  40. package/docs/contracts/settings-classes.md +24 -4
  41. package/docs/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
  42. package/docs/guidelines/code-clarity.md +21 -0
  43. package/docs/guidelines/redundancy-taxonomy.md +180 -0
  44. package/package.json +6 -2
  45. package/src/config/agent-settings.template.yml +16 -0
  46. package/src/config/budgets.yml +19 -0
  47. package/src/config/ci-local-parity.yml +15 -0
  48. package/src/config/discovery/prompt-patterns.yml +56 -0
  49. package/src/config/estate-count-budget.json +8 -3
  50. package/src/config/gate-coverage.yml +191 -6
  51. package/src/config/gate-violation-baselines.json +3 -3
  52. package/src/config/pack-size-budget.json +39 -12
  53. package/src/config/preamble-payload-budget.json +97 -71
  54. package/src/config/routing-coverage-seed.json +29 -0
  55. package/src/config/suggestion-capture.json +28 -0
  56. package/src/config/surface-matrix.yml +21 -2
  57. package/src/config/web-launch-readiness.json +188 -0
  58. package/src/scripts/_lib/gate_baseline.ts +150 -1
  59. package/src/scripts/_lib/skill_estate.ts +115 -0
  60. package/src/scripts/ai_council/argument_exhaustion.ts +130 -0
  61. package/src/scripts/check_bundle_path_leakage.ts +162 -7
  62. package/src/scripts/check_command_examples.ts +557 -0
  63. package/src/scripts/check_estate_count.ts +122 -3
  64. package/src/scripts/check_preamble_payload_budget.ts +30 -3
  65. package/src/scripts/check_routing_coverage.ts +352 -0
  66. package/src/scripts/check_score_contract.ts +505 -0
  67. package/src/scripts/check_skill_admissions.ts +514 -0
  68. package/src/scripts/check_web_launch_readiness.ts +705 -0
  69. package/src/scripts/description_route_check.ts +494 -0
  70. package/src/scripts/hook_manifest.json +1 -1
  71. package/src/scripts/hook_manifest.yaml +29 -2
  72. package/src/scripts/hooks/concern_registry.ts +2 -0
  73. package/src/scripts/hooks/suggestion_capture_hook.ts +368 -0
  74. package/src/scripts/lint_budget_ownership.ts +54 -4
  75. package/src/scripts/lint_skill_trigger_corpus.ts +349 -0
  76. package/src/scripts/pack_install_smoke.ts +363 -0
  77. package/src/scripts/pr_conflict_census.ts +187 -0
  78. package/src/scripts/report_pack_delta.ts +204 -0
  79. package/src/scripts/select_analysis_mode.ts +112 -0
  80. package/src/scripts/sync_pr_branch.ts +40 -1
  81. package/src/server/schemas/settings.ts +5 -0
  82. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +0 -15
  83. package/dist/agent-src/skills/agent-security-review/evals/triggers.json +0 -52
  84. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +0 -52
  85. package/dist/agent-src/skills/alerting-doctrine/evals/triggers.json +0 -17
  86. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +0 -13
  87. package/dist/agent-src/skills/brand/evals/triggers.json +0 -17
  88. package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +0 -17
  89. package/dist/agent-src/skills/brand-audit/evals/triggers.json +0 -17
  90. package/dist/agent-src/skills/brand-identity/evals/triggers.json +0 -17
  91. package/dist/agent-src/skills/brand-strategy/evals/triggers.json +0 -17
  92. package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +0 -17
  93. package/dist/agent-src/skills/bug-analyzer/evals/evals.json +0 -13
  94. package/dist/agent-src/skills/canvas-design/evals/triggers.json +0 -17
  95. package/dist/agent-src/skills/character-consistency/evals/evals.json +0 -16
  96. package/dist/agent-src/skills/code-intelligence/evals/triggers.json +0 -52
  97. package/dist/agent-src/skills/code-review/evals/evals.json +0 -100
  98. package/dist/agent-src/skills/command-routing/evals/evals.json +0 -14
  99. package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +0 -17
  100. package/dist/agent-src/skills/contract-review/evals/triggers.json +0 -17
  101. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +0 -15
  102. package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +0 -17
  103. package/dist/agent-src/skills/dashboard-design/evals/evals.json +0 -16
  104. package/dist/agent-src/skills/dcf-modeling/evals/domain-truth.json +0 -29
  105. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +0 -20
  106. package/dist/agent-src/skills/decision-record/evals/evals.json +0 -20
  107. package/dist/agent-src/skills/decision-record/evals/triggers.json +0 -87
  108. package/dist/agent-src/skills/design-intelligence/evals/evals.json +0 -14
  109. package/dist/agent-src/skills/design-intelligence/evals/triggers.json +0 -17
  110. package/dist/agent-src/skills/design-system-capture/evals/evals.json +0 -15
  111. package/dist/agent-src/skills/design-tokens/evals/triggers.json +0 -17
  112. package/dist/agent-src/skills/design-variations/evals/triggers.json +0 -17
  113. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +0 -16
  114. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +0 -16
  115. package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +0 -17
  116. package/dist/agent-src/skills/docx-authoring/evals/triggers.json +0 -52
  117. package/dist/agent-src/skills/dpa-review/evals/triggers.json +0 -17
  118. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +0 -16
  119. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +0 -16
  120. package/dist/agent-src/skills/eloquent/evals/triggers.json +0 -17
  121. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +0 -16
  122. package/dist/agent-src/skills/estimate-ticket/evals/output-schema.yml +0 -20
  123. package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +0 -19
  124. package/dist/agent-src/skills/evaluate-llm-feature/evals/triggers.json +0 -52
  125. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +0 -47
  126. package/dist/agent-src/skills/experiment-loop/evals/output-schema.yml +0 -27
  127. package/dist/agent-src/skills/experiment-loop/evals/triggers.json +0 -17
  128. package/dist/agent-src/skills/fe-design/evals/triggers.json +0 -67
  129. package/dist/agent-src/skills/forecasting/evals/domain-truth.json +0 -29
  130. package/dist/agent-src/skills/forecasting/evals/evals.json +0 -20
  131. package/dist/agent-src/skills/forensics-report/evals/triggers.json +0 -17
  132. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +0 -52
  133. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +0 -16
  134. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +0 -16
  135. package/dist/agent-src/skills/gated-reach/evals/triggers.json +0 -72
  136. package/dist/agent-src/skills/github-ci/evals/evals.json +0 -25
  137. package/dist/agent-src/skills/history-design/evals/triggers.json +0 -17
  138. package/dist/agent-src/skills/html-deck/evals/triggers.json +0 -17
  139. package/dist/agent-src/skills/humanizer/evals/strip_fixtures.json +0 -57
  140. package/dist/agent-src/skills/humanizer/evals/triggers.json +0 -17
  141. package/dist/agent-src/skills/iconography/evals/triggers.json +0 -17
  142. package/dist/agent-src/skills/image-analyser/evals/triggers.json +0 -17
  143. package/dist/agent-src/skills/image-creator/evals/triggers.json +0 -17
  144. package/dist/agent-src/skills/image-editing/evals/triggers.json +0 -17
  145. package/dist/agent-src/skills/image-generation/evals/triggers.json +0 -17
  146. package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +0 -17
  147. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +0 -16
  148. package/dist/agent-src/skills/incident-commander/evals/evals.json +0 -20
  149. package/dist/agent-src/skills/js-library-packaging/evals/triggers.json +0 -17
  150. package/dist/agent-src/skills/judge-artifact-completeness/evals/triggers.json +0 -17
  151. package/dist/agent-src/skills/judge-injection-defense/evals/triggers.json +0 -17
  152. package/dist/agent-src/skills/judge-synthesis/evals/triggers.json +0 -17
  153. package/dist/agent-src/skills/launch-readiness/evals/evals.json +0 -21
  154. package/dist/agent-src/skills/learning-tutor/evals/triggers.json +0 -52
  155. package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +0 -17
  156. package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +0 -17
  157. package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +0 -52
  158. package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +0 -52
  159. package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +0 -52
  160. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +0 -20
  161. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +0 -16
  162. package/dist/agent-src/skills/logo-generation/evals/triggers.json +0 -17
  163. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +0 -16
  164. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +0 -16
  165. package/dist/agent-src/skills/monorepo-workspace/evals/triggers.json +0 -17
  166. package/dist/agent-src/skills/nda-triage/evals/triggers.json +0 -17
  167. package/dist/agent-src/skills/operational-readiness/evals/triggers.json +0 -17
  168. package/dist/agent-src/skills/pdf-tools/evals/triggers.json +0 -52
  169. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +0 -16
  170. package/dist/agent-src/skills/persona-improvement/evals/triggers.json +0 -52
  171. package/dist/agent-src/skills/php-coder/evals/triggers.json +0 -17
  172. package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +0 -21
  173. package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +0 -17
  174. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +0 -16
  175. package/dist/agent-src/skills/prompt-validator/evals/triggers.json +0 -17
  176. package/dist/agent-src/skills/quality-tools/evals/evals.json +0 -15
  177. package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +0 -17
  178. package/dist/agent-src/skills/refine-prompt/evals/evals.json +0 -16
  179. package/dist/agent-src/skills/refine-ticket/evals/evals.json +0 -16
  180. package/dist/agent-src/skills/refine-ticket/evals/output-schema.yml +0 -16
  181. package/dist/agent-src/skills/refine-ticket/evals/triggers.json +0 -17
  182. package/dist/agent-src/skills/release-comms/evals/evals.json +0 -16
  183. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +0 -20
  184. package/dist/agent-src/skills/runway-cognition/evals/domain-truth.json +0 -29
  185. package/dist/agent-src/skills/runway-cognition/evals/evals.json +0 -20
  186. package/dist/agent-src/skills/scenario-modeling/evals/domain-truth.json +0 -29
  187. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +0 -20
  188. package/dist/agent-src/skills/schema-review/evals/triggers.json +0 -17
  189. package/dist/agent-src/skills/screenshot-hygiene/evals/triggers.json +0 -52
  190. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +0 -52
  191. package/dist/agent-src/skills/server-hardening/evals/triggers.json +0 -17
  192. package/dist/agent-src/skills/skill-writing/evals/triggers.json +0 -17
  193. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +0 -47
  194. package/dist/agent-src/skills/storybook-workshop/evals/triggers.json +0 -17
  195. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +0 -60
  196. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +0 -52
  197. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +0 -20
  198. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +0 -52
  199. package/dist/agent-src/skills/test-driven-development/evals/evals.json +0 -16
  200. package/dist/agent-src/skills/threat-modeling/evals/evals.json +0 -21
  201. package/dist/agent-src/skills/typography-system/evals/evals.json +0 -14
  202. package/dist/agent-src/skills/typography-system/evals/triggers.json +0 -17
  203. package/dist/agent-src/skills/unit-economics-modeling/evals/domain-truth.json +0 -40
  204. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +0 -24
  205. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +0 -16
  206. package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +0 -20
  207. package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +0 -17
  208. package/dist/agent-src/skills/vision-articulation/evals/evals.json +0 -16
  209. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +0 -16
  210. package/dist/agent-src/skills/wireframe/evals/triggers.json +0 -17
  211. package/dist/agent-src/skills/workspace-link/evals/triggers.json +0 -17
  212. package/dist/agent-src/skills/worktree-lifecycle/evals/evals.json +0 -38
  213. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +0 -52
  214. package/dist/cli/agent-config.js.map +0 -1
  215. package/dist/cli/bash/runBash.js.map +0 -1
  216. package/dist/cli/commands/commands.js.map +0 -1
  217. package/dist/cli/commands/config.js.map +0 -1
  218. package/dist/cli/commands/doctorShell.js.map +0 -1
  219. package/dist/cli/commands/mcpServer.js.map +0 -1
  220. package/dist/cli/commands/packs.js.map +0 -1
  221. package/dist/cli/commands/profiles.js.map +0 -1
  222. package/dist/cli/commands/recordTriggerEval.js.map +0 -1
  223. package/dist/cli/commands/rtkDetect.js.map +0 -1
  224. package/dist/cli/commands/settings.js.map +0 -1
  225. package/dist/cli/commands/uiAudit.js.map +0 -1
  226. package/dist/cli/commands/uiRender.js.map +0 -1
  227. package/dist/cli/commands/uiServe.js.map +0 -1
  228. package/dist/cli/commands/versions.js.map +0 -1
  229. package/dist/cli/commands/workspaces.js.map +0 -1
  230. package/dist/cli/configRoot.js.map +0 -1
  231. package/dist/cli/discovery/loadManifest.js.map +0 -1
  232. package/dist/cli/firstRunNotice.js.map +0 -1
  233. package/dist/cli/help.js.map +0 -1
  234. package/dist/cli/initRouting.js.map +0 -1
  235. package/dist/cli/log/logger.js.map +0 -1
  236. package/dist/cli/main.js.map +0 -1
  237. package/dist/cli/mcp/content.js.map +0 -1
  238. package/dist/cli/mcp/dispatch.js.map +0 -1
  239. package/dist/cli/mcp/stdio.js.map +0 -1
  240. package/dist/cli/paths.js.map +0 -1
  241. package/dist/cli/python/knowledge_ingest.js.map +0 -1
  242. package/dist/cli/python/workspace_analytics.js.map +0 -1
  243. package/dist/cli/python/workspace_crypto.js.map +0 -1
  244. package/dist/cli/python/workspace_documents.js.map +0 -1
  245. package/dist/cli/python/workspace_drive.js.map +0 -1
  246. package/dist/cli/python/workspace_drive_health.js.map +0 -1
  247. package/dist/cli/python/workspace_explain.js.map +0 -1
  248. package/dist/cli/python/workspace_hosts.js.map +0 -1
  249. package/dist/cli/python/workspace_inbox.js.map +0 -1
  250. package/dist/cli/python/workspace_render.js.map +0 -1
  251. package/dist/cli/python/workspace_roles.js.map +0 -1
  252. package/dist/cli/python/workspace_secrets.js.map +0 -1
  253. package/dist/cli/python/workspace_sessions.js.map +0 -1
  254. package/dist/cli/python/workspace_skills.js.map +0 -1
  255. package/dist/cli/registry.js.map +0 -1
  256. package/dist/install/agentSwitchDetection.js.map +0 -1
  257. package/dist/install/agentSwitchProfile.js.map +0 -1
  258. package/dist/install/atomic.js.map +0 -1
  259. package/dist/install/claudePathsPlan.js.map +0 -1
  260. package/dist/install/conflict.js.map +0 -1
  261. package/dist/install/detect.js.map +0 -1
  262. package/dist/install/emit_host_rules_cli.js.map +0 -1
  263. package/dist/install/globalRuleLayers.js.map +0 -1
  264. package/dist/install/hostLayerFingerprint.js.map +0 -1
  265. package/dist/install/partitionEligibility.js.map +0 -1
  266. package/dist/install/paths.js.map +0 -1
  267. package/dist/install/plan.js.map +0 -1
  268. package/dist/install/preflight.js.map +0 -1
  269. package/dist/install/rtkDetection.js.map +0 -1
  270. package/dist/install/ruleInScope.js.map +0 -1
  271. package/dist/install/ruleLayerPartition.js.map +0 -1
  272. package/dist/install/rule_scope.js.map +0 -1
  273. package/dist/install/rule_scope_cli.js.map +0 -1
  274. package/dist/install/selectedTools.js.map +0 -1
  275. package/dist/install/toolDetection.js.map +0 -1
  276. package/dist/install/txlog.js.map +0 -1
  277. package/dist/install/types.js.map +0 -1
  278. package/dist/install/wizard-plan.js.map +0 -1
  279. package/dist/install/wizardDismissals.js.map +0 -1
  280. package/dist/scripts/_lib/agent_settings.js.map +0 -1
  281. package/dist/scripts/_lib/agent_src.js.map +0 -1
  282. package/dist/scripts/_lib/claude_builtin_names.js.map +0 -1
  283. package/dist/scripts/_lib/claude_plugin.js.map +0 -1
  284. package/dist/scripts/_lib/claude_settings_hooks.js.map +0 -1
  285. package/dist/scripts/_lib/compile_time_toggles.js.map +0 -1
  286. package/dist/scripts/_lib/environment_detector.js.map +0 -1
  287. package/dist/scripts/_lib/host_launch.js.map +0 -1
  288. package/dist/scripts/_lib/install_layout.js.map +0 -1
  289. package/dist/scripts/_lib/installed_lock.js.map +0 -1
  290. package/dist/scripts/_lib/lean_projection_mode.js.map +0 -1
  291. package/dist/scripts/_lib/model_tier.js.map +0 -1
  292. package/dist/scripts/_lib/prune_empty_dirs.js.map +0 -1
  293. package/dist/scripts/_lib/scoped_projection.js.map +0 -1
  294. package/dist/scripts/_lib/script_output.js.map +0 -1
  295. package/dist/scripts/_lib/spawn_env.js.map +0 -1
  296. package/dist/scripts/_lib/surface_tiers.js.map +0 -1
  297. package/dist/scripts/_lib/token_count.js.map +0 -1
  298. package/dist/scripts/_lib/trigger_eval_floors.js.map +0 -1
  299. package/dist/scripts/_lib/ui_surface.js.map +0 -1
  300. package/dist/scripts/_lib/user_global_paths.js.map +0 -1
  301. package/dist/scripts/ai_council/modes.js.map +0 -1
  302. package/dist/scripts/ai_council/transport_resolver.js.map +0 -1
  303. package/dist/scripts/condense.js.map +0 -1
  304. package/dist/scripts/project_thin_rules.js.map +0 -1
  305. package/dist/server/app.js.map +0 -1
  306. package/dist/server/io/atomicMultiWrite.js.map +0 -1
  307. package/dist/server/io/atomicWrite.js.map +0 -1
  308. package/dist/server/io/sharedWriteCheck.js.map +0 -1
  309. package/dist/server/io/substituteTemplate.js.map +0 -1
  310. package/dist/server/io/yamlIO.js.map +0 -1
  311. package/dist/server/nicknameResolver.js.map +0 -1
  312. package/dist/server/port.js.map +0 -1
  313. package/dist/server/routes/discovery.js.map +0 -1
  314. package/dist/server/routes/install.js.map +0 -1
  315. package/dist/server/routes/ping.js.map +0 -1
  316. package/dist/server/routes/schema.js.map +0 -1
  317. package/dist/server/routes/settings.js.map +0 -1
  318. package/dist/server/routes/settingsChanges.js.map +0 -1
  319. package/dist/server/routes/userMd.js.map +0 -1
  320. package/dist/server/routes/wizard.js.map +0 -1
  321. package/dist/server/routes/workspace.js.map +0 -1
  322. package/dist/server/schemas/settings.js.map +0 -1
  323. package/dist/server/serverInfo.js.map +0 -1
  324. package/dist/server/token.js.map +0 -1
  325. package/dist/server/writeRoot.js.map +0 -1
  326. package/dist/shared/capabilities.js.map +0 -1
  327. package/dist/shared/interactiveContext.js.map +0 -1
  328. package/dist/shared/nicknamePrefill.js.map +0 -1
  329. package/dist/shared/settingsAsks.js.map +0 -1
  330. package/dist/shared/settingsCarveOut.js.map +0 -1
  331. package/dist/shared/settingsClasses.js.map +0 -1
  332. package/dist/shared/settingsConsent.js.map +0 -1
  333. package/dist/shared/settingsSurface.js.map +0 -1
  334. package/dist/shared/skillRanking.js.map +0 -1
  335. package/dist/shared/userMd/formAdapter.js.map +0 -1
  336. package/dist/shared/userMd/schema.js.map +0 -1
  337. package/dist/shared/userMd/utils.js.map +0 -1
  338. package/dist/ui/assets/index-Cxgy63kz.js.map +0 -1
  339. package/src/scripts/_lib/adr_frontmatter.test.ts +0 -365
  340. package/src/scripts/_lib/adversarial_council_gate.test.ts +0 -112
  341. package/src/scripts/_lib/adversarial_reconcile.test.ts +0 -197
  342. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +0 -150
  343. package/src/scripts/_lib/secret_detector.test.ts +0 -108
  344. package/src/scripts/_lib/secret_detector_adversarial.test.ts +0 -116
  345. package/src/scripts/_lib/ui_authority.test.ts +0 -251
  346. package/src/scripts/_lib/untrusted_content.test.ts +0 -175
  347. package/src/scripts/check_secret_leak.test.ts +0 -90
  348. package/src/scripts/design_slop_rules.test.ts +0 -246
  349. package/src/scripts/self_review_gate.test.ts +0 -296
  350. package/src/shared/capabilities.test.ts +0 -43
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config) [![MCP Toplist](https://mcptoplist.com/badge/glama%2Fevent4u-app%2Fagent-config.svg)](https://mcptoplist.com/server/glama%2Fevent4u-app%2Fagent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-299-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-120-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-202-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-112-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
7
+ [![Skills](https://img.shields.io/badge/Skills-299-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-120-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-202-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-114-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
8
 
9
9
  **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
10
10
 
@@ -95,6 +95,32 @@ L0–L4 are human shorthand for how deep a discovery went; they are documentatio
95
95
  only. The **same** evidence rules apply at every tier — no enforced state
96
96
  machine, no per-tier evidence relaxation.
97
97
 
98
+ ## Re-orient when the tree contradicts what you last read
99
+
100
+ External edits invalidate evidence. When the user mentions they changed something
101
+ outside this session, or a read contradicts the last known state of a file, the
102
+ prior observation is **stale, not wrong** — and acting on it overwrites work that
103
+ is not yours.
104
+
105
+ Five steps, in order:
106
+
107
+ 1. Treat every prior observation of the affected paths as invalidated.
108
+ 2. Re-read the state — `git status`, then the affected files themselves.
109
+ 3. Reconstruct the assumption that broke. A file did not vanish; it was renamed,
110
+ a block moved, a symbol was extracted. Find where it went before concluding
111
+ it is gone.
112
+ 4. Preserve the external work. Never restore from your own stale copy.
113
+ 5. Say what changed if the scope or the conclusion moved, rather than
114
+ continuing as though the earlier reading still held.
115
+
116
+ The failure this prevents is narrower than "be careful": it is re-applying a
117
+ diff computed against a tree that no longer exists, which looks like a clean
118
+ apply and silently reverts somebody's edit.
119
+
120
+ **No gate covers this.** It is a re-read the transcript cannot distinguish from
121
+ a first read, so it is model-carried — the same honesty boundary § Honest
122
+ enforcement reality states for the rest of this file.
123
+
98
124
  ## Honest enforcement reality
99
125
 
100
126
  ```
@@ -28,8 +28,51 @@ Do NOT use when:
28
28
  2. **Understand the scope** — what exactly needs to change and why?
29
29
  3. **Find ALL references** — use `codebase-retrieval` and `view` with `search_query_regex` to find every
30
30
  caller, implementation, test, and configuration that references the code being changed.
31
+ **If the change is to a closed set** — an enum, union, literal type, state
32
+ machine, role or permission set — identifier search is not enough: the
33
+ consumers that break are the ones that never name the type. Search by shape as
34
+ well (`switch` / `match` / if-chains over it, lookup tables keyed by it,
35
+ validators, serializers, schemas, fixtures, translation keys) and classify each
36
+ as exhaustive, deliberate fallback, or missing case. Procedure:
37
+ [`downstream-changes-mechanics`](../../../docs/guidelines/agent-infra/downstream-changes-mechanics.md).
31
38
  4. **Map the impact** — create a list of all files that will need changes.
32
- 5. **Present the plan** — show the user what will be affected before starting.
39
+ 5. **Decide the verdict, if the refactor is a de-duplication** — see the
40
+ safe-abstraction gate below. An extraction with no recorded verdict is a
41
+ guess about whether two things are the same thing.
42
+ 6. **Present the plan** — show the user what will be affected before starting.
43
+
44
+ ### Safe-abstraction gate — before merging two things into one
45
+
46
+ This skill performs extractions; it is therefore the place that decides
47
+ whether one should happen. A wrong abstraction costs more than the
48
+ duplication it replaced, because the duplication is visible and the wrong
49
+ abstraction grows caller flags until nobody can remove it. Ask, before
50
+ moving any code:
51
+
52
+ 1. Is this the same knowledge, or two facts that currently look alike?
53
+ 2. Would both copies change for the same reason?
54
+ 3. Is there one honest domain name that fits **every** call site?
55
+ 4. Can the common core stay free of caller-specific flags and modes?
56
+ 5. Are public contracts preserved, and do tests prove behavioural equivalence?
57
+ 6. **If the two copies diverged tomorrow, would that be a defect or
58
+ legitimate evolution?**
59
+
60
+ A "legitimate evolution" answer to the last question is decisive: stop, and
61
+ record the verdict `keep-duplicated`. That closes the refactor **successfully**
62
+ — so does `de-abstract`, splitting a shared unit that has grown modes back
63
+ apart. Neither is a failure to act, and neither needs an apology in the
64
+ output. Textual similarity is not evidence of shared knowledge: copies that
65
+ read identically can encode different assumptions, and merging them changes
66
+ behaviour silently.
67
+
68
+ The class names and the full verdict list are in
69
+ [`redundancy-taxonomy`](../../../docs/guidelines/redundancy-taxonomy.md).
70
+
71
+ When the refactor goes the other way and **creates** a new unit, the reuse
72
+ question comes first: does an existing class or component already cover this, and
73
+ what does composing or extending it cost against a new one? Thresholds per
74
+ artifact class:
75
+ [`component-oriented-and-oop-development`](../../../docs/guidelines/component-oriented-and-oop-development.md).
33
76
 
34
77
  ## Procedure: Refactor code
35
78
 
@@ -140,6 +183,7 @@ After the code changes are verified, update all affected documentation:
140
183
  1. Find all usages → update all usages → update docs → run the static analyser → run tests.
141
184
 
142
185
  ### Extract method / class
186
+ 0. Run the safe-abstraction gate above — a `keep-duplicated` verdict ends it here.
143
187
  1. Create the new method/class → move logic → update caller → update docs → run the static analyser → run tests.
144
188
 
145
189
  ### Move class to different namespace
@@ -37,11 +37,70 @@ Use this skill when:
37
37
  2. **Detect the change-type + depth** — route to the right checklist and pick the review depth (below).
38
38
  3. **Architecture** — does the approach make sense? Right layer? Right pattern?
39
39
  4. **Correctness** — does it actually work? Edge cases? Error handling?
40
- 5. **Quality** — types, naming, readability, DRY, SOLID?
41
- 6. **Security** — input validation, authorization, injection?
42
- 7. **Performance** — N+1 queries, missing indexes, unbounded queries?
43
- 8. **Tests** — are new paths covered? Are existing tests still valid?
44
- 9. **Conventions** — does it follow project standards?
40
+ 5. **Quality** — types, naming, readability, SOLID?
41
+ 6. **Redundancy** — see below; a verdict, not a "this looks duplicated".
42
+ 7. **Propagation** — did a changed concept reach every occurrence? see below.
43
+ 8. **Security** — input validation, authorization, injection?
44
+ 9. **Performance** — N+1 queries, missing indexes, unbounded queries?
45
+ 10. **Tests** — are new paths covered? Are existing tests still valid?
46
+ 11. **Conventions** — does it follow project standards?
47
+
48
+ ## The redundancy dimension
49
+
50
+ `DRY` as a checklist word produced findings nobody could act on: it names a
51
+ principle, not a decision, and it has no answer for the case where two copies
52
+ should stay. Replace it with a verdict.
53
+
54
+ Classify the finding against
55
+ [`redundancy-taxonomy`](../../../docs/guidelines/redundancy-taxonomy.md) —
56
+ implementation, knowledge, or representation — and record one verdict from that
57
+ document's list. `keep-duplicated` and `de-abstract` are successful outcomes; a
58
+ finding with no recorded verdict stays open. Knowledge, policy, contract and
59
+ delivery-authority duplication outrank clone percentage: two copies of a
60
+ *decision* diverge into a bug, two copies of a loop usually do not.
61
+
62
+ **Diff-aware, always.** The finding is duplication this change **introduces**,
63
+ or duplication on a surface it touches. Pre-existing duplication is baseline —
64
+ it is named once if the reviewer thinks it matters and it never fails an
65
+ unrelated change. A review that reds a diff against debt it did not create is a
66
+ review nobody will run twice.
67
+
68
+ For comments, labels, tooltips, placeholders and empty states, run the
69
+ Information Delta Test from the same document rather than judging text volume.
70
+ A reduction that removes an accessibility name is a defect, not a cleanup.
71
+
72
+ Naming is the same dimension pointed the other way: a diff that introduces a
73
+ second term for a concept the tree already names is the finding, and an existing
74
+ split is baseline. The classes and the `canonicalize-term` / `keep-distinct`
75
+ verdicts are in the same document.
76
+
77
+ ## The propagation dimension
78
+
79
+ A change is complete when the **concept** changed everywhere, not when the named
80
+ file compiles. Two shapes to check, both of which the file-level review misses:
81
+
82
+ **A closed set gained or lost a member** (enum, union, literal type, state
83
+ machine, role or permission set, schema `enum`, DB check constraint). List the
84
+ consumers and their status — every `switch` / `match` / if-chain over the type,
85
+ every lookup table keyed by it, every validator, serializer, schema, fixture and
86
+ translation key. A `default` branch that silently absorbs the new member is a
87
+ missing case, not a handled one. Procedure:
88
+ [`downstream-changes-mechanics`](../../../docs/guidelines/agent-infra/downstream-changes-mechanics.md).
89
+
90
+ **A shared behaviour moved and its siblings did not.** A defect fixed in one
91
+ place is presumed to recur until searched: name the exact wrong construct, grep
92
+ the tree, and report the count — zero is a real answer and worth stating, because
93
+ it distinguishes "this was unique" from "nobody looked".
94
+
95
+ Diff-aware on the same terms as redundancy: the finding is a concept **this
96
+ change** left half-migrated. Pre-existing incompleteness elsewhere is baseline.
97
+
98
+ When the diff **creates** a class, component, service or hook rather than
99
+ changing one, the question is whether it needed to exist: what was searched,
100
+ what was found, and why composing or extending the incumbent was rejected. An
101
+ answer, not a ceremony — and the thresholds for when repetition actually earns
102
+ an abstraction are in
103
+ [`component-oriented-and-oop-development`](../../../docs/guidelines/component-oriented-and-oop-development.md).
45
104
 
46
105
  ## Change-type routing — load only the checklist the diff needs
47
106
 
@@ -113,7 +172,7 @@ coverage reads as full coverage.
113
172
  the package implements it. That is now true for a recorded reason rather than by
114
173
  omission: the pre-registered question — does rotating reviewer order change the finding set
115
174
  on a frozen corpus, by more than 15 % — **cannot be answered from the corpus that exists**.
116
- `agents/evidence/reviews/` holds 123 findings artefacts, and none of them records the file
175
+ `agents/evidence/reviews/` holds 123 findings artifacts, and none of them records the file
117
176
  order it was produced under, so the counterfactual is not recoverable; re-running reviewers
118
177
  produces fresh judgements in which ordering is confounded with run-to-run variance. Full
119
178
  null, with its reopening condition: `agents/evidence/review-rotation-prereg-and-null.md`.
@@ -305,6 +305,41 @@ Bad description (vague, no outcome):
305
305
 
306
306
  > "PR command"
307
307
 
308
+ ## The `## Examples` section on a user-facing command
309
+
310
+ Stated once, here — never repeated per command.
311
+
312
+ A command whose `visibility` is `visible` or `advanced` carries an
313
+ `## Examples` section: **1-3 filled invocations** in a fence, then **exactly
314
+ one Why line**. Filled means a real path, a real ticket key, a real flag — a
315
+ placeholder teaches nothing about what to type.
316
+
317
+ The Why line uses one of two literals, `**Why it works:**` or a
318
+ `### Why it works` heading, and cites **exactly one** pattern id from
319
+ [`prompt-patterns.yml`](../../config/discovery/prompt-patterns.yml):
320
+ `outcome-not-steps` · `self-check-loop` · `measurable-target` ·
321
+ `give-the-artifact` · `point-at-reference` · `say-the-format`. One id, because
322
+ the Why line's job is the part that transfers to a command the reader has not
323
+ seen, and a line naming three patterns names none of them.
324
+
325
+ ~~~
326
+ ## Examples
327
+
328
+ ```
329
+ /work fix the failing login test under tests/feature/auth
330
+ ```
331
+
332
+ **Why it works:** measurable-target — it names the file instead of the symptom.
333
+ ~~~
334
+
335
+ Enforced by `check_command_examples`, forward-only: the 23 in-scope commands as
336
+ of 2026-08-24 are grandfathered in a frozen set inside the gate, and a command
337
+ **added or promoted into `visible`/`advanced`** after that must comply. Two
338
+ things the gate checks that are easy to miss — an invocation must resolve to
339
+ the command's own `name:` (a rename otherwise leaves stale examples behind), and
340
+ a flag used in an example must be documented in the body **outside** the
341
+ section.
342
+
308
343
  ## Encode usage policy in the description
309
344
 
310
345
  Workflow sequencing, preconditions, ID/output provenance ("copy ids verbatim,
@@ -100,7 +100,8 @@ Write into `state.ui_audit.design_tokens` (object, never null — empty object i
100
100
 
101
101
  | Source | What to extract |
102
102
  |---|---|
103
- | `tailwind.config.{js,ts,cjs,mjs}` | `theme.colors`, `theme.spacing`, `theme.fontFamily`, `theme.extend.*` |
103
+ | **`tailwind-v3`** (`axes.css`) — `tailwind.config.{js,ts,cjs,mjs}` | `theme.colors`, `theme.spacing`, `theme.fontFamily`, `theme.extend.*` |
104
+ | **`tailwind-v4`** (`axes.css`) — the `@theme` block in the entry CSS; **no config file exists**, and `components.json` `"tailwind": {"config": ""}` is the marker | every `--token: value` declared inside `@theme` / `@theme inline` |
104
105
  | `:root { --... }` blocks in `resources/css/`, `app/globals.css`, `src/app/globals.css` | every `--token-name: value` pair |
105
106
  | `theme.json` / `tokens.json` (any depth) | flat or nested token tree |
106
107
  | `app/css/variables.css`, `assets/scss/_tokens.scss` | SCSS `$var: value` and CSS custom properties |
@@ -109,6 +110,12 @@ Write into `state.ui_audit.design_tokens` (object, never null — empty object i
109
110
 
110
111
  Group output by category: `colors`, `spacing`, `radius`, `font`, `shadow`, `breakpoint`, `other`.
111
112
 
113
+ **Branch on the axis, do not probe for a config file.** `detect_stack()` emits
114
+ `axes.css` as `tailwind-v3` or `tailwind-v4`
115
+ (`work_engine/stack/detect.ts:521-524`); reading it is how this step and
116
+ `react-shadcn-ui` § Gotcha stay on the same key. Absence of
117
+ `tailwind.config.*` is v4's normal state, never a missing file.
118
+
112
119
  **Artifact-sourced tokens stay distinguishable from project tokens.** Every
113
120
  group carries a `source` — `project` for the first four rows, `artifact` for the
114
121
  last two — because the mapping between them is the thing a port has to keep
@@ -129,6 +129,29 @@ Check:
129
129
  6. Known uncertainties
130
130
  7. Recommended next specialist skill
131
131
 
132
+ ## Improvement mode — check for an existing artefact first
133
+
134
+ Before a full analysis, ask whether this target has already been analysed:
135
+
136
+ ```bash
137
+ npx tsx node_modules/@event4u/agent-config/src/scripts/select_analysis_mode.ts "<target>"
138
+ ```
139
+
140
+ `full` → run steps 1-8 as written. `delta` → **read the named artefact first**,
141
+ then analyse only what it does not cover: gaps, sections the tree has moved past,
142
+ patterns that are new since it was written. The output format is unchanged; the
143
+ reading is narrower.
144
+
145
+ This changes **write economics only**. A concept page is a hypothesis cache,
146
+ never truth — the delta path re-verifies every structural claim it carries
147
+ forward against a live source, exactly as a full run would
148
+ ([`source-discovery-gate`](../../rules/source-discovery-gate.md) § v1↔v2
149
+ isolation). A cheaper write is not a licence to trust a cached read, and
150
+ "the page already says so" is not evidence.
151
+
152
+ An empty page counts as absent: it carries no conclusions to delta against, so
153
+ the router answers `full`.
154
+
132
155
  ## Knowledge capture (`convention_detected` events)
133
156
 
134
157
  An architecture map or stack finding that recurs (a naming convention,
@@ -54,7 +54,14 @@ block above:
54
54
 
55
55
  ## Compatibility
56
56
 
57
- - **Tested against:** `shadcn@2.1`, Tailwind CSS `3.x`, React `18+`.
57
+ - **Tested against:** `shadcn@4`, Tailwind CSS `4.x`, React `19`, primitives from
58
+ `@base-ui/react@1`, `components.json` style `base-nova` — every major read out
59
+ of `tests/fixtures/stack/shadcn-current/package.json`, the verbatim output of
60
+ `npx shadcn@latest init -d --template vite` on 2026-08-24. No version on this
61
+ line may be stated from prose; move it only by re-running that scaffold and
62
+ re-committing the fixture.
63
+ - Tailwind `3.x` and Radix primitives stay supported through the **v3 branch**
64
+ under § Gotcha — the CLI moved on, existing projects did not.
58
65
  - The audit step (`directives/ui/audit.ts`) reads the line above and
59
66
  compares it with `state.ui_audit.shadcn_inventory.version`; a major
60
67
  mismatch triggers a soft halt before this skill runs.
@@ -63,8 +70,8 @@ block above:
63
70
 
64
71
  Use when `state.stack.frontend == "react-shadcn"` and `directives/ui/apply.ts`,
65
72
  `review.ts`, or `polish.ts` dispatches to this skill, or when a React project
66
- clearly uses shadcn/ui (presence of `components.json`, `@radix-ui/*`
67
- dependencies, a `components/ui/` folder of generated primitives).
73
+ clearly uses shadcn/ui (presence of `components.json`, a `@base-ui/react` or
74
+ `@radix-ui/*` dependency, a `components/ui/` folder of generated primitives).
68
75
 
69
76
  Do NOT use when:
70
77
  - Project is Blade + Livewire + Flux (use `flux` / `livewire` / `blade-ui`).
@@ -82,13 +89,23 @@ Do NOT use when:
82
89
  writes `state.ui_audit.shadcn_inventory` with the detected version —
83
90
  when it diverges by a major, audit emits a soft halt before this
84
91
  skill runs.
85
- - shadcn/ui composes Radix primitives. Accessibility is built in via Radix
86
- but only when you use the wrapper components correctly (`asChild`,
92
+ - shadcn/ui composes a primitive vendor — `@base-ui/react` in a CLI-4 scaffold,
93
+ `@radix-ui/*` in older projects. Accessibility is built in either way, but
94
+ only when the wrapper components are used correctly (`asChild`,
87
95
  `<DialogTrigger>` instead of a bare `<button>`).
88
- - Tailwind tokens come from `tailwind.config.{js,ts}` (`theme.extend.colors`)
89
- and CSS custom properties on `:root` and `.dark` (`--background`,
90
- `--foreground`, `--primary`, `--ring`, …). Audit writes them into
91
- `state.ui_audit.design_tokens`. Use those tokens; do not hardcode values.
96
+ - **Tailwind tokens: branch on the `css` axis, never guess.** `detect_stack()`
97
+ emits `axes.css` as `tailwind-v4` or `tailwind-v3`
98
+ (`work_engine/stack/detect.ts:521-524`); `existing-ui-audit` reads tokens on
99
+ the same key.
100
+ - `tailwind-v4` — **no config file exists.** Tokens live in the `@theme` block
101
+ of the entry CSS named by `components.json` → `tailwind.css`, and that file's
102
+ `"tailwind": {"config": ""}` — an empty `config` string — IS the v4 marker.
103
+ Never write `tailwind.config.{js,ts}` in a v4 project.
104
+ - `tailwind-v3` — tokens come from `tailwind.config.{js,ts}`
105
+ (`theme.extend.colors`).
106
+ - Either branch — CSS custom properties on `:root` and `.dark`
107
+ (`--background`, `--foreground`, `--primary`, `--ring`, …). Audit writes them
108
+ into `state.ui_audit.design_tokens`. Use those tokens; never hardcode values.
92
109
  - Dark mode is class-based (`<html class="dark">`). Every color must come
93
110
  from `bg-background`, `text-foreground`, etc. — never raw `bg-white`.
94
111
  - Every interactive primitive must declare a focus-visible state via
@@ -243,12 +260,12 @@ this over a registry file.
243
260
  `bg-primary text-primary-foreground`, `text-muted-foreground`. No
244
261
  `bg-white` / `text-black` / hardcoded `#fff`.
245
262
  2. Spacing / radius from theme tokens (`rounded-lg` mapped to `--radius`
246
- in `tailwind.config.{js,ts}`). Polish refactors hardcoded values
247
- when a token equivalent exists.
263
+ — in the `@theme` block on `tailwind-v4`, in `tailwind.config.{js,ts}` on
264
+ `tailwind-v3`). Polish refactors hardcoded values when a token exists.
248
265
  3. Dark mode: never branch on a `dark` prop; rely on the `.dark` class
249
266
  on the root and semantic tokens.
250
267
  4. Every interactive primitive: keyboard trigger present (Enter/Space
251
- on buttons, Esc on dialogs — Radix free), visible focus ring,
268
+ on buttons, Esc on dialogs — free from the primitive vendor), focus ring,
252
269
  `aria-label` from `state.ui_design.a11y` when icon-only.
253
270
 
254
271
  ### Step 3: State coverage
@@ -22,8 +22,9 @@ rule. Skip only on explicit *"just do it"* bypass or trivial edits
22
22
  ### 0b. Skill-growth gate (new skill only)
23
23
 
24
24
  The skill count keeps climbing; nothing forces *"should this be a new skill at
25
- all?"*. Before creating a **new** skill, answer these in the PR body — a new
26
- skill that cannot answer them is a merge / guideline / no-op in disguise:
25
+ all?"*. Before creating a **new** skill, answer these **in the ledger**,
26
+ `agents/decisions/skill-admissions.jsonl` — a new skill that cannot answer them
27
+ is a merge / guideline / no-op in disguise:
27
28
 
28
29
  1. **Family** — which capability family does it join? (engineering, product, …)
29
30
  2. **Capability** — what does it do that no existing skill does? Name the gap.
@@ -31,6 +32,27 @@ skill that cannot answer them is a merge / guideline / no-op in disguise:
31
32
  4. **Why not a guideline** — is this executable workflow (skill) or reference material (guideline)? Guideline-shaped content does not become a skill.
32
33
  5. **Visibility tier** — `core` or `lab`? Which pack?
33
34
 
35
+ **The answers go in the ledger, not in the PR body.** That used to say PR body,
36
+ and `check_finding_dispositions.ts:11` rejects that exact surface for findings in
37
+ its own words — a comment is *"mutable and unaudited; it is transport, not a
38
+ record"*. The consequence was measurable: **+8 skills landed in one release with
39
+ no visible "no"**, because a refusal kept in a PR body is a refusal nobody can
40
+ grep. One line, appended:
41
+
42
+ ```json
43
+ {"skill":"<name>","decision":"admitted","date":"YYYY-MM-DD","family":"…","capability":"…","why_not_extend":"…","why_not_a_guideline":"…","visibility":"…"}
44
+ ```
45
+
46
+ `check_skill_admissions` is forward-only: it requires a row only for skills added
47
+ since the base ref, so nothing existing needs backfilling. It rejects an answer
48
+ under 12 characters, because a one-word answer is the boilerplate the gate exists
49
+ to catch rather than an answer.
50
+
51
+ **A refusal is a row too**, and that is the half the PR body lost:
52
+ `{"skill":"…","decision":"rejected","date":"…","instead":"…"}`. A rejected row may
53
+ not name a skill that exists — a record saying a capability was refused while it
54
+ ships is worse than no record.
55
+
34
56
  **Surface overlap before deciding** — run `./scripts-run src/scripts/skill_overlap`
35
57
  (or `audit_skill_overlap`) and read the nearest matches; a high-overlap hit is a
36
58
  merge signal, not a green light. This gate is the authoring-time companion to the
@@ -131,6 +131,15 @@ that file, which is the one thing a static checker must not start doing.
131
131
 
132
132
  ## MCP path — opt-in channel, never a dependency
133
133
 
134
+ **"Opt-in" is about the agent connecting, not about installing.** A 2026-08-24
135
+ `npx storybook@latest init --yes` scaffold ships `@storybook/addon-mcp` *and*
136
+ `@storybook/addon-a11y` in `devDependencies` by default — recorded verbatim in
137
+ `tests/fixtures/stack/storybook-current/`, which is also the only source any
138
+ Storybook major stated here may come from (`storybook@^10.5.10`). So the addon
139
+ usually already exists; what stays optional is whether an agent reaches a
140
+ running instance. The same scaffold prints *"installed but is not entirely set
141
+ up yet"*, so its presence is not evidence the channel works.
142
+
134
143
  When the project has `@storybook/addon-mcp` **and** a running Storybook,
135
144
  [`existing-ui-audit`](../existing-ui-audit/SKILL.md) prefers the live tools —
136
145
  `list-all-documentation`, then `get-documentation` for the components that matter — over the
@@ -68,6 +68,14 @@ still exists in the tree. Absent or empty → fall through to
68
68
 
69
69
  Then review existing components in the codebase for the same
70
70
  responsibility — extend rather than rebuild when a match is found.
71
+
72
+ **A new component's workshop is part of its design, on every React lane and not
73
+ only `react-shadcn`.** When the extraction is agreed, the story set comes from
74
+ [`storybook-workshop`](../storybook-workshop/SKILL.md) — one story per concept
75
+ off the state-coverage matrix below, which is what makes the component
76
+ agent-readable and its contrast floor checkable before it reaches a page. That
77
+ skill is stack-agnostic and ships in `engineering-base`, so a plain-`react`
78
+ project receives it exactly as a `react-shadcn` one does.
71
79
  If none exists, write the new component's purpose: *"Renders a
72
80
  labelled input with inline error and hint."* If the sentence has an
73
81
  "and" joining two unrelated jobs, the component is two components.
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.ts (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "14.11.0"
42
+ agent_config_version: "14.12.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -4549,6 +4549,11 @@ var settingsSchema = external_exports.object({
4549
4549
  enabled: external_exports.boolean().default(false).describe(
4550
4550
  "PreToolUse code-graph nudge (ADR-124 Phase 4). Default off. When on AND a native code-graph cache or a consumer-shipped graph.json/SCIP index is present, warns once per session (never blocks) as the agent is about to Grep/Glob or Read a source file \u2014 query the graph first for who-calls/where-used/impact questions (or rebuild if stale, build if absent). Source G\u2019s strict block-first-read mode is deliberately un-ported."
4551
4551
  )
4552
+ }).default({}),
4553
+ suggestion_capture: external_exports.object({
4554
+ enabled: external_exports.boolean().default(false).describe(
4555
+ 'Suggestion-block capture (road-to-suggestion-block-capture Phase 2). Default off. Two slots: `stop` reads `last_assistant_message` \u2014 a payload field, so no transcript file is read \u2014 and latches that the assistant turn carried a numbered-options block; `user_prompt_submit` CONSUMES that latch and classifies the answering turn as option_n / as_is / other / stale_block. Consume-once is the correctness guard: the latch is deleted on read, so a bare "1" three turns later meets no latch and classifies `other`, and a latch past its TTL or unparseable is `stale_block` rather than a guess. Writes COUNTS ONLY to agents/runtime/state/audit/suggestion-capture.jsonl \u2014 the record type has no field able to hold a prompt, an option label or a command name, and a test asserts the written key set against src/config/suggestion-capture.json. Off by default because this is an INSTRUMENT rather than a feature: it exists so a capture rate can be measured on a maintainer workspace over a fixed soak window, and there is nothing in it for a consumer to gain.'
4556
+ )
4552
4557
  }).default({})
4553
4558
  // `turn_end_gate` is deliberately ABSENT. The stop-slot turn-end gate is
4554
4559
  // always armed (2026-08-12) and has no settings surface: whether it
@@ -2,7 +2,7 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
2
2
  import {
3
3
  ZodFirstPartyTypeKind,
4
4
  settingsSchema
5
- } from "./chunk-L43NCYPB.js";
5
+ } from "./chunk-JCW7ZLHK.js";
6
6
  import {
7
7
  main
8
8
  } from "./chunk-6RJA2F5A.js";
@@ -9,8 +9,8 @@ import {
9
9
  KIRO_MARKER,
10
10
  ROOCODE_MARKER,
11
11
  ZED_MARKER
12
- } from "./chunk-236PNQZK.js";
13
- import "./chunk-L43NCYPB.js";
12
+ } from "./chunk-JJA2QEWA.js";
13
+ import "./chunk-JCW7ZLHK.js";
14
14
  import "./chunk-6RJA2F5A.js";
15
15
  import "./chunk-WOKWX5PL.js";
16
16
  import "./chunk-523HCFYO.js";
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  PROJECT_BRIDGE_MARKERS
4
- } from "./chunk-236PNQZK.js";
5
- import "./chunk-L43NCYPB.js";
4
+ } from "./chunk-JJA2QEWA.js";
5
+ import "./chunk-JCW7ZLHK.js";
6
6
  import "./chunk-6RJA2F5A.js";
7
7
  import "./chunk-WOKWX5PL.js";
8
8
  import "./chunk-523HCFYO.js";
@@ -3,8 +3,8 @@ import {
3
3
  GLOBAL_AGENT_SETTINGS_PATH,
4
4
  GLOBAL_USER_SETTINGS_PATH,
5
5
  SETTINGS_FILE
6
- } from "./chunk-236PNQZK.js";
7
- import "./chunk-L43NCYPB.js";
6
+ } from "./chunk-JJA2QEWA.js";
7
+ import "./chunk-JCW7ZLHK.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  external_exports,
13
13
  settingsSchema
14
- } from "./chunk-L43NCYPB.js";
14
+ } from "./chunk-JCW7ZLHK.js";
15
15
  import {
16
16
  resolvePackageRoot
17
17
  } from "./chunk-MCJYCQPF.js";
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  main
4
- } from "./chunk-236PNQZK.js";
5
- import "./chunk-L43NCYPB.js";
4
+ } from "./chunk-JJA2QEWA.js";
5
+ import "./chunk-JCW7ZLHK.js";
6
6
  import "./chunk-6RJA2F5A.js";
7
7
  import "./chunk-WOKWX5PL.js";
8
8
  import "./chunk-523HCFYO.js";
@@ -3,8 +3,8 @@ import {
3
3
  PROJECT_BRIDGE_MARKERS,
4
4
  USER_SCOPE_PATHS,
5
5
  subtract_pointers
6
- } from "./chunk-236PNQZK.js";
7
- import "./chunk-L43NCYPB.js";
6
+ } from "./chunk-JJA2QEWA.js";
7
+ import "./chunk-JCW7ZLHK.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -3,8 +3,8 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
3
3
  import {
4
4
  PROJECT_BRIDGE_MARKERS,
5
5
  USER_SCOPE_PATHS
6
- } from "./chunk-236PNQZK.js";
7
- import "./chunk-L43NCYPB.js";
6
+ } from "./chunk-JJA2QEWA.js";
7
+ import "./chunk-JCW7ZLHK.js";
8
8
  import "./chunk-6RJA2F5A.js";
9
9
  import "./chunk-WOKWX5PL.js";
10
10
  import "./chunk-523HCFYO.js";
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-08-24T04:43:12Z`
3
+ - Generated: `2026-08-25T12:20:53Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._