From a52cc3a7920ac1c47dd03553d65a8d8b231d2aa7 Mon Sep 17 00:00:00 2001 From: aarroyo Date: Sat, 1 Aug 2026 01:17:39 -0500 Subject: [PATCH 1/6] chore(gaps): make evidence command execution assertable --- .github/workflows/ci-cd.yml | 56 ++++--------------- product/infra/.env.example | 3 + product/infra/docker-compose.yml | 2 +- .../evidence/gap-closure-evidence.json | 11 ++-- 4 files changed, 22 insertions(+), 50 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index ea3132ac2..e033ab043 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -648,52 +648,18 @@ jobs: GH_TOKEN: ${{ github.token }} run: node .harness/scripts/ci/50-validate-gap-claim.mjs - # REPORTING MODE, and it says so in its own output ("THIS IS NOT A PASS"). - # It resolves every validationCommand recorded in the board's closure - # evidence and EXECUTES the read-only subset. It is not strict yet because - # ~290 recorded commands name pre-src/-refactor locations; repairing them - # is a migration of reference/core/control-center/evidence/**, which this - # job cannot do and must not pretend away. The two conditions for flipping - # `--strict` are written at the top of the script. + # GT-578 AC3: this is now a governed execution gate, not a report. It + # resolves every validationCommand recorded in the board's closure + # evidence and executes the read-only subset. Strict mode fails on dead + # referents, non-zero executions, inconclusive search exits, vacuous scans, + # or any command that dirties the checkout. # - # It still fails hard on a vacuous scan (zero closures, zero commands, - # zero extractions, zero executions) and on any executed command that - # modifies the working tree — a reporting guard that cannot fail at all - # would be the exact defect GT-578 is about. - - name: Execute the board's recorded validationCommands (report mode) - run: node .harness/scripts/ci/41-validate-evidence-commands.mjs --execute --verbose - - # Ratchet, not a cliff. The budget is 19, which is what THIS RUNNER counts. - # - # It was briefly lowered to 303 on the strength of the guard's computed - # "ratchet basis" — 288 dead locally plus 15 that resolve only through - # generated state. The runner then reported 305 and the job went red. The - # basis is a useful diagnostic and it is NOT yet an accurate predictor of - # this number, so it must not be used to set the budget: only a count - # observed here may lower it. That is the same rule that put 305 here in the - # first place, and I broke it by trusting a derived figure over a measured - # one. - # - # 305 -> 21 (GT-637): most of it was two real defects in THIS GUARD, not the - # evidence corpus — `npmScriptOperand` was called but never defined (a - # ReferenceError the guard swallowed into a generic crash), and - # `npm run --workspace