From 637c78c45a1e6dcd7b34814bbc6623aff93b38f0 Mon Sep 17 00:00:00 2001 From: Alberto Arroyo Raygada Date: Sat, 1 Aug 2026 02:15:57 -0500 Subject: [PATCH] Close GT-578 evidence execution gate (#359) * chore(gaps): make evidence command execution assertable * chore(gaps): close GT-578 evidence execution gate * chore(gaps): refresh GT-578 executive summary * chore(gaps): harden evidence execution ci * chore(gaps): drop retired cli topology path key * chore(gaps): exclude maturity unit suite from evidence runner --- .github/workflows/ci-cd.yml | 59 +++++-------------- .../ci/18-validate-knowledge-parity.mjs | 2 +- .../ci/41-validate-evidence-commands.mjs | 1 + .../ci/41-validate-evidence-commands.test.mjs | 9 +++ .harness/scripts/lib/paths.mjs | 1 - product/infra/.env.example | 3 + product/infra/docker-compose.yml | 2 +- .../evidence/gap-closure-evidence.json | 42 ++++++++++--- .../gaps/gap-reference-catalog.es.md | 4 +- .../gaps/gap-reference-catalog.md | 4 +- .../control-center/gaps/gap-tracking.es.md | 4 +- .../core/control-center/gaps/gap-tracking.md | 4 +- .../maturity-reports/executive-summary.es.md | 14 ++--- .../maturity-reports/executive-summary.md | 14 ++--- .../maturity-reconciliation.json | 6 +- 15 files changed, 89 insertions(+), 80 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index ea3132ac2..a4ab88c01 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -426,6 +426,8 @@ jobs: cache-dependency-path: package-lock.json - name: Install dependencies run: npm ci + - name: Install evidence-command shell dependencies + run: sudo apt-get update && sudo apt-get install -y ripgrep # FIRST, and deliberately. Every step in this job runs under `bash -e`, so the # first red step skips every step after it. On run 30629887881 a network- @@ -501,6 +503,7 @@ jobs: npm run build --workspace @beyondnet/evolith-contracts npm run build --workspace @beyondnet/evolith-core-domain npm run build --workspace @beyondnet/evolith-infra-providers + npm run build --workspace @beyondnet/evolith-agent-runtime # GT-642: the cycle guard RUNS GT-589's extractor rather than owning a second # one, so the extractor has to be built or the guard has nothing to run. It # fails loudly in that case instead of reporting "no cycles found". @@ -648,52 +651,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. - # - # 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