feat(voyage): S11 — NW2 part B, integrate opt-in --workflow flag
Make the bake-off-validated Workflow substrate (Arm B) reachable behind an opt-in --workflow flag for /trekreview. Default Phase 5-6 path stays prose to preserve the lower portability floor; --workflow raises the consumer floor to Claude Code 2.1.154+ (the Workflow tool). - arg-parser: --workflow added to trekreview boolean flags - commands/trekreview.md: flag row + Phase 5 substrate-routing gate + new section 'Phase 5-6 via the Workflow substrate' (invocation contract, S10 gotchas, bake-off citation, auto/bypass residual as Known limitation) - docs/command-modes.md: --workflow row in /trekreview table - routes to existing scripts/trekreview-armB.workflow.mjs (byte-identical to the S10 part-B POSITIVE build); integration is pure routing, no script change TDD: 8 new tests (arg-parser flag recognition + combine; command/doc prose pins for route, opt-in posture, 2.1.154+ floor, bake-off evidence). Suite 662 -> 670 (668 pass / 2 skip / 0 fail). plugin validate clean modulo known root-CLAUDE.md warning. Resolves W1-narrow-wins-plan.md S11.
This commit is contained in:
parent
f7c8aa45ab
commit
9fb536e2d8
5 changed files with 130 additions and 1 deletions
|
|
@ -13,9 +13,11 @@ import { parseDocument } from '../../lib/util/frontmatter.mjs';
|
|||
const HERE = dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = join(HERE, '..', '..');
|
||||
const COMMAND_FILE = join(ROOT, 'commands', 'trekreview.md');
|
||||
const MODES_DOC = join(ROOT, 'docs', 'command-modes.md');
|
||||
const PHASE = 'review';
|
||||
|
||||
function read() { return readFileSync(COMMAND_FILE, 'utf8'); }
|
||||
function readModes() { return readFileSync(MODES_DOC, 'utf8'); }
|
||||
function readFixture(name) { return readFileSync(join(ROOT, 'tests', 'fixtures', name), 'utf8'); }
|
||||
function frontmatterOf(text) {
|
||||
const doc = parseDocument(text);
|
||||
|
|
@ -72,3 +74,50 @@ test('trekreview — SC7: brief_version 2.1 + no phase_signals + no partial →
|
|||
`sequencing gate must fire; errors=${JSON.stringify(r.errors)}`,
|
||||
);
|
||||
});
|
||||
|
||||
// --- S11 (NW2 part B) — opt-in --workflow substrate routing ---
|
||||
|
||||
test('trekreview — Phase 1 flag table documents the --workflow opt-in flag', () => {
|
||||
const text = read();
|
||||
assert.match(text, /--workflow/,
|
||||
'commands/trekreview.md must document the --workflow opt-in flag (NW2 part B)');
|
||||
});
|
||||
|
||||
test('trekreview — --workflow routes Phase 5–6 to the validated NW2 Workflow port script', () => {
|
||||
const text = read();
|
||||
assert.ok(text.includes('scripts/trekreview-armB.workflow.mjs'),
|
||||
'the --workflow route must reference the bake-off-validated NW2 Workflow port script');
|
||||
});
|
||||
|
||||
test('trekreview — Workflow path is opt-in; default stays prose (portability floor)', () => {
|
||||
const text = read();
|
||||
assert.match(text, /opt-in/i, '--workflow must be described as opt-in');
|
||||
assert.ok(text.includes('Default stays prose'),
|
||||
'the command must state the default Phase 5–6 path stays prose (not Workflow)');
|
||||
});
|
||||
|
||||
test('trekreview — Workflow opt-in documents the Claude Code 2.1.154+ floor', () => {
|
||||
const text = read();
|
||||
assert.match(text, /2\.1\.154/,
|
||||
'the --workflow path raises the consumer floor and must document Claude Code 2.1.154+');
|
||||
});
|
||||
|
||||
test('trekreview — bake-off evidence (fidelity-equivalent / T2 results) is cited for the opt-in', () => {
|
||||
const text = read();
|
||||
assert.ok(
|
||||
text.includes('T2-bakeoff-results.md') && /fidelity-equivalent/i.test(text),
|
||||
'the opt-in must cite the S10 bake-off (docs/T2-bakeoff-results.md) fidelity-equivalence verdict',
|
||||
);
|
||||
});
|
||||
|
||||
test('command-modes.md — /trekreview table documents --workflow + its CC floor', () => {
|
||||
const text = readModes();
|
||||
const start = text.indexOf('## /trekreview modes');
|
||||
assert.ok(start >= 0, 'command-modes.md missing "## /trekreview modes" section');
|
||||
const end = text.indexOf('\n## ', start + 1);
|
||||
const section = text.slice(start, end === -1 ? undefined : end);
|
||||
assert.match(section, /--workflow/,
|
||||
'command-modes.md /trekreview table must list the --workflow opt-in flag');
|
||||
assert.match(section, /2\.1\.154/,
|
||||
'command-modes.md /trekreview --workflow row must note the Claude Code 2.1.154+ floor');
|
||||
});
|
||||
|
|
|
|||
|
|
@ -97,6 +97,23 @@ test('trekreview — unknown flag goes to unknown[]', () => {
|
|||
assert.ok(r.unknown.includes('--mystery'));
|
||||
});
|
||||
|
||||
// --- S11 (NW2 part B) — opt-in --workflow substrate flag ---
|
||||
|
||||
test('trekreview — --workflow boolean flag (NW2 opt-in substrate)', () => {
|
||||
const r = parseArgs('--workflow', 'trekreview');
|
||||
assert.equal(r.flags['--workflow'], true);
|
||||
assert.ok(!r.unknown.includes('--workflow'),
|
||||
'--workflow must be a recognized trekreview flag, not unknown[]');
|
||||
});
|
||||
|
||||
test('trekreview — --workflow combines with --quick + --project', () => {
|
||||
const r = parseArgs('--workflow --quick --project .claude/projects/x', 'trekreview');
|
||||
assert.equal(r.flags['--workflow'], true);
|
||||
assert.equal(r.flags['--quick'], true);
|
||||
assert.equal(r.flags['--project'], '.claude/projects/x');
|
||||
assert.deepEqual(r.unknown, []);
|
||||
});
|
||||
|
||||
test('trekcontinue — empty args produce no flags and no positional', () => {
|
||||
const r = parseArgs('', 'trekcontinue');
|
||||
assert.equal(r.command, 'trekcontinue');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue