@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
@@ -121,11 +121,75 @@ Resolve the argument. Directory mode: list files with size and line count, and
121
121
  say up front how many there are. **A large inbox is a triage problem, not a
122
122
  throughput problem** — never open ten files at full depth in one pass.
123
123
 
124
+ #### The inbox directory name is opaque, or the whole chain leaks
125
+
126
+ ```
127
+ AN INBOX DIRECTORY UNDER agents/tmp/ CARRIES AN OPAQUE ROUND IDENTIFIER.
128
+ NEVER NAME IT AFTER THE SOURCE. THE TRUE SOURCE IS RECORDED ONCE, `ENC1:`
129
+ ENCRYPTED, IN THE ROUND'S OWN INTAKE NOTE. ROADMAP `Source:` LINES CITE THE
130
+ CODENAME ONLY.
131
+ ```
132
+
133
+ `agents/tmp/` is gitignored, so a speaking directory name looks free. It is not:
134
+ the name gets **quoted** into a tracked roadmap `Source:` header, into an
135
+ evidence artefact, into a review-snapshot filename and into a PR body, and each
136
+ quote republishes it in a public repository. Measured at
137
+ `road-to-source-silence` Phase 0: 190 block-tier occurrences of quoted
138
+ non-opaque `agents/tmp(.old)/<name>/` paths across the tracked tree, plus one
139
+ tracked findings file named after a round. **The directory name is the root of
140
+ the leak chain — if it is opaque, nothing readable exists to be quoted.**
141
+
142
+ Accepted forms — `isOpaqueRoundId` in `src/scripts/_lib/source_shape.ts` is the
143
+ authority, and the gate enforces the same predicate:
144
+
145
+ | Form | Example |
146
+ |---|---|
147
+ | round-dated, optional 1-3 char disambiguator | `inbox-2026-08-h` |
148
+ | content-free hex | `round-a91f3c`, `set-a91f3c` |
149
+ | set number | `S17` |
150
+
151
+ Anything that reads is speaking by construction. If a round arrives under a
152
+ speaking name, **rename the directory before Phase 2** and record the mapping as
153
+ below; renaming after the first quote lands means chasing the quotes.
154
+
155
+ **Record the true source exactly once, encrypted.** In the round's intake note
156
+ (`agents/tmp/<round-id>/intake.md`):
157
+
158
+ ```bash
159
+ printf '%s' '<the real source, url or description>' \
160
+ | ./scripts-run src/scripts/_lib/link_crypto encrypt
161
+ ```
162
+
163
+ Paste the `ENC1:` token into the intake note. That token, and the codename map at
164
+ `agents/evidence/reports/source-codename-map.md`, are the only places the
165
+ correspondence may exist. Never a second plaintext copy — not in the roadmap, not
166
+ in the PR body, not in a commit message.
167
+
124
168
  ### Phase 2 — Triage (cheap, all files)
125
169
 
126
170
  One pass per file, shallow, producing a table before any deep read:
127
171
 
128
- | file | genre | age | drafted-against | recurrence | first-impression disposition |
172
+ | file | genre | age | drafted-against | recurrence | lineage | first-impression disposition |
173
+
174
+ `lineage` is `n/a` for a file that claims no consolidation, `complete` for one
175
+ whose declared parent set matches the siblings present, or `omits: <names>` /
176
+ `ghost: <name>` / `undeclared`. Fill it from one command over the folder, not by
177
+ reading:
178
+
179
+ ```bash
180
+ ./scripts-run src/scripts/lint_consolidation_lineage --root <the inbox folder>
181
+ ```
182
+
183
+ The column exists because a consolidating artifact is the one genre that reads
184
+ as *finished* while being incomplete: it presents its content as adjudicated —
185
+ parents named, conflicts resolved, a kill register for what was rejected — so a
186
+ parent missing from that list is not *killed*, it is *undiscussed*, and nothing
187
+ in the artifact distinguishes those two states. Measured over four inbox folders
188
+ carrying a declared consolidation, four had an incomplete lineage
189
+ (`agents/evidence/analysis/consolidation-lineage-census-2026-08-26.md`). It sits
190
+ in the triage table rather than in a deep read for the same reason `recurrence`
191
+ does: it is one command, and by the time a deep read starts the artifact has
192
+ already been believed.
129
193
 
130
194
  `recurrence` is `first-seen` or a pointer to the earlier artifact — the marker in
131
195
  the file's own words, or a hit in `agents/tmp.old/` on the same subject (Phase
@@ -400,6 +464,16 @@ visibly not a new one, and the resulting learning is emitted as an artefact in
400
464
  Phase 5 like any other survivor — never as a line in the reply that nothing reads
401
465
  again.
402
466
 
467
+ **A status-update prediction naming a concrete mechanism becomes a stub or a
468
+ roadmap in the SAME run, never a line in a file about to be consumed.** That is
469
+ the "right, never recorded" outcome caught at its source: the round before
470
+ `inbox-2026-08-g` already named the hook-concern axis as the next ratchet
471
+ candidate at 68→69, the sentence sat in an untracked inbox file, the file was
472
+ consumed, and nothing under `agents/roadmaps/` inherited it — so the same
473
+ recommendation arrived again a round later, correct both times and durable
474
+ neither. A prediction that names a mechanism is already an artefact; the only
475
+ question is whether anyone writes it down before its carrier disappears.
476
+
403
477
  ### Phase 5 — Map survivors onto this suite's artefact types
404
478
 
405
479
  The question is never "what does the file say" but **"what does it become here"**:
@@ -413,6 +487,29 @@ The question is never "what does the file say" but **"what does it become here"*
413
487
  | reference material read on demand | a `guideline` or `context` |
414
488
  | a measured finding | a `decision-record`/ADR, not a rule |
415
489
  | a defect claim | a roadmap item, once verified |
490
+ | a consolidation omitting a parent | **not an artifact — a discharge, see below** |
491
+
492
+ **An omitted parent is discharged, never left silent.** When Phase 2's `lineage`
493
+ column read anything but `n/a` or `complete`, this phase says what happened to
494
+ each omitted parent. Exactly three discharges are legal, and the choice is the
495
+ operator's:
496
+
497
+ 1. **Fold it in** — read the omitted parent and carry its surviving items into
498
+ the consolidation, marking them as coming from it.
499
+ 2. **Record a kill ID for it** — the consolidation's kill register gains a row
500
+ naming the parent and why its content does not survive.
501
+ 3. **State that it was read and adds nothing** — one sentence, in the artifact,
502
+ naming the parent.
503
+
504
+ **Silence is the failure mode; any of the three is a complete discharge.** The
505
+ obligation is to *name* it, never to consolidate it — whether the omission was
506
+ correct is a judgement the operator makes and this command does not. A finding
507
+ that is usually wrong gets ignored, which is why a false positive costs one
508
+ sentence (discharge 3) rather than a re-run.
509
+
510
+ A `ghost:` reading — a declared parent with no matching file — has the same three
511
+ discharges plus a fourth that is really a correction: fix the name. A lineage
512
+ naming a plan nobody can open is the cheaper half of the same defect.
416
513
 
417
514
  Three hard defaults, from this repo's own scar tissue:
418
515
 
@@ -449,10 +546,20 @@ transcription. Phase 4b states this obligation for Phases 5 and 6 both; it is
449
546
  repeated here because this is the phase that writes the artefact, and an
450
547
  obligation named only upstream is one a Phase-6 executor never sees.
451
548
 
549
+ **The `Source:` line carries the codename, never the source.** Per Phase 1's
550
+ naming rule the round directory is already opaque, so
551
+ `> **Source:** \`agents/tmp.old/inbox-2026-08-h/\`` is a compliant header and a
552
+ speaking one is not. The gate's `source-header` and `tmp-quote` classes both
553
+ block inside `agents/**`, so a speaking value fails CI rather than merely
554
+ reading badly. If the roadmap needs to say *what kind* of source it was, describe
555
+ the class ("an external acceptance-pipeline reference") and put the identity in
556
+ the encrypted intake note.
557
+
452
558
  Then the inbox contract from
453
559
  [`agents-layout`](../../../../docs/contracts/agents-layout.md), in the **same
454
560
  reply**: `mv` the consumed file to `agents/tmp.old/`, point the roadmap's
455
- `Source:` line at its new path, and regenerate the dashboard. A consumed file
561
+ `Source:` line at its new path — still the codename — and regenerate the
562
+ dashboard. A consumed file
456
563
  left in `agents/tmp/` is a rule violation, not untidiness. Move only the files
457
564
  actually processed — never sweep the rest of the inbox.
458
565
 
@@ -7,7 +7,7 @@ cluster: feature
7
7
  sub: dev
8
8
  description: Full 7-phase feature development workflow for complex features.
9
9
  argument-hint: "[description]"
10
- skills: [laravel, php-coder]
10
+ skills: [laravel, php-coder, test-driven-development]
11
11
  suggestion:
12
12
  eligible: false
13
13
  rationale: "Cluster sub-command — reached via its cluster head's routing or its explicit /cluster:sub name; not independently suggested (surface-consolidation)."
@@ -88,7 +88,12 @@ Do NOT use for single-line fixes, trivial changes, or urgent hotfixes.
88
88
  3. Follow chosen architecture from Phase 4.
89
89
  4. Follow codebase conventions strictly (read guidelines).
90
90
  5. Update task list as progress is made.
91
- 6. Write tests alongside the implementation.
91
+ 6. Work **one behavior at a time**: write the failing test for that behavior,
92
+ observe it fail, write the minimum code that makes that one behavior pass,
93
+ then take the next behavior. A test phase followed by a code phase is
94
+ batch-TDD, not test-first — it buys the ordering and loses the feedback.
95
+ The only exceptions are the Do-NOT list in the `test-driven-development`
96
+ skill; a skipped test-first cycle is recorded in the decision log, never silent.
92
97
 
93
98
  ### Phase 6: Quality Review
94
99
 
@@ -81,7 +81,11 @@ Style fidelity may be lower."* Non-blocking.
81
81
  Per [`write-engine § 2`](../../../docs/contracts/write-engine.md).
82
82
  Flag form: `--tone=<formal|casual|neutral>`,
83
83
  `--length=<words>`, `--channel=<linkedin-post|tweet|blog|freeform>`,
84
- `--audience=<text>`. Missing flags → interactive prompt, **one
84
+ `--audience=<text>`. The channel values and their length defaults are
85
+ the schema-validated set in `src/config/drafting-channels.yml` — edit
86
+ that file and `write-engine.md` together, never one alone;
87
+ `tests/scripts/drafting_channels_schema.test.ts` fails on drift, and on
88
+ the short form `linkedin`, which is not a value. Missing flags → interactive prompt, **one
85
89
  question per turn**, in the order Topic → Tone → Length → Channel →
86
90
  Audience. Tone / length defaults derive from the per-channel table
87
91
  and the vocab-register → tone mapping in the engine contract.
@@ -7,7 +7,7 @@ routes_to: [refine-ticket, feature-planning]
7
7
  replaces: []
8
8
  visibility: visible
9
9
  skills: [refine-ticket, feature-planning]
10
- description: Drive a ticket end-to-end through refine → memory → analyze → plan → implement → test → verify → report — Option-A loop over the `work_engine` engine, block-on-ambiguity, no auto-git.
10
+ description: Drive a ticket end-to-end through refine → memory → analyze → plan → implement → test → verify → report — Option-A loop over `work_engine`, block-on-ambiguity, no auto-git, test-first enforced.
11
11
  argument-hint: "[ticket-key | url | bundle-path | pasted-text]"
12
12
  suggestion:
13
13
  eligible: true
@@ -122,7 +122,7 @@ catalog fixes are test-driven — a bounded generate→run→revise→re-run loo
122
122
  a numeric threshold (then a judge confirms), reusing the same N=3 cap. Use
123
123
  test/quality verdicts only; the live-app Playwright verdict stays deferred. The
124
124
  loop is multi-turn reasoning, not a runtime — it honors
125
- [`no-runtime-boundary`](../../docs/contracts/no-runtime-boundary.md) exactly as
125
+ [`resident-process-governance`](../../docs/contracts/resident-process-governance.md) exactly as
126
126
  the mission does.
127
127
 
128
128
  Handle exit codes per the `/work` contract:
@@ -5,7 +5,7 @@ pack: meta
5
5
  visibility: internal
6
6
  cluster: orchestrate
7
7
  skills: [subagent-orchestration]
8
- description: Run a YAML pipeline defined under `.agent-config/orchestrations/` — chains personas / skills / commands / sub-agents per the orchestration-dsl-v1 contract
8
+ description: Run a YAML pipeline defined under `.agent-config/orchestrations/` — chains personas / skills / commands / subagents per the orchestration-dsl-v1 contract
9
9
  argument-hint: "<pipeline-name | path> [key=value ...]"
10
10
  suggestion:
11
11
  eligible: true
@@ -23,7 +23,7 @@ packs:
23
23
 
24
24
  Execute a YAML pipeline file from `.agent-config/orchestrations/`
25
25
  against the current workspace. Pipelines are deterministic chains of
26
- personas, skills, commands, and sub-agents pinned by the
26
+ personas, skills, commands, and subagents pinned by the
27
27
  [`orchestration-dsl-v1`](../docs/contracts/orchestration-dsl-v1.md)
28
28
  contract.
29
29
 
@@ -75,7 +75,11 @@ operator notes, not voice signal.
75
75
  Per [`write-engine § 2`](../../../docs/contracts/write-engine.md).
76
76
  Flag form: `--tone=<formal|casual|neutral>`,
77
77
  `--length=<words>`, `--channel=<linkedin-post|tweet|blog|freeform>`,
78
- `--audience=<text>`. Missing flags → interactive prompt, **one
78
+ `--audience=<text>`. The channel values and their length defaults are
79
+ the schema-validated set in `src/config/drafting-channels.yml` — edit
80
+ that file and `write-engine.md` together, never one alone;
81
+ `tests/scripts/drafting_channels_schema.test.ts` fails on drift, and on
82
+ the short form `linkedin`, which is not a value. Missing flags → interactive prompt, **one
79
83
  question per turn**, in the order Topic → Tone → Length → Channel →
80
84
  Audience. Defaults inherit from the engine's per-channel table and
81
85
  the pace mapping above.
@@ -287,9 +287,9 @@ built bundle.
287
287
  ## 7. Expiry is a reported state, never a stall
288
288
 
289
289
  ```
290
- WHEN THE AUTHORIZATION WINDOW CLOSES WITH WORK LEFT, THE RUN STOPS CLEANLY
291
- AND REPORTS. IT NEVER RETRIES THE GUARD, AND IT NEVER EDITS THE GUARD,
292
- ITS SOURCE, OR ITS BUNDLES — READ-ONLY VERIFICATION ONLY.
290
+ WHEN THE AUTHORIZATION WINDOW CLOSES WITH WORK LEFT, THE RUN PAUSES, REPORTS,
291
+ AND ASKS FOR RE-AUTHORIZATION. IT NEVER RETRIES THE GUARD, AND IT NEVER EDITS
292
+ THE GUARD, ITS SOURCE, OR ITS BUNDLES — READ-ONLY VERIFICATION ONLY.
293
293
  ```
294
294
 
295
295
  **Unreachable while the merge step is gated**, and stated rather than left for
@@ -298,9 +298,22 @@ operation (`push` and `commit` are `WARN_OPS`), so the window governs nothing
298
298
  it does. This section is the contract for when the gate opens.
299
299
 
300
300
  Write the summary as-is with a `window-expired` disposition per unprocessed PR
301
- and name the exact re-authorization needed. Widening `LEDGER_MAX_AGE_MS` is
302
- forbidden practice: on 2026-08-21 it was patched to six hours for a drain run
303
- and the widening reached the trunk.
301
+ and name the exact re-authorization needed. Then STOP and wait — do not end the
302
+ run, and do not proceed to the next PR. ADR-251 (2026-08-30) decided this
303
+ shape: expiry is a pause, not a termination.
304
+
305
+ **The operator's reply is what resumes it, and it renews the window through the
306
+ path that already exists.** `git_authorization_hook.ts` rewrites this session's
307
+ ledger with a fresh `detected_at` on every human-typed prompt, so a reply
308
+ carrying the re-authorization you named resets the age the guard compares
309
+ against — no new mechanism, and the signal still comes from text the user typed.
310
+ Re-verify the manifest entry (number and head SHA) before resuming, exactly as
311
+ § 8 requires: the pause is a window in which the world can move.
312
+
313
+ Widening `LEDGER_MAX_AGE_MS` is still forbidden practice, and ADR-251 kept the
314
+ 30-minute value deliberately rather than by omission: on 2026-08-21 it was
315
+ patched to six hours for a drain run and the widening reached the trunk. The run proposes no value for it, edits neither it nor its bundles,
316
+ and treats a refusal as the answer.
304
317
 
305
318
  ## 8. Kill switches, and what happens after a merge
306
319
 
@@ -313,11 +313,25 @@ branch setting, push, open a PR, re-run CI, update a merge base, fix a failing
313
313
  test, authorise spend inside a budget — is machine-executable by the agent, and
314
314
  is therefore remediation work rather than a blocker.
315
315
 
316
- | Outcome | When | Success? |
317
- |---|---|---|
318
- | `complete` | `count_open == 0` and the PR is open | yes — archival check runs |
319
- | `blocked` | every remaining open step is **externally impossible** for the agent | **no** — partial progress, labelled as such |
320
- | a halt | one of the five conditions fired | **no** — the halt is reported |
316
+ | Outcome | When | Success? | terminal state |
317
+ |---|---|---|---|
318
+ | `complete` | `count_open == 0` and the PR is open | yes — archival check runs | `success` |
319
+ | `blocked` | every remaining open step is **externally impossible** for the agent | **no** — partial progress, labelled as such | `blocked`, or `approval-required` where the work is finished and waiting on a human |
320
+ | a halt | one of the five conditions fired | **no** — the halt is reported | `exhausted` when a declared budget ran out; `stagnated` when the same failure signature repeated with budget left |
321
+
322
+ **The closing report names the terminal state by word**, from
323
+ [`terminal-states`](../../../../src/agent-src/contexts/execution/terminal-states.md).
324
+ The reason is the failure that vocabulary exists to stop: a run that stopped at
325
+ its iteration cap and one that finished both leave the roadmap looking the same,
326
+ because the checkbox glyphs cannot express `exhausted`, `stagnated` or
327
+ `approval-required` — they collapse into `[ ]` and `[~]`. Three of the six states
328
+ are therefore invisible in the dashboard and visible only in the report, which is
329
+ why the report has to say the word.
330
+
331
+ `exhausted` and `stagnated` are **never** reported as `complete`, whatever
332
+ partial progress exists, and they are kept apart on purpose: `exhausted` says the
333
+ budget may have been too small and raising it is a legitimate response;
334
+ `stagnated` says more of the same will not help and raising it is the wrong one.
321
335
 
322
336
  `blocked-preflight` no longer exists. A run always starts.
323
337
 
@@ -6,7 +6,7 @@ visibility: internal
6
6
  cluster: tdd
7
7
  sub: red
8
8
  skills: [test-driven-development]
9
- description: TDD red phase — enumerate cases, write ONE failing test, watch it fail at an assertion (not an import error)
9
+ description: TDD red phase — enumerate cases, write ONE failing test, watch it fail for a reason that is about the behaviour under test
10
10
  argument-hint: "[behavior to test]"
11
11
  suggestion:
12
12
  eligible: false
@@ -26,6 +26,16 @@ Drives the **Design → Test-Red** phases of
26
26
 
27
27
  1. State the behavior in one sentence; enumerate the cases (happy / boundary / error).
28
28
  2. Write ONE failing test for the first case.
29
- 3. Run it; confirm it fails at an **assertion**, not an import/collection error.
29
+ 3. Run it; confirm the failure is **about the behavior under test**. Valid:
30
+ a failing **assertion** · a **missing target** (class-not-found, or a
31
+ compile/type error naming the unimplemented symbol) · a **contract
32
+ failure**. Invalid: a broken **fixture** · a **syntax error** in the test ·
33
+ a missing **unrelated dependency** · a **runner or environment** fault —
34
+ those would fail identically with the behavior fully implemented, so they
35
+ measure nothing. A symbol that does not exist yet can only fail at load;
36
+ demanding an assertion there would force a production stub first, which is
37
+ what this phase exists to prevent. Taxonomy owner:
38
+ [`test-driven-development`](../../../skills/test-driven-development/SKILL.md)
39
+ § What makes a RED valid.
30
40
  4. Honor the Test-Red Forbidden block: **no production edits** (diff = `tests/**` only).
31
41
  5. Output: the failing test + its observed failure reason. Hand to `/tdd green`.
@@ -7,7 +7,7 @@ routes_to: [refine-prompt, command-routing]
7
7
  replaces: []
8
8
  visibility: visible
9
9
  skills: [refine-prompt, command-routing]
10
- description: Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over the `work_engine` engine, confidence-band gated, no auto-git.
10
+ description: Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over `work_engine`, confidence-band gated, no auto-git, test-first.
11
11
  argument-hint: "[prompt]"
12
12
  suggestion:
13
13
  eligible: true
@@ -115,3 +115,43 @@ the enumerated-set carve-out.
115
115
  - User explicitly asks for full output — show it.
116
116
 
117
117
  → Detailed patterns: `docs/guidelines/agent-infra/output-patterns.md`
118
+
119
+ ## Independent calls go in ONE block — the evidence
120
+
121
+ ```
122
+ CALLS WITH NO DEPENDENCY BETWEEN THEM GO IN THE SAME BLOCK.
123
+ A SECOND CALL THAT DOES NOT READ THE FIRST ONE'S RESULT IS NOT A SECOND TURN.
124
+ BEFORE EMITTING A SINGLE CALL, ASK WHAT ELSE IS ALREADY KNOWN TO BE NEEDED.
125
+ ```
126
+
127
+ The ceiling above forbids repetition; this forbids the opposite failure —
128
+ splitting work that had no reason to be split. It is stated because it is
129
+ **measured, not suspected**: over ten sessions of this package,
130
+ `probe_turnaround` reports a mean tool-call batch size of **1.01**, with 27 of
131
+ 2,889 tool-using requests (0.93 %) carrying more than one call. At a 4.7 s
132
+ median generation latency, a request that fans out to 42 calls spends about five
133
+ minutes on serialization before a single tool runs.
134
+
135
+ **Nothing in this package caused that, and nothing in it can fix it.** The cause
136
+ was looked for and is recorded as absent
137
+ (`agents/evidence/analysis/agent-turnaround-2026-08-30.md` § E2): no rule, skill
138
+ or template forbids parallel calls, and parallel calls do occur — so 1.01 is a
139
+ tendency, not a floor with a mechanism behind it.
140
+
141
+ **The discriminator is the dependency, never the count.** Two greps over
142
+ different files, a status and a log, three independent reads named before the
143
+ first one runs — one block. A read whose path comes out of the previous result —
144
+ two blocks, and batching them would be guessing.
145
+
146
+ **Do not read this as "write shorter commands".** In the same corpus, 98.1 % of
147
+ `Bash` calls are already compound or heredoc, and the 18 % that exceed 1,500
148
+ characters carry 75 % of all command bytes — those are one-shot scripts that each
149
+ replace three to six round-trips. Splitting them trades one expensive call for
150
+ several cheap ones and makes the number worse while looking like a fix.
151
+
152
+ **Honest enforcement — `instruction-only`.** No gate can observe a call that was
153
+ not batched: a transcript records the calls that happened, never the block they
154
+ could have shared. `probe_turnaround` reports the rate afterwards and refuses to
155
+ gate on a store CI does not have. This paragraph is the whole mechanism, and the
156
+ roadmap that added it pre-committed to recording a null if the rate does not
157
+ move rather than repeating the reminder more loudly.
@@ -232,8 +232,11 @@ NEVER A SILENTLY DEGRADED ANSWER. NO LLM CLASSIFIER FALLBACK (CUT C3).
232
232
  **Why rg-first** (council 2026-07-28, 2 rounds): the pre-registered benchmark
233
233
  behind the `code-graph-retrieval-null` claim (`docs/CLAIMS.md`) measured
234
234
  native-graph recall 0.365 vs grep 0.797 on graph-shaped questions — an
235
- indexing gap that keeps `code_graph.enabled` false permanently. The accelerant
236
- clause in the table above is that bound's escape hatch and is inert today.
235
+ indexing gap that keeps `code_graph.enabled` false BY DEFAULT — not
236
+ permanently: the 2026-08-15 withdrawal retracted that, and the figures predate
237
+ the 2026-08-22 extractor repair. The accelerant clause above is that bound's
238
+ escape hatch; `classifyLookup` reads the flag, so turning it on is the whole
239
+ change.
237
240
 
238
241
  **Escalation, not degradation:** a primitive that returns nothing (index miss,
239
242
  pattern too ambiguous, report script absent) — **or an unusable result**
@@ -157,6 +157,27 @@ When validating a single target, run the **specific** check, not a meta-task tha
157
157
 
158
158
  Concrete tool mapping — verify with the narrowest tool that proves the target green: a single `curl` / Playwright spec / browser run for HTTP behavior, the project's test runner with a `--filter` for one test, a debugger / `xdebug` step-through for one frame. Never substitute a meta-pipeline for a tool that pinpoints the failure.
159
159
 
160
+ ### Progress-primary ordering — and why the cap stays
161
+
162
+ Where the objective is **countable** — findings closed, tests passing,
163
+ occurrences remaining — the primary stop signal is **no progress** or a **new
164
+ minimum**, and the N=3 iteration cap is the **backstop**. A counter alone cannot
165
+ tell three attempts that each closed a finding from three that changed nothing.
166
+
167
+ **Do not remove the cap.** A no-progress signal is only as good as the metric
168
+ behind it, and a metric that stops moving because the MEASUREMENT broke looks
169
+ exactly like one that stops moving because the work is done. The cap bounds the
170
+ damage when the primary signal is wrong.
171
+
172
+ The two stops are different outcomes and are reported as different words: the cap
173
+ firing is `exhausted`, a repeating failure signature with budget left is
174
+ `stagnated` — see
175
+ [`terminal-states`](terminal-states.md). Collapsing them invites the wrong
176
+ remedy, because raising a budget helps the first and never the second.
177
+
178
+ Where the objective is NOT countable, the cap is the only signal and the N=3
179
+ budget above applies unchanged.
180
+
160
181
  ## Adaptive effort & stop (RDP)
161
182
 
162
183
  Scale effort to task difficulty, and stop when marginal evidence drops — coupled
@@ -39,6 +39,7 @@ v1 forward-compat rule on unknown fields).
39
39
  |---|---|---|
40
40
  | `task_size_estimate` | int | Pre-dispatch estimate of the task's size (the orchestrator's sizing heuristic). Counts only, no body. |
41
41
  | `spawn_count` | int | Number of subagents dispatched for this task. `0` → handled in-session. |
42
+ | `empty_cycles` | int \| null | Trigger fires suppressed as duplicates since the last outcome record. Reported as its OWN quantity and never folded into a success rate's numerator or denominator: a duplicate is not an outcome, and it is also not nothing — a rising count is what an idle loop looks like from outside. `null` = not tracked by this producer, which is **not** the same as zero duplicates observed. Deduplication rule in `src/scripts/_lib/empty_cycles.ts`: same key AND inside the window, both conjuncts required. |
42
43
  | `tiers` | string[] | Model tiers dispatched to, one entry per spawn class (e.g. `["sonnet","opus"]`). Tier names only, no prompts. |
43
44
  | `token_delta` | int | Net token cost of the dispatch versus the in-session baseline. Positive = orchestration cost more; negative = saved tokens. Counts only. |
44
45
  | `token_delta_provenance` | enum | `"measured"` when sourced from host-reported `usage` metadata (preferred); `"estimated"` when self-estimated from response length (mark always when host usage is unavailable). |
@@ -47,6 +47,46 @@ Direction chosen: **narrow the contract to what the validator already accepts**,
47
47
  not widen the validator. Widening makes every future divergence legal by
48
48
  construction, which is how one contract came to have three states.
49
49
 
50
+ ## Why success is gated, and not accepted
51
+
52
+ ```
53
+ AN UNVERIFIED SELF-REPORT IS INDISTINGUISHABLE FROM A RESULT.
54
+ A RETURN THAT CLAIMS SUCCESS AND SHOWS NO CHANGE AGAINST ITS OWN DECLARED
55
+ OUTPUT CONTRACT IS NOT EVIDENCE OF SUCCESS. IT IS EVIDENCE OF A CLAIM.
56
+ ```
57
+
58
+ **The failure this prevents.** Every downstream aggregation reads the recorded
59
+ outcome, not the return. `src/scripts/extract_audit_patterns.ts` mines repeated
60
+ patterns from it, and the per-asset effectiveness report is built on the same
61
+ stream. A forged `success` does not stay one line: it becomes signal, and the
62
+ report then recommends keeping an asset that never worked and retiring one that
63
+ did. Nothing downstream can detect it, because at that point the forgery is
64
+ indistinguishable from the thing it imitates — which is the whole reason the
65
+ check has to happen where the record is written rather than where it is read.
66
+
67
+ **Why the gate reads the declared output contract and not the diff.** The
68
+ obvious rule — claimed success plus an empty diff is never a success — is wrong
69
+ here, and wrong in a way that is worse than doing nothing. Analysis, review and
70
+ read-only research dispatches are a large share of this repository's subagent
71
+ traffic, and every one of them legitimately produces no diff. The unconditional
72
+ rule would mark them all as failures and poison the same aggregation in the
73
+ opposite direction. **Zero diff may be valid, so "zero diff = failure" must not
74
+ be global.** The gate therefore fires only where the dispatch itself declared
75
+ that a code change was the expected output.
76
+
77
+ **An unmeasured diff is not an empty diff.** Where the producer did not measure,
78
+ the gate does not fire. Treating "not measured" as zero manufactures the same
79
+ forgery with the opposite sign, and an aggregation cannot tell the two apart any
80
+ better than it can tell a forged success from a real one.
81
+
82
+ Implemented by `envelopeOutcome` in `src/scripts/_lib/orchestration_record.ts`,
83
+ the tree's only cross-domain outcome mapping. Because it is the only one, the
84
+ mapping is **versioned**: lines carry `outcome_semantics`, and an absent field
85
+ means the pre-2026-08-30 unconditional semantics. `audit-log-v1` is append-only,
86
+ so a labelling change cannot be rolled back the way a gate can — a reader
87
+ aggregating across the cutover segments on that field rather than inferring from
88
+ a date.
89
+
50
90
  ### Per-field divergence, one row per field
51
91
 
52
92
  | Field | spawn-contract (f) | `team_dispatch` model JSON (`:297`) | `subagent_response.ts` validator | `dispatch_r2_reviewer` |
@@ -104,11 +104,23 @@ doing its job; the orchestrator verifies (or revises) the parent first.
104
104
  ## Rollback guardrails — surfaced, not auto-disabled
105
105
 
106
106
  ```
107
- A CONFIG PACKAGE RUNS NO DAEMON. THERE IS NO AUTOMATIC COHORT-DISABLE.
107
+ A RESIDENT PROCESS HERE IS GOVERNED, NEVER AUTOMATIC. NO COHORT-DISABLE.
108
108
  BREACHES ARE SURFACED FROM THE AUDIT LOG FOR THE MAINTAINER / USER TO ACT ON.
109
109
  THE ONLY AUTOMATIC STOP IS THE PER-TARGET N=3 BUDGET.
110
110
  ```
111
111
 
112
+ > **Amended 2026-08-27 (ADR-249).** The first line used to read *"A CONFIG
113
+ > PACKAGE RUNS NO DAEMON"*, and that premise no longer holds: a **supervised**
114
+ > resident process is permitted in core under four governance conditions
115
+ > (`docs/contracts/resident-process-governance.md`, class P1). The block's force
116
+ > is unchanged, because the daemon clause was never what it governed — the rule
117
+ > here is that a breach never stops a cohort by itself, and that is if anything
118
+ > more load-bearing now than when nothing could be running. The replacement
119
+ > states the adopted constraint rather than an absence, which is the wording rule
120
+ > the same reversal imposes on every surface: name what the repository holds
121
+ > itself to, never a state of the world.
122
+
123
+
112
124
  The guardrail thresholds (`breachedGuardrails()`), read off the
113
125
  [`orchestration-telemetry`](orchestration-telemetry.md) audit signals:
114
126
 
@@ -0,0 +1,96 @@
1
+ # Terminal states — what a run REPORTS when it stops
2
+
3
+ > `road-to-skill-ecosystem-runtime-enforcement` Phase 4. Loaded on demand;
4
+ > the obligation surface is [`verify-before-complete`](../../rules/verify-before-complete.md).
5
+
6
+ A run has exactly one terminal state, and reporting the wrong one is not a
7
+ wording problem. **An error or an exhausted budget is never reported as
8
+ success.** The failure this vocabulary exists to stop is the one that reads
9
+ identically to a win: a loop that hit its iteration cap, a gate that could not
10
+ run, an approval that never came — each ending with a summary that says the work
11
+ is done.
12
+
13
+ ## The six states
14
+
15
+ | state | what it means | what it is NOT |
16
+ |---|---|---|
17
+ | `success` | The stated objective is met AND verified by a command run this turn. | Not "the edits landed". Landing is not verifying. |
18
+ | `clean-no-op` | Nothing needed doing, and that was **established**, not assumed. | Not "I found nothing" from a scan that never ran. A dead scope is `blocked`. |
19
+ | `blocked` | An external precondition is missing: a credential, a permission, a service, a decision only the user can make. | Not "hard". A blocker is a thing that is absent, not a thing that is difficult. |
20
+ | `approval-required` | The work is ready and the next action crosses a gate the agent may not cross alone. | Not `blocked`: nothing is missing, and the run produced a deliverable. |
21
+ | `exhausted` | A declared budget ran out — iterations, tokens, spend, wall-clock. | **Never** `success`, whatever partial progress exists. The cap firing IS the outcome. |
22
+ | `stagnated` | The budget has not run out and progress has stopped: the same failure signature is repeating. | Not `exhausted`. Stagnation is detected by a NO-PROGRESS signal, not by a counter. |
23
+
24
+ **Why `exhausted` and `stagnated` are separate**, when both stop a loop: they
25
+ have different remedies and different next actions. `exhausted` says *the work
26
+ may be fine and the budget was too small* — raising it is a legitimate response.
27
+ `stagnated` says *more of the same will not help* — raising the budget is the
28
+ wrong response, and a vocabulary that collapses them invites exactly that.
29
+
30
+ ## The mapping onto roadmap glyphs, and the three states glyphs cannot express
31
+
32
+ Roadmap checkboxes carry four glyphs. They describe a **step's disposition**, not
33
+ a **run's outcome**, and the gap is not an oversight — it is what makes a
34
+ budget-exhausted stop indistinguishable from a completed one in a dashboard.
35
+
36
+ | glyph | meaning | nearest terminal state |
37
+ |---|---|---|
38
+ | `[x]` | done | `success` — and only when a verify clause was met |
39
+ | `[ ]` | open | *(no state — the step has not run)* |
40
+ | `[~]` | deferred | `blocked` or `approval-required`, undistinguished |
41
+ | `[-]` | cancelled | *(a decision, not a run outcome)* |
42
+
43
+ **Three states have no glyph, and they are exactly the ones a validation budget
44
+ and a hard-blocker class produce:**
45
+
46
+ 1. **`exhausted`** — the run stopped at its cap with the step still open. The
47
+ glyph stays `[ ]`, which is identical to *never attempted*. A reader cannot
48
+ tell three failed attempts from zero.
49
+ 2. **`stagnated`** — same `[ ]`, and the distinction that matters (retrying is
50
+ pointless) is invisible.
51
+ 3. **`approval-required`** — collapses into `[~]` alongside `blocked`, so a
52
+ roadmap cannot show that the work is FINISHED and waiting on a human, versus
53
+ not startable at all.
54
+
55
+ **This is recorded rather than fixed.** Adding glyphs would change a format that
56
+ `update_roadmap_progress`, `check_roadmap_trackable`, `lint_empty_roadmaps` and
57
+ every archived roadmap already parse — a migration, not a step. What the
58
+ vocabulary buys today is that a run's CLOSING REPORT can say the word the glyph
59
+ cannot.
60
+
61
+ ## Progress-primary ordering
62
+
63
+ When the objective is **countable** — findings closed, tests passing, occurrences
64
+ remaining — the primary stop signal is **no progress** or a **new minimum**, and
65
+ the iteration cap is the **backstop**.
66
+
67
+ **Do not remove the cap.** A no-progress signal is only as good as the metric
68
+ behind it, and a metric that stops moving because the measurement broke looks
69
+ exactly like a metric that stops moving because the work is done. The cap is what
70
+ bounds the damage when the primary signal is wrong.
71
+
72
+ Where the objective is not countable, the cap is the only signal and the N=3
73
+ validation budget in [`autonomous-execution`](../../rules/autonomous-execution.md)
74
+ applies unchanged.
75
+
76
+ ## Reporting contract
77
+
78
+ A closing report names the state **by one of the six words above**, and where the
79
+ state is not `success` it names what would change it:
80
+
81
+ - `exhausted` — the budget that ran out, its value, and what was achieved inside it.
82
+ - `stagnated` — the repeating failure signature, and the attempts it survived.
83
+ - `blocked` — the missing thing, by name.
84
+ - `approval-required` — the exact action awaiting approval.
85
+ - `clean-no-op` — what was scanned, so "nothing to do" is distinguishable from
86
+ "nothing was read".
87
+
88
+ ## See also
89
+
90
+ - [`verify-before-complete`](../../rules/verify-before-complete.md) — no
91
+ completion claim without fresh evidence; this names what to claim when the
92
+ claim is not completion.
93
+ - [`autonomous-execution`](../../rules/autonomous-execution.md) — the N=3
94
+ validation budget whose firing is `exhausted`.
95
+ - [`autonomy-mechanics`](autonomy-mechanics.md) — the budget's mechanics and the
96
+ adaptive-effort ordering this page's progress-primary section states.
@@ -44,7 +44,7 @@ Fires once per creation task, not once per edit.
44
44
 
45
45
  ## The three phases
46
46
 
47
- **A — Understand** (≤ 5 clarifying questions: problem, trigger surface, should-trigger examples, near-misses, artifact type) · **B — Research** (mandatory four-surface overlap scan; open + skim the 3 nearest matches; extend-vs-create decision) · **C — Draft** (2-3 description variants first, then the body; live size enforcement). Per-phase procedure + the roadmap batch-mode carve-out: the mechanics guideline below.
47
+ **A — Understand** (≤ 5 clarifying questions: problem, trigger surface, should-trigger examples, near-misses, artifact type) · **B — Research** (mandatory four-surface overlap scan; open + skim the 3 nearest matches; extend-vs-create decision, written into the artifact as `composition_review:`) · **C — Draft** (2-3 description variants first, then the body; live size enforcement). Per-phase procedure + the roadmap batch-mode carve-out: the mechanics guideline below.
48
48
 
49
49
  ## Golden rules
50
50
 
@@ -25,6 +25,10 @@ collision_ok:
25
25
  "tenant": "cross-tenant isolation is this rule's core subject"
26
26
  # obligation: line 55
27
27
  obligation_frequency: "per-edit"
28
+ evidence:
29
+ source_type: external-standard
30
+ verified_on: 2026-08-30
31
+ normative_level: recommended
28
32
  ---
29
33
 
30
34
  # Broken Access Control