@event4u/agent-config 9.29.0 → 9.30.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 (122) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +108 -7
  3. package/README.md +1 -0
  4. package/dist/agent-src/commands/analyze/inbox.md +22 -1
  5. package/dist/agent-src/commands/explain-run.md +31 -1
  6. package/dist/agent-src/commands/team/delegate.md +1 -0
  7. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +4 -1
  8. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +17 -0
  9. package/dist/agent-src/contexts/execution/subagent-response-contract.md +11 -1
  10. package/dist/agent-src/rules/preservation-guard.md +9 -0
  11. package/dist/agent-src/scripts/roadmap_gates.ts +312 -0
  12. package/dist/agent-src/scripts/update_roadmap_progress.ts +72 -4
  13. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +10 -0
  14. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  15. package/dist/cli/registry.js +2 -0
  16. package/dist/cli/registry.js.map +1 -1
  17. package/dist/cli-delegate/{chunk-OJM3MBJM.js → chunk-BTJNRUX3.js} +21 -34
  18. package/dist/cli-delegate/{chunk-MMXA5GY7.js → chunk-DDUNNFYX.js} +14 -0
  19. package/dist/cli-delegate/{chunk-NZ5N2XQL.js → chunk-EQY4FLJB.js} +1 -1
  20. package/dist/cli-delegate/{chunk-RCIA67XN.js → chunk-IYTGIG2Y.js} +44 -1
  21. package/dist/cli-delegate/chunk-MMJL4TIX.js +18 -0
  22. package/dist/cli-delegate/chunk-O3CO5BFB.js +161 -0
  23. package/dist/cli-delegate/{chunk-REKCMYOU.js → chunk-PFBV6XRT.js} +36 -20
  24. package/dist/cli-delegate/chunk-RVGBH4XK.js +142 -0
  25. package/dist/cli-delegate/cmd_conformance.js +2798 -95
  26. package/dist/cli-delegate/cmd_doctor.js +2 -1
  27. package/dist/cli-delegate/cmd_export.js +2 -2
  28. package/dist/cli-delegate/cmd_handoff.js +86 -6
  29. package/dist/cli-delegate/cmd_prune.js +2 -2
  30. package/dist/cli-delegate/cmd_route_audit.js +2 -1
  31. package/dist/cli-delegate/cmd_session_recycle.js +177 -0
  32. package/dist/cli-delegate/cmd_settings_get.js +1 -1
  33. package/dist/cli-delegate/cmd_settings_migrate.js +2 -2
  34. package/dist/cli-delegate/cmd_settings_set.js +2 -2
  35. package/dist/cli-delegate/cmd_sync.js +2 -2
  36. package/dist/cli-delegate/cmd_uninstall.js +2 -2
  37. package/dist/cli-delegate/cmd_validate.js +2 -2
  38. package/dist/discovery/deprecation-report.md +1 -1
  39. package/dist/discovery/discovery-manifest.json +7 -7
  40. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  41. package/dist/discovery/discovery-manifest.summary.md +1 -1
  42. package/dist/discovery/orphan-report.md +1 -1
  43. package/dist/discovery/packs.json +2 -2
  44. package/dist/discovery/trust-report.md +1 -1
  45. package/dist/discovery/workspaces.json +2 -2
  46. package/dist/hooks/dispatch.js +1904 -575
  47. package/dist/install/install.mjs +14 -0
  48. package/dist/mcp/registry-manifest.json +2 -2
  49. package/dist/mcp/server.json +2 -2
  50. package/dist/mcp/server.mjs +3760 -726
  51. package/dist/server/schemas/settings.js +6 -0
  52. package/dist/server/schemas/settings.js.map +1 -1
  53. package/dist/ui/assets/index-B5qGYOJo.js +26 -0
  54. package/dist/ui/assets/index-B5qGYOJo.js.map +1 -0
  55. package/dist/ui/index.html +1 -1
  56. package/docs/contracts/settings-classes.md +21 -5
  57. package/package.json +1 -1
  58. package/src/agent-src/scripts/roadmap_gates.ts +312 -0
  59. package/src/agent-src/scripts/update_roadmap_progress.ts +72 -4
  60. package/src/config/agent-settings.template.yml +36 -0
  61. package/src/config/dispatch-economy-metrics.json +61 -0
  62. package/src/config/evaluator-budgets.json +4 -4
  63. package/src/config/hook-token-budget.json +91 -0
  64. package/src/config/recycle-threshold-budget.json +12 -0
  65. package/src/config/rule-enforcement-baseline.json +86 -0
  66. package/src/scripts/_cli/cmd_conformance.ts +17 -2
  67. package/src/scripts/_cli/cmd_session_recycle.ts +226 -0
  68. package/src/scripts/_dispatch.bash +23 -0
  69. package/src/scripts/_lib/judgment_ladder.ts +254 -2
  70. package/src/scripts/_lib/orchestration_record.ts +41 -10
  71. package/src/scripts/_lib/recycle_envelope_paths.ts +35 -0
  72. package/src/scripts/_lib/self_repair.ts +194 -0
  73. package/src/scripts/_lib/session_eol.ts +230 -0
  74. package/src/scripts/_lib/session_role.ts +42 -0
  75. package/src/scripts/_lib/subagent_capsule.ts +159 -0
  76. package/src/scripts/_lib/subagent_response.ts +75 -0
  77. package/src/scripts/ai_council/clients.ts +50 -1
  78. package/src/scripts/ask_transport.ts +221 -0
  79. package/src/scripts/bench_hook_injection.ts +234 -0
  80. package/src/scripts/check_adr_frontmatter.ts +84 -40
  81. package/src/scripts/check_branch_freshness.ts +1 -0
  82. package/src/scripts/check_corpus_staleness.ts +18 -4
  83. package/src/scripts/check_detector_corpus.ts +17 -0
  84. package/src/scripts/check_gitignore_freshness.ts +42 -8
  85. package/src/scripts/check_hook_bundle_freshness.ts +20 -0
  86. package/src/scripts/check_kernel_prefix_stability.ts +1 -0
  87. package/src/scripts/check_standing_rule_delivery.ts +73 -32
  88. package/src/scripts/check_static_layer_stability.ts +154 -0
  89. package/src/scripts/check_suppression_hygiene.ts +48 -0
  90. package/src/scripts/dispatch_economy_report.ts +448 -0
  91. package/src/scripts/dispatch_r2_reviewer.ts +15 -2
  92. package/src/scripts/explain_run.ts +206 -4
  93. package/src/scripts/generate_settings_reference.ts +1 -0
  94. package/src/scripts/handoff_context_hook.ts +112 -4
  95. package/src/scripts/hook_manifest.yaml +117 -10
  96. package/src/scripts/hooks/concern_registry.ts +8 -0
  97. package/src/scripts/hooks/delegation_nudge_hook.ts +40 -3
  98. package/src/scripts/hooks/dispatch_hook.ts +39 -2
  99. package/src/scripts/hooks/edit_shape_hook.ts +303 -0
  100. package/src/scripts/hooks/orchestration_record_hook.ts +19 -1
  101. package/src/scripts/hooks/reread_guard_hook.ts +314 -0
  102. package/src/scripts/hooks/rtk_wrap_hook.ts +133 -14
  103. package/src/scripts/hooks/session_eol_hook.ts +268 -0
  104. package/src/scripts/hooks/turn_end_gate_hook.ts +507 -0
  105. package/src/scripts/install-hooks.sh +1 -1
  106. package/src/scripts/language_mirror_hook.ts +89 -0
  107. package/src/scripts/lint_decision_impact.ts +14 -1
  108. package/src/scripts/lint_hook_manifest.ts +82 -0
  109. package/src/scripts/lint_readme_serial_comma.ts +1 -0
  110. package/src/scripts/lint_rule_enforcement_declaration.ts +347 -0
  111. package/src/scripts/measure_turn_end_gate.ts +194 -0
  112. package/src/scripts/orchestration_record.ts +4 -1
  113. package/src/scripts/rebuild_hook_bundle.ts +1 -0
  114. package/src/scripts/report_conformance_funnel.ts +284 -0
  115. package/src/scripts/report_imperative_density.ts +1 -0
  116. package/src/scripts/routing_doctor.ts +97 -0
  117. package/src/scripts/self_repair_cli.ts +51 -3
  118. package/src/scripts/session_eol_report.ts +261 -0
  119. package/src/server/schemas/settings.ts +14 -0
  120. package/src/templates/compact-instructions.md +40 -0
  121. package/dist/ui/assets/index-JDAF00bC.js +0 -26
  122. package/dist/ui/assets/index-JDAF00bC.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
9
- "version": "9.29.0",
9
+ "version": "9.30.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -312,13 +312,114 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
312
312
  > that forces a new era split (`# Era: 9.28.x`, etc.) — see
313
313
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
314
314
 
315
+ ## [9.30.0](https://github.com/event4u-app/agent-config/compare/9.29.0...9.30.0) (2026-08-10)
316
+
317
+ ### Release highlights
318
+
319
+ <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
320
+ - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in ded8e1a.
321
+ - **Default changes + migration:** _none_
322
+ - **Security and correctness:** _none_
323
+ - **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 133baf3, fcb689a, 5b86045.
324
+ - **Known limitations:** _none_
325
+
326
+ ### Features
327
+
328
+ * **roadmap:** the cost-parity family, cut down to what the tree does not already own ([41e52d1](https://github.com/event4u-app/agent-config/commit/41e52d18c66a0b8f5cb8bb1eac389313a51a32b8))
329
+ * **gates:** the bootstrap flag closes itself instead of relying on memory ([b9d2e3b](https://github.com/event4u-app/agent-config/commit/b9d2e3ba8a3ea6c3725969de09f347a3ef0e2dae))
330
+ * **self-repair:** name the surfaces a patch may never target ([4ae482a](https://github.com/event4u-app/agent-config/commit/4ae482ab669702be45ecc50eebb03246e43df3ad))
331
+ * **doctor:** surface what the host actually receives, without inventing a baseline ([50ded4c](https://github.com/event4u-app/agent-config/commit/50ded4c32fe13d29379c9c279c85b29d944efc9f))
332
+ * **conformance:** join delivery, activation and compliance into one funnel view ([0f33281](https://github.com/event4u-app/agent-config/commit/0f3328196838c8399343e861890ddeb5b64d8c89))
333
+ * **explain:** a dispatch decision explains its whole ladder walk, truthfully ([c665b6c](https://github.com/event4u-app/agent-config/commit/c665b6c4af2d251168c825accd54cbd238d985cf))
334
+ * **cli:** gates — the open decisions that need you, rendered as actions ([530365a](https://github.com/event4u-app/agent-config/commit/530365ad7e0abb767953176d211cb633a7497b76))
335
+ * **gates:** a new rule declares its enforcement, or states the gap ([71a1c30](https://github.com/event4u-app/agent-config/commit/71a1c303beb046c1f96c186d286d8d332dcb7872))
336
+ * **gates:** twelve gates account per target, or name why they cannot ([200a2fb](https://github.com/event4u-app/agent-config/commit/200a2fb9795896d1a153f79da7653b3848b36a62))
337
+ * **recycling:** session-eol Stop carrier, committed threshold, compact fallback, metric registrations (P3+P4) ([117991f](https://github.com/event4u-app/agent-config/commit/117991f720861b477af51641d34cb913f5af601b))
338
+ * **recycling:** main-session recycle envelope — schema variant, producer, consumer, round-trip (P2) ([62881e2](https://github.com/event4u-app/agent-config/commit/62881e2a0c25a1f0af75622c919f177f20271ee8))
339
+ * **recycling:** session end-of-life scanner, report and measured baseline (P1) ([cb760c1](https://github.com/event4u-app/agent-config/commit/cb760c1270e0aeb5de4490abc3efbbd78c8444d2))
340
+ * **cache-economy:** rtk corpus extension + unbounded-output cap advisory + metric registrations (P4-P6) ([0e46dff](https://github.com/event4u-app/agent-config/commit/0e46dff8fbaa77fcd66eb2a3bfc5db8e9ccd7f41))
341
+ * **cache-economy:** injection anatomy spike, stability lint, injection budget (token-economy-cache P1-P3) ([1176f77](https://github.com/event4u-app/agent-config/commit/1176f77b4e57e882a3a2d1399828a0c564883b31))
342
+ * **settings:** subagent model ceiling as explicit class-C spend cap (token-economy-dispatch P5) ([3fd63fc](https://github.com/event4u-app/agent-config/commit/3fd63fcb3ad9a343d3f40fdeb9354535aa8eda51))
343
+ * **ladder:** rung 0.5 ask transport below the spawn boundary (token-economy-dispatch P3+P4) ([5b86045](https://github.com/event4u-app/agent-config/commit/5b860459bf3a039200af37de91fea15e83f335d4))
344
+ * **hooks:** role axis in the hook manifest (token-economy-dispatch P2) ([60e804d](https://github.com/event4u-app/agent-config/commit/60e804d5ffa510cdd62e44744a9399b29793533f))
345
+ * **telemetry:** register dispatch-floor + rules-efficiency metrics (token-economy-dispatch P1) ([083fbb1](https://github.com/event4u-app/agent-config/commit/083fbb1d9ab5045a10bc0438d4a74bef6cec8b01))
346
+ * **scripts:** measure the turn-end-gate detectors against a real corpus ([b5c9bfe](https://github.com/event4u-app/agent-config/commit/b5c9bfe9ea85b3489f060401e7ff8a07a230f38d))
347
+ * **hooks:** re-emit the language pin across the compaction boundary ([a1812b4](https://github.com/event4u-app/agent-config/commit/a1812b41ba23745c3c4f21d3532ec0e822284d7c))
348
+ * **hooks:** add turn-end-gate, the first concern that can refuse a turn-end ([9e2edfc](https://github.com/event4u-app/agent-config/commit/9e2edfcba6c633a8746d8b28aac7069313123c32))
349
+
350
+ ### Bug Fixes
351
+
352
+ * **roadmap:** apply the council pass and the second review-gate round ([425b461](https://github.com/event4u-app/agent-config/commit/425b461329eb1eac781364d1496cc6bcbb4c5f17))
353
+ * **roadmap:** the divergence figure measures cache staleness, not the source ([a955e1f](https://github.com/event4u-app/agent-config/commit/a955e1fc2cb8ad86c8a809e35b96b0da2888ab27))
354
+ * **roadmap:** close all ten review-gate findings and add inbox snapshot provenance ([133baf3](https://github.com/event4u-app/agent-config/commit/133baf30fe2a2fd3d9dbff0535bf5b01fd845581))
355
+ * **roadmap:** risk types in the cost-parity family must be product or implementation ([5fb28c4](https://github.com/event4u-app/agent-config/commit/5fb28c46509761585ed154b7e222d1396562ec94))
356
+ * **evidence:** fill the registration SHA the council caught shipping unfilled ([a368a0c](https://github.com/event4u-app/agent-config/commit/a368a0ca815b70b61faa39b6cf72526e16b8f0f4))
357
+ * **review:** address the four PR advisories, three of them by stating what is true ([87b9202](https://github.com/event4u-app/agent-config/commit/87b92028f01df4f77f1495f5d422b0b6c1e083c2))
358
+ * **explain:** the ladder trail carries rung 0.5 after the merge ([9c77684](https://github.com/event4u-app/agent-config/commit/9c77684f134dc9e004c3d26ae2e08363643c4d37))
359
+ * **rules:** preservation-guard states its whole prohibition in its Iron Law ([ded8e1a](https://github.com/event4u-app/agent-config/commit/ded8e1ad2c435f657d7dbed8f4fea5cb40834080))
360
+ * **recycling:** pin session-eol in the worker-drop set the role-axis test asserts ([1a4370d](https://github.com/event4u-app/agent-config/commit/1a4370df8cc6bf97cc2c988fd6d10e9f91249212))
361
+ * **hooks:** point the pre-commit roadmap gate at the live script path ([fd8c565](https://github.com/event4u-app/agent-config/commit/fd8c565123d3a61d9a883fa079a60378552936fc))
362
+ * **cache-economy:** cast reread-guard ledger reads via unknown for the strict changed-files typecheck ([7159adf](https://github.com/event4u-app/agent-config/commit/7159adf91ed90c51cb4e645c27b6dc1042e97dbd))
363
+ * **deps:** bump the npm-production group with 5 updates ([2e388f1](https://github.com/event4u-app/agent-config/commit/2e388f1a611417d5b740448a5f1d49f8953ac69c))
364
+ * **tests:** add returnChannelChars to the two DispatchFacts literals ([4621d20](https://github.com/event4u-app/agent-config/commit/4621d20bdff8b97ddbe9101343e5a7db0a4fa160))
365
+ * **roadmap:** ref-ignore the deliberately-absent budget file path ([b017e88](https://github.com/event4u-app/agent-config/commit/b017e888f815c49af2217fbda0f935d7f82aec67))
366
+ * **roadmap:** risk-type enum on the two sibling registers ([042b0d8](https://github.com/event4u-app/agent-config/commit/042b0d87fcd6b066e4b0b85bd8dbba1140a8ecba))
367
+ * **review:** close the neutral-review findings on the dispatch-economy delta ([ecf4808](https://github.com/event4u-app/agent-config/commit/ecf4808211b58912e76ca5c62f4c3d5be9c7cb42))
368
+ * **review:** stamp R2 roadmap snapshots with the check-refs exemption ([2882267](https://github.com/event4u-app/agent-config/commit/2882267fa460862172f27fc80793620dc29bb0fb))
369
+ * **review:** address all four zcs-close R2 findings ([3cfe707](https://github.com/event4u-app/agent-config/commit/3cfe70733884874a2427db931fa5d56436212e4c))
370
+ * **contracts:** drop the two deleted ask-enum keys from settings-classes prose ([eab16c6](https://github.com/event4u-app/agent-config/commit/eab16c6b981909024e4205c10c449628fed10116))
371
+
372
+ ### Documentation
373
+
374
+ * **roadmap:** pull the 109-divergent-rules finding out of the blockers ([2346ee0](https://github.com/event4u-app/agent-config/commit/2346ee0bbda2e7922d7df28ce1545809fafb4819))
375
+ * **roadmap:** archive road-to-feedback-9-29 - all sixteen steps closed ([99f5bec](https://github.com/event4u-app/agent-config/commit/99f5bec04902001539d484d34f31c4c023dd9a4a))
376
+ * **contracts:** document the consent sidecar's record shape, and the ledger retention policy ([4804bf9](https://github.com/event4u-app/agent-config/commit/4804bf9aa0732e0c08e8c62e977af3361b112047))
377
+ * **adr:** propose the host-native-first ladder (ADR-221) ([57c4658](https://github.com/event4u-app/agent-config/commit/57c465881ce9931b20a8963ba3be41f1f9b8a548))
378
+ * **evidence:** measure drill coverage and delivered rule tokens, decide nothing ([fe00143](https://github.com/event4u-app/agent-config/commit/fe00143e26401bcd6257a9cb0f937f33bdfaf458))
379
+ * **evidence:** pre-register the scoped-rule absence experiment, and correct its headline ([9321fb2](https://github.com/event4u-app/agent-config/commit/9321fb21e84db815504ce5a419cd3b1b573980fc))
380
+ * **claims:** publish the advisory-vs-blocking measurement as a bound claim ([a3f340b](https://github.com/event4u-app/agent-config/commit/a3f340b8e5cd3243eec7c090adfec2aae68e53f9))
381
+ * **changelog:** curate the auto-derived highlight heads for 9.27 to 9.29 ([fcb689a](https://github.com/event4u-app/agent-config/commit/fcb689ae8b7a3bd798ed26879bb0077e7d0ec15d))
382
+ * **cache-economy:** batching fire/no-fire pair in the process-loop context (P6.3) ([0ce8675](https://github.com/event4u-app/agent-config/commit/0ce867553cd005a823a401817ca3357f136cbe57))
383
+ * **roadmap:** archive token-economy-dispatch, spawn blocked follow-up ([3009a02](https://github.com/event4u-app/agent-config/commit/3009a0285ce0d78e803fc0dfc48c39661d3a76f5))
384
+ * **review:** re-bind the manifest roadmap/ac hashes after the fix pass ([7fb09cc](https://github.com/event4u-app/agent-config/commit/7fb09cc48ffd33cfdea53f1d8e79857b7d5c3807))
385
+ * **roadmap:** add token-economy series from inbox analysis ([6c0a1a5](https://github.com/event4u-app/agent-config/commit/6c0a1a5f30518b1c86f605584d8a09f8e83a6ae5))
386
+ * **roadmap:** close round 5, resolve the stop-refusal blocker, record it in round 6 ([ed98d05](https://github.com/event4u-app/agent-config/commit/ed98d05703c2995e58d5b4cf715387144e2caf54))
387
+ * **review:** re-bind the R2 findings scope after the CI fix ([b14f2ae](https://github.com/event4u-app/agent-config/commit/b14f2ae8eb594f69a656c85435c3995a52d3bdab))
388
+ * **review:** re-bind the R2 findings scope after the main merge ([143c8a3](https://github.com/event4u-app/agent-config/commit/143c8a3b44378345a02fb381820d3404a41877f7))
389
+ * **review:** re-bind R2 findings to the post-fix review scope (contract 2.1 in-place re-bind) ([30461c9](https://github.com/event4u-app/agent-config/commit/30461c9c198ccc870ea22d0be7f4574bf934ddfc))
390
+ * **review:** commit the R2 completion-review findings for the zcs close ([b92cb6c](https://github.com/event4u-app/agent-config/commit/b92cb6ce41dc3ea86d299db656f2dc1f3181d07a))
391
+ * **roadmap:** verify always-on-orchestration acceptance criteria and Phase-7 non-goals ([e09189f](https://github.com/event4u-app/agent-config/commit/e09189ff3f7b30f4aa58ed5b309f814bef46e614))
392
+
393
+ ### Refactoring
394
+
395
+ * **roadmap:** park parts 1 and 2 in later/ per the council convergence ([95711d0](https://github.com/event4u-app/agent-config/commit/95711d0256c3a4e96bd8be029c8b9df93b02654a))
396
+
397
+ ### Tests
398
+
399
+ * **settings:** pin the two first-run entry-count cases from the council condition ([ffb33d6](https://github.com/event4u-app/agent-config/commit/ffb33d69c4dc075ac625933da1b193d6ad57c094))
400
+
401
+ ### Build
402
+
403
+ * **install:** refresh the install bundle after the settings-schema addition ([a1c4daa](https://github.com/event4u-app/agent-config/commit/a1c4daa686a0644911f69d850c25b3f6ec4f1b4d))
404
+
405
+ ### Chores
406
+
407
+ * **roadmap:** close road-to-token-economy-recycling — all phases landed, archived ([c5207f4](https://github.com/event4u-app/agent-config/commit/c5207f4ad6952b6499bc93c2bff4bb87f0f154f4))
408
+ * **roadmap:** close road-to-token-economy-cache - archive + census follow-up in later/ ([a87a2af](https://github.com/event4u-app/agent-config/commit/a87a2af343c02a425769e4f1b879ed56c39fcdb7))
409
+ * **deps:** bump actions/upload-artifact in the github-actions group ([f2b13ab](https://github.com/event4u-app/agent-config/commit/f2b13ab0dcbb558539e4d25f4e2a7b16fa9cced7))
410
+ * **deps-dev:** bump the npm-development group with 4 updates ([9e4310d](https://github.com/event4u-app/agent-config/commit/9e4310d0ea4fc6a3cb420cb5fe9d40180dee9e1f))
411
+ * **hooks:** bind turn-end-gate to claude stop and language-mirror to pre_compact ([6e3a5b4](https://github.com/event4u-app/agent-config/commit/6e3a5b40acbae2da22025a74e74a50307fc2142d))
412
+ * **roadmap:** close road-to-zero-ceremony-settings on the council condition, transfer the one deferral ([d7bc46a](https://github.com/event4u-app/agent-config/commit/d7bc46aeb63336afe1ea31c1c3661de60461d458))
413
+
414
+ Tests: 12691 (+253 since 9.29.0)
415
+
315
416
  ## [9.29.0](https://github.com/event4u-app/agent-config/compare/9.28.0...9.29.0) (2026-08-09)
316
417
 
317
418
  ### Release highlights
318
419
 
319
420
  <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
320
- - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 1a2dd51, 0304406, 1008212.
321
- - **Default changes + migration:** _auto-derived, rewrite before merge:_ commits naming a default, migration or migrate in 51088bd, 2590391, b7b4cb0.
421
+ - **Behaviour changes:** Always-on orchestration: a five-rung judgment ladder (deterministic script → single lite slice → parallel → team → council) replaces the activation gate — `classifyTask` drops the enabled/auto settings while the emergency halt and the host `subagent_spawn` capability remain, and ambiguity stays an ask verdict (1a2dd51). The activation settings (`subagents.enabled`/`auto`/`host_capabilities`/`budget_routing`, `ai_team.enabled`) leave the template, the zod schema and the settings-classes contract; `emergency.orchestration_halt` is the one surviving switch, and leftover keys warn once per process and are then ignored (0304406). The ADR-217 body link in token-budget-discipline becomes plain text because ADRs never ship into the dist projection, so the link could not resolve there (1008212).
422
+ - **Default changes + migration:** The council's shipped transport default flips `api` → `auto` (CLI-first; explicitly configured modes unchanged), a pass now concludes at majority quorum with absent members carrying reasons, and a machine-readable handoff envelope is emitted — the same commit fixes the CLI-client construction defect that made every default-path CLI member throw (51088bd). The new read-only forensics analyzers ship as a default-off pack (`default_install: false`, surface tier lab) (b7b4cb0). 2590391 is roadmap bookkeeping only — the rule-delivery-integrity roadmap closes and its deferred measurement migrates to a successor roadmap; it changes no consumer-facing default.
322
423
  - **Security and correctness:** _none_
323
424
  - **Honest nulls:** _none_
324
425
  - **Known limitations:** _none_
@@ -383,10 +484,10 @@ Tests: 12438 (+297 since 9.28.0)
383
484
  ### Release highlights
384
485
 
385
486
  <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
386
- - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 63825ba, 9cd21cb, ae6f30e, 3d684ef, 909235c, 103a22b +2 more.
487
+ - **Behaviour changes:** Two new always-loaded rules land — the self-repair loop (cb8d560) and the council-config-is-user-global fact (36a0e4c) — both later condensed to re-anchor the token baseline (103a22b), and AGENTS.md plus delegation-policy now carry the delegate-by-default and end-review obligations on the surface sessions actually read (63825ba). Settings resolution changes behaviour: the user-global loader now reads the canonical `settings/.agent-settings.yml` the wizard, server and installer write (previously silently inert), the onboarding gate checks the canonical project path so it can actually fire, and `MERGEABLE_KEYS` follows the key migration additively (ae6f30e, recorded as ADR-219). Four capability probes ship (`packs:active`, `settings:get`, `mcp:available`, `brand:status`) and rules are rewritten to name them plus `hooks:status` and the settings resolution chain (909235c, 3d684ef); 9cd21cb only fixes CI (ADR-219 frontmatter, three consumer-path ref-ignore markers) with no behaviour change.
387
488
  - **Default changes + migration:** _none_
388
489
  - **Security and correctness:** _none_
389
- - **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 2837fb7.
490
+ - **Honest nulls:** The SK-2 loaded-but-violated detector resolves its precision question as an honest null: 0 flags over 137 sessions makes precision over the flag set UNDEFINED, not 100%, so a 15-test discrimination proof replaces the number — and only 3 of the 110 skill-obligation lines are mechanically checkable, with the remainder reported uncovered rather than approximated (2837fb7).
390
491
  - **Known limitations:** _none_
391
492
 
392
493
  ### Features
@@ -482,10 +583,10 @@ Tests: 12141 (+391 since 9.27.0)
482
583
  ### Release highlights
483
584
 
484
585
  <!-- Curated head: fill before merge, keep it under 10 lines, and leave `_none_` where it is genuinely the answer. The generated log below is unchanged. -->
485
- - **Behaviour changes:** _auto-derived, rewrite before merge:_ rule/schema diffs, breaking commits or removed public surface in 6b06006, e82cc1f, b3b5ee7, dd89970.
486
- - **Default changes + migration:** _auto-derived, rewrite before merge:_ commits naming a default, migration or migrate in 6d1af3a.
586
+ - **Behaviour changes:** Rule frontmatter gains an `obligation_frequency` field — 105 rules declare it with a file:line citation, the nine kernel rules report `unclassified` because the kernel-prefix hash and write guard forbid the edit, and the enforcement-coverage join now runs per hook-capable platform (dd89970); the obligation citations themselves shrink from quoted sentences to line pointers across the always-loaded surface after the +5% cost cliff fired (e82cc1f). The session-canary carrier is re-bound into two hook slots (full contract at `session_start`, a one-line beat per `user_prompt_submit`) and three rules scope their enforcement claims to the hosts whose slots can actually carry them (b3b5ee7); a second conformance audit is recorded in the rule — the carrier fires, compliance did not follow (24 of 29 task starts dropped the greeting) — and ui-audit-gate plus design-review-after-ui-write now declare `enforced_by: none` in frontmatter where their prose already said it (6b06006).
587
+ - **Default changes + migration:** An absent-vs-default audit found nine settings keys where an absent value does not resolve to the template default — sharpest is `quality.local_auto_run`, where omitting the key silently disarms the gate the template arms; all nine are carved out as documented divergences read from the live template at emit time rather than fixed at their readers, so no migration is required and no default value changes (6d1af3a).
487
588
  - **Security and correctness:** _none_
488
- - **Honest nulls:** _auto-derived, rewrite before merge:_ commits carrying an honest-null marker in 8e6765b, 6208186, f60bd6a.
589
+ - **Honest nulls:** The orchestration dispatch backfill (39 metric-bearing dispatches across 103 sessions) resolves to an honest null — every family verdict flips with the choice of baseline, both gate inputs are unmeasurable without a counterfactual, and telemetry capture ran at 0.27% (8e6765b); the pre-registered sibling claim orchestration-observed-dispatch-cost was resolved to the same null the day it was registered (6208186). The parallel-session-coordination archive records a further null: all 71 TTL records came from a single host, so no per-host TTL table could be derived and none was invented (f60bd6a).
489
590
  - **Known limitations:** _none_
490
591
 
491
592
  ### Features
package/README.md CHANGED
@@ -126,6 +126,7 @@ is the proof. Browse it on the deployed docs site — the proof page is the prim
126
126
  [event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/).
127
127
  The honest comparison frame lives at
128
128
  [`docs/us-vs-the-category.md`](docs/us-vs-the-category.md).
129
+ Freshest measured row: in one post-fix session, advisory context injection cut language-mirror violations 555 → 19 while the two blocking guards went 8 → 0 and 1 → 0 — advisory reduced massively, only blocking eliminated. One session and a post-hoc reading, so a recorded prior rather than a law.<!-- claim:conformance-advisory-vs-blocking -->
129
130
 
130
131
  Maintaining a skills catalog yourself? The **anti-reskin gate** that blocks
131
132
  find-replace re-skin PRs here runs on your catalog too —
@@ -116,12 +116,22 @@ throughput problem** — never open ten files at full depth in one pass.
116
116
 
117
117
  One pass per file, shallow, producing a table before any deep read:
118
118
 
119
- | file | genre | age | first-impression disposition |
119
+ | file | genre | age | drafted-against | first-impression disposition |
120
120
 
121
121
  Genre is one of: **external-review · feature-spec · prompt/persona · transcript ·
122
122
  benchmark-output · council-artifact · scratch-note**. Age matters — compare the
123
123
  file's mtime against the tree's movement since.
124
124
 
125
+ **Read the provenance line first — it is the cheapest column in the table.** An
126
+ artifact may open with `drafted-against: <short-SHA>` or
127
+ `drafted-at: <YYYY-MM-DD>` (optional by design — see
128
+ [`agents-layout`](../../../../../docs/contracts/agents-layout.md) § Snapshot
129
+ provenance). When a SHA is present, run `git log --oneline <SHA>..HEAD` **before**
130
+ any deep read: what merged in that window is the set of claims that may be
131
+ *stale rather than wrong*, and that is one command instead of a verification
132
+ pass. Absent → the column reads `unstated`, which is the normal path and not a
133
+ penalty.
134
+
125
135
  Kill early and say so. A file is a **`delete`** candidate when it is a consumed
126
136
  artifact of a finished process (a council question whose roadmap is archived, a
127
137
  benchmark output already recorded), and a **`park`** candidate when it is real
@@ -155,6 +165,17 @@ or mark it `unverifiable`.
155
165
  Expect a large `already-fixed` fraction on any file older than a few weeks. That
156
166
  is a successful outcome, not a wasted pass.
157
167
 
168
+ **Separate stale from wrong, and say which.** `already-fixed` splits in two, and
169
+ the split changes what you tell the user: **overtaken** (true when drafted, a
170
+ later change shipped it) versus **never-true** (wrong at the drafting SHA too).
171
+ With a `drafted-against` SHA the distinction is mechanical — the claim either
172
+ falls inside `<SHA>..HEAD` or it does not. Report the two separately: a draft
173
+ that was 87 % overtaken was not a bad draft, and a draft that was wrong at its
174
+ own SHA is a different signal about its source. Two limits hold regardless: a
175
+ SHA is **not** a clearance for claims about a third system (host behaviour,
176
+ provider pricing, an external tool — those are `unverifiable` until probed), and
177
+ the narrowed surface still gets verified, just not re-derived from zero.
178
+
158
179
  ### Phase 5 — Map survivors onto this suite's artefact types
159
180
 
160
181
  The question is never "what does the file say" but **"what does it become here"**:
@@ -42,10 +42,40 @@ Both arguments are optional and narrow the report:
42
42
  With neither, the engine reports over all available artefacts. Pass through
43
43
  exactly what the user gave — do not invent a task id or a date.
44
44
 
45
+ ### 1b. Optionally explain ONE dispatch decision
46
+
47
+ `--decision "<task text>"` adds a section that walks the judgment ladder for
48
+ that text: the rung taken, every rung genuinely evaluated-and-rejected with its
49
+ detector's own reason, and the rungs the resolver never reached (`not-reached` —
50
+ never a fabricated rejection). Absent `--decision`, the section is omitted and
51
+ the rest of the report is unchanged.
52
+
53
+ The remaining flags are the ladder's input signals — pass only what the user
54
+ states, since each one changes the resolution:
55
+
56
+ - `--size-estimate <int>` · `--slices <int>` — the size signals; a task at or
57
+ below the size floor never delegates.
58
+ - `--ordered-plan` — the slices are ordered rather than independent.
59
+ - `--agent-teams` — the host reports the `agent_teams` capability (without it a
60
+ communication-shaped task degrades below rung 3).
61
+ - `--halted` — `emergency.orchestration_halt` is set.
62
+ - `--no-spawn-primitive` — the host has no `subagent_spawn` primitive.
63
+ - `--inside-subagent` — the classification runs inside a subagent session
64
+ (recursive-dispatch guard).
65
+ - `--approval-required` — a human decision is pending; resolves ∅ before every
66
+ rung.
67
+
68
+ The token/cost line under that section prints the freshest real dispatch record
69
+ in the window and states that it is **not** matched to this decision — the
70
+ record shape carries no decision key, so correspondence is never claimed.
71
+
45
72
  ### 2. Run the engine
46
73
 
47
74
  ```bash
48
- ./scripts-run src/scripts/explain_run [--task <id>] [--since <ISO-8601>]
75
+ ./scripts-run src/scripts/explain_run [--task <id>] [--since <ISO-8601>] \
76
+ [--decision "<task text>"] [--size-estimate <int>] [--slices <int>] \
77
+ [--ordered-plan] [--agent-teams] [--halted] [--no-spawn-primitive] \
78
+ [--inside-subagent] [--approval-required]
49
79
  ```
50
80
 
51
81
  Exit codes:
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  model_tier: inherit
3
3
  name: team-delegate
4
+ type: orchestrator
4
5
  disable-model-invocation: true
5
6
  argument-hint: "<task>"
6
7
  pack: meta
@@ -59,13 +59,16 @@ v1 forward-compat rule on unknown fields).
59
59
  | `init_tokens` | int \| null | **Lean-init extension (road-to-lean-agent-init Phase 3).** Spawn-payload tokens at worker init — the payload-truth measurement feeding the Phase-5 baseline gate (p95 < ~1,500 tokens/worker drops the L2/L3 bets). `null` = not measured. Counts only. |
60
60
  | `payload_hash` | string \| null | **Lean-init extension.** 8–64-char hex digest of the spawn payload — prefix-stability / cache measurement. A hash can never smuggle content (privacy by construction). `null` = not measured. |
61
61
  | `lookup_class` | enum \| null | **Lean-init extension.** Lookup class the L0 rung matched: `definition` · `references` · `string-existence` · `report-run`. `null` = not a lookup-shaped dispatch. |
62
- | `route_taken` | enum \| null | **Lean-init extension.** `primitive` (deterministic primitive answered — no spawn) · `subagent` (escalated). With `lookup_class`, measures the tool-not-agent rung's hit rate. A `primitive` line is the ONE recordable zero-spawn event (`spawn_count: 0`) — the routing decision itself is the datum the cost claim reads. |
62
+ | `route_taken` | enum \| null | **Lean-init + dispatch-economy extension.** `primitive` (deterministic primitive answered — no spawn) · `ask` (rung-0.5 single completion via `ask_transport`, no session) · `subagent` (escalated). With `lookup_class`, measures the tool-not-agent rung's hit rate. `primitive` and `ask` lines are the TWO recordable zero-spawn events (`spawn_count: 0`) — the routing decision itself is the datum the cost claim reads. |
63
63
  | `budget_hit` | bool \| null | **Lean-init extension.** Worker hit its `max_tokens_per_worker` stop-loss (L0b) and returned the structured partial result. Feeds budget-seed refinement. `null` = not measured. |
64
64
  | `correctness_match` | bool \| null | **Lean-init extension.** Golden/correctness comparison verdict for a primitive route (primitive answer ≡ agent answer). Populated only when a comparison arm actually ran (bench/golden mode); on real zero-spawn primitive routes there is no agent answer to compare against, so `null` is the NORMAL field value — never read `null` as "unchecked = suspicious". |
65
65
  | `cache_hit` | bool \| null | **Lean-init extension (Phase 4 prefix stability).** Provider-reported prompt-cache hit on the spawn payload. Measurement only — no savings claim without provider-response evidence. `null` = not measured. |
66
66
  | `origin` | string \| null | **Lean-init extension (council Q5 segregation).** Id-shaped sample tag (`lean-init-2026`) keeping lean-init efficiency lines cleanly separable from the `road-to-orchestration-scope-decision` sample. `null` = untagged line. Never free-form. |
67
67
  | `rules_carried` | int \| null | **Lean-init extension (L6 demand signal).** Rules in the worker's scoped projection — the carried set. With `rules_used`, yields the per-worker rule-usage quota the parked `later/road-to-deferred-rule-retriever` resume condition asks for ("are worker rules actually carried unused?"). `null` = not measured. Counts only. |
68
68
  | `rules_used` | int \| null | **Lean-init extension (L6 demand signal).** Rules the worker actually applied/cited. Validation: never exceeds `rules_carried`. `null` = not measured. Counts only. |
69
+ | `work_tokens` | int \| null | **Dispatch-economy extension.** Tokens the worker consumed AFTER init — the delta from first worker turn to envelope close. With `init_tokens`, yields the `dispatch_floor` ratio (`src/config/dispatch-economy-metrics.json`). Sourced from the transcript ledger (`_lib/cc_transcript.ts` `billable_input` semantics) by the report/backfill, never model-estimated without the tag below. `null` = not measured. |
70
+ | `floor_provenance` | enum \| null | **Dispatch-economy extension.** Provenance of the `init_tokens`/`work_tokens` pair: `measured` (transcript ledger) · `estimated`. Auto-defaults to `estimated` when either field is present untagged — mirrors `token_delta_provenance`. `null` = neither field present. |
71
+ | `return_channel_chars` | int \| null | **Dispatch-economy extension (Phase 6.3).** Serialized chars of the tool result returned into the orchestrator context (sync completions, hook-derived count — content never enters the record). Detector for "isolation win refunded through the return channel"; committed cap: `MAX_ENVELOPE_CHARS` (12,000) via `return_channel` in `dispatch-economy-metrics.json`. `null` = async ack. |
69
72
 
70
73
  These routing + cost fields are additive and optional — a line without them is
71
74
  still a valid orchestration line; readers ignore unknown fields per the v1
@@ -203,6 +203,23 @@ For each open step in the working set (scope-bound — see wrapper):
203
203
 
204
204
  Anti-pattern: `view step` → think → `view file A` → think →
205
205
  `view file B`. That's 3 round-trips for what should be 1.
206
+
207
+ Fire/no-fire pair (falsifiable — the discriminator is whether a
208
+ call's *input* depends on another call's *output*, never the count):
209
+
210
+ - **Fires (batch these):** a step says "update the hook, its test,
211
+ and the manifest entry" → `view src/scripts/hooks/foo_hook.ts` +
212
+ `view tests/scripts/foo_hook.test.ts` +
213
+ `view src/scripts/hook_manifest.yaml` are three independent reads
214
+ whose paths are all known BEFORE the first call — dispatch all
215
+ three in ONE parallel block. Issuing them serially is the
216
+ violation: each extra round-trip re-transmits the accumulated
217
+ context as input for zero new information.
218
+ - **Does NOT fire (stays serial):** `grep -rn "buildAdvisoryLine"
219
+ src/` → then `view <the file the grep found>`. The second call's
220
+ path IS the first call's output — batching would mean guessing the
221
+ path, and a guessed read is worse than a round-trip. Dependent
222
+ calls stay serial; only the independent remainder batches.
206
223
  2. Analyze the codebase for what the step requires.
207
224
  3. Decide and act — implement. **No "should I implement this?" prompt.**
208
225
  4. **Open question handling:**
@@ -13,13 +13,23 @@ orchestrator synthesises and re-verifies.
13
13
  "findings": [{ "title": "", "evidence_refs": ["file:line | id | path"], "mutating": false }],
14
14
  "risks": [],
15
15
  "confidence": "low | medium | high",
16
- "handoff": ""
16
+ "handoff": "",
17
+ "artifact_paths": ["<runtime artifact dir path — where the FULL result lives on disk>"]
17
18
  }
18
19
  ```
19
20
 
20
21
  - **Refs, not bodies.** `evidence_refs` are ref tokens (`file:line`, ids, paths),
21
22
  never inline content — same minimal-slice / privacy floor as the spawn contract.
22
23
  - `mutating` marks a finding whose action changes files/state (feeds the verify link).
24
+ - **The envelope is the ONLY return channel** (token-economy-dispatch Phase 6):
25
+ a worker's full result lands on disk (runtime artifact dir, gitignored) and
26
+ `artifact_paths` names where; the orchestrator consumes from those paths on
27
+ demand, never via wholesale transcript ingestion. Committed size caps,
28
+ validator-ERRORED (never silent truncation): `summary` ≤ 2,000 chars ·
29
+ line-shaped fields (`handoff`, a risk, a finding title) ≤ 240 · arrays ≤ 40
30
+ entries · one artifact ref ≤ 200 · the whole serialized envelope ≤ 12,000
31
+ chars (~3k tokens against a measured ~251k spawn floor). Constants + checks:
32
+ `src/scripts/_lib/subagent_response.ts`.
23
33
 
24
34
  ## Budget-hit partial result
25
35
 
@@ -26,6 +26,15 @@ the result must be **at least as strong** as the original.
26
26
 
27
27
  ## Iron Laws — every passage stays, telegraph is fine
28
28
 
29
+ ```
30
+ EVERY PASSAGE STAYS — PARAGRAPH FOR PARAGRAPH, BULLET FOR BULLET, FENCE FOR FENCE.
31
+ IRON LAW HEADINGS SURVIVE VERBATIM AT THEIR LEVEL. FENCED BLOCKS SURVIVE BYTE-FOR-BYTE.
32
+ NEGATION CLAUSES (NO X / NEVER Y / NOT Z) STAY IN.
33
+ NEVER WEAKEN: MUST STAYS MUST. ROUTING AND DECISION LOGIC STAY AS STRONG.
34
+ NEVER BROADEN SCOPE BY MERGING UNRELATED WORKFLOWS.
35
+ TELEGRAPH THE WORDING AS HARD AS YOU WANT — CONDENSE, NEVER DELETE, NEVER SOFTEN.
36
+ ```
37
+
29
38
  Sections marked **Iron Law** (any heading matching `# Iron Law`, `# Iron Laws`,
30
39
  `# The Iron Law`, at any heading level, including numbered variants like
31
40
  `Iron Law 1`, `Iron Law 2`) are **non-negotiable** and require the strictest