diff --git a/CLAUDE.md b/CLAUDE.md index 499c825..9c1c22e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,7 +2,7 @@ Voyage — a contract-driven Claude Code pipeline: brief, research, plan, execute, review, continue. Deep implementation planning and research with specialized agent swarms, external research, adversarial review, session decomposition, disciplined execution, and headless support. -**Design principle: Context Engineering** — build the right context by orchestrating specialized agents. Each step in the pipeline (brief → research → plan → execute) produces a structured artifact that the next step consumes. (The claim that fanning out to a swarm *relieves* the main context is asserted-by-design, not measured end-to-end: the one delegation actually measured — the Phase-7 synthesis PoC — found Δ main-context ≈ 0, see `docs/T1-synthesis-poc-results.md`. The structured-artifact handoffs are the load-bearing benefit; main-context relief is not yet demonstrated.) +**Design principle: Context Engineering** — build the right context by orchestrating specialized agents. Each step in the pipeline (brief → research → plan → execute) produces a structured artifact that the next step consumes. (The claim that fanning out to a swarm *relieves* the main context is asserted-by-design, not measured end-to-end: the one delegation actually measured — the Phase-7 synthesis PoC — found Δ main-context ≈ 0, see `docs/T1-synthesis-poc-results.md`. The parallel wall-clock + structured artifact handoffs are the load-bearing benefit; main-context relief is not yet demonstrated.) > **v3.0.0 — architect step extracted from this plugin.** The plan command still auto-discovers `architecture/overview.md` if present, so any compatible producer (architect plugin no longer publicly distributed; the architecture/overview.md slot remains available for any compatible producer) plugs into the same slot. See [CHANGELOG.md](CHANGELOG.md) for migration history. diff --git a/tests/lib/doc-consistency.test.mjs b/tests/lib/doc-consistency.test.mjs index 926923c..f8c03c9 100644 --- a/tests/lib/doc-consistency.test.mjs +++ b/tests/lib/doc-consistency.test.mjs @@ -1220,3 +1220,49 @@ test('S33: the analysis doc records the D1–D3 resolved forks (considered-and-k // reader sees the downgrade was reconsidered-and-declined, not overlooked. assert.ok(/40d8742/.test(t), 'decision record must cite the model-pin commit 40d8742 (D3 kept firm, document-only)'); }); + +// ── S38 — fan-out hedge harmonization + relief-assertion forward-guard (SC d) ── +// +// The brief's SC(d) premise — an unhedged "fan-out relieves main context" string +// present in ~23 files awaiting a removal diff — is factually false: plan-time +// enumeration shows the unhedged set is ∅. Every live relief mention is already +// hedged (the sole one is CLAUDE.md:5, hedged since S18), and the +// docs/T2-bakeoff-results.md "frees the main context" lines are a DIFFERENT, true +// background-execution claim (must NOT be touched). SC(d) therefore ships as: +// (1) one surgical harmonization at CLAUDE.md:5 making the replacement phrase +// "parallel wall-clock" grep-positive (the Δ≈0 / "not yet demonstrated" +// qualifier kept intact), and +// (2) this durable forward-guard — a PRECISE relief-assertion matcher (verb-of- +// relief + main-context, NOT a bare "main context" grep that would false-fail +// benign locatives like "runs inline in main context") scoped to product- +// facing docs, requiring an adjacent hedge token on any match. +// Fix the SOURCE prose (add the hedge / drop the claim), never this test. + +test('S38: CLAUDE.md carries the harmonized fan-out phrase "parallel wall-clock" (SC d)', () => { + assert.ok( + read('CLAUDE.md').includes('parallel wall-clock'), + 'CLAUDE.md:5 must state the replacement phrase "parallel wall-clock + structured artifact handoffs" (SC d harmonization)', + ); +}); + +test('S38: forward-guard — no product-facing doc asserts main-context relief unhedged (SC d)', () => { + // Banned form: a verb of relief adjacent to "main context" (or "main-context … + // relief"), NOT a plain locative ("runs in main context"). Decision/research + // records (docs/*) are append-only history and out of scope by design. + const RELIEF = /(relieve|relieves|relieving|free|frees|offload|offloads)\b[^.\n]{0,40}\bmain[-\s]context\b|\bmain[-\s]context\b[^.\n]{0,20}\brelief\b|swarm\s+relieves\s+context/i; + const HEDGE = /Δ|not measured|asserted-by-design|not yet demonstrated|not demonstrated/i; + const productFacing = ['README.md', 'CLAUDE.md', ...listMd('commands').map((f) => `commands/${f}`)]; + const offenders = []; + for (const rel of productFacing) { + read(rel).split('\n').forEach((ln, i) => { + if (RELIEF.test(ln) && !HEDGE.test(ln)) offenders.push(`${rel}:${i + 1} ${ln.trim().slice(0, 100)}`); + }); + } + assert.equal( + offenders.length, + 0, + 'Unhedged main-context-relief assertion(s) in product-facing docs — add an adjacent hedge ' + + '(Δ / "not measured" / "asserted-by-design" / "not yet demonstrated") or drop the claim:\n' + + offenders.join('\n'), + ); +});