Bare rm is a PATH lookup: whey's shim makes test cleanup a silent no-op
whey shims rm fleet-wide to a trash-only blocker. A bare 'rm' there resolves to a refusal, so cleanup silently does not happen. Measured by bin-whey-cc on gitpush-core.test.sh v1.0: the scratch dir survived the run and the suite still reported 14/14, because four of the five rm sites were fixture resets between assertions - those assertions ran against un-reset state and passed without the isolation they claim. Green was not evidence the resets worked. FIXED already in gitpush-core.test.sh (absolute /bin/rm plus a reset_fixture helper that ASSERTS the file is gone) and gitpush.sh v4.48 (:1212, --review leaked its mktemp file on whey on every run, silently, because the push succeeded regardless). REMAINING: a repo sweep finds ~18 more bare-rm sites in sh.git, and the ones that matter are the other test suites - gitpush-info.test.sh:116/135/168, gitcommit-gates.test.sh:25/29, agent-attach.test.sh:33 - which have the same silent under-isolation on whey and report green there today. Fix shape: absolute /bin/rm for mktemp scratch (trash-put is wrong for a temp fixture - it files rather than deletes), plus an asserting helper wherever a delete is load-bearing for a later assertion.
Activity
-
parent=#3117
-
SWEEP REDONE, because the row's own site list had rotted. Of the three suites it names: gitpush-info.test.sh NO LONGER EXISTS; gitcommit-gates.test.sh:25/29 and agent-attach.test.sh:33 ALREADY carry the asserting reset_fixture with /bin/rm. Five suites hold it today (agent-attach, commit-selection-lib, gitcommit-gates, gitdeploydev-info, gitpush-core.test). The row's "~18 more sites" is also wrong as a work estimate: a tracked-file sweep finds ~90 bare-rm hits, of which most are `git rm --cached` (a different command) or non-test scripts leaking a mktemp file. REAL REMAINING SITES: 13, across 6 files, all fixed and pushed here. context-persist.test.sh (reset() + trap), gitpush-deploywatch.test.sh (5 between-arm resets + trap), venus-db-backup-prune-test.sh (2 witness resets), gitpush-prestage-abort-test.sh (1), memlint-roster.test.sh (trap), agent-launch-gate-fixture.sh (trap). THE FORCED RED IS THE FINDING, not the edit. There are TWO shim shapes and they are not the same defect: - A REFUSING shim (non-zero) is caught by `set -e` already. venus-db-backup-prune-test.sh dies at rc=1 before TEST 12 with two stderr lines and no summary - ugly, but never silently green. The row's "reports green on whey today" does not hold for the set -e suites. - A shim that EXITS 0 AND DELETES NOTHING is the one nothing catches: exit status says success, so only an assertion that the file is GONE discriminates. Measured against it: prune 41/0 -> 29/14 naming the witness by path; context-persist 19/0 -> 17 named reset failures; deploywatch 35/0 -> 33/8, and deploywatch's [7c] (hasnt "DM SENT") false-REDS on the previous arm's log, which is the row's defect in the opposite direction - a stale fixture can fail a correct build as easily as it can pass a broken one. DESIGN POINT, deliberate and documented in each helper: they record a FAIL and return 0, never non-zero. Under `set -e` a non-zero return aborts before the summary prints, so the one run that detected the problem becomes the one run that cannot report it. NOT FIXED, STATED: gitpush-prestage-abort-test.sh's reset is hardened as INSURANCE only. Forcing it red fired nothing, and chasing that exposed absorb_policy_handshake()'s then-branch keying on a 'Re-run gitpush.sh after reviewing this info' line that gitpush.sh v5.0 removed - the branch has not run since, 7 unread WARNs per run, SUT invoked 7 extra times for nothing. Filed as OPS-279, not deleted: removing a fixture branch decides what the suite covers. COVERAGE STATEMENT: the 13 sites are in tracked .sh/.py files in sh.git only; I did not sweep untracked files, other repos, or systemd units. agent-launch-gate-fixture.sh is syntax-checked, NOT run - it spawns tmux sessions and launching a session is default-deny. The lying-shim proof was run on venus with a local shim, not on whey against the real one; what is proven is that the assertions fire on a silent no-op, not that whey's shim has that shape.
-
13 real sites fixed and proved; the two stale entries in the row's own site list corrected in the note above. OPS-279 carries the dead handshake branch found by forcing the prestage-abort reset red.