test: cover every verify-build failure mode from make check (closes #227)
All checks were successful
check / check (push) Successful in 52s
All checks were successful
check / check (push) Successful in 52s
script/verify-build is the build-integrity guard and nothing in make check tested it. Three separate reviews of it each found a fresh vacuous pass -- the grep exit-2 conflation, the discarded find status, the line-delimited walk -- and each was caught by someone building a tree by hand. script/test-verify-build makes that battery a target. It builds a fixture tree under mktemp -d holding script/verify-build as a symlink to the real script: verify-build takes its ROOT from dirname "$0"/.., so it runs against the fixture's dist/ and never touches the repo's build output, and the symlink rather than a copy is what makes a break in the real script fail here. Its own mktemp is pointed inside the work dir, so a run leaves nothing behind. Each of the 18 cases asserts the exit status AND a substring of the message, because a guard that fails for the wrong reason is itself a defect. The obstacle was that the CI image declares no USER, so CI runs as root, and root is not subject to file permissions: a chmod 000 case passes vacuously there while passing honestly on a developer machine. The harness therefore proves its runner before counting the five permission-dependent cases -- a mode-644 file and script/verify-build itself must be readable through it, a mode-000 file must not be -- and drops to uid 65534 via setpriv or runuser when running as root, both present in the pinned base image. If no candidate passes the probes the cases are skipped, named in a banner, and the final line says SKIPPED AND NOT PROVEN rather than passed. A green run cannot mean "the permission cases did not run" without saying so.
This commit is contained in:
6
TODO.md
6
TODO.md
@@ -44,6 +44,12 @@ undefined identifiers, which is how
|
||||
|
||||
# Completed Steps
|
||||
|
||||
- 2026-08-12: `script/verify-build`'s failure modes are now a committed target,
|
||||
`script/test-verify-build`, run by `make check`. It asserts the exit status
|
||||
and the message of every case against a fixture tree in a temp dir, and drops
|
||||
privileges (proving the runner against a mode-000 file first) for the cases
|
||||
that only mean something when file permissions are in force
|
||||
([#227](https://git.eeqj.de/sneak/AutistMask/issues/227)).
|
||||
- 2026-08-12: Bundled token list documentation no longer states a count. The
|
||||
four "top 250" claims in `README.md` and the "roughly 500" claim in
|
||||
`docs/README.md` are replaced with a description of how the list is actually
|
||||
|
||||
Reference in New Issue
Block a user