release(v5.10.1): drop gemini-bridge from the pipeline; correct the T1 §6 PoC status
gemini-bridge is dropped by operator directive (three repetitions). The drop is permanent, not a wait-for-SDK-upgrade state, so the change clears every LIVE surface that could still steer a run toward the agent and leaves the historical record alone. Live surfaces cleared: agents/gemini-bridge.md deleted; trekresearch (bridge launch block, --local help, high-effort always-on pair, stats record, degradation list), trekplan, trekbrief, research-orchestrator (mode table, agent table, prompting block, summary line), README (feature prose, mode table, agent prose, mermaid EXTERNAL node, conditional legend, optional-MCP requirement, --local section), CLAUDE.md, settings.json (the whole trekresearch.geminiBridge block), both templates, architecture.md, command-modes.md. trekplan high-effort Adversarial Pass 2 now degrades EXPLICITLY: it emits its section with status "unavailable, skipped" instead of failing or vanishing. A high-effort plan carrying no Pass 2 marker is indistinguishable from one whose Pass 2 crashed, which is the failure mode this wording exists to prevent. gemini_used is deliberately KEPT as a vestigial trekresearch stats field pinned to false. Removing it would break the observability export schema for existing consumers, and the directive was about the agent, not the field. Not touched: CHANGELOG history and the measurement/decision docs keep their gemini references. They record what a past version did or what was measured then; rewriting them is the same defect class as bumping a version string inside a measurement doc. Driven test-first. Five new pins in tests/lib/doc-consistency.test.mjs, verified RED before the edits, including a KNOWN-POSITIVE CONTROL asserting the historical records still DO carry gemini references — so the empty result on live surfaces is a measurement and not a broken query (Verifiseringsloven ansikt 4). Agent inventory 24 -> 23 (20 spawnable + 3 orchestrator reference docs); the <example>-block floor moves 34 -> 32 because an agent legitimately left the inventory, not because examples went missing from a surviving one. Docs: docs/T1-cc26-delegated-orchestration.md §8 item 3 claimed both the §6 synthesis-agent PoC and the §5 bake-off were "designed but unbuilt". That was written in S7 and falsified the same afternoon by S12, which ran the §6 PoC and recorded Δ main-context (faithful flow) = 0.0%, NEGATIVE. The stale wording is what caused the settled PoC to be re-ordered as new work on 2026-09-02, so it is struck rather than deleted and §6 gained a RUN AND DECLINED status block. The finding is structural, not stochastic: Phase 5 spawns the exploration swarm foreground (trekplan.md:158,338-341), so the outputs are already resident in main before Phase 7 — delegating only the Phase-7 digest evicts nothing. Also measured 2026-09-03 (CC 2.1.259): claude -p --output-format stream-json runs on subscription auth with no ANTHROPIC_API_KEY and now emits a subagent_stats block, so S12's environment-block premise is half stale. Recorded in §8 item 4. It lowers the cost of §5; it changes nothing about §6. Suite 1041 (1039/0/2), up from 1036 by exactly the five tests added. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
20cdc22803
commit
1ca48e0cd0
19 changed files with 261 additions and 249 deletions
|
|
@ -152,14 +152,18 @@ test('no agents/*.md frontmatter contains an <example> block (M4: examples live
|
|||
}
|
||||
});
|
||||
|
||||
test('agent bodies retain at least 34 <example> blocks (M4: relocation moves, never deletes)', () => {
|
||||
// Floor lowered 34 -> 32 in v5.10.1: `gemini-bridge` (2 examples) was DELETED as an
|
||||
// agent by operator directive, not relocated. The pin guards M4's "relocation moves,
|
||||
// never deletes" invariant, so it must move only when an agent legitimately leaves the
|
||||
// inventory — never to absorb examples that went missing from a surviving agent.
|
||||
test('agent bodies retain at least 32 <example> blocks (M4: relocation moves, never deletes)', () => {
|
||||
let total = 0;
|
||||
for (const f of agentFiles) {
|
||||
total += (bodyOf(read(`agents/${f}`)).match(/<example>/g) || []).length;
|
||||
}
|
||||
assert.ok(
|
||||
total >= 34,
|
||||
`expected >= 34 <example> blocks across agent bodies (17 agents x 2), got ${total} ` +
|
||||
total >= 32,
|
||||
`expected >= 32 <example> blocks across agent bodies (16 agents x 2), got ${total} ` +
|
||||
`— examples may have been deleted instead of relocated (M4)`,
|
||||
);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1702,3 +1702,94 @@ test('v5.9: no commands/*.md frontmatter carries a model: key (session inheritan
|
|||
assert.deepEqual(offenders, [],
|
||||
`command frontmatter must omit model: (orchestrator follows the session model); offenders: ${offenders.join(', ')}`);
|
||||
});
|
||||
|
||||
// --- S95 (③): gemini-bridge is DROPPED from the pipeline (operator directive) ---
|
||||
//
|
||||
// Operator directive, three repetitions: gemini-mcp and voyage:gemini-bridge are
|
||||
// never to be used. The drop is permanent, not a wait-for-upgrade — so the pin is
|
||||
// on the LIVE pipeline surfaces only. Historical records (CHANGELOG entries,
|
||||
// measurement/decision docs) must KEEP their references: they say what a past
|
||||
// version did or what was measured then, and rewriting them is the same defect
|
||||
// class as bumping a version string inside a measurement doc.
|
||||
//
|
||||
// `gemini_used` is deliberately NOT banned. It is a vestigial trekresearch stats
|
||||
// field, pinned to false by the drop and kept so the observability export schema
|
||||
// does not break for existing consumers (see TREKRESEARCH_ALLOWED).
|
||||
|
||||
// Live = anything that can still steer a run. Explicit, so a new file forces a decision.
|
||||
const GEMINI_LIVE_SURFACES = [
|
||||
'README.md',
|
||||
'CLAUDE.md',
|
||||
'settings.json',
|
||||
'docs/architecture.md',
|
||||
'docs/command-modes.md',
|
||||
'templates/research-brief-template.md',
|
||||
'templates/trekbrief-template.md',
|
||||
'tests/fixtures/jsonl-schemas.md',
|
||||
...listMd('commands').map((f) => `commands/${f}`),
|
||||
...listMd('agents').map((f) => `agents/${f}`),
|
||||
];
|
||||
|
||||
// Historical/measurement records that MUST keep their gemini references.
|
||||
const GEMINI_HISTORICAL = [
|
||||
'CHANGELOG.md',
|
||||
'docs/cc-upgrade-2.1.181-decision-matrix.md',
|
||||
'docs/voyage-vs-cc-balance-analysis.md',
|
||||
'docs/BRIEF-vurdering-v2.md',
|
||||
'docs/balance-backlog-plan.md',
|
||||
'docs/agent-description-token-trim-brief.md',
|
||||
'docs/S22-happy-path-dogfood.md',
|
||||
'docs/deep-research-engine-brief.md',
|
||||
'examples/02-real-cli/REGENERATED.md',
|
||||
];
|
||||
|
||||
test('S95: agents/gemini-bridge.md is removed from the agent inventory', () => {
|
||||
assert.ok(
|
||||
!listMd('agents').includes('gemini-bridge.md'),
|
||||
'gemini-bridge is dropped by operator directive — agents/gemini-bridge.md must not exist',
|
||||
);
|
||||
});
|
||||
|
||||
test('S95: no live pipeline surface still names the gemini-bridge agent', () => {
|
||||
const offenders = [];
|
||||
for (const rel of GEMINI_LIVE_SURFACES) {
|
||||
// Everything gemini EXCEPT the vestigial gemini_used stats field.
|
||||
const hits = (read(rel).match(/gemini[\w-]*/gi) || []).filter(
|
||||
(m) => m.toLowerCase() !== 'gemini_used',
|
||||
);
|
||||
if (hits.length) offenders.push(`${rel} (${[...new Set(hits)].join(', ')})`);
|
||||
}
|
||||
assert.deepEqual(
|
||||
offenders, [],
|
||||
`gemini-bridge is dropped — these live surfaces still reference it: ${offenders.join(' · ')}`,
|
||||
);
|
||||
});
|
||||
|
||||
test('S95: known-positive control — the historical records still DO carry gemini references', () => {
|
||||
// Verifiseringsloven ansikt 4: a scanner that finds nothing anywhere proves
|
||||
// nothing. This pins that the same query CAN find, so the empty result above
|
||||
// is a measurement and not a broken query.
|
||||
const silent = GEMINI_HISTORICAL.filter((rel) => !/gemini/i.test(read(rel)));
|
||||
assert.deepEqual(
|
||||
silent, [],
|
||||
`these historical records lost their gemini references — history must not be rewritten: ${silent.join(', ')}`,
|
||||
);
|
||||
});
|
||||
|
||||
test('S95: trekplan high-effort Pass 2 degrades explicitly instead of failing', () => {
|
||||
const t = read('commands/trekplan.md');
|
||||
const section = t.split('\n### High-effort behavior (v5.1.1)\n')[1];
|
||||
assert.ok(section, 'trekplan.md must still carry the High-effort behavior sub-section');
|
||||
const head = section.split('\n## ')[0];
|
||||
assert.match(
|
||||
head, /unavailable, skipped/,
|
||||
'the dropped Pass 2 must read "unavailable, skipped" explicitly — a removed pass that is silent is indistinguishable from one that failed',
|
||||
);
|
||||
});
|
||||
|
||||
test('S95: gemini_used survives as a vestigial stats field (export schema unbroken)', () => {
|
||||
assert.ok(
|
||||
TREKRESEARCH_ALLOWED.has('gemini_used'),
|
||||
'gemini_used stays in the trekresearch export allowlist — the agent is dropped, the field is pinned false, and removing it would break existing consumers',
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue