@event4u/agent-config 7.0.1 → 7.1.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.
- package/.claude-plugin/marketplace.json +8 -1
- package/CHANGELOG.md +99 -0
- package/README.md +4 -2
- package/dist/agent-src/commands/council/default.md +28 -20
- package/dist/agent-src/commands/evals/fix.json +5 -1
- package/dist/agent-src/commands/fix/comments.md +101 -0
- package/dist/agent-src/commands/fix.md +5 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +65 -0
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +68 -0
- package/dist/agent-src/contexts/execution/host-capability-manifest.md +68 -0
- package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +62 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +59 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +8 -3
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +56 -0
- package/dist/agent-src/contexts/execution/subagent-routing.md +57 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +54 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +71 -0
- package/dist/agent-src/contexts/execution/verify-budget.md +50 -0
- package/dist/agent-src/rules/delegation-policy.md +84 -0
- package/dist/agent-src/rules/design-fidelity.md +98 -0
- package/dist/agent-src/rules/domain-safety-pii.md +22 -0
- package/dist/agent-src/rules/legal-safety-floor.md +144 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +25 -22
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +102 -15
- package/dist/agent-src/scripts/update_roadmap_progress.ts +52 -7
- package/dist/agent-src/skills/ai-council/SKILL.md +28 -1
- package/dist/agent-src/skills/contract-review/SKILL.md +124 -0
- package/dist/agent-src/skills/contract-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/dpa-review/SKILL.md +129 -0
- package/dist/agent-src/skills/dpa-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/laravel/SKILL.md +1 -0
- package/dist/agent-src/skills/legal-intake-triage/SKILL.md +127 -0
- package/dist/agent-src/skills/legal-intake-triage/evals/triggers.json +17 -0
- package/dist/agent-src/skills/legal-practice-profile/SKILL.md +100 -0
- package/dist/agent-src/skills/legal-practice-profile/evals/triggers.json +17 -0
- package/dist/agent-src/skills/nda-triage/SKILL.md +113 -0
- package/dist/agent-src/skills/nda-triage/evals/triggers.json +17 -0
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +36 -9
- package/dist/agent-src/skills/recursive-verification/SKILL.md +186 -0
- package/dist/agent-src/skills/roadmap-management/SKILL.md +17 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +14 -0
- package/dist/agent-src/templates/agent-settings.md +64 -19
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +278 -23
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +12 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +50 -8
- package/dist/discovery/trust-report.md +7 -5
- package/dist/discovery/workspaces.json +34 -6
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/router.json +1 -1
- package/dist/server/schemas/settings.js +14 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/architecture.md +4 -4
- package/docs/benchmark.md +46 -0
- package/docs/catalog.md +18 -6
- package/docs/command-flows.md +7 -1
- package/docs/contracts/ai-council-config.md +17 -10
- package/docs/contracts/audit-log-v1.md +7 -0
- package/docs/contracts/auto-orchestration-v1.md +70 -0
- package/docs/contracts/command-clusters.md +1 -1
- package/docs/contracts/discovery-manifest.schema.json +2 -2
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +19 -0
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +13 -6
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +11 -1
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +10 -4
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +119 -0
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +102 -0
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +126 -0
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +51 -0
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +46 -0
- package/docs/decisions/INDEX.md +5 -0
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/docs/guidelines/agent-infra/domain-pack-architecture.md +55 -0
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +72 -3
- package/src/config/discovery/packs.yml +13 -0
- package/src/config/discovery/workspaces.yml +7 -0
- package/src/scripts/_lib/auto_dispatch.ts +95 -0
- package/src/scripts/_lib/host_capability.ts +59 -0
- package/src/scripts/_lib/orchestration_gate.ts +98 -0
- package/src/scripts/_lib/subagent_bundle.ts +154 -0
- package/src/scripts/_lib/subagent_response.ts +82 -0
- package/src/scripts/_lib/subagent_routing.ts +81 -0
- package/src/scripts/_lib/subagent_spawn.ts +97 -0
- package/src/scripts/_lib/subagent_steering.ts +64 -0
- package/src/scripts/_lib/verify_budget.ts +54 -0
- package/src/scripts/ai_council/advisors.ts +4 -2
- package/src/scripts/ai_council/clients.ts +7 -1
- package/src/scripts/ai_council/config.ts +22 -17
- package/src/scripts/bench_ab_v2_run.ts +127 -0
- package/src/scripts/bench_ab_v2_stats.ts +39 -0
- package/src/scripts/check_council_config_location.ts +6 -5
- package/src/scripts/lint_discovery_vocabulary.ts +6 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +21 -0
- package/src/scripts/lint_legal_pack.ts +139 -0
- package/src/scripts/probe_projection_fidelity.ts +7 -1
- package/src/scripts/rdp_gate_classify.ts +131 -0
- package/src/scripts/rdp_quality_eval.ts +437 -0
- package/src/scripts/schemas/agent-settings.schema.json +11 -0
- package/src/scripts/skill_linter.ts +3 -0
|
@@ -33,23 +33,30 @@ fallback during the v2.4 namespace transition). This is where a single
|
|
|
33
33
|
developer enables members, pins models, and sets caps once — and the
|
|
34
34
|
council then works in **every** project they open, with no per-project
|
|
35
35
|
file to check in or accidentally commit. See
|
|
36
|
-
[ADR-093](../decisions/ADR-093-ai-council-config-user-global.md)
|
|
36
|
+
[ADR-093](../decisions/ADR-093-ai-council-config-user-global.md) and
|
|
37
|
+
[ADR-104](../decisions/ADR-104-ai-council-config-global-only.md).
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
**The council config is ALWAYS user-global. The project tree is NEVER
|
|
40
|
+
searched for it.** `scripts/ai_council/config.ts:resolve_config_path`
|
|
41
|
+
resolves the active file with this precedence (first match wins):
|
|
40
42
|
|
|
41
43
|
1. **`$AI_COUNCIL_CONFIG`** — an explicit absolute path. Honoured even
|
|
42
44
|
when the target is absent (so a typo surfaces as "create it here"
|
|
43
45
|
rather than silently falling back). Primarily for tests / power users.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
config. This **overrides** the user-global file for that project.
|
|
47
|
-
3. **User-global** `~/.event4u/agent-config/settings/.ai-council.yml` — the
|
|
46
|
+
This is an explicit path, not a project search.
|
|
47
|
+
2. **User-global** `~/.event4u/agent-config/settings/.ai-council.yml` — the
|
|
48
48
|
canonical default described above.
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
There is **no project-local lookup.** A `<project_root>/agents/settings/.ai-council.yml`
|
|
51
|
+
in any project (including this package's own tree) is ignored — the
|
|
52
|
+
council never reads it (ADR-104, superseding the project-local override
|
|
53
|
+
ADR-093 had kept). The absence of a council file *in a project* therefore
|
|
54
|
+
says **nothing** about whether the council is configured; only the
|
|
55
|
+
user-global file (or the `$AI_COUNCIL_CONFIG` override) decides that.
|
|
56
|
+
|
|
57
|
+
When neither exists, the loader reports the user-global path as the place
|
|
58
|
+
to create it. `agents/templates/.ai-council.yml.example` ships the
|
|
59
|
+
documented shape to copy from. The legacy `ai_council.*` block under
|
|
53
60
|
`.agent-settings.yml` remains removed (Phase 0 Step 5); a one-line
|
|
54
61
|
breadcrumb there points at this contract.
|
|
55
62
|
|
|
@@ -87,6 +87,13 @@ Single-line. The pretty-printed reference shape:
|
|
|
87
87
|
Unknown trailing fields are forward-compat extensions; readers MUST
|
|
88
88
|
NOT raise on them.
|
|
89
89
|
|
|
90
|
+
A line MAY carry an optional `orchestration` object when the run was
|
|
91
|
+
produced by the auto-dispatch orchestration layer. It is additive and
|
|
92
|
+
non-breaking — `schema_version` is unchanged, no existing field is
|
|
93
|
+
removed or renamed, and readers that do not understand it ignore it per
|
|
94
|
+
the forward-compat rule above. Its shape lives in
|
|
95
|
+
[`orchestration-telemetry.md`](../../src/agent-src/contexts/execution/orchestration-telemetry.md).
|
|
96
|
+
|
|
90
97
|
## Privacy floor
|
|
91
98
|
|
|
92
99
|
Lines MUST NOT contain:
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
stability: beta
|
|
3
|
+
keep-beta-until: 2026-09-23
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Auto-Orchestration v1
|
|
7
|
+
|
|
8
|
+
**Purpose.** Pin the data shapes the automatic subagent-orchestration layer
|
|
9
|
+
depends on — the host-capability manifest, the spawn brief, and the
|
|
10
|
+
orchestration telemetry object — so producers and consumers agree without
|
|
11
|
+
re-deriving them. Behaviour (when to dispatch, how to route, how to verify)
|
|
12
|
+
lives in the context docs; this contract pins the **shapes**.
|
|
13
|
+
|
|
14
|
+
**Scope.** The three JSON shapes below + the activation precondition. Does not
|
|
15
|
+
define classification rules, routing policy, or the verification budget — those
|
|
16
|
+
are the cited context docs.
|
|
17
|
+
|
|
18
|
+
Last refreshed: 2026-06-23. Decided in
|
|
19
|
+
[ADR-105](../decisions/ADR-105-automatic-subagent-orchestration.md).
|
|
20
|
+
|
|
21
|
+
## Host-capability manifest
|
|
22
|
+
|
|
23
|
+
Resolved once per session, cached. Safe default = all-false.
|
|
24
|
+
|
|
25
|
+
```json
|
|
26
|
+
{ "schema_version": 1, "subagent_spawn": false, "parallel_spawn": false, "status_polling": false, "separate_quota_pool": false }
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Full semantics: [`host-capability-manifest`](../../src/agent-src/contexts/execution/host-capability-manifest.md).
|
|
30
|
+
|
|
31
|
+
## Spawn brief
|
|
32
|
+
|
|
33
|
+
Composed per delegated sub-task; knowledge is references only, capped.
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{ "task": "<sub-task>", "role_mode": "reviewer|null", "profile": "<id|null>", "personas": ["<id>"], "knowledge_refs": ["<id-or-path>"] }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Full semantics: [`subagent-spawn-contract`](../../src/agent-src/contexts/execution/subagent-spawn-contract.md).
|
|
40
|
+
|
|
41
|
+
## Orchestration telemetry
|
|
42
|
+
|
|
43
|
+
Optional `orchestration` object on an [`audit-log-v1`](audit-log-v1.md) line —
|
|
44
|
+
additive, non-breaking, counts + ids only.
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{ "task_size_estimate": 0, "spawn_count": 0, "tiers": [], "token_delta": 0, "wall_clock_ms": 0, "outcome": "DONE", "verify_mode": "deterministic" }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Full semantics: [`orchestration-telemetry`](../../src/agent-src/contexts/execution/orchestration-telemetry.md).
|
|
51
|
+
|
|
52
|
+
## Activation precondition
|
|
53
|
+
|
|
54
|
+
Auto-dispatch is attempted only when:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
subagents.enabled AND subagents.auto != off AND manifest.subagent_spawn AND task-is-delegable
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Any failing → in-session. Full gate:
|
|
61
|
+
[`auto-orchestration-activation`](../../src/agent-src/contexts/execution/auto-orchestration-activation.md).
|
|
62
|
+
|
|
63
|
+
## Cross-references
|
|
64
|
+
|
|
65
|
+
- [ADR-105](../decisions/ADR-105-automatic-subagent-orchestration.md) — the decisions.
|
|
66
|
+
- [`subagent-routing`](../../src/agent-src/contexts/execution/subagent-routing.md) — model downshift + quota bonus.
|
|
67
|
+
- [`auto-dispatch-classification`](../../src/agent-src/contexts/execution/auto-dispatch-classification.md) — delegability rules.
|
|
68
|
+
- [`verify-budget`](../../src/agent-src/contexts/execution/verify-budget.md) — verification budget.
|
|
69
|
+
- [`subagent-steering`](../../src/agent-src/contexts/execution/subagent-steering.md) — guardrails + kill-switch.
|
|
70
|
+
- [`orchestration-benchmark-gate`](../../src/agent-src/contexts/execution/orchestration-benchmark-gate.md) — the default-flip gate.
|
|
@@ -28,7 +28,7 @@ column 1 of this table.
|
|
|
28
28
|
|
|
29
29
|
| Cluster | Phase | Sub-commands | Replaces |
|
|
30
30
|
|---|:-:|---|---|
|
|
31
|
-
| `fix` | 1 | `ci` · `pr-comments` · `pr-bot-comments` · `pr-developer-comments` · `portability` · `refs` · `seeder` | `fix-ci` · `fix-pr-comments` · `fix-pr-bot-comments` · `fix-pr-developer-comments` · `fix-portability` · `fix-references` · `fix-seeder` |
|
|
31
|
+
| `fix` | 1 | `ci` · `pr-comments` · `pr-bot-comments` · `pr-developer-comments` · `portability` · `refs` · `seeder` · `comments` | `fix-ci` · `fix-pr-comments` · `fix-pr-bot-comments` · `fix-pr-developer-comments` · `fix-portability` · `fix-references` · `fix-seeder`; `comments` added 2026-06-22 — audits the **code comments** in the current branch's diff (simplify / shorten / remove), distinct from the PR-review-thread `pr-comments` sub |
|
|
32
32
|
| `optimize` | 1 | `agents-dir` · `augmentignore` · `rtk` · `skills` | `optimize-augmentignore` · `optimize-rtk-filters` · `optimize-skills` · former `/optimize agents` and `/optimize agents-md` moved to the `/agents` file-family cluster 2026-05-09; `/agents prepare/audit/cleanup` collapsed into the single `/optimize agents-dir` (flags or wizard) per the agent-doc consolidation |
|
|
33
33
|
| `feature` | 1 | `explore` · `plan` · `refactor` · `roadmap` · `dev` | `feature-explore` · `feature-plan` · `feature-refactor` · `feature-roadmap` · `feature-dev` |
|
|
34
34
|
| `chat-history` | 2 | `show` · `import` · `learn` | `chat-history` (legacy status) — `resume` / `clear` / `checkpoint` removed in `road-to-chat-history-hook-only` (auto-adopt + structural hooks); `import` (verbatim cross-session render) and `learn` (project-improving learning extraction) added in the v4 stateless schema |
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
},
|
|
75
75
|
"workspace_id": {
|
|
76
76
|
"type": "string",
|
|
77
|
-
"enum": ["engineering", "product", "finance", "founder", "gtm", "ops", "small-business", "construction", "agent-config-maintainer"]
|
|
77
|
+
"enum": ["engineering", "product", "finance", "founder", "gtm", "ops", "small-business", "construction", "legal", "agent-config-maintainer"]
|
|
78
78
|
},
|
|
79
79
|
"pack_id": {
|
|
80
80
|
"type": "string",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"finance-basic", "finance-advanced",
|
|
85
85
|
"gtm-sales", "gtm-marketing",
|
|
86
86
|
"ops-people", "founder-strategy", "small-business", "construction", "ai-video", "ai-image", "fun", "meta", "git", "frontend-design", "brand",
|
|
87
|
-
"memory", "analytics", "product-reasoning", "analysis-workbench"
|
|
87
|
+
"memory", "analytics", "product-reasoning", "analysis-workbench", "legal"
|
|
88
88
|
]
|
|
89
89
|
},
|
|
90
90
|
"lifecycle": {
|
|
@@ -93,6 +93,7 @@ install:
|
|
|
93
93
|
| `ops` | Operations | Hiring, comp, perf, org design, runbooks. |
|
|
94
94
|
| `small-business` | Small Business | Self-employed / SMB-shaped owner workflows. |
|
|
95
95
|
| `construction` | Construction | Trade-business workflows (planning, quotes). |
|
|
96
|
+
| `legal` | Legal | In-house legal — contract/NDA/DPA review, privacy, legal triage (EU/DE scope). |
|
|
96
97
|
| `agent-config-maintainer` | Maintainer | Skills/rules/commands that maintain *this* package. |
|
|
97
98
|
|
|
98
99
|
Amendments to the workspace list require an ADR-013 amendment.
|
|
@@ -120,6 +121,7 @@ Amendments to the workspace list require an ADR-013 amendment.
|
|
|
120
121
|
| `founder-strategy` | Vision, fundraising narrative, competitive moat. (Renamed from `founder` to honour the non-overlap rule against `profile.id: founder`.) |
|
|
121
122
|
| `small-business` | SMB-shaped owner workflows. |
|
|
122
123
|
| `construction` | Trade-business workflows. |
|
|
124
|
+
| `legal` | In-house legal — EU/DE-scoped contract/NDA/DPA review and legal triage; procedure-only, attorney-review draft output. |
|
|
123
125
|
| `ai-video` | AI video pipeline (per ADR-011, the only heavyweight domain). |
|
|
124
126
|
| `fun` | Non-essential social/fun workflows (prediction-pool tips, etc.). Optional under the `small-business` workspace; `experimental` trust. |
|
|
125
127
|
| `meta` | Artefacts that maintain *this* package (`agent-config` itself). |
|
|
@@ -295,6 +297,23 @@ consistency governance that constrains UI). Mirrored in
|
|
|
295
297
|
2026-06-13 (road-to-image-brand-typography Phase B). Additive, no rename;
|
|
296
298
|
non-overlap with cost-profile and `profile.id` reservations holds.
|
|
297
299
|
|
|
300
|
+
### 2026-06-24 — New `legal` workspace + `legal` pack
|
|
301
|
+
|
|
302
|
+
Added workspace id `legal` and pack id `legal` to the closed vocabularies
|
|
303
|
+
(in-house legal — EU/DE-scoped contract/NDA/DPA review and legal triage;
|
|
304
|
+
procedure-only, no default legal positions; every output a draft for attorney
|
|
305
|
+
review). Mirrored in
|
|
306
|
+
[`src/config/discovery/workspaces.yml`](../../src/config/discovery/workspaces.yml),
|
|
307
|
+
[`src/config/discovery/packs.yml`](../../src/config/discovery/packs.yml), and the
|
|
308
|
+
`ADR_WORKSPACES` + `ADR_PACKS` sets in
|
|
309
|
+
[`src/scripts/lint_discovery_vocabulary.ts`](../../src/scripts/lint_discovery_vocabulary.ts).
|
|
310
|
+
`workspaces: [legal]`, `domain: legal`, `size_class: medium`,
|
|
311
|
+
`trust_level_default: experimental`, `surface_tier: lab` (gated lab-tier until the
|
|
312
|
+
Gate-2 maintenance owner + external qualification is confirmed —
|
|
313
|
+
road-to-legal-pack Phase 0.2). Council-resolved across three rounds 2026-06-24
|
|
314
|
+
(road-to-legal-pack). Additive, no rename; non-overlap with cost-profile and
|
|
315
|
+
`profile.id` reservations holds.
|
|
316
|
+
|
|
298
317
|
## Cross-references
|
|
299
318
|
|
|
300
319
|
- [ADR-007 — Agent Discovery Scopes](ADR-007-agent-discovery-scopes.md):
|
|
@@ -108,12 +108,19 @@ corrects this:
|
|
|
108
108
|
- The global surface is **secrets** (provider keys, already global) plus the
|
|
109
109
|
curated identity **whitelist** (`MERGEABLE_KEYS`) — not all of `personal.*`,
|
|
110
110
|
not council config, not personas.
|
|
111
|
-
- **Council
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
|
|
111
|
+
- **Council config is NOT on the `MERGEABLE_KEYS` whitelist.** _(Placement
|
|
112
|
+
amended: per [ADR-093](ADR-093-ai-council-config-user-global.md) →
|
|
113
|
+
[ADR-104](ADR-104-ai-council-config-global-only.md) the council config
|
|
114
|
+
is now **user-global** at `~/.event4u/agent-config/settings/.ai-council.yml`,
|
|
115
|
+
never project-local — but it is its own dedicated `.ai-council.yml`, not a
|
|
116
|
+
merged `.agent-settings.yml` key, so it stays off this whitelist.)_ Personas
|
|
117
|
+
stay project-local (version-controlled). The `MERGEABLE_KEYS` whitelist is a
|
|
118
|
+
**security trust boundary**: an untrusted project repo must not be able to
|
|
119
|
+
escalate arbitrary `personal.*` into user scope. Widening the whitelist now
|
|
120
|
+
requires a threat model.
|
|
121
|
+
- The council config key name is **`ai_council`** (canonical), never
|
|
122
|
+
`agent_council`. It lives in the user-global `.ai-council.yml` (ADR-104),
|
|
123
|
+
not under `.agent-settings.yml`.
|
|
117
124
|
|
|
118
125
|
This amendment narrows ADR-020's wording; the global-only **consumer install**
|
|
119
126
|
decision (distributed content writes only to `~/.event4u/agent-config/`) is
|
|
@@ -13,7 +13,17 @@ type: decision
|
|
|
13
13
|
|
|
14
14
|
## Status
|
|
15
15
|
|
|
16
|
-
**Accepted** · 2026-06-03.
|
|
16
|
+
**Accepted** · 2026-06-03. **Council-config *placement* superseded by
|
|
17
|
+
[ADR-093](ADR-093-ai-council-config-user-global.md) → [ADR-104](ADR-104-ai-council-config-global-only.md)**
|
|
18
|
+
(council config now lives user-global at
|
|
19
|
+
`~/.event4u/agent-config/settings/.ai-council.yml`, never project-local).
|
|
20
|
+
The **trust-boundary decision below still stands**: `ai_council` is not on
|
|
21
|
+
the user-global *settings merge whitelist* (`.agent-settings.yml` keys) —
|
|
22
|
+
the council reads its own dedicated `.ai-council.yml`, not a merged
|
|
23
|
+
settings key. Wherever this ADR says council config "lives project-local",
|
|
24
|
+
read "lives user-global per ADR-104".
|
|
25
|
+
|
|
26
|
+
Locks the AI-council convergence
|
|
17
27
|
(anthropic/claude-sonnet-4-5 + openai/gpt-4o, design mode + peer-review,
|
|
18
28
|
2026-06-03) on where the source of truth for personal preferences and AI-council
|
|
19
29
|
configuration lives. Refines [`ADR-020`](ADR-020-global-only-consumer-scope.md)
|
|
@@ -4,7 +4,7 @@ status: accepted
|
|
|
4
4
|
date: 2026-06-13
|
|
5
5
|
decision: ai-council-config-user-global
|
|
6
6
|
supersedes: —
|
|
7
|
-
superseded_by:
|
|
7
|
+
superseded_by: 104
|
|
8
8
|
phase: ai-council-config-relocation
|
|
9
9
|
type: structural
|
|
10
10
|
---
|
|
@@ -13,9 +13,15 @@ type: structural
|
|
|
13
13
|
|
|
14
14
|
## Status
|
|
15
15
|
|
|
16
|
-
**Accepted** · 2026-06-13.
|
|
17
|
-
council
|
|
18
|
-
|
|
16
|
+
**Accepted** · 2026-06-13. **Partially superseded by
|
|
17
|
+
[ADR-104](ADR-104-ai-council-config-global-only.md)** (2026-06-22): the
|
|
18
|
+
user-global relocation stands, but the project-local override this ADR
|
|
19
|
+
*kept* (precedence rule 2 in § Decision) is removed — the council is now
|
|
20
|
+
**global-only** and never searches the project tree.
|
|
21
|
+
|
|
22
|
+
Maintainer directive (standing, restated): the council is a per-developer
|
|
23
|
+
facility and must be configured once, globally, not re-declared per
|
|
24
|
+
project.
|
|
19
25
|
|
|
20
26
|
## Context
|
|
21
27
|
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 104
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-06-22
|
|
5
|
+
decision: ai-council-config-global-only
|
|
6
|
+
supersedes: 093
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: ai-council-config-relocation
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ADR-104 — The AI-council config is global-only (drop the project-local override)
|
|
13
|
+
|
|
14
|
+
## Status
|
|
15
|
+
|
|
16
|
+
**Accepted** · 2026-06-22. Maintainer directive (standing, restated and
|
|
17
|
+
sharpened): the council is configured **once, globally** — and the agent
|
|
18
|
+
must never search a project for council config, never infer "council not
|
|
19
|
+
configured" from a project's missing files.
|
|
20
|
+
|
|
21
|
+
Supersedes the project-local override that
|
|
22
|
+
[ADR-093](ADR-093-ai-council-config-user-global.md) deliberately kept.
|
|
23
|
+
|
|
24
|
+
## Context
|
|
25
|
+
|
|
26
|
+
ADR-093 relocated the council config to the user-global namespace
|
|
27
|
+
(`~/.event4u/agent-config/settings/.ai-council.yml`) but **kept** a
|
|
28
|
+
project-local override as precedence rule 2:
|
|
29
|
+
`<project_root>/agents/settings/.ai-council.yml` would win over the
|
|
30
|
+
user-global file when present. ADR-093 also rejected the "global always
|
|
31
|
+
wins" alternative, reasoning it would break a consumer team's
|
|
32
|
+
deliberately-checked-in shared council config.
|
|
33
|
+
|
|
34
|
+
In practice that hedge produced a recurring, infuriating failure mode that
|
|
35
|
+
the loader's own correctness did *not* prevent — because the failure was
|
|
36
|
+
in the **agent's mental model**, not the resolver:
|
|
37
|
+
|
|
38
|
+
> *"Council war in diesem Projekt nicht konfiguriert (kein <!-- md-language-check: ignore -->
|
|
39
|
+
> `.agent-settings.yml`/`scripts/ai_council`), daher habe ich die eine <!-- md-language-check: ignore -->
|
|
40
|
+
> Architektur-Gabel selbst entschieden."* <!-- md-language-check: ignore -->
|
|
41
|
+
|
|
42
|
+
An agent working in a consumer project, asked to consult the council on an
|
|
43
|
+
architecture fork, looked **in the project** for council artefacts — the
|
|
44
|
+
package-internal `scripts/ai_council` directory and the long-removed
|
|
45
|
+
`.agent-settings.yml` `ai_council` block — found neither (they only exist
|
|
46
|
+
inside the agent-config package), and concluded the council was
|
|
47
|
+
unconfigured. It then decided a structural fork solo. The user's council
|
|
48
|
+
*was* configured — globally — and would have answered from any project.
|
|
49
|
+
|
|
50
|
+
The project-local override is the root of this confusion: as long as "the
|
|
51
|
+
project might carry its own council config" is a documented truth, the
|
|
52
|
+
agent treats the project tree as a place to look, and absence-in-project
|
|
53
|
+
reads as not-configured. The override's intended beneficiary (a consumer
|
|
54
|
+
team pinning a shared config in their repo) has never materialised and is
|
|
55
|
+
not worth the recurring solo-decision failure on real work.
|
|
56
|
+
|
|
57
|
+
## Decision
|
|
58
|
+
|
|
59
|
+
**The council config is global-only.** `resolve_config_path` (in
|
|
60
|
+
`scripts/ai_council/config.ts`) resolves with this precedence, first match
|
|
61
|
+
wins:
|
|
62
|
+
|
|
63
|
+
1. **`$AI_COUNCIL_CONFIG`** — an explicit absolute path (tests / power
|
|
64
|
+
users). Honoured even when absent. This is an explicit path, not a
|
|
65
|
+
project search.
|
|
66
|
+
2. **User-global** `~/.event4u/agent-config/settings/.ai-council.yml`
|
|
67
|
+
(legacy `~/.config/agent-config/` read-fallback).
|
|
68
|
+
|
|
69
|
+
The project-local branch is **removed**. The loader never builds or stats
|
|
70
|
+
`<project_root>/agents/settings/.ai-council.yml`. `project_root` stays in
|
|
71
|
+
the signature for caller stability but is not consulted for resolution.
|
|
72
|
+
|
|
73
|
+
The corollary, binding on every agent-facing surface (the `ai-council`
|
|
74
|
+
skill, the `/council` command family, the config contract): **the absence
|
|
75
|
+
of a council file in a project says nothing about whether the council is
|
|
76
|
+
configured.** An agent must never claim "council not configured" from
|
|
77
|
+
missing project files (`.agent-settings.yml`, `scripts/ai_council`, a
|
|
78
|
+
project `.ai-council.yml`). The CLI/resolver is the single authority — it
|
|
79
|
+
reads the global file and works from every project, worktree, and CWD.
|
|
80
|
+
|
|
81
|
+
## Consequences
|
|
82
|
+
|
|
83
|
+
- A user-global `.ai-council.yml` with `enabled: true` works from **every**
|
|
84
|
+
project, including consumer repos and fresh worktrees, with zero
|
|
85
|
+
per-project setup — exactly the "configure once" intent of ADR-093, now
|
|
86
|
+
without the hedge that undermined it.
|
|
87
|
+
- The "council not configured in this project" solo-decision failure mode
|
|
88
|
+
is structurally impossible: there is no project location to be absent.
|
|
89
|
+
- `council_cli.ts` and `cmd_doctor.ts` (`doctor council-cli`) inherit the
|
|
90
|
+
change automatically — both already route through `resolve_config_path`.
|
|
91
|
+
- A consumer team that genuinely wants a repo-pinned shared council config
|
|
92
|
+
uses `$AI_COUNCIL_CONFIG` (e.g. exported in their dev shell / CI) — an
|
|
93
|
+
explicit opt-in, never an implicit project-tree search.
|
|
94
|
+
- `check_council_config_location.ts` keeps guarding against
|
|
95
|
+
`.agent-settings.yml` council references; its docstring is updated to
|
|
96
|
+
drop the "project-local first" description.
|
|
97
|
+
|
|
98
|
+
## Alternatives
|
|
99
|
+
|
|
100
|
+
- **Keep ADR-093 as-is (project-local override stays).** Rejected — this is
|
|
101
|
+
the exact configuration that produced the recurring failure; the loader
|
|
102
|
+
being correct did not save the agent's mental model.
|
|
103
|
+
- **Fix only the agent-facing docs, leave the override in the loader.**
|
|
104
|
+
Rejected — as long as a project-local lookup exists, "look in the
|
|
105
|
+
project" remains a documented truth and the absence-reads-as-unconfigured
|
|
106
|
+
confusion recurs. Removing the lookup makes the instruction unambiguous.
|
|
107
|
+
- **Add a project-local override behind an explicit opt-in flag.** Rejected
|
|
108
|
+
as unneeded complexity — `$AI_COUNCIL_CONFIG` already covers the rare
|
|
109
|
+
repo-pinned case explicitly.
|
|
110
|
+
|
|
111
|
+
## References
|
|
112
|
+
|
|
113
|
+
- [ADR-093](ADR-093-ai-council-config-user-global.md) — the user-global
|
|
114
|
+
relocation this ADR sharpens to global-only.
|
|
115
|
+
- `docs/contracts/ai-council-config.md` § File location — precedence rules.
|
|
116
|
+
- `src/scripts/ai_council/config.ts` — `resolve_config_path`.
|
|
117
|
+
- `src/skills/ai-council/SKILL.md`, `src/domains/meta/council/default/command.md`
|
|
118
|
+
— agent-facing surfaces carrying the "never infer not-configured from
|
|
119
|
+
missing project files" corollary.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 105
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-06-23
|
|
5
|
+
decision: automatic-subagent-orchestration
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: auto-subagent-orchestration
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ADR-105 — Automatic subagent orchestration: activate-don't-fragment, prove before default-on
|
|
13
|
+
|
|
14
|
+
## Status
|
|
15
|
+
|
|
16
|
+
**Accepted** · 2026-06-23. Resolved by a deep AI-council round
|
|
17
|
+
(claude-sonnet-4-5 + gpt-4o, design mode) plus host critical-evaluation, and
|
|
18
|
+
implemented by `road-to-auto-subagent-orchestration.md`.
|
|
19
|
+
|
|
20
|
+
## Context
|
|
21
|
+
|
|
22
|
+
The package shipped three latent subagent surfaces — the
|
|
23
|
+
`subagent-orchestration` skill (7 modes), `/orchestrate` (YAML pipelines), and
|
|
24
|
+
the RDP `reasoning-orchestrator` ("dispatch by default") — all **opt-in**,
|
|
25
|
+
none firing automatically. The goal: make subagent use automatic and
|
|
26
|
+
settings-gated, so an orchestrating model delegates delegable sub-tasks to
|
|
27
|
+
cheaper / faster / quota-separate subagents, each configured for its task,
|
|
28
|
+
globally toggleable in `.agent-settings.yml`.
|
|
29
|
+
|
|
30
|
+
The user's stated default was **on**. The council pushed back hard: a "default
|
|
31
|
+
on" whose own design concedes it *may increase* token spend inverts risk in a
|
|
32
|
+
package whose canon includes token-efficiency as an Iron Law, and whose
|
|
33
|
+
multi-tool portability constraint means not every host even has a subagent
|
|
34
|
+
primitive.
|
|
35
|
+
|
|
36
|
+
## Decision
|
|
37
|
+
|
|
38
|
+
1. **Activate, don't fragment.** Auto-dispatch is a settings + host-manifest
|
|
39
|
+
gate over the **existing** `subagent-orchestration` skill and RDP
|
|
40
|
+
"dispatch by default" — not a new parallel rule. Smallest surface.
|
|
41
|
+
2. **Conservative-until-proven shipped default.** The full toggle ships now
|
|
42
|
+
(`subagents.enabled`, `subagents.auto: off|ask|on`), but the **shipped**
|
|
43
|
+
default is `ask` on hosts whose capability manifest reports
|
|
44
|
+
`subagent_spawn: true`, `off` elsewhere. The default flips toward `on`
|
|
45
|
+
(host-gated) **only** behind a real benchmark proving a net token-or-time
|
|
46
|
+
win at held quality (Phase 6). `on` is the destination, reached by
|
|
47
|
+
evidence — the reconciliation of the user's goal with the council's
|
|
48
|
+
prove-first.
|
|
49
|
+
3. **Quota arbitrage is a runtime-detected bonus, never load-bearing.** The
|
|
50
|
+
"separate quota pool" (e.g. a subscription's distinct Sonnet allowance) is a
|
|
51
|
+
`host-capability-manifest` flag; routing is identical (minus the bonus)
|
|
52
|
+
where unsupported. No `.md` names a vendor's billing rule.
|
|
53
|
+
4. **Deterministic classification v1.** Delegability is decided by enumerated
|
|
54
|
+
structural signals (frontmatter `parallelizable:`, ordered-plan,
|
|
55
|
+
independent-slices, a size floor); ambiguity defaults to ask/no-op, never
|
|
56
|
+
speculative spawn. No per-turn LLM meta-call in v1. LLM classification is
|
|
57
|
+
deferred to v2+, gated on the benchmark.
|
|
58
|
+
5. **Verification budget preserves the floors.** Trivial/read-only sub-tasks
|
|
59
|
+
verify deterministically; non-trivial mutating sub-tasks get a full
|
|
60
|
+
cross-model judge (the `subagent-orchestration` Iron Law). A required
|
|
61
|
+
verification recorded as `none` is a surfaced safety gap.
|
|
62
|
+
6. **Instrumentation first; kill-switch + surfaced guardrails.** Orchestration
|
|
63
|
+
telemetry rides additively on `audit-log-v1`. The kill-switch is a
|
|
64
|
+
single settings flip (`enabled: false` / `auto: off`). Rollback thresholds
|
|
65
|
+
(token blowup, spawn-failure, verify-skip, override rate) are surfaced from
|
|
66
|
+
the audit log — there is no automatic cohort-disable (a config package runs
|
|
67
|
+
no daemon).
|
|
68
|
+
7. **Graceful host degradation.** Where the manifest reports
|
|
69
|
+
`subagent_spawn: false`, the whole layer is a clean no-op (single-agent),
|
|
70
|
+
surfaced explicitly. `.md` artefacts stay project-agnostic.
|
|
71
|
+
|
|
72
|
+
## Consequences
|
|
73
|
+
|
|
74
|
+
- Auto-dispatch is the default **where the host and settings allow it**, and a
|
|
75
|
+
no-op everywhere else. No safety floor is lifted.
|
|
76
|
+
- The user's "default on" is an evidence-gated milestone, not assumed — the
|
|
77
|
+
one decision left for the user is to authorise/run the Phase-6 benchmark and
|
|
78
|
+
approve the default flip.
|
|
79
|
+
- The implementation is mostly contexts + small pure helpers + a settings
|
|
80
|
+
block + two activated skills, keeping the diff minimal.
|
|
81
|
+
|
|
82
|
+
## Alternatives considered
|
|
83
|
+
|
|
84
|
+
- **Default `on` immediately** (the literal ask) — rejected: inverts risk
|
|
85
|
+
before measurement, against the frugality canon.
|
|
86
|
+
- **New parallel auto-dispatch rule** — rejected: fragments a surface that
|
|
87
|
+
already exists; activation is the smaller change.
|
|
88
|
+
- **Quota arbitrage as a core motivation** — rejected: vendor-specific,
|
|
89
|
+
fragile, violates portability; demoted to a runtime bonus.
|
|
90
|
+
- **Council-strict default `off` forever** — rejected: forecloses the user's
|
|
91
|
+
goal; the benchmark gate is the middle path.
|
|
92
|
+
|
|
93
|
+
## References
|
|
94
|
+
|
|
95
|
+
- The auto-subagent-orchestration roadmap (now archived) + the
|
|
96
|
+
full council Convergence / Host verdict.
|
|
97
|
+
- [`docs/contracts/auto-orchestration-v1.md`](../contracts/auto-orchestration-v1.md) — the manifest + spawn + telemetry contract.
|
|
98
|
+
- Context docs under `src/agent-src/contexts/execution/`:
|
|
99
|
+
`host-capability-manifest`, `orchestration-telemetry`,
|
|
100
|
+
`auto-orchestration-activation`, `auto-dispatch-classification`,
|
|
101
|
+
`subagent-routing`, `subagent-spawn-contract`, `verify-budget`,
|
|
102
|
+
`subagent-steering`, `orchestration-benchmark-gate`.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 106
|
|
3
|
+
status: accepted
|
|
4
|
+
date: 2026-06-23
|
|
5
|
+
decision: recursive-verification-benchmark-gate
|
|
6
|
+
supersedes: —
|
|
7
|
+
superseded_by: —
|
|
8
|
+
phase: recursive-verification · Phase 0
|
|
9
|
+
type: structural
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ADR-106 — Recursive-verification benchmark gate: capability-OR-measured-novel-discipline, not capability-only
|
|
13
|
+
|
|
14
|
+
## Status
|
|
15
|
+
|
|
16
|
+
Accepted (2026-06-23). Locks the Phase 0 gate definition for
|
|
17
|
+
[`road-to-recursive-verification.md`](../../agents/roadmaps/archive/road-to-recursive-verification.md)
|
|
18
|
+
before any live `bench:ab` spend.
|
|
19
|
+
|
|
20
|
+
## Context
|
|
21
|
+
|
|
22
|
+
The `recursive-verification` skill (depth-bounded `attempt → critic verdict →
|
|
23
|
+
re-attempt`, default `off`) needs a benchmark gate that decides whether its
|
|
24
|
+
shipped default flips to `on`/`ask` for a given host. The roadmap's initial draft
|
|
25
|
+
proposed **capability-axis-first**: ship only on a capability-axis lift; a
|
|
26
|
+
discipline-axis-only lift does **not** pass, on the assumption that the package's
|
|
27
|
+
existing always-on rules already deliver the discipline lift, so recursion would
|
|
28
|
+
merely duplicate them at ~11× cost.
|
|
29
|
+
|
|
30
|
+
This gate definition was put to the AI council (manual transport disabled; live
|
|
31
|
+
`council run --depth deep`, 3 rounds; members **anthropic/claude-sonnet-4-5** +
|
|
32
|
+
**openai/gpt-4o**, 2026-06-23, actual cost $0.0762). Both members independently
|
|
33
|
+
converged that **capability-only is the wrong gate**, for a sound methodological
|
|
34
|
+
reason; one member (anthropic) also raised a misreading that the host rejected.
|
|
35
|
+
|
|
36
|
+
### What the council got right (accepted)
|
|
37
|
+
|
|
38
|
+
- **The redundancy assumption is unmeasured.** The gate assumed recursion's
|
|
39
|
+
discipline lift is redundant with the existing rules *without measuring it*.
|
|
40
|
+
The fix is a **three-baseline** design and an explicit **marginal** lift:
|
|
41
|
+
- `D₀` = bare host (no rules, no recursion)
|
|
42
|
+
- `D₁` = rules only (always-on rules, no recursion)
|
|
43
|
+
- `D₂` = rules + recursion
|
|
44
|
+
- **novel discipline lift = `D₂ − D₁`** — recursion's contribution *over*
|
|
45
|
+
rules-only. Redundancy is now a measured fact, not an assumption.
|
|
46
|
+
- **Cheap human-preference pre-test first.** Before any expensive benchmark, show
|
|
47
|
+
~10 `(attempt₀, attempt_final)` pairs to humans and ask "which would you pay
|
|
48
|
+
for?". If preference < 60 %, the discipline lift is economically irrelevant →
|
|
49
|
+
capability-only gate stands and the expensive discipline arm is skipped (~$15
|
|
50
|
+
to settle the whole dispute). This mirrors the package's cheap-probe-first,
|
|
51
|
+
measure-first culture.
|
|
52
|
+
- **Concrete cost ceiling, not "tolerable".** The original "at a tolerable cost"
|
|
53
|
+
is circular. Replace with a measurable ceiling (token multiplier / $-per-task).
|
|
54
|
+
- **Per-(host, family) cell**, not host-global — recursion may pass for a weak
|
|
55
|
+
host on one family and fail for a strong host with no headroom.
|
|
56
|
+
|
|
57
|
+
### What the council got wrong (rejected by the host)
|
|
58
|
+
|
|
59
|
+
- anthropic framed the gate as a *"fatal flaw because the 0.333 → 1.000 lift is
|
|
60
|
+
already recursion."* This is a **misread** of `docs/benchmark.md`: that lift is
|
|
61
|
+
the *rules'* effect (vanilla → package), measured **without** recursion;
|
|
62
|
+
recursion's marginal lift is unmeasured (that is exactly what Phase 3 runs). The
|
|
63
|
+
valid extraction is the three-baseline design above, not "capability-first is
|
|
64
|
+
fatally wrong."
|
|
65
|
+
- A weighted composite metric `w_cap·Δcap + w_disc·Δdisc` (openai) is **rejected**:
|
|
66
|
+
the weights are precisely the unknown the gate exists to discover (anthropic's
|
|
67
|
+
own counter, which the host endorses).
|
|
68
|
+
|
|
69
|
+
## Decision
|
|
70
|
+
|
|
71
|
+
The shipped default for `verification.recursive` flips to `on`/`ask` for a
|
|
72
|
+
**(host, family) cell** if and only if:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
capability_lift(host, family) significant (McNemar on pass-rate, or scorer
|
|
76
|
+
Wilcoxon p < 0.05, ≥6 discordant
|
|
77
|
+
pairs, effect ≥ 0.5)
|
|
78
|
+
OR
|
|
79
|
+
( novel_discipline_lift = D₂ − D₁ > ε_disc (recursion over rules-only —
|
|
80
|
+
MEASURED, never assumed)
|
|
81
|
+
AND cost_per_task ≤ ceiling (concrete token-multiplier / $)
|
|
82
|
+
AND human_preference_rate > 0.6 )
|
|
83
|
+
ELSE off.
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Cheap prerequisite (runs first, gates the rest):** the ~$15 human-preference
|
|
87
|
+
test. Preference < 60 % ⇒ capability-only gate stands; skip the discipline arm.
|
|
88
|
+
|
|
89
|
+
**The benchmark must report, per (host, family):** `pass_rate(D₀/D₂)`,
|
|
90
|
+
`discipline_score(D₀ / D₁ / D₂)`, `cost(D₂)/cost(D₀)`, and
|
|
91
|
+
`human_preference(recursion vs baseline)`. Without the `D₁` (rules-only) middle
|
|
92
|
+
term, redundancy cannot be detected; without human-preference, a discipline lift
|
|
93
|
+
cannot be validated as economically real.
|
|
94
|
+
|
|
95
|
+
The first measured cell is `(claude-haiku-4-5, scope-discipline)`; multi-family
|
|
96
|
+
expansion waits until data justifies it.
|
|
97
|
+
|
|
98
|
+
## Consequences
|
|
99
|
+
|
|
100
|
+
- Phase 3 of the roadmap gains a **rules-only (`D₁`) arm** and a **Phase 3a-pre
|
|
101
|
+
human-preference test**; the gate language changes from "capability-first;
|
|
102
|
+
discipline-only ⇒ STOP" to the two-branch rule above.
|
|
103
|
+
- An honest-null is still first-class: capability flat **and** (human-preference
|
|
104
|
+
< 60 % OR `D₂ − D₁` ≤ ε OR cost over ceiling) ⇒ ship nothing, record the null.
|
|
105
|
+
- The default stays `off` until a cell passes; no global flip without its own cell.
|
|
106
|
+
- Slightly more measurement up front (three baselines + a human pre-test), bought
|
|
107
|
+
cheaply ($15 pre-test gates the expensive arm) — net a more honest gate.
|
|
108
|
+
|
|
109
|
+
## Alternatives considered
|
|
110
|
+
|
|
111
|
+
- **Capability-only (original draft).** Rejected: assumes, without measuring,
|
|
112
|
+
that recursion's discipline lift is redundant with the rules.
|
|
113
|
+
- **Weighted composite metric.** Rejected: presupposes the weights the gate
|
|
114
|
+
exists to discover.
|
|
115
|
+
- **Holistic / qualitative gate (openai round 1).** Rejected: too vague to
|
|
116
|
+
operationalise into a ship/no-ship decision.
|
|
117
|
+
|
|
118
|
+
## References
|
|
119
|
+
|
|
120
|
+
- [`road-to-recursive-verification.md`](../../agents/roadmaps/archive/road-to-recursive-verification.md)
|
|
121
|
+
- [`docs/benchmark.md`](../benchmark.md) — the existing wrapper-lift A/B evidence.
|
|
122
|
+
- Council round: anthropic/claude-sonnet-4-5 + openai/gpt-4o, 2026-06-23, deep
|
|
123
|
+
tier (3 rounds), $0.0762 actual.
|
|
124
|
+
- [`subagent-orchestration`](../../src/skills/subagent-orchestration/SKILL.md),
|
|
125
|
+
[`verify-budget`](../../src/agent-src/contexts/execution/verify-budget.md),
|
|
126
|
+
`orchestration-benchmark-gate` (`gateVerdict` / `resolveShippedDefault`).
|