Files
msd-core/tests/verifier-spotcheck-test-discipline.test.cjs
Tom Boucher ad1203f9d4 feat(#25): scope gsd-verifier Step 7b to enumerate-or-single-test; forbid full-suite re-runs (#753)
* feat(#25): scope gsd-verifier Step 7b to enumerate-or-single-test; forbid full-suite re-runs

Step 7b's lone test example (`npm test -- --grep "$PHASE_TEST_PATTERN"`) is
mocha/vitest/jest-specific, where `--grep` filters which tests *execute*. Models
generalized it to `cargo test --workspace 2>&1 | grep X` (runs the whole suite,
filters only *output*) and repeated it once per must-have, adding minutes per
verification with no new evidence after the first run.

Replace the example with language-agnostic guidance: prove a test EXISTS via
enumeration (`cargo test -- --list` / `pytest --collect-only` / `npx vitest
list` / `go test -list`), and prove it PASSES via a single named test
(`cargo test <name> -- --exact` / `pytest -k` / `npx vitest run -t`). Add a
Spot-check constraint forbidding more than one full-suite run per verification
or piping a full run through grep per must-have, while still permitting one
saved run + grep when a full run is genuinely required. docs/AGENTS.md gains a
one-line Key-behaviors note, and a new test asserts the Step 7b content.

Scoped per the maintainer decision on the issue: folded into Step 7b (no new
top-level Step 7a) with no VERIFICATION.md label changes.

Closes #25

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(#25): add Changed changeset fragment for PR #753

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 00:46:27 -04:00

58 lines
2.1 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert');
const fs = require('node:fs');
const path = require('node:path');
// Issue #25: gsd-verifier Step 7b must not present the runner-specific
// full-suite "| grep" anti-pattern, and must steer toward
// enumerate-for-existence / single-named-test-for-pass.
const verifierPath = path.join(__dirname, '..', 'agents', 'gsd-verifier.md');
const content = fs.readFileSync(verifierPath, 'utf8');
// Scope assertions to the Step 7b section so the guard tracks the right place.
const start = content.indexOf('## Step 7b');
const end = content.indexOf('## Step 7c', start);
assert.ok(start !== -1 && end !== -1 && end > start, 'Step 7b section not found');
const step7b = content.slice(start, end);
test('Step 7b drops the misleading full-suite grep example', () => {
assert.ok(
!step7b.includes('npm test -- --grep "$PHASE_TEST_PATTERN" 2>&1 | grep -q "passing"'),
'the runner-specific `npm test --grep` example should be removed (it mis-generalizes to `<full-suite> | grep`)'
);
});
test('Step 7b steers existence proofs to test enumeration', () => {
assert.ok(
/cargo test -- --list/.test(step7b),
'Step 7b should show the correct `cargo test -- --list` enumeration form'
);
assert.ok(
/pytest --collect-only/.test(step7b) &&
/vitest list/.test(step7b) &&
/go test -list/.test(step7b),
'Step 7b should list cross-ecosystem enumeration commands (pytest/vitest/go)'
);
});
test('Step 7b steers pass-checks to a single named test', () => {
assert.ok(
/-- --exact/.test(step7b) &&
/pytest -k/.test(step7b) &&
/vitest run -t/.test(step7b),
'Step 7b should show single-named-test commands across ecosystems'
);
});
test('Step 7b forbids re-running the full suite per must-have', () => {
assert.ok(
/at most once per verification/i.test(step7b),
'Step 7b should forbid invoking the full workspace test command more than once per verification'
);
assert.ok(
/grep/i.test(step7b) && /per must-have|per truth/i.test(step7b),
'Step 7b should explicitly call out the per-must-have full-suite grep anti-pattern'
);
});