* 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>
This commit is contained in:
57
tests/verifier-spotcheck-test-discipline.test.cjs
Normal file
57
tests/verifier-spotcheck-test-discipline.test.cjs
Normal file
@@ -0,0 +1,57 @@
|
||||
'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'
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user