chore(#3421): delete orphan verify-phase workflow, migrate live gates to verifier (#3422)

* chore(#1892): delete orphan verify-phase workflow, migrate live gates to verifier reference

* test(#1892): retarget structural suites from verify-phase.md to verifier-phase-gates.md

* chore(#1892): reword retired-workflow mentions for removed-but-needed lint

* test(#1892): correct stale surface labels in retargeted suites

* docs(#1892): add verifier-phase-gates row to locale inventories

* chore(#3421): backfill changeset pr number

---------

Co-authored-by: sim <sim@local>
This commit is contained in:
Tom Boucher
2026-08-13 21:22:03 -04:00
committed by GitHub
parent b77b7f8e56
commit d30c99bc92
52 changed files with 313 additions and 752 deletions

View File

@@ -12,9 +12,8 @@
* - surface a timeout (exit 124) with a watch-mode hint — the regression gate
* ABORTS, the others surface clearly (never silently ignored).
*
* verify-phase's gate was ALREADY bounded (a fixed `run-with-timeout 300`, not a hang), so
* it only needs the normalizer (so a watch runner exits fast) and keeps its own
* fixed 5-minute bound — asserted separately below.
* verify-phase's gate (a fourth, already-bounded surface) was deleted with its orphan
* workflow in #1892; the gates above are the complete live set.
*/
'use strict';
@@ -33,7 +32,6 @@ const REGRESSION_GATE = path.join(ROOT, 'gsd-core', 'workflows', 'execute-phase'
const REGRESSION_GATE_RUN = path.join(ROOT, 'gsd-core', 'workflows', 'execute-phase', 'steps', 'regression-gate-run.md');
const POST_MERGE_GATE = path.join(ROOT, 'gsd-core', 'workflows', 'execute-phase', 'steps', 'post-merge-gate.md');
const AUDIT_FIX = path.join(ROOT, 'gsd-core', 'workflows', 'audit-fix.md');
const VERIFY_PHASE = path.join(ROOT, 'gsd-core', 'workflows', 'verify-phase.md');
const EXECUTE_PHASE = path.join(ROOT, 'gsd-core', 'workflows', 'execute-phase.md');
function read(p) { return fs.readFileSync(p, 'utf-8'); }
@@ -66,18 +64,7 @@ describe('#1857: test gates normalize to one-shot and bound with a timeout', ()
});
}
// verify-phase is already bounded (fixed `run-with-timeout 300`, not a hang); it only
// needs the normalizer so a watch runner exits fast, and names watch mode on 124.
describe('verify-phase gate (already bounded — normalize-only)', () => {
test('routes the resolved command through the shared normalize-test-command helper', () => {
assert.match(read(VERIFY_PHASE), /normalize-test-command/, 'verify-phase must call the shared normalize-test-command helper');
});
test('surfaces its fixed timeout (exit 124) naming watch/dev mode', () => {
const c = read(VERIFY_PHASE);
assert.match(c, /-eq 124/, 'verify-phase must handle the timeout exit code (124)');
assert.match(c, /watch\/dev mode/, 'verify-phase must name watch/dev mode as the likely cause on timeout');
});
});
// verify-phase's normalize-only block was removed with the orphan workflow (#1892).
test('the regression gate ABORTS (halts) on a watch-mode timeout', () => {
const c = read(REGRESSION_GATE);
@@ -92,7 +79,7 @@ describe('#1857: test gates normalize to one-shot and bound with a timeout', ()
test('the gates share ONE normalizer — the helper is a single source of truth', () => {
// The behaviour lives in src/normalize-test-command.cts; every gate invokes it
// by the same verb name, so a change to watch-defeat logic touches one place.
for (const file of [REGRESSION_GATE_RUN, POST_MERGE_GATE, AUDIT_FIX, VERIFY_PHASE]) {
for (const file of [REGRESSION_GATE_RUN, POST_MERGE_GATE, AUDIT_FIX]) {
assert.match(read(file), /gsd_run query normalize-test-command/);
}
});
@@ -107,8 +94,9 @@ describe('#1857: test gates normalize to one-shot and bound with a timeout', ()
// first build file). Every gate that resolves a build/test command this way MUST
// pass `--raw` so an unset key is a genuinely empty bash string the `-z` guard
// catches. This is a defect CLASS — post-merge-gate.md was the reported instance,
// but regression-gate.md, verify-phase.md, and audit-fix.md shared it, so the
// guard sweeps all of them (a single-file check gave false confidence). config-get's
// but regression-gate.md and audit-fix.md shared it, so the guard sweeps them (a
// single-file check gave false confidence; the fourth original member,
// verify-phase.md, was deleted as an orphan in #1892). config-get's
// own `--raw` behaviour is covered in config-get-default.test.cjs.
describe('#2350: every gate resolves build/test commands with --raw', () => {
// Each gate file that reads workflow.build_command / workflow.test_command to
@@ -116,7 +104,6 @@ describe('#2350: every gate resolves build/test commands with --raw', () => {
const GATE_FILES = [
['post-merge gate', POST_MERGE_GATE],
['regression gate', REGRESSION_GATE_RUN],
['verify-phase gate', VERIFY_PHASE],
['audit-fix gate', AUDIT_FIX],
];