tests/release/database-path-agreement.test.sh was in the tree, correct, and wired into nothing. Zero references in ci.yml, e2e.yml, release.yml or scripts/ci-local.sh, and it never had any since the day it was added.
It guards a real past defect: the installer and the daemon resolving different SQLite paths, which splits the audit chain in two and leaves audit verify reading a store nothing writes to. Reverting the installer's path resolution to the old value left every required check green.
#330 wires that one file in. The gap it exposes is not that one file.
The gap
scripts/check_repo_completeness.sh checks that required files exist. Nothing checks that a release test is reachable from a gate, so adding tests/release/foo.test.sh and forgetting the two lines in ci.yml and ci-local.sh produces a test that runs only when someone types its name. There is no error, no warning, and the file looks maintained.
Same shape as #278: an artifact that is correct and unread.
Scope
A check that, for every tests/release/*.test.sh, the filename appears in at least one of .github/workflows/ci.yml, .github/workflows/e2e.yml, .github/workflows/release.yml or scripts/ci-local.sh.
Two details that decide whether it is worth having:
Worth extending the same idea to tests/e2e/*.test.sh, which has the same exposure.
Tests first
Add a tests/release/foo.test.sh that nothing invokes and watch the new check name it. Then delete the ci.yml line for an existing one and watch it name that. Both directions, because a check that only fires on a new file misses the deletion case, which is how this one got lost.
Difficulty
easy. One shell script and two lines of wiring, and the derivation is a glob plus a grep.
Getting started
CONTRIBUTING.md has the build and test commands. bash scripts/ci-local.sh runs the whole board locally. No CLA and no copyright waiver. The project is MIT.
tests/release/database-path-agreement.test.shwas in the tree, correct, and wired into nothing. Zero references inci.yml,e2e.yml,release.ymlorscripts/ci-local.sh, and it never had any since the day it was added.It guards a real past defect: the installer and the daemon resolving different SQLite paths, which splits the audit chain in two and leaves
audit verifyreading a store nothing writes to. Reverting the installer's path resolution to the old value left every required check green.#330 wires that one file in. The gap it exposes is not that one file.
The gap
scripts/check_repo_completeness.shchecks that required files exist. Nothing checks that a release test is reachable from a gate, so addingtests/release/foo.test.shand forgetting the two lines inci.ymlandci-local.shproduces a test that runs only when someone types its name. There is no error, no warning, and the file looks maintained.Same shape as #278: an artifact that is correct and unread.
Scope
A check that, for every
tests/release/*.test.sh, the filename appears in at least one of.github/workflows/ci.yml,.github/workflows/e2e.yml,.github/workflows/release.ymlorscripts/ci-local.sh.Two details that decide whether it is worth having:
grepthat matched nothing killed the script before its own diagnostic could run.e2e.ymlonly runs on some paths, and a test reachable only from there is still reachable.Worth extending the same idea to
tests/e2e/*.test.sh, which has the same exposure.Tests first
Add a
tests/release/foo.test.shthat nothing invokes and watch the new check name it. Then delete theci.ymlline for an existing one and watch it name that. Both directions, because a check that only fires on a new file misses the deletion case, which is how this one got lost.Difficulty
easy. One shell script and two lines of wiring, and the derivation is a glob plus a grep.Getting started
CONTRIBUTING.md has the build and test commands.
bash scripts/ci-local.shruns the whole board locally. No CLA and no copyright waiver. The project is MIT.