@event4u/agent-config 14.6.0 → 14.8.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 (258) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +255 -145
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/inbox.md +264 -10
  5. package/dist/agent-src/commands/analyze.md +1 -1
  6. package/dist/agent-src/commands/evals/git-pr-merge.json +13 -0
  7. package/dist/agent-src/commands/evals/roadmap.json +17 -1
  8. package/dist/agent-src/commands/pr/create.md +14 -2
  9. package/dist/agent-src/commands/pr/merge.md +379 -0
  10. package/dist/agent-src/commands/roadmap/process-full.md +272 -32
  11. package/dist/agent-src/commands/roadmap.md +1 -1
  12. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +46 -36
  13. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +37 -2
  14. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +95 -2
  15. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +289 -106
  16. package/dist/agent-src/rules/artifact-drafting-protocol.md +5 -1
  17. package/dist/agent-src/rules/context-hygiene.md +2 -0
  18. package/dist/agent-src/rules/decision-revisit-gate.md +67 -32
  19. package/dist/agent-src/rules/fix-what-you-see.md +108 -0
  20. package/dist/agent-src/rules/no-roadmap-references.md +0 -5
  21. package/dist/agent-src/rules/recurring-criticism.md +110 -0
  22. package/dist/agent-src/rules/roadmap-progress-sync.md +20 -1
  23. package/dist/agent-src/rules/rule-type-governance.md +0 -2
  24. package/dist/agent-src/rules/self-repair-loop.md +17 -0
  25. package/dist/agent-src/rules/skill-quality.md +0 -2
  26. package/dist/agent-src/rules/source-confidentiality.md +37 -7
  27. package/dist/agent-src/scripts/archival_sweep.ts +117 -0
  28. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
  29. package/dist/agent-src/scripts/dashboard_mode.ts +212 -0
  30. package/dist/agent-src/scripts/gate_budget.ts +282 -0
  31. package/dist/agent-src/scripts/gate_execute.ts +72 -31
  32. package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
  33. package/dist/agent-src/scripts/update_roadmap_progress.ts +296 -53
  34. package/dist/agent-src/skills/adr-create/SKILL.md +124 -5
  35. package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
  36. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
  37. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
  38. package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
  39. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
  40. package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
  41. package/dist/agent-src/skills/decision-record/SKILL.md +61 -3
  42. package/dist/agent-src/skills/decision-review/SKILL.md +65 -0
  43. package/dist/agent-src/skills/merge-conflicts/SKILL.md +26 -0
  44. package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
  45. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
  46. package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
  47. package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
  48. package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
  49. package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
  50. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
  51. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
  52. package/dist/agent-src/skills/security/SKILL.md +8 -0
  53. package/dist/agent-src/skills/security-audit/SKILL.md +12 -1
  54. package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
  55. package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
  56. package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
  57. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
  58. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  59. package/dist/agent-src/templates/roadmaps.md +65 -4
  60. package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  61. package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  62. package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  63. package/dist/cli/registry.js +2 -1
  64. package/dist/cli/registry.js.map +1 -1
  65. package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
  66. package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-7PRE6ZV2.js} +338 -0
  67. package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
  68. package/dist/cli-delegate/chunk-E4XIZDIB.js +402 -0
  69. package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-EEJUMCDZ.js} +16 -16
  70. package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
  71. package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-H4VIVD4C.js} +385 -284
  72. package/dist/cli-delegate/chunk-I3EIN2YG.js +36 -0
  73. package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-LPPWO5CE.js} +12 -8
  74. package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
  75. package/dist/cli-delegate/{chunk-UEZ7D35A.js → chunk-N7CDDGI3.js} +4 -23
  76. package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-PMEKGDED.js} +74 -167
  77. package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
  78. package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
  79. package/dist/cli-delegate/cmd_adr_effective.js +1162 -0
  80. package/dist/cli-delegate/cmd_conformance.js +466 -716
  81. package/dist/cli-delegate/cmd_converge.js +3 -3
  82. package/dist/cli-delegate/cmd_doctor.js +10 -10
  83. package/dist/cli-delegate/cmd_explain.js +1 -1
  84. package/dist/cli-delegate/cmd_export.js +10 -9
  85. package/dist/cli-delegate/cmd_handoff.js +10 -9
  86. package/dist/cli-delegate/cmd_memory_get.js +2 -1
  87. package/dist/cli-delegate/cmd_migrate.js +2 -2
  88. package/dist/cli-delegate/cmd_packs_active.js +1 -1
  89. package/dist/cli-delegate/cmd_preflight.js +5 -5
  90. package/dist/cli-delegate/cmd_prune.js +11 -10
  91. package/dist/cli-delegate/cmd_route_audit.js +6 -5
  92. package/dist/cli-delegate/cmd_route_explain.js +3 -3
  93. package/dist/cli-delegate/cmd_session_recycle.js +840 -30
  94. package/dist/cli-delegate/cmd_settings_get.js +3 -3
  95. package/dist/cli-delegate/cmd_settings_migrate.js +10 -9
  96. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  97. package/dist/cli-delegate/cmd_sync.js +11 -10
  98. package/dist/cli-delegate/cmd_uninstall.js +13 -11
  99. package/dist/cli-delegate/cmd_update.js +4 -4
  100. package/dist/cli-delegate/cmd_upgrade.js +4 -4
  101. package/dist/cli-delegate/cmd_validate.js +11 -10
  102. package/dist/cli-delegate/cmd_versions.js +3 -3
  103. package/dist/discovery/deprecation-report.md +1 -1
  104. package/dist/discovery/discovery-manifest.json +111 -37
  105. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  106. package/dist/discovery/discovery-manifest.summary.md +5 -5
  107. package/dist/discovery/dormancy-report.md +1 -1
  108. package/dist/discovery/orphan-report.md +1 -1
  109. package/dist/discovery/packs.json +15 -12
  110. package/dist/discovery/trust-report.md +3 -3
  111. package/dist/discovery/workspaces.json +11 -8
  112. package/dist/hooks/dispatch.js +3165 -2192
  113. package/dist/install/claudePathsPlan.js +187 -0
  114. package/dist/install/claudePathsPlan.js.map +1 -0
  115. package/dist/install/globalRuleLayers.js +169 -0
  116. package/dist/install/globalRuleLayers.js.map +1 -0
  117. package/dist/install/hostLayerFingerprint.js +136 -0
  118. package/dist/install/hostLayerFingerprint.js.map +1 -0
  119. package/dist/install/install.mjs +553 -425
  120. package/dist/install/partitionEligibility.js +432 -0
  121. package/dist/install/partitionEligibility.js.map +1 -0
  122. package/dist/install/ruleLayerPartition.js +157 -0
  123. package/dist/install/ruleLayerPartition.js.map +1 -0
  124. package/dist/mcp/registry-manifest.json +3 -3
  125. package/dist/mcp/server.json +2 -2
  126. package/dist/mcp/server.mjs +1863 -1234
  127. package/dist/router.json +1 -1
  128. package/dist/scripts/_lib/agent_src.js +41 -0
  129. package/dist/scripts/_lib/agent_src.js.map +1 -1
  130. package/dist/scripts/_lib/install_layout.js +83 -0
  131. package/dist/scripts/_lib/install_layout.js.map +1 -0
  132. package/dist/scripts/_lib/installed_lock.js +444 -0
  133. package/dist/scripts/_lib/installed_lock.js.map +1 -0
  134. package/dist/scripts/_lib/prune_empty_dirs.js +85 -0
  135. package/dist/scripts/_lib/prune_empty_dirs.js.map +1 -0
  136. package/dist/scripts/condense.js +63 -251
  137. package/dist/scripts/condense.js.map +1 -1
  138. package/dist/server/schemas/settings.js +4 -0
  139. package/dist/server/schemas/settings.js.map +1 -1
  140. package/docs/contracts/settings-classes.md +12 -6
  141. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
  142. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +45 -1
  143. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
  144. package/docs/guidelines/agent-infra/false-green.md +47 -1
  145. package/docs/guidelines/agent-infra/memory-access.md +17 -0
  146. package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  147. package/package.json +1 -1
  148. package/src/agent-src/scripts/archival_sweep.ts +117 -0
  149. package/src/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
  150. package/src/agent-src/scripts/dashboard_mode.ts +212 -0
  151. package/src/agent-src/scripts/gate_budget.ts +282 -0
  152. package/src/agent-src/scripts/gate_execute.ts +72 -31
  153. package/src/agent-src/scripts/roadmap_gates.ts +74 -3
  154. package/src/agent-src/scripts/update_roadmap_progress.ts +296 -53
  155. package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  156. package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  157. package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  158. package/src/config/agent-settings.template.yml +27 -2
  159. package/src/config/ci-local-parity.yml +39 -0
  160. package/src/config/estate-count-budget.json +612 -3
  161. package/src/config/evaluator-budgets.json +3 -3
  162. package/src/config/gate-coverage.yml +220 -12
  163. package/src/config/gate-violation-baselines.json +73 -63
  164. package/src/config/gitignore-block.txt +15 -2
  165. package/src/config/hook-latency-budget.json +5 -0
  166. package/src/config/rule-activation-census.json +14 -6
  167. package/src/config/rule-stub-ceilings.json +34 -7
  168. package/src/install/claudePathsPlan.ts +196 -0
  169. package/src/install/globalRuleLayers.ts +197 -0
  170. package/src/install/hostLayerFingerprint.ts +145 -0
  171. package/src/install/partitionEligibility.ts +502 -0
  172. package/src/install/ruleLayerPartition.ts +212 -0
  173. package/src/scripts/_cli/cmd_adr_effective.ts +484 -0
  174. package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
  175. package/src/scripts/_dispatch.bash +17 -1
  176. package/src/scripts/_lib/ac_heading.ts +30 -0
  177. package/src/scripts/_lib/adr_frontmatter.test.ts +365 -0
  178. package/src/scripts/_lib/adr_frontmatter.ts +459 -0
  179. package/src/scripts/_lib/agent_src.ts +42 -0
  180. package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
  181. package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
  182. package/src/scripts/_lib/envelope_grounding.ts +49 -9
  183. package/src/scripts/_lib/installed_lock.ts +50 -5
  184. package/src/scripts/_lib/layer_overlap_notice.ts +11 -2
  185. package/src/scripts/_lib/md_section.ts +129 -0
  186. package/src/scripts/_lib/prune_empty_dirs.ts +80 -0
  187. package/src/scripts/_lib/scope_guard.sh +26 -3
  188. package/src/scripts/_lib/self_repair.ts +19 -0
  189. package/src/scripts/_lib/self_repair_class_b.ts +171 -0
  190. package/src/scripts/adr/evidence_census.ts +899 -0
  191. package/src/scripts/adr/regenerate_index.ts +12 -32
  192. package/src/scripts/adr_cite_check.ts +540 -39
  193. package/src/scripts/ai_council/cli_help.ts +55 -0
  194. package/src/scripts/audit_adr_coverage.ts +103 -17
  195. package/src/scripts/before_complete_hook.ts +153 -28
  196. package/src/scripts/bench_ab_v2_complexity.ts +27 -7
  197. package/src/scripts/bench_hook_latency.ts +204 -0
  198. package/src/scripts/build_archive_index.ts +34 -0
  199. package/src/scripts/check_adr_frontmatter.ts +574 -39
  200. package/src/scripts/check_hook_bundle_content.ts +219 -0
  201. package/src/scripts/check_new_adr_evidence.ts +529 -0
  202. package/src/scripts/check_references.ts +78 -0
  203. package/src/scripts/check_release_published.ts +32 -11
  204. package/src/scripts/check_rule_layer_partition.ts +531 -0
  205. package/src/scripts/check_single_delivery.ts +194 -17
  206. package/src/scripts/check_standing_rule_delivery.ts +8 -2
  207. package/src/scripts/ci_settle.ts +170 -0
  208. package/src/scripts/condense.ts +79 -259
  209. package/src/scripts/council_cli.ts +3 -3
  210. package/src/scripts/dispatch_r2_reviewer.ts +6 -14
  211. package/src/scripts/external_sources_denylist.json +4 -1
  212. package/src/scripts/hook_manifest.json +1 -1
  213. package/src/scripts/hook_manifest.yaml +77 -14
  214. package/src/scripts/hooks/block_no_verify.ts +61 -10
  215. package/src/scripts/hooks/block_unauthorized_git.ts +21 -1
  216. package/src/scripts/hooks/concern_registry.ts +4 -0
  217. package/src/scripts/hooks/dispatch_hook.ts +154 -187
  218. package/src/scripts/hooks/dispatch_issues.ts +38 -19
  219. package/src/scripts/hooks/fallback_yaml.ts +66 -0
  220. package/src/scripts/hooks/host_semantics.ts +21 -0
  221. package/src/scripts/hooks/injection_budget.ts +13 -3
  222. package/src/scripts/hooks/py_json_dumps.ts +103 -0
  223. package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
  224. package/src/scripts/hooks/run_continuation_hook.ts +8 -5
  225. package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
  226. package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
  227. package/src/scripts/hooks/state_io.ts +870 -21
  228. package/src/scripts/hooks/stdin_failure_policy.ts +96 -0
  229. package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
  230. package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
  231. package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
  232. package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
  233. package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
  234. package/src/scripts/injection_scan_hook.ts +137 -5
  235. package/src/scripts/install.ts +16 -11
  236. package/src/scripts/language_mirror_hook.ts +561 -25
  237. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  238. package/src/scripts/lint_hook_manifest.ts +49 -0
  239. package/src/scripts/lint_plan_risk_register.ts +4 -3
  240. package/src/scripts/lint_provenance_vocabulary.ts +472 -4
  241. package/src/scripts/lint_skill_router_head.ts +4 -4
  242. package/src/scripts/mcp_server/tools.ts +2 -2
  243. package/src/scripts/new_roadmap.ts +136 -0
  244. package/src/scripts/pack_mcp_content.ts +20 -5
  245. package/src/scripts/release.ts +37 -38
  246. package/src/scripts/report_layer_overlap.ts +6 -0
  247. package/src/scripts/routing_doctor.ts +5 -1
  248. package/src/scripts/self_repair_hook.ts +37 -5
  249. package/src/scripts/session_register_hook.ts +11 -0
  250. package/src/scripts/skill_usage_collect.ts +11 -1
  251. package/src/scripts/skill_usage_report.ts +278 -8
  252. package/src/scripts/sync_pr_branch.ts +170 -20
  253. package/src/server/schemas/settings.ts +8 -0
  254. package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
  255. package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
  256. package/dist/cli-delegate/{chunk-PPQO4NGR.js → chunk-6RJA2F5A.js} +3 -3
  257. package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
  258. package/dist/cli-delegate/{chunk-FBKL6JWT.js → chunk-MMSGVZKV.js} +3 -3
@@ -0,0 +1,125 @@
1
+ # ai-council — output path and synthesis
2
+
3
+ > Mode body of the [`ai-council`](../SKILL.md) skill (router-head retrofit,
4
+ > 2026-08-20). Content moved VERBATIM from SKILL.md — load this file when the
5
+ > mode table in SKILL.md routes here.
6
+
7
+ ## Output path convention
8
+
9
+ Council artefacts (questions, responses, sessions) are **dev-time
10
+ scratch** — gitignored in both the package repo and consumer repos
11
+ and auto-pruned after `ai_council.session_retention_days` (default
12
+ 7). They inform a decision; they are not the durable contract. The
13
+ durable contract lives in the roadmap / ADR / skill body that cites
14
+ the council's convergence inline.
15
+
16
+ **Linking to a specific council file is forbidden by
17
+ [`no-roadmap-references`](../../../rules/no-roadmap-references.md)
18
+ (council clause)** — gitignored, not in the cloned repo, gone after
19
+ the retention window. Inline the convergence with date + members
20
+ instead.
21
+
22
+ Three directories, three modes:
23
+
24
+ | Mode | Path | Format |
25
+ |---|---|---|
26
+ | **Topic-anchored question** (paired with a roadmap or ADR) | `agents/runtime/council/questions/<topic-slug>.md` | Markdown |
27
+ | **Topic-anchored response** (paired with the question above) | `agents/runtime/council/responses/<topic-slug>.json` | JSON from `council:run --output` |
28
+ | **Ad-hoc session** (no durable artefact yet) | `agents/runtime/council/sessions/<UTC-timestamp>.json` | JSON from `council:run --output` |
29
+
30
+ `<topic-slug>` is kebab-case and **must match** the corresponding
31
+ roadmap / ADR slug if one exists (e.g. `path-fixes` mirrors the
32
+ matching `road-to-<topic-slug>` roadmap under `agents/roadmaps/`).
33
+
34
+ ### Forbidden
35
+
36
+ - Files at `agents/` root (e.g. `agents/runtime/council/question-foo.md`).
37
+ - Dot-prefix scratch (e.g. `agents/.council-question-foo.md`).
38
+ - Any other directory below `agents/` (e.g. `agents/scratch/`,
39
+ `agents/evidence/notes/`). Operator scratch belongs under
40
+ `agents/runtime/tmp/` (gitignored).
41
+ - Cross-references from any artefact to specific council files —
42
+ see [`no-roadmap-references`](../../../rules/no-roadmap-references.md)
43
+ (council clause). Inline the convergence summary instead, with
44
+ date and member list for traceability (`Council (claude-sonnet-4-5
45
+ + gpt-4o, YYYY-MM-DD) reviewed N candidate strategies; converged
46
+ on …`).
47
+
48
+ ### Exempt
49
+
50
+ - `agents/evidence/audits/` — historical audit bundles. The canonical
51
+ council dirs are gitignored; audit bundles are tracked,
52
+ cohesive narratives that may include council artefacts as
53
+ part of their evidence trail (e.g. `audits/2026-05-14-north-star/`
54
+ bundling its triggering question, raw responses, and synthesis
55
+ alongside the audit's findings). The layout linter
56
+ (`scripts/check_council_layout.ts`) skips this directory.
57
+
58
+ `scripts/check_council_layout.ts` is the mechanical check for the
59
+ output path convention — wire it into the package's CI pipeline so
60
+ violations break the build.
61
+
62
+ ## Synthesis templates (lens-aware)
63
+
64
+ The **Convergence / Divergence** slot in `council:render` output is
65
+ populated with a lens-specific synthesis prompt. The host agent reads
66
+ this prompt and writes the summary in the shape it dictates. The five
67
+ templates live in `scripts/ai_council/prompts.ts::_SYNTHESIS_TABLE`
68
+ and are exposed via `synthesis_template(mode)`.
69
+
70
+ **R4 Q4 split** — decision lenses get a structured Karpathy-style
71
+ template; creative lenses keep an open-ended prose body. **Every lens
72
+ now closes with two required verdict-discipline sections** — **Kill
73
+ criteria** (observable falsifiers with a threshold or event, checkable
74
+ without re-convening the council) and **Concrete next step** (exactly
75
+ one artefact-producing action) — added so no synthesis ships an
76
+ unfalsifiable verdict (road-to-opt-council-deliberation Phase 0):
77
+
78
+ | Lens | Class | Synthesis sections |
79
+ |---|---|---|
80
+ | `default` | decision | Agreement · Clashes · Blind spots · Recommendation · **Kill criteria · Concrete next step** |
81
+ | `pr` | decision | Consensus · Conflicts · Must-fix before merge · Recommendation · **Kill criteria · Concrete next step** |
82
+ | `analysis` | decision | Top-10 by consensus · Supporting · Outliers · **Kill criteria · Concrete next step** |
83
+ | `design` | creative | open prose body + **Kill criteria · Concrete next step** |
84
+ | `optimize` | creative | open prose body + **Kill criteria · Concrete next step** |
85
+
86
+ Input modes (`prompt` / `roadmap` / `diff` / `files`) inherit the
87
+ `default` decision template — they are bundling shapes, not lenses.
88
+
89
+ **Source citations:**
90
+ * Template shape — Round 2 council verdict
91
+ (`agents/runtime/council/sessions/2026-05-14-ai-council-redesign/round-1.md`,
92
+ Opus's lens-adaptive synthesis proposal).
93
+ * Decision/creative split — Round 4 Q4 verdict
94
+ (`agents/runtime/council/sessions/2026-05-14-ai-council-redesign/round-3-responses.json`).
95
+ R4 reframed `optimize` as creative because perf trade-offs resist
96
+ pre-templated shape — Performance-wins / Trade-offs /
97
+ Implementation-order is too rigid for the variety of optimize-lens
98
+ artefacts. R4 reframed `design` for the same reason — design
99
+ critiques are inherently narrative.
100
+
101
+ ### `--prose-synthesis` escape hatch (R4 Q4)
102
+
103
+ Both `council:run` and `council:render` accept symmetric escape-hatch
104
+ flags on top of the lens table:
105
+
106
+ * `--prose-synthesis` — force creative-lens passthrough (bare slot)
107
+ regardless of lens. Use when the user on `default`/`pr`/`analysis`
108
+ prefers a narrative recommendation over the structured template.
109
+ * `--no-prose-synthesis` — force the `default` structured template
110
+ even on a creative lens. Use when a `design` or `optimize` artefact
111
+ has a one-shot need for Karpathy-style structure.
112
+
113
+ The flag is mutually exclusive — picking one disables the other on
114
+ the same invocation. When `council:run` records either flag in the
115
+ output JSON, `council:render` honours it unless the renderer is
116
+ called with an explicit flag of its own.
117
+
118
+ ### Renderer lens resolution
119
+
120
+ `council:render <responses.json>` resolves the active lens in this
121
+ order: explicit `--prompt-mode` flag > `prompt_mode` field in the
122
+ payload > `mode` field in the payload > `None` (default decision
123
+ template). The `--prose-synthesis` / `--no-prose-synthesis` flag
124
+ overrides the table regardless of how the lens resolved.
125
+
@@ -0,0 +1,143 @@
1
+ # ai-council — procedure and critical evaluation
2
+
3
+ > Mode body of the [`ai-council`](../SKILL.md) skill (router-head retrofit,
4
+ > 2026-08-20). Content moved VERBATIM from SKILL.md — load this file when the
5
+ > mode table in SKILL.md routes here.
6
+
7
+ ### Neutrality — context-handoff
8
+
9
+ External reviewers do better critique when they know **what the
10
+ project is**, not just what the artefact looks like. The council
11
+ ships a neutral **handoff preamble** (modelled on `/agent-handoff`)
12
+ in front of every member's system prompt, assembled by
13
+ `prompts.handoff_preamble(project, original_ask)`:
14
+
15
+ | Carried | Forbidden |
16
+ |---|---|
17
+ | Project name (from `composer.json` / `package.json` / repo dir) | Host-agent identity (Augment, Claude Code, Cursor, Cline, Windsurf, Copilot agent) — stripped line-by-line before send |
18
+ | Stack one-liner inferred from manifest files | Host-agent reasoning, prior turns, internal analysis |
19
+ | One paragraph of repo purpose from `README.md` (max 400 chars) | Host-agent framing language ("I think this looks weak", "the user probably wants…") |
20
+ | The user's **original ask** verbatim (the free-form sentence that triggered `/council`) | Anything the host agent generated about the artefact |
21
+
22
+ `detect_project_context()` in `scripts/ai_council/project_context.ts`
23
+ reads only the manifest files + root README; missing fields collapse
24
+ to `None` and the preamble silently omits the line. With both
25
+ `project=None` and `original_ask=""`, the preamble degrades to the
26
+ bare `NEUTRALITY_PREAMBLE` (v1 shape — back-compat for callers that
27
+ have not migrated yet).
28
+
29
+ ## Procedure
30
+
31
+ 1. **Resolve target.** Identify the artefact mode (`prompt`, `roadmap`,
32
+ `diff`, `files`) and locate the source. Refuse to proceed if the
33
+ target is ambiguous.
34
+ 2. **Bundle + redact.** Call `scripts/ai_council/bundler.ts` to produce
35
+ a redacted artefact bundle. If `BundleTooLarge` fires, surface the
36
+ size and ask the user to narrow scope — do NOT truncate silently.
37
+ 3. **Clear the spend bound.** The council is standing-authorized — there is
38
+ no per-invocation approval. What still binds is a *bound*, resolved in
39
+ this order:
40
+ - **No billable member** (every member is `mode: cli` under
41
+ subscription auth — `billable=False`) → nothing is spent. Render the
42
+ estimate table as information and fan out. No gate.
43
+ - **Billable members with a configured ceiling** (`cost_budget.max_total_usd`
44
+ non-zero, or `daily_limit_usd` non-zero) → the ceiling **is** the
45
+ authorization the user already gave. Render the estimate and fan out.
46
+ `on_overrun` still fires per member on breach (below) — that is where
47
+ the user regains the decision.
48
+ - **Billable members with no ceiling at all** (`max_total_usd: 0` AND
49
+ `daily_limit_usd: 0`) → unbounded paid spend, so surface the estimate
50
+ and require an explicit `1`. Nothing bounds the call, so the user must.
51
+
52
+ Autonomy settings do not *create* a bound and do not lift the last case.
53
+ Consumers who want the old per-run gate back set a small
54
+ `cost_budget.max_total_usd`: every call then breaches and `on_overrun`
55
+ asks, per member.
56
+ 4. **Fan out.** Dispatch the bundle to each enabled council member via
57
+ `scripts/ai_council/orchestrator.ts`. Each member receives the
58
+ neutrality preamble from `prompts.ts` plus the artefact — nothing
59
+ from the host agent's prior reasoning.
60
+ 5. **Render results.** Stack each member's response under its own
61
+ provider-attributed heading. Never merge or paraphrase responses
62
+ into the host agent's voice.
63
+ 6. **Summarise.** Write a `Convergence / Divergence` block listing
64
+ agreements, disagreements, and unique insights — provider-attributed.
65
+ 7. **Critically evaluate** every finding before it leaves the host
66
+ (see *Critical evaluation* below). The host is the convener **and**
67
+ the skeptic — never a reviewer of the artefact itself, but always a
68
+ reviewer of the **council's output**.
69
+ 8. **Translate validated findings to options.** Convert each finding
70
+ the host accepts (or accepts with modification) into a concrete
71
+ numbered option for the user. Tag every option with the host's
72
+ verdict so the user sees the agent's reasoned position, not the
73
+ council's raw output. The user decides; the council advises; the
74
+ host filters.
75
+
76
+ ## Critical evaluation — convener-skeptic stance
77
+
78
+ ```
79
+ COUNCIL CONVERGENCE IS NOT CORRECTNESS.
80
+ DO NOT BLINDLY ACCEPT FINDINGS. DO NOT BLINDLY REJECT THEM.
81
+ EVERY FINDING GETS A REASONED VERDICT BEFORE IT REACHES THE USER.
82
+ ```
83
+
84
+ ### Mechanism claims need a probe, not a second opinion
85
+
86
+ ```
87
+ A MECHANISM CLAIM IN A COUNCIL ARTEFACT IS MARKED `unverified:` UNTIL A PROBE COVERS IT.
88
+ A VERDICT RESTING ON AN UNVERIFIED MECHANISM CLAIM DOES NOT BIND.
89
+ SEVERAL MODELS AGREEING MULTIPLIES PLAUSIBILITY. IT DOES NOT PRODUCE EVIDENCE.
90
+ ```
91
+
92
+ A **mechanism claim** asserts how the machine behaves: "this toggle removes the
93
+ cost", "that gate scans X", "the host reads the router". The council deliberates
94
+ over **arguments**, never against the running system — it cannot execute a command,
95
+ so it has no way to falsify one. Marking such a claim `unverified:` in the artefact
96
+ keeps the reader from mistaking a well-argued mechanism for a measured one, and the
97
+ non-binding clause means the fix for a wrong claim is a probe, not a re-vote.
98
+
99
+ **Case zero (2026-07-29).** An accepted ADR claimed a compile-time toggle gave
100
+ "zero-cost dormancy" because the rule was dropped from `dist/router.json`. Two
101
+ council members praised the reasoning; neither could check it. A one-line `grep`
102
+ later showed the toggle was read by the router compiler and by **nothing in the
103
+ projector**, so the rule's body kept shipping as a file — and the host reads the
104
+ file. The claim was half wrong, the verdict that rested on it was void, and what
105
+ caught it was a probe, not a third opinion.
106
+
107
+ The council is **uninformed about the codebase, ADRs, locked
108
+ contracts, prior decisions, and project history** — it sees only the
109
+ artefact + neutrality preamble. That is the source of its diversity
110
+ **and** its blind spots. Convergence between members can mean shared
111
+ generic best-practice priors, not project-specific correctness.
112
+
113
+ The host applies a critical lens to **every finding** (convergence
114
+ **and** divergence) before surfacing it as a numbered option:
115
+
116
+ | Check | Question | Tool |
117
+ |---|---|---|
118
+ | **Codebase fit** | Does the finding match the actual code, files, signatures, conventions? | `view` / `codebase-retrieval` / `grep` |
119
+ | **Locked-decision conflict** | Does it contradict an ADR, kernel rule, contract under `docs/contracts/`, or `docs/decisions/`? | `view` |
120
+ | **Already addressed** | Is it a generic best-practice already covered by an existing rule, skill, or test? | `view` / `grep` |
121
+ | **Cost / benefit** | Is the change worth the diff size, churn, and review cost vs. the marginal benefit? | reasoning |
122
+ | **Hallucination** | Does the finding cite a file, function, or behavior that does not exist? | `view` |
123
+
124
+ Each finding receives one of three verdicts:
125
+
126
+ - **`accept`** — codebase fits, no locked-decision conflict, benefit clears cost. Surface as a normal numbered option.
127
+ - **`accept-with-modification`** — core insight valid, but the proposed shape needs adjusting (wrong file, contradicts ADR detail, scope creep). Surface with the **modified** patch and a one-line note.
128
+ - **`reject`** — finding is wrong (hallucinated reference, contradicts a locked decision, already addressed, generic noise). Surface as a **Rejected by host** entry with a one-line reason. Still visible — the user can override.
129
+
130
+ The verdict is the host's **own** reasoning, not the council's.
131
+ Pretending convergence equals correctness, or paraphrasing council
132
+ output as host analysis, both breach the [`direct-answers`](../../../rules/direct-answers.md)
133
+ no-invented-facts rule. When the host cannot reach a confident
134
+ verdict on a finding (mixed evidence, ambiguous scope), it surfaces
135
+ the finding as `needs-input` with the open question — the user
136
+ decides, the host does not guess.
137
+
138
+ ### What this is NOT
139
+
140
+ - **Not a re-review by the host.** The host did not write the artefact independently and cannot critique it independently — that boundary still holds.
141
+ - **Not a vote against the council.** Rejecting a finding requires evidence (file, line, contract reference), not preference.
142
+ - **Not silent filtering.** Every finding reaches the user with its verdict and reason. The user can pick a `reject` option and override the host.
143
+
@@ -119,6 +119,21 @@ Write:
119
119
  law instead of a decision under current conditions; see
120
120
  [`decision-revisit-gate`](../../rules/decision-revisit-gate.md) for
121
121
  what happens when a later change is blocked by it without one.
122
+ It is an externally observable **condition**, never a cadence and never
123
+ permanence under a field name: `terminal`, `none`, "never" and "forever"
124
+ are invalid, and `unclassified` is legal only on an *existing* record
125
+ during the migration — never on the one you are locking now.
126
+ - **Evidence + assumptions, split explicitly.** Every load-bearing factual
127
+ claim in the rationale either points at a basis ref — `file:line`, a URL, a
128
+ `docs/CLAIMS.md` claim id, a benchmark id — or is **labelled an
129
+ assumption**. There is no third state. Cite nothing and the record grades
130
+ `E0`, which is honest and publishable; a confident grade over no citations
131
+ is not. **Agreement is not evidence:** the council converging, or two
132
+ models liking the same option, is `provenance: agentic` with
133
+ `agentic_mode: council` — sources and measurements raise the grade,
134
+ consensus does not. A human product call records `E0` plus
135
+ `authority_basis: owner_intent` rather than a faked grade. Vocabulary:
136
+ [`adr-layout § Provenance and evidence`](../../../docs/contracts/adr-layout.md).
122
137
 
123
138
  ### 5. Wire the supersession chain (if any)
124
139
 
@@ -129,9 +144,34 @@ If this decision overrides a prior ADR:
129
144
  not "we now think differently".
130
145
  - Hand off the `supersedes:` linkage to `adr-create`.
131
146
 
132
- ### 6. Hand off to file mechanics
147
+ ### 6. Admission gate — is this an ADR at all?
133
148
 
134
- Output the structured payload (below). The user — or
149
+ Classify **before** handing off. A locked choice earns an ADR only when it is
150
+ architecturally significant on at least one axis:
151
+
152
+ - **Hard or costly to reverse** — a one-way door: public API shape, DB schema,
153
+ wire format, published identifier, migration.
154
+ - **Broadly constraining** — it binds work outside the module that made it.
155
+ - **Crosses a governed surface** — consumer contract, API, security or privacy
156
+ floor, package structure.
157
+
158
+ None of the three → **no ADR**. The record still exists; it lands as a
159
+ decision note in `agents/decisions/`, a config value, a measurement record in
160
+ `docs/CLAIMS.md`, an experiment, or a roadmap item. Explicitly not ADRs: a
161
+ temporary numeric threshold · a benchmark value · a model mapping · one-off
162
+ release sequencing · a reversible local implementation detail.
163
+
164
+ **The reference case is in this tree.** ADR-002 encodes `25 000 → 26 000` and
165
+ a `4.0k` override ceiling as architecture law (`ADR-002:55`, `:62`), and
166
+ ADR-114 then had to add another override while recording that 7 of 9 kernel
167
+ rules already carry them (`ADR-114:74`). The *principle* — a kernel budget
168
+ exists, is measured, and is capped — is the ADR. The numbers belong in a
169
+ versioned budget contract with a regression gate, so a recalibration stops
170
+ needing an architecture supersession.
171
+
172
+ ### 7. Hand off to file mechanics
173
+
174
+ Gate passed → output the structured payload (below). The user — or
135
175
  `adr-create` — turns it into the file.
136
176
 
137
177
  ## Weighted-matrix mode (quantitative)
@@ -226,10 +266,22 @@ Consequences:
226
266
  - <becomes harder>
227
267
  ✗ <becomes impossible>
228
268
 
269
+ Assumptions:
270
+ ~ <load-bearing claim with no basis ref>
271
+
272
+ Evidence:
273
+ <basis ref> — file:line | URL | CLAIMS id | benchmark id (or: none — E0)
274
+
275
+ Provenance: human | agentic | mixed | unknown (agentic_mode: single | council | delegated)
276
+ Grade: E0 | E1 | E2 | E3 | E4 (authority_basis: evidence | owner_intent)
277
+
229
278
  Supersedes: <ADR-XYZ "title"> (if any)
230
279
  Trigger: <what changed> (if superseding)
280
+ Revisit-if: <observable condition>
281
+
282
+ Admission gate: ADR | decision note | config value | measurement | experiment | roadmap item
231
283
 
232
- Next: /adr-create with the payload above
284
+ Next: /adr-create with the payload above (only when the gate says ADR)
233
285
  ```
234
286
 
235
287
  ## Gotcha
@@ -240,6 +292,12 @@ Next: /adr-create with the payload above
240
292
  cons for the chosen option, you have not understood it yet.
241
293
  - A supersession with no "what changed in the world" is a vibe
242
294
  pivot. Reject and ask.
295
+ - An unlabelled guess is worse than a labelled one. A claim with no basis ref
296
+ and no assumption label reads as established fact to the next reader.
297
+ - "The council agreed" is a provenance fact, not an evidence grade. If the
298
+ only support is agreement, the grade is `E0` — write it.
299
+ - Writing an ADR for a threshold is how a recalibration becomes an
300
+ architecture supersession. Run the admission gate first.
243
301
 
244
302
  ## Do NOT
245
303
 
@@ -93,6 +93,31 @@ available at the time it was made**, not against the outcome alone.
93
93
  A decision can be correct given the information then and still need
94
94
  revision now.
95
95
 
96
+ **Read the record's axes in this order** — each step can end the review, so
97
+ running them out of order pays for the expensive ones first:
98
+
99
+ 1. **Effective state** — status, `superseded_by`, amendments, whether the
100
+ `review_trigger` fired. `superseded`/`deprecated` is not a live lock at all.
101
+ 2. **`provenance`** (+ `agentic_mode`) — who decided; descriptive only.
102
+ 3. **`evidence.strength`** — E0–E4, claim-relative, not a count of sources.
103
+ 4. **`evidence.discovery`** — on E0, `incomplete` means *nobody looked*: a
104
+ discovery failure, not an evidence failure. Search before treating the
105
+ absence as established, or the grade measures the review, not the decision.
106
+ 5. **Current evidence** — what tree, measurements and sources say *today*.
107
+ 6. **Reversibility** — of the transition you propose, not of the original
108
+ decision. The routing unit is the transition, never the document.
109
+ 7. **Reserved dimensions** — `protected_dimensions`, `reopen_policy` (absent →
110
+ `unclassified`, which is not `owner`).
111
+
112
+ Then price the reopen record from the grade × provenance burden table in
113
+ [`adr-layout § The reopen record`](../../../docs/contracts/adr-layout.md) —
114
+ cheap for an `E0`/`E1` agentic snapshot, *surfaced* rather than obeyed or
115
+ overturned for `E0`/`E1` human, the standard five fields at `E2`, and those
116
+ fields plus engaging the original evidence **in kind** at `E3`/`E4`. Read the
117
+ table; do not reconstruct it from memory. The axes are defined by
118
+ [`adr-layout § Provenance and evidence`](../../../docs/contracts/adr-layout.md),
119
+ not here.
120
+
96
121
  ### 4. Verdict
97
122
 
98
123
  One of three:
@@ -298,6 +323,40 @@ in the rule; the lock catalog, fire steps, and failure modes live here.
298
323
  Identical ceremony for a typo-level amendment would cost more than asking
299
324
  the owner and the mechanism would die of its own weight.
300
325
 
326
+ ### The grade prices the record, never the authority
327
+
328
+ ```
329
+ AN EVIDENCE GRADE IS A MEASUREMENT, NOT A PERMISSION.
330
+ IT PRICES THE REOPEN RECORD AND THE REVIEW PRIORITY. IT CONFERS NO AUTHORITY.
331
+ A LOW GRADE NEVER LETS AN AGENT SUPERSEDE A RECORD ON ITS OWN.
332
+ ```
333
+
334
+ Nothing in the burden table changes **who** may act: venue comes from the
335
+ discriminator, the trust boundaries the transition touches, and the
336
+ owner-reserved rows — never from the grade.
337
+
338
+ The coupling was proposed and refused: two council seats independently named it
339
+ the design's central defect, because the party assigning the grade would also
340
+ be the party gaining authority from it, and would additionally be
341
+ self-classifying its own transition as `reversible-internal` — itself an
342
+ authority-bearing classification. Calling the result "provisional" changes
343
+ neither the trust boundary nor the blast radius. Whether an *independently
344
+ validated* grade may ever reduce the authorization burden is owner-reserved and
345
+ open: do not answer it here — it is the `authority-coupling-decision` blocker in
346
+ `road-to-evidence-based-adr-governance`, and
347
+ [`adr-layout § The reopen record`](../../../docs/contracts/adr-layout.md) closes
348
+ on the same point.
349
+
350
+ Two consequences that are easy to get backwards:
351
+
352
+ - **An ADR's historical decision-maker does not determine its reopen venue.** A
353
+ record decided by a council does not need a council to reopen it; a record
354
+ decided by one agent is not thereby an agent's to overturn.
355
+ - **A low-evidence record may state a decision; it does not establish that the
356
+ alternatives remain invalid.** *"We chose B because we had to choose"* is
357
+ legitimate and publishable — but never grounds for *"A is forbidden, the ADR
358
+ says B"*, which needs evidence the record never carried.
359
+
301
360
  ### When NOT to fire
302
361
 
303
362
  - The blocked change has no real benefit — the gate is not a lever to
@@ -324,6 +383,12 @@ in the rule; the lock catalog, fire steps, and failure modes live here.
324
383
  value-over-budget clause.
325
384
  - Silently dropping a good idea because "we already decided this" —
326
385
  the canonical failure the gate exists to stop.
386
+ - Reading a low `evidence.strength` as permission to supersede — the grade
387
+ prices the record, it never moves the venue.
388
+ - Treating `discovery: incomplete` as established absence: that grades the
389
+ review, not the decision.
390
+ - Citing a low-evidence ADR as proof its rejected alternatives are still
391
+ invalid. It records a choice, not a refutation.
327
392
 
328
393
  ## See also
329
394
 
@@ -25,6 +25,32 @@ Use this skill when:
25
25
 
26
26
  ## Procedure: Resolve merge conflicts
27
27
 
28
+ ### 0. Classify before resolving — and never start in the GitHub web editor
29
+
30
+ A `CONFLICTING` PR is not a signal to open the web editor. **The web editor
31
+ cannot tell generated from authored**, so it presents a mechanical regeneration
32
+ and a real human decision as the same three-way merge — which is how a generated
33
+ file gets hand-merged into a state matching neither branch.
34
+
35
+ So classify locally first, before resolving anything. Sort every conflicted path
36
+ into three classes, because the correct resolution differs per class and only one
37
+ of them is a judgement call:
38
+
39
+ | Class | What it is | Resolution |
40
+ |---|---|---|
41
+ | **generated** | a build output, an index, a compiled manifest — anything a generator writes from a source in the tree | re-run the generator. **Never mix hunks**, and note that a *clean* auto-merge of a generated file is still wrong: it can produce a file matching neither branch |
42
+ | **remeasured** | a baseline, budget, or ratchet number a CI gate compares against | re-run the measurement on the merged tree and record what it says. Two branches legitimately measured two different trees, so there is no side to take — and picking one is how a ratchet silently loosens |
43
+ | **authored** | prose, source, config a human wrote | a human decision — read both sides. This is what the rest of this skill is about |
44
+
45
+ Getting the class wrong is the expensive direction: hand-merging a generated
46
+ file, or picking a side on a measured one, both produce a plausible-looking file
47
+ that no branch ever had. If the project ships a tool that does this
48
+ classification, run it before touching the conflict; where it does not, the
49
+ three-way sort above is still the first step.
50
+
51
+ This is a checklist item, not a gate — nothing enforces it
52
+ (road-to-merge-hotspot-drawdown 4.3).
53
+
28
54
  ### 1. Understand the situation
29
55
 
30
56
  Before touching any conflict: