@event4u/agent-config 9.0.0 → 9.2.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 (93) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +22 -204
  3. package/MIGRATION.md +14 -0
  4. package/README.md +2 -2
  5. package/dist/agent-src/commands/explain-run.md +88 -0
  6. package/dist/agent-src/commands/implement-ticket.md +2 -0
  7. package/dist/agent-src/commands/pr/create/description-only.md +138 -8
  8. package/dist/agent-src/commands/pr/create.md +16 -5
  9. package/dist/agent-src/commands/review/changes.md +22 -0
  10. package/dist/agent-src/contexts/execution/subagent-modes-detail.md +41 -6
  11. package/dist/agent-src/contexts/execution/verify-budget.md +15 -0
  12. package/dist/agent-src/rules/cross-source-consistency.md +92 -0
  13. package/dist/agent-src/rules/delegation-policy.md +1 -1
  14. package/dist/agent-src/skills/estimate-ticket/SKILL.md +2 -0
  15. package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
  16. package/dist/agent-src/skills/llm-provider-knowledge/SKILL.md +146 -0
  17. package/dist/agent-src/skills/llm-provider-knowledge/evals/triggers.json +20 -0
  18. package/dist/agent-src/skills/po-discovery/SKILL.md +2 -0
  19. package/dist/agent-src/skills/refine-ticket/SKILL.md +7 -0
  20. package/dist/agent-src/skills/roadmap-writing/SKILL.md +14 -0
  21. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +26 -5
  22. package/dist/agent-src/skills/subagent-orchestration/evals/evals.json +18 -0
  23. package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +14 -2
  24. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +79 -0
  25. package/dist/agent-src/skills/subagent-orchestration/schemas/adversarial-findings.json +56 -0
  26. package/dist/agent-src/skills/token-optimizer/SKILL.md +10 -4
  27. package/dist/agent-src/templates/agent-settings.md +28 -0
  28. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  29. package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
  30. package/dist/discovery/deprecation-report.md +1 -1
  31. package/dist/discovery/discovery-manifest.json +105 -28
  32. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  33. package/dist/discovery/discovery-manifest.summary.md +5 -5
  34. package/dist/discovery/orphan-report.md +1 -1
  35. package/dist/discovery/packs.json +16 -12
  36. package/dist/discovery/trust-report.md +8 -8
  37. package/dist/discovery/workspaces.json +12 -8
  38. package/dist/install/install.mjs +47 -31
  39. package/dist/mcp/registry-manifest.json +3 -3
  40. package/dist/router.json +1 -1
  41. package/dist/scripts/_lib/agent_settings.js +4 -1
  42. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  43. package/dist/server/schemas/settings.js +10 -0
  44. package/dist/server/schemas/settings.js.map +1 -1
  45. package/docs/CLAIMS.md +10 -3
  46. package/docs/MIGRATION.md +20 -0
  47. package/docs/architecture.md +4 -4
  48. package/docs/archive/CHANGELOG-pre-9.2.0.md +276 -0
  49. package/docs/benchmark.md +24 -0
  50. package/docs/command-flows.md +1 -1
  51. package/docs/contracts/agents-layout.md +1 -1
  52. package/docs/contracts/consumer-bridge.md +55 -63
  53. package/docs/contracts/install-layout.md +1 -1
  54. package/docs/contracts/migrate-command.md +1 -1
  55. package/docs/customization.md +22 -1
  56. package/docs/decisions/ADR-020-global-only-consumer-scope.md +34 -0
  57. package/docs/decisions/ADR-122-adversarial-verification-council.md +136 -0
  58. package/docs/decisions/INDEX.md +1 -0
  59. package/docs/design/adversarial-council-eval.md +106 -0
  60. package/docs/featured-skills.md +2 -2
  61. package/docs/getting-started-by-role.md +1 -1
  62. package/docs/getting-started.md +2 -2
  63. package/docs/governance-advantage.md +1 -1
  64. package/docs/guidelines/agent-infra/api-cost-levers.md +126 -0
  65. package/docs/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
  66. package/docs/installation.md +2 -1
  67. package/docs/maintainers/dev-mode.md +3 -2
  68. package/docs/proof.md +7 -7
  69. package/package.json +1 -1
  70. package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +4 -1
  71. package/src/config/agent-settings.template.yml +81 -0
  72. package/src/config/gitignore-block.txt +16 -6
  73. package/src/scripts/_cli/cmd_conformance.ts +2 -2
  74. package/src/scripts/_cli/cmd_doctor.ts +162 -13
  75. package/src/scripts/_cli/cmd_refresh.ts +35 -118
  76. package/src/scripts/_lib/adversarial_council_gate.test.ts +112 -0
  77. package/src/scripts/_lib/adversarial_council_gate.ts +98 -0
  78. package/src/scripts/_lib/adversarial_reconcile.test.ts +197 -0
  79. package/src/scripts/_lib/adversarial_reconcile.ts +187 -0
  80. package/src/scripts/_lib/agent_settings.ts +4 -1
  81. package/src/scripts/_lib/verify_budget.ts +4 -1
  82. package/src/scripts/ai_council/clients.ts +68 -6
  83. package/src/scripts/ai_council/pricing.ts +62 -0
  84. package/src/scripts/council_cli.ts +19 -3
  85. package/src/scripts/install.ts +44 -45
  86. package/src/scripts/lint_agents_layout.ts +10 -4
  87. package/src/scripts/lint_breaking_changes_index.ts +303 -0
  88. package/src/scripts/mcp_server/tools.ts +1 -3
  89. package/src/scripts/schemas/agent-settings.schema.json +28 -0
  90. package/src/scripts/self_review_gate.test.ts +11 -0
  91. package/src/scripts/self_review_gate.ts +7 -1
  92. package/src/scripts/skill_eval_coverage.ts +4 -1
  93. package/src/server/schemas/settings.ts +24 -0
@@ -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.0.0",
9
+ "version": "9.2.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -48,26 +48,6 @@ foundation also land — both non-breaking by default.
48
48
 
49
49
  ### Breaking changes (6.0.0)
50
50
 
51
- **0. Consumer rule projection is scoped by default** (`road-to-request-scoped-rule-load` Phase 1 human gate, 2026-07-13)
52
-
53
- - **Who is affected:** fresh consumer installs — the settings template now
54
- ships `projection.rule_workspaces` filled with every consumer workspace, so
55
- the 16 exclusively-maintainer specification rules (plus the recorded
56
- `source-of-truth.md` compat exclusion) no longer arrive: 103 → 88 rules,
57
- −9,880 cl100k tokens (−13.1%) per install. All domain safety floors and
58
- domain rules keep shipping; kernel rules always ship.
59
- - **Existing installs:** unchanged until you run `agent-config sync` /
60
- re-install (settings sync preserves your current value; fill the list to
61
- opt in). The first session after opting in rebuilds the KV-cache prefix
62
- once (1.25–2× write cost, one session only).
63
- - **Quality evidence:** deterministic set-inclusion verification
64
- (`src/scripts/check_consumer_scope_flip.ts` →
65
- `internal/bench/reports/2026-07-13-consumer-scoped-default-flip.json`):
66
- only exclusively-maintainer rules drop; zero golden-set-exercised consumer
67
- rules affected (90/90 labelled tasks, coverage 86/86).
68
- - **Rollback:** set `projection.rule_workspaces: []` (= legacy-all).
69
-
70
-
71
51
  **1. Condensed output moved: root `.agent-src/` → `dist/agent-src/`** ([ADR-058])
72
52
 
73
53
  - **Who is affected:** consumers whose scripts or tool configs hard-code
@@ -1037,207 +1017,45 @@ our recommendation order, not its support status.
1037
1017
  > keeps the active era under the 250-line drift cap enforced by
1038
1018
  > `tests/test_changelog_eras.py`.
1039
1019
 
1040
- # Era: 8.12.x — current
1041
-
1042
- > Started at `8.12.0`. Full entries live inline below.
1043
- > The drift test caps this era at 250 lines of entry body; growth past
1044
- > that forces a new era split (`# Era: 8.13.x`, etc.) — see
1045
- > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
1046
-
1047
- ## [9.0.0](https://github.com/event4u-app/agent-config/compare/8.13.0...9.0.0) (2026-07-13)
1048
-
1049
- ### BREAKING CHANGES
1050
-
1051
- * **scoping:** flip consumer rule projection default to scoped (Phase-1 human gate, approved) ([565c91a](https://github.com/event4u-app/agent-config/commit/565c91aa25e4c970d5b37258f497366f33e7a7a9))
1052
-
1053
- ### Features
1054
-
1055
- * **product:** pre-build demand gate folded into improve-before-implement — plate complete, archived ([d6b0fcb](https://github.com/event4u-app/agent-config/commit/d6b0fcb9d020f983a98f8cd0c744d758bb758f9a))
1056
- * **skills:** Known-pitfalls sections for docker, terraform, laravel ([4427224](https://github.com/event4u-app/agent-config/commit/442722417f319b7b704c2d0bdc711c38e870f796))
1057
- * **skill-writing,size-enforcement:** Known-pitfalls section standard + sprawl guard ([6276c9f](https://github.com/event4u-app/agent-config/commit/6276c9f24b3166c1ae4360151cf05f2cd29f9b31))
1058
- * **skill:** spreadsheet-authoring — recalc-verification loop + zero-formula-error contract ([fcaf93e](https://github.com/event4u-app/agent-config/commit/fcaf93e8beb36c944b356df04b1203941f8a3271))
1059
- * **skill:** pdf-tools — library-per-task PDF create/transform/fill routing ([11af714](https://github.com/event4u-app/agent-config/commit/11af7140fa999dea0f514ddb32f5a1d6d6e8934b))
1060
- * **skill:** docx-authoring — skeleton-create + unpack/edit/pack-with-validate toolkit ([218f711](https://github.com/event4u-app/agent-config/commit/218f7115359f10c630c239ec02302f6a2eb21a63))
1061
- * **humanizer:** severity-tiered AI-ism taxonomy, stance-preservation, voice-match ([00077d2](https://github.com/event4u-app/agent-config/commit/00077d2488246766317f86110a65e65cab7080b9))
1062
- * **skills:** docx-authoring + pdf-tools — completes the document read→write cycle ([c0688c1](https://github.com/event4u-app/agent-config/commit/c0688c11badc38bd060de89f0585b351ea2d265d))
1063
- * **skill:** launch-readiness epistemics block + fix-loop (contract-backed) ([591c386](https://github.com/event4u-app/agent-config/commit/591c386ae6be8d06b68997a41198166334e7249c))
1064
- * **prelaunch:** finding-ID contract, epistemics, regression gate + suppression ([0f4bff6](https://github.com/event4u-app/agent-config/commit/0f4bff64e12f5a73525ea2272df479672ce7f9aa))
1065
- * **workflow:** Phase 3 merge-conflicts plan-first — plate complete, archived ([3f51f4e](https://github.com/event4u-app/agent-config/commit/3f51f4ed1fa6ed4253788432db468c35678f1c81))
1066
- * **workflow:** Phase 2 — HANDOFF.md convention, resume rule, artifact validation ([5092d5e](https://github.com/event4u-app/agent-config/commit/5092d5ef44ea154817eda4640a526fa0909ed9a9))
1067
- * **workflow:** Phase 1 — TDD mode contracts with diff-checkable Forbidden blocks ([a6c4d70](https://github.com/event4u-app/agent-config/commit/a6c4d7048e24505db80dc04c6e03d8a63bfce3d1))
1068
- * **ci:** bridge-derivation, tools-matrix + host-loadability gates (Phase 4.3/4.4) ([9168bbd](https://github.com/event4u-app/agent-config/commit/9168bbdb455412261bf593dd89f5111085d24fe9))
1069
- * **schema:** optional effort: reasoning-effort pin (Phase 4.2) ([9248f36](https://github.com/event4u-app/agent-config/commit/9248f366d13e79d195bfcd50985fc48313e1b51f))
1070
- * **commands:** argument-hint frontmatter across the command surface (Phase 4.1) ([333a1b3](https://github.com/event4u-app/agent-config/commit/333a1b37bd15ff394c9c82ba4a7a961ce3aaf1c2))
1071
- * **authoring:** U1 description-optimizer loop (held-out split) — plate complete, archived ([a2d7f55](https://github.com/event4u-app/agent-config/commit/a2d7f552a6d28657714914d0a0efa81decb2b57e))
1072
- * **authoring:** U5 self-QA fresh-eyes pattern for output-producing skills ([6295bd7](https://github.com/event4u-app/agent-config/commit/6295bd744dc6dbd96face318956e3925a0b80ca6))
1073
- * **authoring:** U3 tool-grant uplift — scoped grants, disallowed_tools deny-list, numeric thresholds ([7089ac8](https://github.com/event4u-app/agent-config/commit/7089ac8d6ac5121f391650987b5b2c8fb227f6fb))
1074
- * **authoring:** U4 register note + U2 Agent-Skills spec alignment ([6ce3a13](https://github.com/event4u-app/agent-config/commit/6ce3a13b1243fdfb63a184c758a4764ab1dc67d8))
1075
- * **telemetry:** U5 agent-combo facet on the orchestration record ([1aacb46](https://github.com/event4u-app/agent-config/commit/1aacb46458c42f3857b5107d714ca25386133e97))
1076
- * **measurement:** U4 host-loadability smoke — generated trees must actually load ([0d0b014](https://github.com/event4u-app/agent-config/commit/0d0b0141f160f5722d4bba71ba8e017d0445a98a))
1077
- * **evals:** U2 golden-adversarial review pair + not_contains assertion kind ([b5f040a](https://github.com/event4u-app/agent-config/commit/b5f040a8fd90b6012106760c06a67981a2a437a9))
1078
- * **measurement:** U1 loaded-vs-fired utilization report + census-honesty note ([545c2ce](https://github.com/event4u-app/agent-config/commit/545c2ce3f1c0d3894bb9eebd5c87bb8e110ddb2b))
1079
- * **telemetry:** U1a loaded denominator — engagement schema, record CLI, aggregator, renderer ([a549788](https://github.com/event4u-app/agent-config/commit/a5497881cc67475a6cddfc3fb857f675fcb032be))
1080
- * **skill-quality:** add read-only-by-default script-convention lint ([401828d](https://github.com/event4u-app/agent-config/commit/401828df53069331007fe0e28edab8811fa46fa4))
1081
- * **skill-quality:** add eval schema v2 — tool-choice + trajectory_budget ([63a5cdf](https://github.com/event4u-app/agent-config/commit/63a5cdfd433374099ea70e8e10a5b8350ccebb52))
1082
- * **skill-quality:** add description-quality lint gate ([e7acc5e](https://github.com/event4u-app/agent-config/commit/e7acc5ec8744b1e00d2fe9ad89727731d3500147))
1083
- * **scoping:** deterministic held-quality verifier for the consumer scoped-projection flip ([9375e6e](https://github.com/event4u-app/agent-config/commit/9375e6e6f4788f644c031a62c36e956bd49c0ec7))
1084
- * **review:** tally-vs-reasoned boundary + fix-pr-comments dedup ([564efa8](https://github.com/event4u-app/agent-config/commit/564efa8300b07c345c9c618b8d5790f20fde9089))
1085
- * **review:** change-type routing, two-tier output, de-biasing in code-review ([ffad758](https://github.com/event4u-app/agent-config/commit/ffad75807e3ae6dae58087280d47865286d9d437))
1086
- * **team-gate:** managed Review-Gate circuit breaker — never an infinite Claude/Codex loop ([0356b30](https://github.com/event4u-app/agent-config/commit/0356b30f60a00b9fe7b13cdd7dde05ddda3684db))
1087
- * **team-fallback:** read-only multi-host review via team_dispatch + team-review envelope ([ba6ea00](https://github.com/event4u-app/agent-config/commit/ba6ea0062b34cad03dc296a887a7d8edba559d09))
1088
- * **security:** STRIDE table, CI-agent + insecure-defaults coverage, active-probe design note ([260fd2f](https://github.com/event4u-app/agent-config/commit/260fd2fe667e0c605cd042935327b316fa4a9641))
1089
- * **security:** add security-maturity-assessment skill ([657b68f](https://github.com/event4u-app/agent-config/commit/657b68f550bdeff356cfa3e1654a98f69835ec26))
1090
- * **security:** add false-positive gate to bug + security review skills ([4309cb3](https://github.com/event4u-app/agent-config/commit/4309cb35f93eb68deeed523369417ad90c13d86c))
1091
- * **evals:** calibrate finding_floor from the cross-host lower envelope — gate armed ([c19aecf](https://github.com/event4u-app/agent-config/commit/c19aecfb440e3d748935a494400319ff8bd0617a))
1092
- * **bench:** cross-model parity count-pass runner (council-transport re-scope) ([5cef323](https://github.com/event4u-app/agent-config/commit/5cef32329263f1169ed7875cf4cfad0ab982a10c))
1093
-
1094
- ### Bug Fixes
1095
-
1096
- * **humanizer:** reword 'drift' → 'slippage' to clear wing3_vendor_independence false-positive ([66f9179](https://github.com/event4u-app/agent-config/commit/66f91797a0f3cff9c414cb0edfe64b89c916d1a8))
1097
- * **ai-council:** enforce config is user-global only, never project-local ([09b16bb](https://github.com/event4u-app/agent-config/commit/09b16bb559f548baf2760a255e1ab20b48a3ccdd))
1098
- * **merge:** resolve index-roadmap conflict — both quality-gates and workflow-contracts shipped ([c42dce4](https://github.com/event4u-app/agent-config/commit/c42dce428f0c35f01cf2e58046f62be28dc05504))
1099
- * **ci:** use .js import extensions in the new matrix-lint modules (typecheck) ([bf79fe0](https://github.com/event4u-app/agent-config/commit/bf79fe0fd32975b2b1e7d1639bf382874f9b0c18))
1100
- * **schema:** surgical skill-schema edits — restore original formatting ([01243ad](https://github.com/event4u-app/agent-config/commit/01243ad12cf5381a010f1e822b6f0e3bb8a32268))
1101
- * **rules:** P4 Batch B stub consistency — routes_to + fire-time fix-now boundary ([97bed1c](https://github.com/event4u-app/agent-config/commit/97bed1c1dedc0687a9349381949094f850da8e1f))
1102
- * **linear-digest:** drop stale strip_sections for context-hygiene after Batch B migration ([0e705c1](https://github.com/event4u-app/agent-config/commit/0e705c1316a5cfb2e76ca5e0cd958fa95757463c))
1103
- * **tests:** run bench_parity_count tests under vitest (CI runner), not node:test ([5076a68](https://github.com/event4u-app/agent-config/commit/5076a68353f789d35dc2f236090056aa1a958017))
1104
- * **ci:** team status description under the 200-char linter cap ([800d2f4](https://github.com/event4u-app/agent-config/commit/800d2f49fdbd980bf58333f3a80bebe0760768bb))
1105
- * **team-doctor:** expiry-aware auth signal + namespace-resistant plugin identity + gate WARN ([7698386](https://github.com/event4u-app/agent-config/commit/76983863d0a164e20ad2a588fb2e6b8517f00622))
1106
-
1107
- ### Documentation
1108
-
1109
- * **roadmap:** mark skill-quality-gates Phases 1-3 done ([b0c2d43](https://github.com/event4u-app/agent-config/commit/b0c2d43b5a409c69a991191b478c8af28e58a463))
1110
- * **changelog:** breaking-change entry for the scoped consumer default (sync/re-install + one-time KV-prefix rebuild) ([2520859](https://github.com/event4u-app/agent-config/commit/2520859aa3e1842658392596e892b82b16f2b6eb))
1111
- * **roadmaps:** add and archive road-to-batch-b-stub-consistency ([60bf22c](https://github.com/event4u-app/agent-config/commit/60bf22cbbfffdf60e431c147bb5ec2367d2b1fa1))
1112
- * **team:** quota clarity, honest wording, pack move to meta, envelope contract ([6be986e](https://github.com/event4u-app/agent-config/commit/6be986e3ed500d3165a7adec3525203a0fd5b76e))
1113
- * **bench:** cross-model-parity-count claim + benchmark section ([5ff1a4c](https://github.com/event4u-app/agent-config/commit/5ff1a4c9f90344523e8977639296e18128674abc))
1114
-
1115
- ### Refactoring
1116
-
1117
- * **rules:** P4 Batch B part 2 — domain-adoption-policy, minimal-safe-diff, context-hygiene thinned; backlink report + grandfather shrink ([c6eb79c](https://github.com/event4u-app/agent-config/commit/c6eb79cb7383a78e3b48bc46bef4ade01b7d9106))
1118
- * **rules:** P4 Batch B part 1 — active-remediation, artifact-drafting-protocol, framework-neutrality, design-fidelity thinned to stubs ([e382bec](https://github.com/event4u-app/agent-config/commit/e382bec6cc04470e19534c7521a8271c52e0f79e))
1119
-
1120
- ### Tests
1121
-
1122
- * **workspace_inbox:** refresh skill-hint snapshot for docker Known-pitfalls section ([7003101](https://github.com/event4u-app/agent-config/commit/70031011264cc6bcafc8b68a33f8b6cfafa1c7e2))
1123
- * **review:** review-mechanics eval fixtures ([3a74f94](https://github.com/event4u-app/agent-config/commit/3a74f94e729fe6c5f0476be303e11b1d91a80027))
1020
+ # Era: pre-9.2.0 — archived
1124
1021
 
1125
- ### Build
1126
-
1127
- * **skill-quality:** wire the two new lints into ci-fast ([c9e85d8](https://github.com/event4u-app/agent-config/commit/c9e85d80f31266f901189f2ee3bdc337ce030551))
1128
-
1129
- ### Chores
1130
-
1131
- * **roadmap:** tool-pitfalls plate complete — archived, index updated ([b93774c](https://github.com/event4u-app/agent-config/commit/b93774c8d130a2e0f6663b0aba24d88e679924a1))
1132
- * refresh condensation hashes ([8a0d974](https://github.com/event4u-app/agent-config/commit/8a0d97437f6257399da5f79cb218671154aa97b4))
1133
- * **roadmap:** document-skills plate complete — archived, index updated ([d96a11e](https://github.com/event4u-app/agent-config/commit/d96a11e5d69bf21c7d6d6d2148b231fb56449a7e))
1134
- * **docs:** skill counts 272 → 274, meta pack regen, condensation hashes ([4115d3a](https://github.com/event4u-app/agent-config/commit/4115d3a08041086251926303ee9e3d6c39437cd8))
1135
- * **generated:** regenerate proof.md + CAPABILITIES.yaml after +2 skills (272→274) ([51eac3e](https://github.com/event4u-app/agent-config/commit/51eac3eb885956ac4ded6f874d4a27645b1c6dc9))
1136
- * **roadmap:** prose-authenticity U1-U5 complete; U6 blocked on decision-revisit-gate ([ebff2d8](https://github.com/event4u-app/agent-config/commit/ebff2d815630ea92a69bd341a21f73aa39fc66ac))
1137
- * **roadmap:** prelaunch-diagnostics plate complete — archived, index updated ([6ca449d](https://github.com/event4u-app/agent-config/commit/6ca449de2e3b4c8c73ef36ca509a9956d57ac087))
1138
- * **roadmap:** skill-quality-gates plate complete — Phase 4 flipped, archived, index updated ([2d89dd3](https://github.com/event4u-app/agent-config/commit/2d89dd3e2c514f3add37176ee86e84e2b218fbb4))
1139
- * **sync:** regenerate meta domain README after condense-memory description update ([d6f8557](https://github.com/event4u-app/agent-config/commit/d6f85574627e124b6b9af8e2b2e3cc2b2731a122))
1140
- * **condense:** re-mark upstream-contribute after skill-writing dep-fold ([6e71ef9](https://github.com/event4u-app/agent-config/commit/6e71ef95daf695b23de2da3fd30c4f840ca1a2b7))
1141
- * **roadmap:** authoring-rigor U2+U4 closed ([b744092](https://github.com/event4u-app/agent-config/commit/b74409267a40e458805a701cc44678bf679041df))
1142
- * **sync:** dist twin of code-review evals after U2 golden pair ([10d67ba](https://github.com/event4u-app/agent-config/commit/10d67ba755ef75ecc2520e2ff242d00a9c8e10fa))
1143
- * **roadmap:** reliability-measurement plate complete — archived, index updated ([5662e80](https://github.com/event4u-app/agent-config/commit/5662e80753a620be34c95680e1d7e4cec56dd0d4))
1144
- * **roadmap:** reliability-measurement U1/U1a/U3 closed ([dc16eaa](https://github.com/event4u-app/agent-config/commit/dc16eaa6e1d19c105b36001f09979e8a08cb8466))
1145
- * **roadmap:** request-scoped-rule-load Phase-1 human gate closed - only trigger-gated Phase-4 park remains ([0f46997](https://github.com/event4u-app/agent-config/commit/0f46997c9829a6d9c3f265ed4d744c3588e7f7be))
1146
- * **counts:** guideline badge + table 91 -> 98 after Batch B guideline homes ([ecad776](https://github.com/event4u-app/agent-config/commit/ecad7764848d8a0309bae2a56c11b3aafd048efc))
1147
- * **roadmap:** complete + archive review-mechanics; refresh hashes ([9ede176](https://github.com/event4u-app/agent-config/commit/9ede1767c451446ec485198da25247821d56b032))
1148
- * **roadmap:** request-scoped-rule-load Phase 5 closed — Batch B done, Batch C skipped-by-tradeoff, backlink report current ([37e73f8](https://github.com/event4u-app/agent-config/commit/37e73f89cd30dc7127293de51cc583ed0118d7b1))
1149
- * **roadmap:** truth-sync the inherited golden-set blocker in request-scoped-rule-load ([2e13966](https://github.com/event4u-app/agent-config/commit/2e1396657d2e9570bb6eebbb02f51413f1b5fad2))
1150
- * **roadmap:** park road-to-token-saving in later/ — all open work operator-gated, judge blocker resolved negative ([51a56bd](https://github.com/event4u-app/agent-config/commit/51a56bdd0fe6b6203bde83792892a88f25a5c8c4))
1151
- * **proof:** regenerate docs/proof.md after claims-ledger update ([63421da](https://github.com/event4u-app/agent-config/commit/63421da76566e2ca38e1f72025c68e49646ec404))
1152
- * **bench:** codex-host lift replication HONEST NULL — discipline_profile default stays; measurement-unblock roadmap complete + archived ([5e11ce0](https://github.com/event4u-app/agent-config/commit/5e11ce09f7846f4875e032db1c6dc236f9a229cb))
1153
- * **pack:** register security-maturity-assessment in engineering-base manifest ([ee89252](https://github.com/event4u-app/agent-config/commit/ee89252794e4979a002de7e2dd682ee90c75d533))
1154
- * sync generated count surfaces + dependent command hashes ([44e064a](https://github.com/event4u-app/agent-config/commit/44e064abecd90d924432fcef958477964ed13fa7))
1155
- * **sync:** meta pack manifest + index + envelope dist projection ([5473ca0](https://github.com/event4u-app/agent-config/commit/5473ca0e9e6446bfff475db8668ff334b9f2295d))
1156
- * **roadmaps:** feedback-8.11-5 executed and archived; team-mode Phases 3+4 complete ([487cbe6](https://github.com/event4u-app/agent-config/commit/487cbe61a2fa52e20c21db66aa9b6a4650aac60b))
1157
- * **roadmap:** regenerate progress dashboard ([d085f71](https://github.com/event4u-app/agent-config/commit/d085f716c25c06fa2edf6561c0c66ba9204acdc9))
1158
- * **roadmap:** archive completed ecosystem-harvest bug-security-rigor ([25982c5](https://github.com/event4u-app/agent-config/commit/25982c55aefd3a8c2b8715f2ac05112e52849bb4))
1159
- * **roadmap:** measurement-unblock Phase 3 complete (build decision + parity pass + armed gate) ([9c0f051](https://github.com/event4u-app/agent-config/commit/9c0f051c91b6a712884fb1408e41c339fc42462f))
1160
-
1161
- Tests: 7716 (+158 since 8.13.0)
1162
-
1163
- ## [8.13.0](https://github.com/event4u-app/agent-config/compare/8.12.0...8.13.0) (2026-07-12)
1164
-
1165
- ### Features
1166
-
1167
- * **backlinks:** orphan-stub correctness check + fan-out info + gated hard-gate list ([fe88ff5](https://github.com/event4u-app/agent-config/commit/fe88ff5c42bd08338c0ab9c83f3e1fdf0f6f7d1c))
1168
- * **team-doctor:** 'team' health check + suppressible setup hint ([22a5c14](https://github.com/event4u-app/agent-config/commit/22a5c141ddaa47994f7d9c150dafa36b0fcb38a8))
1169
- * **team-commands:** /team family — thin fail-closed delegations under ai_team governance ([958c491](https://github.com/event4u-app/agent-config/commit/958c4910bf2276449a99ef2462e78caa718148a5))
1170
- * **team-config:** ai_team contract — default-off block, fail-closed loader, shared quota ([f45c988](https://github.com/event4u-app/agent-config/commit/f45c98860a63d2c8c572a9e121ecaf05d4c34aa9))
1171
- * **pr-create:** harden the freshness gate — regenerate-on-conflict + update freshness ([83104e0](https://github.com/event4u-app/agent-config/commit/83104e0a3a8666d8eb47044c9b9e028a1e60c913))
1172
-
1173
- ### Bug Fixes
1174
-
1175
- * **rules:** restore the concrete verification-tool mapping in the improve-before-implement stub ([a54d89f](https://github.com/event4u-app/agent-config/commit/a54d89f852120e639f25aa059e33baf672255f66))
1176
-
1177
- ### Documentation
1178
-
1179
- * **round4:** strict:false operating conditions + Batch B/C stub-necessity pre-questions ([7961ba4](https://github.com/event4u-app/agent-config/commit/7961ba4dda15d33fe4a8be6a92d4e71b7a4bedb6))
1180
- * **team:** getting-started section — depth complement to the council, no value claims ([6c64fc3](https://github.com/event4u-app/agent-config/commit/6c64fc3acade96c3d1eff3c610677be5a852f18e))
1181
- * **roadmap:** measurement-unblock Phase 2 — codex auth+smoke verified, paired run in flight ([489bdc1](https://github.com/event4u-app/agent-config/commit/489bdc168565c6b27eceeaca8384751e089378ef))
1182
-
1183
- ### Chores
1022
+ > All entries before `9.2.0` live in
1023
+ > [`docs/archive/CHANGELOG-pre-9.2.0.md`](docs/archive/CHANGELOG-pre-9.2.0.md).
1024
+ > The archive is read-only; git tags remain the canonical
1025
+ > source for what shipped. Splitting them out of the main file
1026
+ > keeps the active era under the 250-line drift cap enforced by
1027
+ > `tests/test_changelog_eras.py`.
1184
1028
 
1185
- * **counts:** hero badge + browse line 178 -> 183 after the 8.12.0 release merge ([ef396f5](https://github.com/event4u-app/agent-config/commit/ef396f55476ccfed53387a6fbe49201be8e312c0))
1186
- * **counts:** featured-skills command count 178 -> 183 (update_counts anchor) ([13cb8de](https://github.com/event4u-app/agent-config/commit/13cb8de13373e66c26a21689b2a86427ee9ac043))
1187
- * **roadmaps:** feedback-8.11-4 executed and archived; team-mode P1+P2 complete ([dd44aa6](https://github.com/event4u-app/agent-config/commit/dd44aa69fea35d95fadc00936c3ec23caaeb2c1b))
1029
+ # Era: 9.2.x — current
1188
1030
 
1189
- Tests: 7558 (+49 since 8.12.0)
1031
+ > Started at `9.2.0`. Full entries live inline below.
1032
+ > The drift test caps this era at 250 lines of entry body; growth past
1033
+ > that forces a new era split (`# Era: 9.3.x`, etc.) — see
1034
+ > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
1190
1035
 
1191
- ## [8.12.0](https://github.com/event4u-app/agent-config/compare/8.11.0...8.12.0) (2026-07-12)
1036
+ ## [9.2.0](https://github.com/event4u-app/agent-config/compare/9.1.0...9.2.0) (2026-07-14)
1192
1037
 
1193
1038
  ### Features
1194
1039
 
1195
- * **rules:** P4 migration Batch A — 9 rule bodies to their existing homes (−51.7% stub bytes) ([94dc19c](https://github.com/event4u-app/agent-config/commit/94dc19cac62ff21449afd5a373c1363ee3d6215c))
1196
- * **explain-run:** plain-language Summary section ([257d8fc](https://github.com/event4u-app/agent-config/commit/257d8fc4d2ef69e9696f9a143d653a1a0a771e2c))
1197
- * **complexity:** report v2 — proxy honesty, coupling metric, soft-ratchet baseline ([8328bae](https://github.com/event4u-app/agent-config/commit/8328bae0b791da4215fd704a90734123df0f6b13))
1198
- * **bench:** live retrieval benchmark executed — decisive PASS ([25d9f03](https://github.com/event4u-app/agent-config/commit/25d9f03756e33870fbc507bc1bc964c5b6c83403))
1199
- * **bench:** persona-placebo benchmark — executed, HONEST NULL (identity adds nothing) ([000c3e7](https://github.com/event4u-app/agent-config/commit/000c3e77081d7aa39e3d617f98ba67ef27121218))
1200
- * **reports:** complexity report, explain-run v0, rule-backlinks — all report-only with kill criteria ([e718f13](https://github.com/event4u-app/agent-config/commit/e718f1396562e0cb94fab344b75332a73a34ac35))
1201
- * **knowledge:** per-card sensitivity classes, promotion gate, revocation trail (ADR-121) ([a14b1ad](https://github.com/event4u-app/agent-config/commit/a14b1ad54b750d86ff288cd96ad9e76fe58fcdc5))
1202
- * **consumer-matrix:** live hook-lifecycle leg + dist import-graph completeness ([1f1d9e1](https://github.com/event4u-app/agent-config/commit/1f1d9e1f8f8186de51071f47ca20ed649fad01f3))
1203
- * **bench:** length-neutral judge rerun — executed, SECOND INCONCLUSIVE (gate closed-by-diagnosis) ([66ba0a3](https://github.com/event4u-app/agent-config/commit/66ba0a3e7a995fb8f7db1b795d33682328dc8596))
1204
- * **council:** restate pass — the last wiring item (pre-round-1, transport-safe) ([4df6069](https://github.com/event4u-app/agent-config/commit/4df6069e127a0467f5a86aea57ea4c90929746a1))
1205
- * **council:** stance-line repair call in consult (bounded, transport-gated) ([91fd10e](https://github.com/event4u-app/agent-config/commit/91fd10e25429d7d35f460ba8560c76565007b0c6))
1206
- * **council:** debate-gate repair dispatch in run_debate (bounded, policy-gated) ([e7f6380](https://github.com/event4u-app/agent-config/commit/e7f6380639835d61c72b4b89cb79d77a5c90cb9c))
1040
+ * **rules:** cross-source-consistency — detect discrepancies, ask before guessing ([63b8049](https://github.com/event4u-app/agent-config/commit/63b804981e70045f138af4bd4a5546b62b135d24))
1041
+ * **settings:** add consistency.cross_source toggle (default on) ([2f41bbb](https://github.com/event4u-app/agent-config/commit/2f41bbbf52737f12401eb7ccfed104d3b4a9b4a6))
1042
+ * **settings:** opt-in subagents.adversarial_council + verify-budget escalation ([fa68dbc](https://github.com/event4u-app/agent-config/commit/fa68dbc514a6cc2def90f7f4b8b031e5c872747f))
1043
+ * **subagent:** Mode 9 adversarial-verification-council + skeptic prompt ([26501a1](https://github.com/event4u-app/agent-config/commit/26501a18a1ab53d3eb54a06230086e0c4508bfee))
1044
+ * **subagent:** adversarial-findings schema + deterministic reconciliation core ([12c64f2](https://github.com/event4u-app/agent-config/commit/12c64f26bcc92d4472935badc41b64fe563f98b2))
1207
1045
 
1208
1046
  ### Bug Fixes
1209
1047
 
1210
- * **ci:** roadmap-ci-steps-mechanics joins the task-invocation skip class ([659d775](https://github.com/event4u-app/agent-config/commit/659d775099bd67168beac8a5742a4efbe773b690))
1211
- * **ci:** skill description under the 200-char linter cap + modernize a migrated legacy path ([893ce69](https://github.com/event4u-app/agent-config/commit/893ce6922df759ac2432b221e28951a292233a47))
1212
- * **proof:** move the honest-null entry into the build_proof generator ([5c1a12c](https://github.com/event4u-app/agent-config/commit/5c1a12c152d35fd320e40f0173b27f842fb39903))
1213
- * **ci:** regenerate proof.md post-merge + de-literalize example imports ([6ff330d](https://github.com/event4u-app/agent-config/commit/6ff330d5a84c4682fae63eb2331ec3f645473cb4))
1214
- * **claims:** thin-projection honesty + pre-register the council-vs-solo baseline ([6aee669](https://github.com/event4u-app/agent-config/commit/6aee669e311261121f582793e47698e029b0c8ae))
1215
- * **identity:** resolve the placeholder git identity and guard against recurrence ([b17a801](https://github.com/event4u-app/agent-config/commit/b17a801dd16ddda9c3bcfd6b269dc65aff5a5e41))
1216
- * **counts:** regenerate CAPABILITIES.yaml and close the structured-surface drift gap ([55aafb5](https://github.com/event4u-app/agent-config/commit/55aafb58b7f0e775b73a100d0b83f55b13defea0))
1048
+ * **proof:** regenerate docs/proof.md after the pre-registered claim ([a24fb54](https://github.com/event4u-app/agent-config/commit/a24fb54574379aaf90061beee2df4d21e3d55a9a))
1217
1049
 
1218
1050
  ### Documentation
1219
1051
 
1220
- * **posture:** knowledge scaling reality + local_auto_run as deliberate design ([ad9f43b](https://github.com/event4u-app/agent-config/commit/ad9f43baaa52cea533f6e1fd91ca012d95d35e9e))
1221
- * **maintainers:** one-page system map + prepared branch protection ([efe63d0](https://github.com/event4u-app/agent-config/commit/efe63d006ff7ef97b1f4e201c29e53824ef3af95))
1222
- * **claims:** pre-register the utilization-window decision criteria ([4667adf](https://github.com/event4u-app/agent-config/commit/4667adf085af9d2e178932b0a3fc9e2d674d6d2c))
1223
- * **roadmap:** complete + archive road-to-opt-retrieval-and-memory ([cfc8657](https://github.com/event4u-app/agent-config/commit/cfc86578b7033945d227db80d98821aef33b8917))
1224
- * **roadmap:** complete + archive road-to-opt-council-deliberation ([8777a8e](https://github.com/event4u-app/agent-config/commit/8777a8ebf90c2fc32362cfcbe1e58f8bee8f56d7))
1225
- * **proof:** persona-identity-placebo-null — backed claim + honest-null story ([0d0de13](https://github.com/event4u-app/agent-config/commit/0d0de1387b6cd61a0165ec26a1db695172dcc2bd))
1226
- * **rules:** rule-body migration inventory + P4 batches into request-scoped-rule-load ([c5abc40](https://github.com/event4u-app/agent-config/commit/c5abc40e4edc09d92681afbeae5f837f63784e29))
1227
- * **bench:** record the closed-by-diagnosis disposition ([e02f7d7](https://github.com/event4u-app/agent-config/commit/e02f7d765d1aa2d61ae7bd1e879b27a1711fe595))
1228
- * **roadmap:** flip the restate step + the confirmed harness prerequisite ([6415b3e](https://github.com/event4u-app/agent-config/commit/6415b3e672a659e8453159ca7e421d2ce7fdb9da))
1229
- * **roadmap:** flip the stance-repair + chairman-ADR steps ([c1278a0](https://github.com/event4u-app/agent-config/commit/c1278a092027bb1659ba37d3281b9692a2c4066e))
1230
- * **adr:** ADR-120 — council chairman mode supersedes always-host synthesis ([9e593f4](https://github.com/event4u-app/agent-config/commit/9e593f42bcd5ff844332eb7eca4fbb545be7d8fd))
1231
- * **roadmap:** flip the debate-gate repair-dispatch step ([d4bba6b](https://github.com/event4u-app/agent-config/commit/d4bba6b31c1ceca01480f66ea80174a27887ab88))
1052
+ * **adr:** ADR-122 + pre-registered finding-coverage claim + eval design ([0123cd2](https://github.com/event4u-app/agent-config/commit/0123cd298d0587fd1eb98f82c7e40f41e912ee05))
1232
1053
 
1233
1054
  ### Chores
1234
1055
 
1235
- * **sync:** propagate the shortened skill description into the generated domain README ([ec2a931](https://github.com/event4u-app/agent-config/commit/ec2a931e76b148c0c653dad3353f6f11590edf33))
1236
- * **roadmaps:** feedback-8.11-2 disposition executed and archived ([0037d52](https://github.com/event4u-app/agent-config/commit/0037d521c62699d3757b5e975dafbec54beab1b4))
1237
- * **condense:** record knowledge-card template condensation hash ([7ce68cc](https://github.com/event4u-app/agent-config/commit/7ce68cc38d976a4e10666bdf006db4059d788305))
1238
- * **roadmaps:** feedback-8.11 disposition executed and archived ([960179f](https://github.com/event4u-app/agent-config/commit/960179fa08e343a8e1bb1856bce76e2025abe8d3))
1056
+ * regenerate derived artefacts for the new rule ([5268766](https://github.com/event4u-app/agent-config/commit/5268766dd6aca34efbac77660ecf3fa9d1553814))
1239
1057
 
1240
- Tests: 7509 (+130 since 8.11.0)
1058
+ Tests: 7764 (+27 since 9.1.0)
1241
1059
 
1242
1060
  # Era: pre-4.0.0 — archived
1243
1061
 
package/MIGRATION.md CHANGED
@@ -16,6 +16,20 @@ firing (now from `settings.json`), skills/commands stop listing twice, and
16
16
  `claude-plugin` no longer reporting a duplicate surface). Augment CLI and
17
17
  Copilot CLI plugins are unaffected.
18
18
 
19
+ # Migrating to 9.0
20
+
21
+ > Consumer rule projection is **scoped by default** in 9.0. Full
22
+ > breaking-change detail: [`CHANGELOG.md` § 9.0.0](CHANGELOG.md).
23
+
24
+ Fresh installs now ship `projection.rule_workspaces` pre-filled with every
25
+ consumer workspace, so the 16 exclusively-maintainer specification rules no
26
+ longer arrive: **103 → 88 rules** per install. All domain safety floors,
27
+ domain rules, and kernel rules keep shipping.
28
+
29
+ Existing installs are unchanged until you run `agent-config sync` /
30
+ re-install (settings sync preserves your current value). To stay on the
31
+ legacy every-rule behaviour, set `projection.rule_workspaces: []`.
32
+
19
33
  # Migrating to 6.0
20
34
 
21
35
  > Upgrading an existing install to the **6.0 experience-first** layout.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-274-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-104-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-183-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-98-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
7
+ [![Skills](https://img.shields.io/badge/Skills-275-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-105-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-184-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-100-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
8
 
9
9
  > **Choose your experience — developer · founder · content · agency · finance · ops. Add packs. Get a focused command set, not a 500-artefact dump.** Bring your own AI provider.
10
10
 
@@ -178,7 +178,7 @@ npx -y @event4u/agent-config init
178
178
 
179
179
  **Verify hook coverage:** `npx @event4u/agent-config hooks:status` prints the per-platform matrix (`--strict` for CI, `--format json` for tooling).
180
180
 
181
- > **Scope (v2.5+):** `init` writes **global** only — `~/.event4u/agent-config/`, `~/.claude/`, `~/.cursor/`, …. The project tree gets `agents/overrides/` + `agents/.event4u-bridge.yml`. `--project` is maintainer-only behind `AGENT_CONFIG_DEV_MODE=1` ([ADR-020](docs/decisions/ADR-020-global-only-consumer-scope.md), [dev-mode](docs/maintainers/dev-mode.md)).
181
+ > **Scope (v2.5+):** `init` writes **global** only — `~/.event4u/agent-config/`, `~/.claude/`, `~/.cursor/`, …. The project tree gets `agents/overrides/` only (the bridge marker was retired — ADR-020 amendment 2026-07-13; the global root resolves from `~/.event4u/agent-config`). `--project` is maintainer-only behind `AGENT_CONFIG_DEV_MODE=1` ([ADR-020](docs/decisions/ADR-020-global-only-consumer-scope.md), [dev-mode](docs/maintainers/dev-mode.md)).
182
182
 
183
183
  Migrating from a v1.x install? `npx @event4u/agent-config migrate` — full notes in [`docs/migration/v1-to-v2.md`](docs/migration/v1-to-v2.md).
184
184
 
@@ -0,0 +1,88 @@
1
+ ---
2
+ model_tier: inherit
3
+ name: explain-run
4
+ pack: meta
5
+ tier: 2
6
+ visibility: internal
7
+ description: "Read-only 'why did that happen' run report — resolved rule set, rules fired, artefact engagement, subagent dispatches, hook/loop/freshness state — even when the user just says 'explain the last run'."
8
+ argument-hint: "[--task <id>] [--since <ref>]"
9
+ skills: [agent-docs-writing]
10
+ suggestion:
11
+ eligible: false
12
+ rationale: "Package-internal maintainer diagnostic — only the event4u/agent-config repo runs this."
13
+ workspaces:
14
+ - agent-config-maintainer
15
+ packs:
16
+ - meta
17
+ ---
18
+
19
+ # explain-run
20
+
21
+ Thin runner for the read-only explainability engine `explain_run`
22
+ (`src/scripts/explain_run.ts`). Renders one Markdown
23
+ report answering **"why did the agent do that this run?"** entirely from
24
+ artefacts other parts of the suite already write — no new state, no capture,
25
+ no daemon.
26
+
27
+ The report covers: the resolved rule set (kernel vs trigger-routed, from
28
+ `dist/router.json`), rules the audit log actually observed firing, artefact
29
+ engagement (consulted vs applied), subagent dispatches (mode / tiers / token
30
+ deltas), a hook / loop / freshness state snapshot, and a parked list of
31
+ "why" questions this v0 cannot answer yet (surfaced, never silently omitted).
32
+
33
+ ## Instructions
34
+
35
+ ### 1. Resolve the window
36
+
37
+ Both arguments are optional and narrow the report:
38
+
39
+ - `--task <id>` — restrict to one task id seen in the audit log.
40
+ - `--since <ref>` — an ISO-8601 timestamp / date cutoff (e.g. `2026-07-01`).
41
+
42
+ With neither, the engine reports over all available artefacts. Pass through
43
+ exactly what the user gave — do not invent a task id or a date.
44
+
45
+ ### 2. Run the engine
46
+
47
+ ```bash
48
+ ./scripts-run src/scripts/explain_run [--task <id>] [--since <ISO-8601>]
49
+ ```
50
+
51
+ Exit codes:
52
+
53
+ - `0` → report rendered to stdout; continue to step 3.
54
+ - `2` → bad argument (unknown flag or unparsable `--since`); surface stderr
55
+ and stop.
56
+
57
+ The engine prints an honest `no data — <source> absent or empty` for any
58
+ section whose source file is missing — that is expected output, not an error.
59
+
60
+ ### 3. Surface the report
61
+
62
+ Show the engine's Markdown output. Do not re-summarize or re-order it — the
63
+ report already opens with a plain-language `## Summary`. If the user wants the
64
+ report written to a file, add `--output <path>` and confirm the write.
65
+
66
+ ## Rules
67
+
68
+ - **Read-only** — this command only reads on-disk artefacts. It never edits,
69
+ captures, or writes state (aside from an explicit `--output` file).
70
+ - **Do NOT commit or push** — the working tree is left to the user.
71
+ - **Never edit generated trees** — per [`source-of-truth`](../rules/source-of-truth.md),
72
+ the engine lives in `src/scripts/`; never hand-edit `dist/agent-src/` or any
73
+ tool projection.
74
+ - **Honest nulls, not invented rows** — the engine's `no data` lines are
75
+ correct output; do not fabricate rule firings or dispatches to fill them.
76
+
77
+ ## When NOT to use
78
+
79
+ - To *change* behaviour — this only explains it. Rule / routing edits go
80
+ through the normal source-of-truth flow.
81
+ - Kill criterion: the engine self-documents a delete-if-unused-after-3-releases
82
+ criterion; if this command sees zero use, retire it with the engine.
83
+
84
+ ## See also
85
+
86
+ - `explain_run` (`src/scripts/explain_run.ts`) — the read-only engine this wraps.
87
+ - `/agent-status` — live session snapshot (this is the retrospective, artefact-sourced view).
88
+ - [`source-of-truth`](../rules/source-of-truth.md) — edit `src/`, never generated trees.
@@ -131,6 +131,8 @@ On exit `1`, look at the first line after `[halt] outcome=… step=…`:
131
131
  options verbatim, wait for the user, write their answer back onto the
132
132
  matching state slice, then re-run the engine. Never guess.
133
133
 
134
+ A **cross-source discrepancy** discovered while planning or applying — ticket text contradicting an attached mockup, a spec silent on a clearly-needed behavior, or a spec-vs-codebase conflict (per [`cross-source-consistency`](../rules/cross-source-consistency.md), gated by `consistency.cross_source`) — is a blocking user question, not a silent resolution: surface it as the `questions[0]` halt and wait, never expand scope on a plausible inference.
135
+
134
136
  ### 4. Directive mapping
135
137
 
136
138
  When `questions[0]` is `@agent-directive: <verb> [key=value …]`, dispatch:
@@ -95,34 +95,164 @@ That's 6 round-trips for what should be 2.
95
95
 
96
96
  ### 4. Build the PR body
97
97
 
98
+ #### 4.0 Resolve the detail level
99
+
100
+ Read `commands.create_pr.detail_level` from `.agent-settings.yml` (default
101
+ `min` when unset). This tier governs **only the explanatory depth of the
102
+ Description section** — never which template sections exist, and never
103
+ whether a critical callout appears (see 4.1 critical-info-always).
104
+
105
+ | Tier | Description section content |
106
+ |---|---|
107
+ | `min` (default) | Title-level summary in 2-3 sentences: *what* changed, *why*, and the user/system impact. No per-file walk, no restating commit subjects, no "how to test". |
108
+ | `med` | `min` + grouped logical changes as 3-5 bullets (by concern, not by file) + a one-line tests note (added / none / coverage). |
109
+ | `max` | `med` + how-to-test steps + edge cases / trade-offs + one "reviewer guidance" line (what to focus on). ≈ the legacy output. |
110
+
111
+ `min` is the default because this is a token-cost optimization: a shorter
112
+ description costs fewer output tokens on every PR. Keep `min` genuinely
113
+ minimal — but never at the expense of the critical-info block below.
114
+
115
+ #### 4.1 Critical-info-always — tier-independent MUST
116
+
117
+ ```
118
+ CRITICAL INFORMATION APPEARS AT EVERY TIER, INCLUDING min.
119
+ THE TIER GOVERNS EXPLANATORY DEPTH, NEVER WHETHER A CRITICAL CALLOUT APPEARS.
120
+ DROPPING A BREAKING-CHANGE / MIGRATION / SECURITY / ROLLBACK CALLOUT AT min
121
+ IS A P0 DEFECT, NOT A TOKEN SAVING.
122
+ ```
123
+
124
+ If the diff shows any of the following, a one-line callout for it is included
125
+ in the Description **regardless of `detail_level`** (grounded in the diff, not
126
+ guessed):
127
+
128
+ - **Breaking change** — API contract change (new/removed/renamed field, changed
129
+ endpoint or response shape), CLI-arg change, changed env var, or a renamed
130
+ route the frontend depends on. Prefix `⚠️ Breaking:`.
131
+ - **Migration required** — DB migration, config migration, or a deployment step.
132
+ Prefix `Migration:`.
133
+ - **Security implication** — new permission/scope, auth change, or data-exposure
134
+ surface. Prefix `🔒 Security:`.
135
+ - **Non-trivial rollback** — when reverting is not a plain `git revert`. Prefix
136
+ `Rollback:`.
137
+
138
+ None present → omit the block entirely (do not emit empty "No breaking
139
+ changes" filler at `min`).
140
+
141
+ #### 4.2 Fill the template sections
142
+
98
143
  **ALWAYS** use the PR template (`.github/pull_request_template.md`). Fill in its sections:
99
144
 
100
145
  - **Jira badge**: Replace `{TICKET-NUMBER}` with the actual ticket ID.
101
- - **Description**: Summarize the changes in 2-5 sentences. Explain *what* changed and *why*.
102
- Use the Jira ticket description and commit messages as input.
146
+ - **Description**: Write it to the resolved tier (4.0) with the critical-info
147
+ block (4.1) always present. Use the Jira ticket description + commit messages
148
+ as input.
103
149
  - **Type of change**: Check the appropriate checkbox(es) based on the changes.
104
150
  - **Checklist**: Leave as-is (the developer fills this in).
105
151
  - **Links**: Replace `{TICKET-NUMBER}` with the actual ticket ID.
106
- - **Screenshots**: Leave as `...` unless the user provides screenshots.
152
+ - **Screenshots**: Handled by Step 4.4 (default: leave the placeholder / `...`).
107
153
 
108
- If no PR template exists, use this structure:
154
+ If no PR template exists, use this structure — including only the sections the
155
+ tier calls for (at `min`, the `## Changes` bullets collapse to the 2-3 sentence
156
+ summary and `## How to test` is omitted):
109
157
 
110
158
  ```markdown
111
159
  ## Jira
112
160
  [{TICKET-ID}]({JIRA_BASE_URL}/browse/{TICKET-ID})
113
161
 
114
- ## Changes
115
- - Bullet list of what was changed and why
162
+ ## Description
163
+ - 2-3 sentence what/why/impact (min) — grouped bullets (med/max)
164
+ - Critical-info callouts (any tier, only if present)
116
165
 
117
166
  ### Migrations
118
167
  - List new/changed migrations (if any)
119
168
 
120
169
  ### Tests
121
- - List new/changed tests (if any)
170
+ - List new/changed tests (med/max)
122
171
 
123
172
  ## How to test
124
- - Steps to verify the changes
173
+ - Steps to verify the changes (max)
174
+ ```
175
+
176
+ #### 4.3 API response examples (evidence-grounded)
177
+
178
+ Read `commands.create_pr.api_examples` (default `true`). When `true` **and**
179
+ the diff touches an API endpoint, add a fenced request/response example under
180
+ the Description.
181
+
182
+ **Detect an API-endpoint change** (fail-open — no false enrichment when
183
+ ambiguous): a changed file matches `commands.create_pr.api_paths` (if set), or
184
+ the light heuristic — a route file (`routes/`, `**/api/**`, `*Controller*`,
185
+ resource/serializer classes) whose diff adds or changes an endpoint or its
186
+ request/response shape. No confident match → skip silently.
187
+
188
+ **Ground the example in a real source — never invent one:**
189
+
190
+ ```
191
+ NEVER FABRICATE A JSON EXAMPLE. AN INVENTED CONTRACT MISLEADS REVIEWERS
192
+ AND IS WORSE THAN NONE. EMIT A JSON BLOCK ONLY FROM A REAL SOURCE.
193
+ ```
194
+
195
+ Grounding sources, in priority order: the response DTO / API-resource /
196
+ serializer class in the diff · an OpenAPI/JSON-schema in the repo · a test
197
+ fixture or assertion exercising the endpoint · the actual output of a probe you
198
+ ran this session (`curl` / test client). If **none** exists, emit a one-line
199
+ pointer instead — `API contract changed — see \`<file>\`` — never a guessed
200
+ example. This is [`senior-engineering-discipline`](../rules/senior-engineering-discipline.md)
201
+ (never invent an API) applied to the description surface.
202
+
203
+ Format when grounded:
204
+
205
+ ~~~markdown
206
+ ### API example (`POST /api/...`)
207
+ Request:
208
+ ```json
209
+ { ...grounded... }
210
+ ```
211
+ Response `201`:
212
+ ```json
213
+ { ...grounded... }
125
214
  ```
215
+ ~~~
216
+
217
+ `api_examples: false` → skip this step entirely.
218
+
219
+ #### 4.4 Screenshots for frontend changes (capability-gated)
220
+
221
+ Read `commands.create_pr.screenshots` (default `false`). `false` → skip this
222
+ step entirely; leave the template Screenshots placeholder as-is.
223
+
224
+ When `true`, this is a **capability-gated contract, never a runtime
225
+ orchestrator** — the package ships instructions, the host provides the tools:
226
+
227
+ 1. **Frontend-change gate.** Only proceed if the diff touches a frontend
228
+ surface — a changed file matches `commands.create_pr.ui_paths` (if set), or
229
+ the light heuristic (`.vue` / `.tsx` / `.jsx` / `.blade.php` / `.svelte`,
230
+ component/view/page/template dirs, CSS/Tailwind). No match → skip silently.
231
+ 2. **Capability gate — explicit, never silent.** Screenshots need host
232
+ browser/preview tooling (a Playwright/browser MCP **and** a reachable dev-server
233
+ or preview URL). There is no capability flag to read, so probe cheaply. If the
234
+ tooling or a running preview is **absent**:
235
+ - Leave the template Screenshots placeholder untouched, **and**
236
+ - Emit ONE line in the chat reply: `Screenshots requested (screenshots: true)
237
+ but no browser/preview tooling was reachable — skipped.`
238
+ - **Never** fail, block, or delay PR creation over this.
239
+ 3. **Capture (when capable).** Capture the current (head) state of each changed
240
+ surface. Before/after (base vs head) with changed-region highlighting is
241
+ **best-effort only** — a base checkout mid-PR is fragile and expensive;
242
+ attempt it only if cheap and safe, otherwise after-only. One screenshot per
243
+ changed surface, each with a one-line caption.
244
+ 4. **Embedding — honest limits.** The `github-api pulls` write path cannot
245
+ upload image bytes and GitHub markdown does not render `data:` URIs, so an
246
+ agent cannot inline captured bytes into the body via the API. Use, in order:
247
+ (a) a host image-upload capability if one exists (embed the returned URL);
248
+ (b) otherwise save the screenshots to a local path, reference them in the
249
+ Screenshots section, and tell the user to drag them into the PR in the
250
+ GitHub UI. **Never claim an embed that did not happen**
251
+ ([`direct-answers`](../rules/direct-answers.md) Iron Law 2).
252
+
253
+ Limitations (state them so expectations are set): default off; depends on host
254
+ browser tooling + a running preview; before/after + highlighting is best-effort;
255
+ byte-embedding into the PR body is not possible via the API.
126
256
 
127
257
  ### 5. Present as copyable block
128
258