@event4u/agent-config 14.12.0 → 14.13.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 (466) 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 +234 -0
  5. package/CONTRIBUTING.md +38 -0
  6. package/CREDITS.md +135 -0
  7. package/NOTICE +13 -0
  8. package/README.md +8 -6
  9. package/dist/agent-src/commands/analyze/inbox.md +109 -2
  10. package/dist/agent-src/commands/feature/dev.md +7 -2
  11. package/dist/agent-src/commands/ghostwriter/write.md +5 -1
  12. package/dist/agent-src/commands/implement-ticket.md +1 -1
  13. package/dist/agent-src/commands/mission/upgrade.md +1 -1
  14. package/dist/agent-src/commands/orchestrate.md +2 -2
  15. package/dist/agent-src/commands/post-as/me.md +5 -1
  16. package/dist/agent-src/commands/pr/merge.md +19 -6
  17. package/dist/agent-src/commands/roadmap/process-full.md +19 -5
  18. package/dist/agent-src/commands/tdd/red.md +12 -2
  19. package/dist/agent-src/commands/work.md +1 -1
  20. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
  21. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
  22. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
  23. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
  24. package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
  25. package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
  26. package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
  27. package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
  28. package/dist/agent-src/rules/broken-access-control.md +4 -0
  29. package/dist/agent-src/rules/code-provenance.md +4 -0
  30. package/dist/agent-src/rules/design-fidelity.md +1 -1
  31. package/dist/agent-src/rules/domain-safety-pii.md +4 -0
  32. package/dist/agent-src/rules/domain-safety-retention.md +4 -0
  33. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  34. package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
  35. package/dist/agent-src/rules/improve-before-implement.md +6 -8
  36. package/dist/agent-src/rules/laravel-routing.md +1 -1
  37. package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
  38. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  39. package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
  40. package/dist/agent-src/rules/source-confidentiality.md +12 -34
  41. package/dist/agent-src/rules/symfony-routing.md +1 -1
  42. package/dist/agent-src/rules/token-efficiency.md +14 -0
  43. package/dist/agent-src/rules/tool-safety.md +4 -0
  44. package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
  45. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  46. package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
  47. package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
  48. package/dist/agent-src/scripts/stub_queue.ts +82 -0
  49. package/dist/agent-src/scripts/stubs_due.ts +400 -0
  50. package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
  51. package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
  52. package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
  53. package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
  54. package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
  55. package/dist/agent-src/skills/database/SKILL.md +8 -0
  56. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
  57. package/dist/agent-src/skills/design-review/SKILL.md +1 -1
  58. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
  59. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
  60. package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
  61. package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
  62. package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
  63. package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
  64. package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
  65. package/dist/agent-src/skills/laravel/SKILL.md +35 -0
  66. package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
  67. package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
  68. package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
  69. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  70. package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
  71. package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
  72. package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
  73. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
  74. package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
  75. package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
  76. package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
  77. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
  78. package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
  79. package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
  80. package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
  81. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
  82. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  83. package/dist/agent-src/templates/roadmaps.md +97 -3
  84. package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
  85. package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  86. package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
  87. package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
  88. package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  89. package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  90. package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  91. package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  92. package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  93. package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  94. package/dist/cli/commands/uiAudit.js +124 -5
  95. package/dist/cli/registry.js +2 -0
  96. package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
  97. package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
  98. package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
  99. package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
  100. package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
  101. package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
  102. package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
  103. package/dist/cli-delegate/cmd_adr_effective.js +102 -0
  104. package/dist/cli-delegate/cmd_conformance.js +42 -10
  105. package/dist/cli-delegate/cmd_doctor.js +3 -3
  106. package/dist/cli-delegate/cmd_export.js +3 -2
  107. package/dist/cli-delegate/cmd_fleet.js +2 -2
  108. package/dist/cli-delegate/cmd_handoff.js +1 -1
  109. package/dist/cli-delegate/cmd_preflight.js +2 -2
  110. package/dist/cli-delegate/cmd_prune.js +3 -2
  111. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  112. package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
  113. package/dist/cli-delegate/cmd_settings_set.js +2 -2
  114. package/dist/cli-delegate/cmd_sync.js +3 -2
  115. package/dist/cli-delegate/cmd_uninstall.js +3 -2
  116. package/dist/cli-delegate/cmd_validate.js +3 -2
  117. package/dist/discovery/deprecation-report.md +1 -1
  118. package/dist/discovery/discovery-manifest.json +57 -57
  119. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  120. package/dist/discovery/discovery-manifest.summary.md +1 -1
  121. package/dist/discovery/dormancy-report.md +1 -1
  122. package/dist/discovery/orphan-report.md +1 -1
  123. package/dist/discovery/packs.json +2 -2
  124. package/dist/discovery/trust-report.md +1 -1
  125. package/dist/discovery/workspaces.json +2 -2
  126. package/dist/hooks/dispatch.js +1836 -712
  127. package/dist/install/claudeRuleRewrite.js +254 -0
  128. package/dist/install/detect.js +29 -16
  129. package/dist/install/detect_php_shape.js +159 -0
  130. package/dist/install/install.mjs +634 -428
  131. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  132. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  133. package/dist/mcp/registry-manifest.json +3 -3
  134. package/dist/mcp/server.json +3 -3
  135. package/dist/mcp/server.mjs +4818 -2645
  136. package/dist/server/schemas/settings.js +3 -0
  137. package/dist/ui/assets/index-D0jaCRPM.js +29 -0
  138. package/dist/ui/index.html +1 -1
  139. package/docs/MIGRATION.md +1 -1
  140. package/docs/THIRD-PARTY-NOTICES.md +25 -0
  141. package/docs/contracts/provider-lifecycle.md +1 -1
  142. package/docs/contracts/settings-classes.md +10 -4
  143. package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
  144. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
  145. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
  146. package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
  147. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
  148. package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
  149. package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
  150. package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
  151. package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
  152. package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
  153. package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
  154. package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
  155. package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
  156. package/docs/guidelines/agent-infra/first-principles.md +2 -2
  157. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
  158. package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
  159. package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
  160. package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
  161. package/docs/guidelines/agent-infra/layered-settings.md +10 -10
  162. package/docs/guidelines/agent-infra/memory-access.md +1 -1
  163. package/docs/guidelines/agent-infra/mental-models.md +3 -3
  164. package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
  165. package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
  166. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
  167. package/docs/guidelines/agent-infra/role-contracts.md +2 -2
  168. package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
  169. package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
  170. package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
  171. package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
  172. package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
  173. package/docs/guidelines/agent-infra/six-hats.md +3 -3
  174. package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
  175. package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
  176. package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
  177. package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
  178. package/docs/guidelines/augment-portability-patterns.md +6 -4
  179. package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
  180. package/docs/guidelines/cross-role-handoff.md +2 -2
  181. package/docs/guidelines/design-fidelity-mechanics.md +1 -1
  182. package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
  183. package/docs/guidelines/php/database.md +90 -7
  184. package/docs/guidelines/prompt-templates.md +7 -7
  185. package/llms.txt +2 -2
  186. package/package.json +5 -2
  187. package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
  188. package/src/agent-src/scripts/guarded_baseline.ts +328 -0
  189. package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
  190. package/src/agent-src/scripts/stub_queue.ts +82 -0
  191. package/src/agent-src/scripts/stubs_due.ts +400 -0
  192. package/src/agent-src/scripts/ticket_bundles.ts +84 -0
  193. package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
  194. package/src/agent-src/templates/scripts/check_memory.ts +258 -17
  195. package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
  196. package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
  197. package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
  198. package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
  199. package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
  200. package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
  201. package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
  202. package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
  203. package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
  204. package/src/config/agent-settings.template.yml +32 -3
  205. package/src/config/assurance-capability-registry.json +21 -9
  206. package/src/config/canonical-terms.yml +119 -0
  207. package/src/config/capability-native-outcome-bars.json +81 -0
  208. package/src/config/ci-local-parity.yml +80 -0
  209. package/src/config/drafting-channels.yml +43 -0
  210. package/src/config/estate-count-budget.json +38 -36
  211. package/src/config/evaluator-budgets.json +14 -14
  212. package/src/config/gate-coverage.yml +579 -63
  213. package/src/config/gate-reachability-exemptions.json +21 -0
  214. package/src/config/gate-violation-baselines.json +37 -19
  215. package/src/config/harness-evolution-budget.json +25 -0
  216. package/src/config/lapsed-beta-baseline.json +96 -0
  217. package/src/config/memory-twin-verdicts.yml +129 -0
  218. package/src/config/metric-registry.yml +124 -0
  219. package/src/config/pack-size-budget.json +16 -15
  220. package/src/config/preamble-payload-budget.json +8 -8
  221. package/src/config/profiles/balanced.ini +27 -0
  222. package/src/config/profiles/full.ini +27 -0
  223. package/src/config/profiles/minimal.ini +27 -0
  224. package/src/config/publish-surface.json +9 -2
  225. package/src/config/routing-coverage-seed.json +16 -2
  226. package/src/config/rule-stub-ceilings.json +126 -112
  227. package/src/config/turnaround-budget.json +66 -0
  228. package/src/install/claudeRuleRewrite.ts +288 -0
  229. package/src/install/detect.ts +60 -17
  230. package/src/install/detect_php_shape.ts +191 -0
  231. package/src/scripts/_cli/cmd_doctor.ts +27 -112
  232. package/src/scripts/_dispatch.bash +27 -0
  233. package/src/scripts/_lib/activation_ladder.ts +211 -0
  234. package/src/scripts/_lib/activation_states.ts +88 -0
  235. package/src/scripts/_lib/adherence_detectors.ts +143 -0
  236. package/src/scripts/_lib/arith_claims.ts +181 -0
  237. package/src/scripts/_lib/arm_ranking.ts +62 -0
  238. package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
  239. package/src/scripts/_lib/audit_field_provenance.ts +54 -0
  240. package/src/scripts/_lib/auto_dispatch.ts +32 -3
  241. package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
  242. package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
  243. package/src/scripts/_lib/candidate_proposer.ts +402 -0
  244. package/src/scripts/_lib/candidate_record.ts +601 -0
  245. package/src/scripts/_lib/capture_rate.ts +319 -0
  246. package/src/scripts/_lib/collector_denominator.ts +771 -0
  247. package/src/scripts/_lib/collector_record.ts +340 -0
  248. package/src/scripts/_lib/collector_store.ts +664 -0
  249. package/src/scripts/_lib/collector_supervision.ts +827 -0
  250. package/src/scripts/_lib/concern_estate.ts +77 -0
  251. package/src/scripts/_lib/config_chain.ts +477 -0
  252. package/src/scripts/_lib/config_cost.ts +209 -0
  253. package/src/scripts/_lib/council_settings_block.ts +6 -0
  254. package/src/scripts/_lib/curator_ops.ts +172 -0
  255. package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
  256. package/src/scripts/_lib/delivery_criticality.ts +126 -0
  257. package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
  258. package/src/scripts/_lib/empty_cycles.ts +88 -0
  259. package/src/scripts/_lib/eval_publication.ts +354 -0
  260. package/src/scripts/_lib/evaluation_vector.ts +283 -0
  261. package/src/scripts/_lib/evaluator_promotion.ts +225 -0
  262. package/src/scripts/_lib/evidence_basis.ts +118 -0
  263. package/src/scripts/_lib/exec_evidence.ts +8 -0
  264. package/src/scripts/_lib/experience_card.ts +272 -0
  265. package/src/scripts/_lib/experience_report.ts +151 -0
  266. package/src/scripts/_lib/experiment_freeze.ts +112 -0
  267. package/src/scripts/_lib/generated_by.ts +66 -0
  268. package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
  269. package/src/scripts/_lib/hook_effect_probe.ts +141 -0
  270. package/src/scripts/_lib/host_denominator.ts +687 -0
  271. package/src/scripts/_lib/host_projection_reach.ts +157 -0
  272. package/src/scripts/_lib/ignored_blocker.ts +148 -0
  273. package/src/scripts/_lib/install_reach_checks.ts +495 -0
  274. package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
  275. package/src/scripts/_lib/judge_hygiene.ts +228 -0
  276. package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
  277. package/src/scripts/_lib/loop_guards.ts +299 -0
  278. package/src/scripts/_lib/loss_class.ts +129 -0
  279. package/src/scripts/_lib/machine_wake.ts +51 -0
  280. package/src/scripts/_lib/md_prose_lines.ts +177 -0
  281. package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
  282. package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
  283. package/src/scripts/_lib/orchestration_record.ts +253 -5
  284. package/src/scripts/_lib/outcome_envelope.ts +227 -0
  285. package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
  286. package/src/scripts/_lib/paired_stats.ts +245 -0
  287. package/src/scripts/_lib/paired_verdict.ts +226 -0
  288. package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
  289. package/src/scripts/_lib/privacy_class.ts +47 -0
  290. package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
  291. package/src/scripts/_lib/repeated_failure.ts +105 -0
  292. package/src/scripts/_lib/repo_root.ts +111 -0
  293. package/src/scripts/_lib/review_skipped_record.ts +37 -0
  294. package/src/scripts/_lib/role_split.ts +338 -0
  295. package/src/scripts/_lib/runtime_journal.ts +1499 -0
  296. package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
  297. package/src/scripts/_lib/skill_catalogue.ts +11 -1
  298. package/src/scripts/_lib/source_digest.ts +200 -0
  299. package/src/scripts/_lib/source_redact.ts +260 -0
  300. package/src/scripts/_lib/source_shape.ts +502 -0
  301. package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
  302. package/src/scripts/_lib/strip_comments.d.mts +8 -0
  303. package/src/scripts/_lib/strip_comments.mjs +65 -0
  304. package/src/scripts/_lib/test_red_state.ts +154 -0
  305. package/src/scripts/_lib/trigger_shift.ts +144 -0
  306. package/src/scripts/_lib/untrusted_content.ts +82 -7
  307. package/src/scripts/adoption_report.ts +1 -1
  308. package/src/scripts/adr/evidence_census.ts +1 -1
  309. package/src/scripts/adr/regenerate_index.ts +26 -2
  310. package/src/scripts/adr_cite_check.ts +164 -1
  311. package/src/scripts/ai_council/blind_review.ts +11 -1
  312. package/src/scripts/ai_council/clients.ts +4 -0
  313. package/src/scripts/ai_council/config.ts +3 -0
  314. package/src/scripts/ai_council/consensus.ts +28 -8
  315. package/src/scripts/ai_council/consensus_round.ts +226 -0
  316. package/src/scripts/ai_council/disagreement_signal.ts +338 -0
  317. package/src/scripts/ai_council/inline_findings.ts +340 -0
  318. package/src/scripts/ai_council/judge_position_bias.ts +197 -0
  319. package/src/scripts/ai_council/orchestrator.ts +16 -203
  320. package/src/scripts/ai_council/orchestrator_results.ts +23 -3
  321. package/src/scripts/ai_council/pricing.ts +106 -0
  322. package/src/scripts/ai_council/prompts.ts +74 -7
  323. package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
  324. package/src/scripts/ai_council/py_format.ts +14 -3
  325. package/src/scripts/ai_council/recouncil_guard.ts +293 -0
  326. package/src/scripts/ai_council/response_record.ts +50 -0
  327. package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
  328. package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
  329. package/src/scripts/asset_delivery_ledger.ts +157 -0
  330. package/src/scripts/attest_artifact.ts +193 -0
  331. package/src/scripts/audit_auto_rules.ts +2 -1
  332. package/src/scripts/audit_command_surface.ts +1 -1
  333. package/src/scripts/audit_mcp_tools.ts +2 -2
  334. package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
  335. package/src/scripts/audit_user_type_axis.ts +2 -1
  336. package/src/scripts/bench_ab_clone.ts +215 -10
  337. package/src/scripts/bench_ab_integrity.ts +119 -5
  338. package/src/scripts/bench_ab_v2_stats.ts +40 -213
  339. package/src/scripts/build_archive_index.ts +1 -1
  340. package/src/scripts/build_linear_digest.ts +1 -1
  341. package/src/scripts/build_proof.ts +11 -4
  342. package/src/scripts/build_rule_trigger_matrix.ts +1 -1
  343. package/src/scripts/build_source_digests.ts +157 -0
  344. package/src/scripts/cache_realization_report.ts +103 -0
  345. package/src/scripts/check_adr_frontmatter.ts +126 -0
  346. package/src/scripts/check_benchmark_report_fields.ts +207 -0
  347. package/src/scripts/check_beta_review_markers.ts +235 -6
  348. package/src/scripts/check_bundle_path_leakage.ts +34 -1
  349. package/src/scripts/check_claims.ts +576 -6
  350. package/src/scripts/check_composite_arming.ts +35 -0
  351. package/src/scripts/check_concern_admissions.ts +365 -0
  352. package/src/scripts/check_enforcement_coverage.ts +28 -0
  353. package/src/scripts/check_estate_count.ts +142 -1
  354. package/src/scripts/check_gate_reachability.ts +383 -0
  355. package/src/scripts/check_host_loadability.ts +104 -0
  356. package/src/scripts/check_loss_class_declared.ts +308 -0
  357. package/src/scripts/check_md_language.ts +15 -98
  358. package/src/scripts/check_memory_proposal.ts +18 -11
  359. package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
  360. package/src/scripts/check_no_external_sources.ts +281 -6
  361. package/src/scripts/check_pack_conformance_fixture.ts +11 -1
  362. package/src/scripts/check_pack_size.ts +59 -2
  363. package/src/scripts/check_preamble_payload_budget.ts +114 -3
  364. package/src/scripts/check_prefix_stable_mutation.ts +372 -0
  365. package/src/scripts/check_publish_surface.ts +10 -1
  366. package/src/scripts/check_references.ts +24 -1
  367. package/src/scripts/check_rule_evidence_declaration.ts +316 -0
  368. package/src/scripts/check_rule_projection_integrity.ts +14 -4
  369. package/src/scripts/check_score_contract.ts +26 -3
  370. package/src/scripts/check_static_parity.ts +285 -0
  371. package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
  372. package/src/scripts/check_suppression_hygiene.ts +15 -0
  373. package/src/scripts/ci_settle.ts +39 -2
  374. package/src/scripts/code_graph/build.ts +60 -3
  375. package/src/scripts/code_graph/extract.ts +44 -0
  376. package/src/scripts/code_graph/types.ts +24 -0
  377. package/src/scripts/collector_daemon.ts +714 -0
  378. package/src/scripts/config_cost_report.ts +302 -0
  379. package/src/scripts/consumer_matrix.ts +74 -1
  380. package/src/scripts/cost/budget.mjs +10 -3
  381. package/src/scripts/cost/track.mjs +10 -3
  382. package/src/scripts/council_cli.ts +37 -54
  383. package/src/scripts/dispatch_r2_reviewer.ts +46 -5
  384. package/src/scripts/evolution_lab.ts +980 -0
  385. package/src/scripts/external_sources_denylist.json +5 -18
  386. package/src/scripts/extract_audit_patterns.ts +21 -0
  387. package/src/scripts/fold_intake.ts +12 -1
  388. package/src/scripts/gen_discovery_baseline.ts +1 -1
  389. package/src/scripts/generate_capabilities_index.ts +12 -5
  390. package/src/scripts/generate_capability_matrix.ts +3 -3
  391. package/src/scripts/generate_command_flows.ts +2 -2
  392. package/src/scripts/generate_cookbook.ts +2 -2
  393. package/src/scripts/generate_index.ts +8 -1
  394. package/src/scripts/generate_knowledge_index.ts +2 -1
  395. package/src/scripts/generate_ownership_matrix.ts +2 -1
  396. package/src/scripts/generate_pack_manifests.ts +10 -2
  397. package/src/scripts/generate_role_experiences_catalog.ts +2 -2
  398. package/src/scripts/generate_settings_reference.ts +1 -1
  399. package/src/scripts/git_authorization_hook.ts +22 -1
  400. package/src/scripts/grade_target_readiness.ts +48 -5
  401. package/src/scripts/hook_effect_doctor.ts +261 -0
  402. package/src/scripts/hook_manifest.json +1 -1
  403. package/src/scripts/hook_manifest.yaml +98 -11
  404. package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
  405. package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
  406. package/src/scripts/hooks/concern_registry.ts +4 -0
  407. package/src/scripts/hooks/dispatch_hook.ts +32 -0
  408. package/src/scripts/hooks/journal_record_hook.ts +345 -0
  409. package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
  410. package/src/scripts/hooks/run_continuation_hook.ts +44 -9
  411. package/src/scripts/hooks/shims/install.sh +61 -0
  412. package/src/scripts/hooks/shims/php +101 -0
  413. package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
  414. package/src/scripts/hot_context_hook.ts +16 -0
  415. package/src/scripts/install-hooks.sh +20 -5
  416. package/src/scripts/install.ts +17 -35
  417. package/src/scripts/inventory_frontmatter.ts +2 -1
  418. package/src/scripts/lint_adr_sweep_routing.ts +12 -0
  419. package/src/scripts/lint_canonical_terms.ts +604 -0
  420. package/src/scripts/lint_composition_review.ts +619 -0
  421. package/src/scripts/lint_consolidation_lineage.ts +666 -0
  422. package/src/scripts/lint_eval_specs.ts +593 -0
  423. package/src/scripts/lint_hook_manifest.ts +19 -0
  424. package/src/scripts/lint_host_portability.ts +373 -0
  425. package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
  426. package/src/scripts/lint_memory_twin_parity.ts +335 -0
  427. package/src/scripts/lint_metric_consumers.ts +355 -0
  428. package/src/scripts/lint_skill_descriptions.ts +18 -1
  429. package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
  430. package/src/scripts/lint_skill_link_reach.ts +252 -0
  431. package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
  432. package/src/scripts/lint_ticket_buildable.ts +17 -1
  433. package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
  434. package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
  435. package/src/scripts/measure_docs_dead_links.ts +348 -0
  436. package/src/scripts/measure_host_capture.ts +461 -0
  437. package/src/scripts/migration_status.ts +3 -3
  438. package/src/scripts/model_rule_injection.ts +60 -0
  439. package/src/scripts/orchestration_record.ts +14 -0
  440. package/src/scripts/preamble_byte_census.ts +139 -10
  441. package/src/scripts/prepack-check.mjs +4 -1
  442. package/src/scripts/probe_turnaround.ts +384 -0
  443. package/src/scripts/probe_unblocked_ask.ts +279 -0
  444. package/src/scripts/render_benchmark_md.ts +1 -1
  445. package/src/scripts/rule_activation_census.ts +70 -9
  446. package/src/scripts/rule_backlinks.ts +1 -1
  447. package/src/scripts/run_lifecycle_suite.ts +208 -0
  448. package/src/scripts/run_skill_evals.ts +40 -0
  449. package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
  450. package/src/scripts/schemas/drafting-channels.schema.json +43 -0
  451. package/src/scripts/schemas/evals.schema.json +24 -1
  452. package/src/scripts/schemas/rule.schema.json +52 -1
  453. package/src/scripts/schemas/skill.schema.json +17 -2
  454. package/src/scripts/skill_overlap.ts +7 -1
  455. package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
  456. package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
  457. package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
  458. package/src/scripts/skill_usage_report.ts +2 -1
  459. package/src/scripts/stubs_due.ts +211 -0
  460. package/src/scripts/sweep_source_surfaces.ts +678 -0
  461. package/src/scripts/sync_pr_branch.ts +3 -3
  462. package/src/scripts/trigger_eval_grandfather.json +202 -222
  463. package/src/scripts/utilization_report.ts +22 -2
  464. package/src/server/schemas/settings.ts +5 -0
  465. package/src/templates/marketing-copy.yml +1 -1
  466. package/dist/ui/assets/index-Cxgy63kz.js +0 -26
@@ -180,3 +180,38 @@ Then add these **Symfony-specific** checks:
180
180
  - Messenger `failure_transport` is opt-in; without it, failures vanish.
181
181
  - Compiled container changes need `cache:clear` in `prod` before debugging "config not applied".
182
182
  - Symfony 7.x removed deprecated APIs — verify `composer.lock` before assuming 6.x patterns work.
183
+
184
+ ## When NOT to use — components without the framework
185
+
186
+ ```
187
+ A DEPENDENCY PROVES A LIBRARY IS AVAILABLE. ONLY THE ENTRY POINT AND THE
188
+ ROUTER PROVE WHICH APPLICATION SHAPE IS RUNNING.
189
+ `symfony/*` PACKAGES WITH NO SKELETON MARKER IS A THIRD STATE, AND THIS SKILL
190
+ DOES NOT APPLY TO IT.
191
+ ```
192
+
193
+ Symfony ships its ORM, container, collections and HTTP layer as
194
+ independently installable packages, usable with no framework present — a
195
+ published distribution model, not one consumer's arrangement. An application
196
+ built that way has a **custom entry point and a custom router**. Routing it here
197
+ offers a CLI that does not exist, a request-validation primitive that is not
198
+ wired, and a routes file that was never there: every suggestion confidently
199
+ wrong, and the reason visible only from the entry point.
200
+
201
+ **The probe set, and its cost.** A fixed set of filesystem existence checks plus
202
+ one manifest read — no directory walk, no content scan, and never re-derived per
203
+ session. Any ONE marker present means the framework is real:
204
+
205
+ | Probe | Meaning |
206
+ |---|---|
207
+ | `bin/console` | the console entry point the skeleton writes |
208
+ | `config/bundles.php` | the bundle registry |
209
+ | `config/services.yaml` | the DI service config |
210
+
211
+ `symfony/*` in `composer.json` with **none** of those markers is
212
+ *components-without-the-framework*. Say so and route away from this skill rather
213
+ than answering as though the framework were there.
214
+
215
+ Implemented deterministically in `src/install/detect_php_shape.ts`
216
+ (`detectPhpShape`), whose `PROBE_PATHS` is this table and whose verdict names
217
+ what a wrong route would have offered.
@@ -37,6 +37,91 @@ FLOOR PER BEHAVIOR: 1 HAPPY + 1 BOUNDARY + 1 ERROR (+1 ABUSE ON SECURITY PATHS).
37
37
  CAP PER BEHAVIOR: 5–8 CASES — EACH MUST FAIL FOR A DISTINCT REASON.
38
38
  ```
39
39
 
40
+ ## Does this change owe an executable behavior contract?
41
+
42
+ Cases and contracts are not the same artifact. A **case** is something you assert
43
+ in the project's unit runner. An **executable behavior contract** — a
44
+ specification written in the language of whoever asked for the change, and run
45
+ by a tool that reads it — is a heavier thing, and most changes do not owe one.
46
+ Ask for one everywhere and it degrades into a second, slower unit suite; ask for
47
+ one nowhere and behavior nobody can read stays unstated.
48
+
49
+ ### The observable-behavior test
50
+
51
+ > **Does this change alter behavior someone outside the code can observe, and
52
+ > would that person describe it in their own words?**
53
+
54
+ Both halves have to hold: observable behavior with no outside audience is
55
+ still only a case. *Observable* rules out anything a caller cannot see. *In their own
56
+ words* rules out behavior that is real but has no audience outside the codebase —
57
+ if the only person who can state the rule is the person reading the
58
+ implementation, a case in the unit runner states it better and cheaper.
59
+
60
+ **Yes → a contract is owed.** A refund is issued when an order is cancelled
61
+ within 14 days; a member on a lapsed plan is denied the export; a rejected
62
+ upload tells the uploader which rule it broke.
63
+
64
+ **No → cases, not a contract.** At least these:
65
+
66
+ - **A refactor with no behavior change.** Nothing outside the code can observe
67
+ it, by definition. If something can, it was not a refactor.
68
+ - **An internal invariant with no external vocabulary.** Cache key derivation,
69
+ retry backoff, connection-pool sizing, a query plan. Real behavior, no
70
+ audience — the failure is stated as a case, not as a sentence somebody outside
71
+ the code would say.
72
+ - **A pure boundary or error path with no business reading.** Rejecting a
73
+ malformed UTF-8 sequence is a case; *"we do not accept expired coupons"* is a
74
+ contract.
75
+ - **A change whose only observer is another part of this system.** A consumer
76
+ written by the same team is a caller, not an audience. Contract tests between
77
+ services are a different tool and a different question.
78
+
79
+ When the answer is yes, the ordering is unchanged: the contract fails before the
80
+ implementation exists and passes after — see
81
+ [`test-driven-development`](../test-driven-development/SKILL.md). A contract
82
+ first seen green has the same unknown sensitivity as any other test never seen
83
+ red.
84
+
85
+ ### The anti-script rule
86
+
87
+ ```
88
+ A CONTRACT STEP NAMING A SELECTOR, A TIMEOUT, OR A KEYSTROKE IS A DEFECT
89
+ IN THE CONTRACT — NOT AN IMPLEMENTATION DETAIL THAT HAPPENS TO BE THERE.
90
+ WRITE WHAT IS TRUE, NEVER WHAT IS CLICKED.
91
+ ```
92
+
93
+ A contract that scripts the interface is pinned to the interface: it goes red on
94
+ every redesign that changes nothing anyone cares about, and stays green through
95
+ the redesign that breaks the rule. It also stops being readable by the person
96
+ whose words it was supposed to be in — which was the only reason to pay for it.
97
+
98
+ **Wrong** — this is a click script wearing Given-When-Then:
99
+
100
+ ```gherkin
101
+ Given I open "/cart?id=42"
102
+ When I click #apply-coupon
103
+ And I type "SUMMER" into input[name=code]
104
+ And I wait 2 seconds
105
+ Then .cart-total should contain "€45.00"
106
+ ```
107
+
108
+ Every line is about the page. Change the button id and it fails; move the
109
+ discount rule and it passes.
110
+
111
+ **Right** — same behavior, stated as the rule it is:
112
+
113
+ ```gherkin
114
+ Given a cart of €50
115
+ When the customer applies a valid 10% coupon
116
+ Then the order total is €45
117
+ ```
118
+
119
+ The rule survives the redesign, and the person who asked for it can read it.
120
+
121
+ **The test for a step:** could it still be true if the product were a CLI, an
122
+ API, and a web page? If not, it belongs in the implementation the contract calls
123
+ into, not in the contract.
124
+
40
125
  ## Procedure — the five-step funnel
41
126
 
42
127
  ### 1. Behavior inventory (30 seconds)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: medium
3
3
  name: test-driven-development
4
- description: "Use when implementing a feature, fixing a bug, or refactoring — write a failing test first, then the code — even if the user just says 'add this function' or 'fix this bug'."
4
+ description: "Implementing a feature, fixing a bug, refactoring — failing test first, then the code. For a WRONG test, `testing-anti-patterns` wins."
5
5
  domain: quality
6
6
  workspaces:
7
7
  - engineering
@@ -72,16 +72,28 @@ failed proves nothing about the code under test.
72
72
  ### Iron Law — delete-and-restart over keep-as-reference
73
73
 
74
74
  ```
75
- WHEN UNTESTED CODE EXISTS AND A TEST IS NEEDED — DELETE THE CODE,
75
+ UNTESTED CODE THIS TASK JUST WROTE, AND A TEST IS NEEDED — DELETE THE CODE,
76
76
  WRITE THE TEST, REIMPLEMENT. NEVER KEEP IT "AS REFERENCE".
77
+ THIS LAW COVERS YOUR OWN UNTESTED OUTPUT. IT IS NOT A LICENCE TO DELETE
78
+ PRE-EXISTING CODE, AND NEVER OVERRIDES A REUSE VERDICT.
77
79
  ```
78
80
 
79
81
  Reading the existing implementation while writing its test is
80
- test-after-the-fact with extra steps. The 12-row anti-rationalization
81
- table that follows expands the most common ways this Iron Law gets
82
- talked-around. Externalized to
83
- [`testing-anti-patterns/process-anti-patterns.md`](../testing-anti-patterns/process-anti-patterns.md)
84
- to keep this skill under the 400-line sunset trigger.
82
+ test-after-the-fact with extra steps. Which code that applies to has three
83
+ answers, and only the first is a deletion:
84
+
85
+ | The code is | Do |
86
+ |---|---|
87
+ | **untested, written by this task** | delete it, write the test, reimplement — the Iron Law above |
88
+ | **pre-existing and tested** | keep it. Its tests are the record of its behaviour; deleting it to re-derive the same thing discards evidence and contradicts the reuse verdict |
89
+ | **pre-existing and untested** | do NOT delete. Write a **characterization test** pinning the behaviour it has today — including the behaviour you think is wrong — then change it under that test |
90
+
91
+ The middle row is the one this law used to get wrong: unqualified, it read as
92
+ a standing instruction to delete tested legacy that a reuse verdict would
93
+ keep. Case detail, the characterization-test procedure, and the 12-row
94
+ anti-rationalization table are in
95
+ [`testing-anti-patterns/process-anti-patterns.md`](../testing-anti-patterns/process-anti-patterns.md),
96
+ which keeps this skill under the 400-line sunset trigger.
85
97
 
86
98
  ## Mode contracts — Goal / Activities / Forbidden / Output
87
99
 
@@ -91,10 +103,21 @@ checks it from the diff** — an unverifiable prohibition does not ship.
91
103
  | Mode | Goal | Activities | Forbidden (diff check) | Output contract |
92
104
  |---|---|---|---|---|
93
105
  | **Design** | One-sentence behavior + enumerated cases | Steps 1–2 | **No production code** (diff touches no `src/**` production path) · no test bodies yet | Case list (happy/boundary/error) |
94
- | **Test-Red** | A failing test that fails RIGHT | Steps 3–4 | **No production edits** (diff = `tests/**` only) · test must fail at an **assertion, not an import/setup error** (failure output cites the assertion line) | Failing test + its observed failure reason |
106
+ | **Test-Red** | A failing test that fails RIGHT | Steps 3–4 | **No production edits** (diff = `tests/**` only) · the failure must be **about the behaviour under test**. Valid: a failing **assertion** · a **missing target** — class-not-found, or a compile/type error naming the unimplemented symbol · a **contract failure** (wrong shape, wrong status, unmet interface). Invalid: a broken **fixture** · a **syntax error** in the test · a missing **unrelated dependency** · a **runner or environment** fault | Failing test + its observed failure, named as one of the three valid classes |
95
107
  | **Implement** | Minimum code to green | Steps 5–6 | **No test edits** (no `tests/**` paths in Implement-phase diffs — changing the assertion to fit the code is the canonical violation; genuinely-wrong test → STOP and ask, never silently edit) · no scope beyond the one case | Green run output |
96
108
  | **Debug** | Fix a defect found later | (re-enter at 3) | **No bugfix before a reproducing regression test exists** (the fix commit contains a `tests/**` addition that fails without the fix) | Regression test + fix, verified red→green |
97
109
 
110
+ #### What makes a RED valid — relevance, not the line number it fails on
111
+
112
+ The discriminator is **whether the failure is about the behaviour under test**,
113
+ never where in the run it surfaces. A class that does not exist yet can only
114
+ fail at load, so demanding an assertion would force a production stub before
115
+ the first test — the exact thing this skill forbids. The four invalid classes
116
+ are failures of the harness: they would fail identically with the behaviour
117
+ fully implemented, so they measure nothing about it. Unsure → re-read the
118
+ failure output and name which of the seven it is; an unclassified red is not a
119
+ RED.
120
+
98
121
  ### Mode inference on resume
99
122
 
100
123
  Step 0 of any resume: if `agents/runtime/state/HANDOFF.md` exists, resume
@@ -107,7 +130,8 @@ assume Design:
107
130
  | No test for the target behavior | Design |
108
131
  | Test exists, currently failing at an assertion | Implement |
109
132
  | Test exists + passing, defect reported | Debug |
110
- | Test failing at import/collection error | Test-Red (fix the test, not the code) |
133
+ | Test failing at load because the target does not exist yet | Implement (that is a valid RED) |
134
+ | Test failing on a harness fault — fixture, syntax, unrelated dependency, runner | Test-Red (fix the test, not the code) |
111
135
 
112
136
  At every mode transition, one consent-checkpoint sentence (per
113
137
  `ask-when-uncertain` / `autonomous-execution` — no new mechanism): name the
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: medium
3
3
  name: testing-anti-patterns
4
- description: "Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions"
4
+ description: "BEFORE writing/changing tests, mocks, or test-only methods on production classes — mocking-the-mock, production pollution, overfit assertions; for order, `test-driven-development` wins."
5
5
  domain: quality
6
6
  workspaces:
7
7
  - engineering
@@ -17,11 +17,48 @@ is still mocking the mock.
17
17
  ```
18
18
  WHEN YOU FIND YOURSELF KEEPING UNTESTED CODE "AS REFERENCE" WHILE WRITING
19
19
  A TEST FOR IT — DELETE THE CODE. WRITE THE TEST. THEN REIMPLEMENT.
20
+ THE CODE IN QUESTION IS THE UNTESTED CODE THIS TASK JUST WROTE.
21
+ IT IS NOT PRE-EXISTING CODE, AND THE LAW NEVER OVERRIDES A REUSE VERDICT.
20
22
  ```
21
23
 
22
24
  The cheap path is one extra round-trip. The expensive path is a test that
23
25
  silently encodes the bug it was supposed to catch.
24
26
 
27
+ ### The three cases — only one of them is a deletion
28
+
29
+ Unqualified, this law reads as a standing instruction to delete any untested
30
+ code in reach. That reading is wrong in two of the three cases, and the wrong
31
+ one is expensive: it discards working behavior a reuse verdict would keep.
32
+
33
+ | The code is | Do | Why |
34
+ |---|---|---|
35
+ | **untested, written by this task** | delete it, write the test, reimplement | Nothing is lost — you can rewrite what you wrote minutes ago, and the test is then written against the behavior you wanted rather than the code you happened to produce |
36
+ | **pre-existing and tested** | keep it | Its tests ARE the record of its behavior. Deleting it to re-derive the same thing throws away evidence you cannot cheaply rebuild, and directly contradicts a reuse / extend verdict |
37
+ | **pre-existing and untested** | write a characterization test first | Deleting it destroys the only remaining record of what it does. The test comes first, but it pins TODAY's behavior — not the behavior you wish it had |
38
+
39
+ ### The characterization-test procedure
40
+
41
+ For the third case, in order:
42
+
43
+ 1. **Observe, do not judge.** Run the code on real inputs and record what it
44
+ actually returns — including outputs you believe are wrong. Bug-compatible
45
+ is the point: the test's job is to detect *change*, not to assert *correctness*.
46
+ 2. **Pin the observed values.** Assert them exactly. A characterization test
47
+ whose expected value is derived from the same code it tests is a tautology.
48
+ 3. **Name it as one.** Prefix or tag the test (`characterizes_…`, a
49
+ `@characterization` marker) so a later reader does not mistake a pinned bug
50
+ for a desired behavior.
51
+ 4. **Now change the behavior.** With the pin in place, the intended change is
52
+ an ordinary red-green cycle: the characterization test that must now change
53
+ is the blast radius, made visible.
54
+ 5. **Update or delete the pin deliberately.** When the new behavior is
55
+ correct, the pinned assertion is edited *because the behavior changed* —
56
+ stated in the diff, never quietly.
57
+
58
+ **What this is NOT.** Not permission to skip TDD on new behavior — the pin
59
+ covers what exists, the new behavior still starts from a failing test. Not a
60
+ coverage exercise: pin the behavior the change will touch, not the whole file.
61
+
25
62
  ## 12-row anti-rationalization table
26
63
 
27
64
  The urge to skip TDD is strongest on tasks where TDD matters most. Name
@@ -123,8 +123,51 @@ Prop budget per component:
123
123
  | Composite (Card, Dialog) | ≤ 8 props; prefer slots for variants |
124
124
  | Page section / feature shell | ≤ 4 props; everything else via context |
125
125
 
126
- Over-budget triggers a refactor: extract a config object, push
127
- state into context, or split into compound parts.
126
+ Over-budget is a **prompt to look**, not a verdict. Extract a config object,
127
+ push state into context, or split into compound parts — **or record why the
128
+ count is right for this component.**
129
+
130
+ ```
131
+ THE CAPS ABOVE ARE ADVISORY. THEY ARE NOT A GATE AND MUST NOT BECOME ONE
132
+ WITHOUT A NEW MEASUREMENT. NOTHING COMPUTES THE TIER, SO NOTHING CAN APPLY THEM
133
+ AUTOMATICALLY EVEN IF IT WANTED TO.
134
+ ```
135
+
136
+ **Why advisory, measured rather than asserted** (2026-08-24, one production
137
+ component library: 55 atoms, 3 molecules, 2 organisms):
138
+
139
+ | component | its level | props | cap here | over |
140
+ |---|---|---:|---:|---:|
141
+ | `file-upload` | **atom** | 19 | 6 | **3.2×** |
142
+ | `date-navigator` | molecule | 18 | 8 | 2.25× |
143
+ | `picker-sheet` | organism | 14 | 4 | **3.5×** |
144
+ | `duration-input` | molecule | 13 | 8 | 1.6× |
145
+ | `stepper` | molecule | 4 | 8 | — |
146
+
147
+ **The budget is INVERTED, and that is the finding rather than a calibration
148
+ error.** This table tightens as granularity rises. Reality goes the other way:
149
+ a higher-level component legitimately surfaces every label, callback and test id
150
+ of the pattern it orchestrates, so a cap that shrinks with tier flags the
151
+ components that are **correctly built** and clears the one that is 3.2× over.
152
+
153
+ **And for most components the number does not exist.** Between **45 % and 72 %**
154
+ of that library declares no root prop interface at all, depending on how you
155
+ count — `React.ComponentProps<'div'> & VariantProps<cva>` is the dominant idiom.
156
+ A cap over an uncountable quantity is not a lenient rule; it is no rule.
157
+
158
+ **The tier itself is not computable.** Composition depth, state, sub-component
159
+ count and prop count were each tested as a discriminator between the three
160
+ levels. **Every one overlapped completely, and several inverted.** Sub-component
161
+ count is the tempting replacement and fails the same way: `atoms/combobox`
162
+ exports **16**, more than every molecule (1, 1, 2) and more than one of the two
163
+ organisms. So there is no measurement that could assign the tier a cap would be
164
+ applied to.
165
+
166
+ **Revisit-if:** a corpus of levelled libraries — plural, and not four days old —
167
+ yields a discriminator that separates the tiers without overlap, at which point
168
+ the caps can be re-derived against it rather than restated. Until then these
169
+ numbers are a conversation starter for a human reviewer, which is the only role
170
+ the evidence supports.
128
171
 
129
172
  ### 5. Name the slot contract
130
173
 
@@ -9,7 +9,7 @@ scope:
9
9
  execution:
10
10
  type: assisted
11
11
  handler: internal
12
- allowed_tools: ["github"]
12
+ allowed_tools: ["Bash(gh:*)"]
13
13
  workspaces:
14
14
  - agent-config-maintainer
15
15
  packs:
@@ -49,6 +49,43 @@ shared `agent-config` package — with correct file placement, quality gates, an
49
49
  - **Quality verified** — must pass linter before PR creation
50
50
  - **Local benefit immediately** — use override for instant project benefit while PR is pending
51
51
 
52
+ ## A repeated override is a signal, and a signal is not evidence
53
+
54
+ ```
55
+ THE SAME ARTIFACT OVERRIDDEN IN INDEPENDENT INSTALLS IS THE CHEAPEST AVAILABLE
56
+ HINT THAT A SHIPPED DEFAULT IS WRONG. IT IS A HINT.
57
+ NEVER CHANGE A SHIPPED DEFAULT ON OVERRIDES FROM ONE ORGANISATION.
58
+ INDEPENDENT MEANS DIFFERENT TEAMS, NOT DIFFERENT DIRECTORIES.
59
+ ```
60
+
61
+ `agent-config doctor --check override-set` reports which shipped artifacts a
62
+ tree overrides and in how many layers. Two same-culture installs overriding the
63
+ same artifact is **n=2 from one toolchain culture**, which is a discovery
64
+ channel and not a mandate — and the temptation to "just fix the default, we
65
+ already know" is exactly how a general package becomes one organisation's house
66
+ style.
67
+
68
+ **What makes an aggregate admissible**, matching the *Evidence-based* and
69
+ *Universality first* principles above:
70
+
71
+ - overrides from **independently operated** consumers, not several repositories
72
+ of one team;
73
+ - the overriding change **converging on the same substance**, not merely
74
+ touching the same filename — two teams deleting different halves of a rule
75
+ are not agreeing about anything;
76
+ - a **named public mechanism** that explains why the shipped default is wrong,
77
+ rather than "several people changed it".
78
+
79
+ Below that bar, the signal is one input to a future aggregate and nothing more.
80
+ Record it and leave the default alone.
81
+
82
+ **The signal carries no consumer content, by construction.** Artifact kind, name
83
+ and a layer count — the type has no field that can hold a path, a diff or
84
+ anything from the tree, so privacy is the schema's shape rather than a scrubbing
85
+ pass that could fail. Never widen it to make a proposal more persuasive; a
86
+ proposal that needs the consumer's diff is a proposal that has not cleared the
87
+ bar.
88
+
52
89
  ## Package repository
53
90
 
54
91
  The shared agent-config package lives at:
@@ -15,7 +15,8 @@ packs:
15
15
  > **executed verdict** — the project's real test/quality output, scored against a
16
16
  > numeric threshold — escalated to a **judge** for qualitative confirmation only
17
17
  > *after* the numeric gate passes (staged escalation). The loop is the
18
- > conversation, not a process: no daemon, no persistent cross-session state. Use
18
+ > conversation, not a process: this loop introduces no resident process of its
19
+ > own and no persistent cross-session state. Use
19
20
  > it to drive a change to green when the verdict source is *runtime execution*,
20
21
  > not a judge reading a diff.
21
22
 
@@ -126,7 +127,7 @@ iterating against a stale contract.
126
127
 
127
128
  State lives in the conversation, optionally mirrored to a re-read working file —
128
129
  **never** a daemon or persistent cross-session store (honors
129
- [`no-runtime-boundary`](../../../docs/contracts/no-runtime-boundary.md)).
130
+ [`resident-process-governance`](../../../docs/contracts/resident-process-governance.md)).
130
131
 
131
132
  ## Validation
132
133
 
@@ -137,7 +138,11 @@ Before finalizing, confirm:
137
138
  3. The loop stopped at `max_attempts`, a plateau, or a judge `apply` — never
138
139
  ran unbounded.
139
140
  4. The judge saw only the diff + results, dispatched in fresh context.
140
- 5. No daemon / persistent runtime introduced.
141
+ 5. No **unsupervised** resident process introduced — and none of the four
142
+ governance conditions in `resident-process-governance.md` left unmet if a
143
+ supervised one is. (Amended 2026-08-27, ADR-249: this read "No daemon /
144
+ persistent runtime introduced" when a daemon was prohibited outright. The
145
+ check still fires; what it tests moved from existence to governance.)
141
146
 
142
147
  ## Output format
143
148
 
@@ -211,7 +216,7 @@ iter2 fixes A, breaks B, 92% → "PASS" ✗ regression ignored
211
216
  * [`playwright-testing`](../playwright-testing/SKILL.md),
212
217
  [`quality-tools`](../quality-tools/SKILL.md) — verdict sources.
213
218
  * [`autonomous-execution`](../../rules/autonomous-execution.md) — the N=3 cap.
214
- * [`no-runtime-boundary`](../../../docs/contracts/no-runtime-boundary.md) — the
219
+ * [`resident-process-governance`](../../../docs/contracts/resident-process-governance.md) — the
215
220
  runtime-free constraint this loop honors.
216
221
  * Optional impact pre-step (when a code-graph is present, ADR-124): run
217
222
  `agent-config code-graph affected --since <ref>` to scope which symbols a
@@ -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.12.0"
42
+ agent_config_version: "14.13.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -78,6 +78,53 @@ that was never a judgement call.
78
78
  `horizon_weeks` to a positive integer. Enforced by
79
79
  `task lint-roadmap-complexity` (plate-token detection skipped when
80
80
  `horizon_weeks > 0`).
81
+ 17b. **A carried deferral is annotated, or it blocks archival forever.**
82
+ `archive_completed_roadmaps` used to refuse any roadmap with
83
+ `count_deferred > 0` unconditionally. Three of the four council-decidable
84
+ dispositions in the preservation test — carry to a follow-up, merge into
85
+ existing work, restore to open — leave the `[~]` glyph in place, so a
86
+ genuinely UNEXECUTABLE item (one needing elapsed time rather than effort)
87
+ had no council-reachable path to an archived roadmap. The only glyph that
88
+ cleared the gate was `[-]`, which is owner-reserved AND pinned to "won't
89
+ happen at all"; using it for a carried item makes cancellation and transfer
90
+ indistinguishable to every later reader.
91
+ Since 2026-08-27 (AI council, 2 seats, convergent) a `[~]` step may carry
92
+ a machine-readable resolution, inside the step's own block:
93
+ ```markdown
94
+ - [~] **4.2 Measure the false-positive rate.**
95
+ <!-- deferred-resolution: carried-to=road-to-some-followup -->
96
+ ```
97
+ `merged-into=<slug>` is the second accepted form, for a merge into
98
+ pre-existing work rather than a new follow-up. `[-]` stays cancellation-only.
99
+ **Validation fails closed at every step** — a bare `[~]`, a malformed
100
+ annotation, a destination that does not exist, a destination in `archive/`
101
+ or `skipped/`, and (for `carried-to`) a destination with no
102
+ `parent_roadmap: <source-slug>` back-link each refuse the archive and print
103
+ which door closed. `merged-into` needs no back-link but the destination must
104
+ still mention the source slug. An annotation is cheap to write, so it is
105
+ made expensive to satisfy.
106
+ Three further doors, each found by an independent review of the first
107
+ version rather than designed in: the destination may not be the **source
108
+ itself** (it passes every other check and then dies with it); it may not be
109
+ a roadmap **this same sweep will archive** (both complete in one run leaves
110
+ the carried item with no receiver — the loss the annotation exists to
111
+ prevent, produced by the mechanism); and `merged-into` needs a
112
+ **structured** link — a `relates:` row or a `parent_roadmap:` line — because
113
+ a substring match on the source slug is satisfied by a filename, an example
114
+ or a comment. The back-link slug is regex-escaped: interpolated raw, a slug
115
+ like `road.parent` matched `roadXparent` and one containing `[` threw and
116
+ aborted the sweep.
117
+ **Not checked, and stated rather than implied:** that the destination's copy
118
+ of the criterion is faithful. Both council seats asked for stable item
119
+ identity over verbatim text matching, and neither exists today — the
120
+ back-link plus the source mention is the strongest link the sweep can verify
121
+ without inventing an identity scheme, and the human reviewing the carry is
122
+ still the one reading it.
123
+ Eligibility differs from representation: an item that is merely
124
+ **unfinished** (needs effort nobody spent) stays `[ ]`. Carrying it would be
125
+ scope laundering. Only an item that **cannot** be executed now qualifies.
126
+ Contract: `agents/roadmaps/*` · `src/agent-src/scripts/archive_completed_roadmaps.ts`
127
+ § `deferralProblems` · `tests/scripts/archive_deferral_resolution.test.ts`.
81
128
  17. **Follow-up roadmaps from deferred items carry `parent_roadmap`.**
82
129
  When a roadmap closes with `[~]` deferred items, the
83
130
  [`roadmap-management`](../skills/roadmap-management/SKILL.md) skill
@@ -193,7 +240,7 @@ that was never a judgement call.
193
240
  gap-table ritual. When it fires:
194
241
  - **(a) Gap-table before drafting.** Audit each proposed item against
195
242
  the existing skill / command / rule surface and keep only verified
196
- gaps — `KEEP` (genuine gap) / `FOLD` (into an existing artefact) /
243
+ gaps — `KEEP` (genuine gap) / `FOLD` (into an existing artifact) /
197
244
  `CUT` (already covered). The plan integrates, it does not dump.
198
245
  - **(b) `## Provenance` block** — source named by a **neutral
199
246
  descriptor** (never the raw competitor / tool name, per
@@ -467,6 +514,46 @@ that was never a judgement call.
467
514
  Register: the register ranks *known* risks with mitigations; the
468
515
  pre-mortem imagines the *whole plan dead* and reconstructs why.
469
516
 
517
+ 26. **A consolidating roadmap declares its parent set in `consolidates:`.**
518
+ When a roadmap claims to fold sibling proposals into one — a "master",
519
+ a consolidation, a document that supersedes others — it declares every
520
+ parent as a frontmatter list:
521
+
522
+ ```yaml
523
+ consolidates:
524
+ - road-to-first-parent.md
525
+ - road-to-second-parent.md
526
+ ```
527
+
528
+ The field is the *only* spelling a tracked roadmap may use. Five
529
+ legacy spellings exist in inbox artifacts and are read by
530
+ `lint_consolidation_lineage` so a legacy folder parses to the same
531
+ parent set rather than to an empty one — `supersedes_analysis:`, a
532
+ prose `**Inputs consolidated:**` list, a prose `**Ersetzt als
533
+ führendes Proposal:**` list, a `Master-Konsolidierung` heading with a
534
+ table, and a prose supersession sentence. They are **deprecated
535
+ spellings a reader may still encounter**, never shapes to author.
536
+
537
+ Why the field rather than prose: a consolidation presents its content
538
+ as adjudicated — parents named, conflicts resolved, a kill register
539
+ for what was rejected. A parent missing from that list is not
540
+ *killed*, it is *undiscussed*, and nothing in the artifact
541
+ distinguishes those two states. Measured
542
+ (`agents/evidence/analysis/consolidation-lineage-census-2026-08-26.md`):
543
+ four inbox folders carrying a declared consolidation, four with an
544
+ incomplete lineage.
545
+
546
+ An omission is discharged in exactly one of three ways, never by
547
+ silence: fold the parent in · record a kill ID for it · state that it
548
+ was read and adds nothing. `/analyze:inbox` carries the obligation at
549
+ the point the artifacts are produced.
550
+
551
+ Reported by `lint_consolidation_lineage` — report-mode, not blocking
552
+ (council 2026-08-27, 2/2 convergent: the four measured cases come from
553
+ a high-noise drafting context and do not establish precision on the
554
+ tracked estate; blocking is earned by tracked-scope evidence, not
555
+ assumed).
556
+
470
557
  ---
471
558
 
472
559
  ## Quality Gates (remote CI by default)
@@ -587,8 +674,15 @@ complexity: lightweight
587
674
  <!-- ## Provenance — INCLUDE ONLY for source-derived / harvest / capability-adoption
588
675
  roadmaps (rule 19). OMIT entirely for internally-originated roadmaps —
589
676
  do NOT ship an empty Provenance section.
590
- - Source: <neutral descriptor> (anonymized per source-confidentiality);
591
- link via `src/scripts/_lib/link_crypto.ts decrypt`: ENC1:<token>
677
+ - Source: `agents/tmp.old/<opaque-round-id>/` — an OPAQUE round identifier
678
+ (`inbox-2026-08-h`, `round-a91f3c`, `S17`), never a speaking directory name.
679
+ The `source-header` and `tmp-quote` shape classes BLOCK inside `agents/**`, so
680
+ a speaking value fails CI. Naming rule: `/analyze:inbox` Phase 1.
681
+ - Source class, if it needs saying: <neutral descriptor> (anonymized per
682
+ source-confidentiality) — describe the KIND, never the identity.
683
+ - Identity: recorded once, encrypted, in the round's intake note; the codename
684
+ map is `agents/evidence/reports/source-codename-map.md`. Decrypt via
685
+ `src/scripts/_lib/link_crypto.ts decrypt`: ENC1:<token>
592
686
  - Council: <members>, <date>, <depth>; convergence inlined above. -->
593
687
  ```
594
688