Finding
The test recipe in Justfile is the repository's developer-facing test runner, and it is maintained by hand. Nothing checks it against the contents of tests/, so a suite can be added and then silently never run.
That has already happened:
tests/test_image_repo.bats — 93 lines, 12 assertions over system_files/shared/usr/libexec/ublue-image-repo, the single source of truth for image-name/tag → upstream GitHub repository routing consumed by bonedigger-report. It is named in neither the Justfile test recipe nor .github/workflows/unit-tests.yml. No runner executes it.
tests/test_shared_just.bats — also absent from the test recipe.
tests/test_libvirt_helper.bats is the only suite whose omission is deliberate, and the Justfile says so in a comment — but that comment is prose, not something a runner can check, and a comment naming a deleted file would never be noticed either.
Evidence (executed at 44b4b9f, bats 1.14.0):
$ bats tests/test_image_repo.bats
1..12
ok 1 image-repo: bluefin latest routes to projectbluefin/bluefin
...
ok 12 image-repo: consumers do not hardcode upstream repo routing
The suite is green. It simply never runs.
$ bats tests/test_shared_just.bats
not ok 2 powerwash: delegates to bctl when bctl is available
not ok 3 powerwash: bctl delegation skips gum prompts and sudo entirely
That one is red, which is a separate repair (already open as #1106) — this issue does not claim it.
Recommendation
Make the recipe's coverage of tests/ a checked contract rather than a convention:
Scope note: this issue is about the Justfile recipe only. CI registration — .github/workflows/unit-tests.yml executes 27 of the 40 suites in tests/, and never invokes just test — is a separate, larger gap tracked on its own issue.
Priority
- Impact: medium — one suite's worth of executed assertions is currently dead, and the mechanism that let it die is still in place
- Effort: low
Filed by quality agent (hold-gated mode)
🐝 Hive Agent: quality | Instance: hosted-projectbluefin-knuckle-gjvq | SHA: 44b4b9f
— hive: agent=quality backend=copilot model=claude-opus-5
Finding
The
testrecipe inJustfileis the repository's developer-facing test runner, and it is maintained by hand. Nothing checks it against the contents oftests/, so a suite can be added and then silently never run.That has already happened:
tests/test_image_repo.bats— 93 lines, 12 assertions oversystem_files/shared/usr/libexec/ublue-image-repo, the single source of truth for image-name/tag → upstream GitHub repository routing consumed bybonedigger-report. It is named in neither theJustfiletestrecipe nor.github/workflows/unit-tests.yml. No runner executes it.tests/test_shared_just.bats— also absent from thetestrecipe.tests/test_libvirt_helper.batsis the only suite whose omission is deliberate, and theJustfilesays so in a comment — but that comment is prose, not something a runner can check, and a comment naming a deleted file would never be noticed either.Evidence (executed at
44b4b9f, bats 1.14.0):The suite is green. It simply never runs.
That one is red, which is a separate repair (already open as #1106) — this issue does not claim it.
Recommendation
Make the recipe's coverage of
tests/a checked contract rather than a convention:tests/test_image_repo.batsin theJustfiletestrecipe.tests/test_suite_registration.bats, a drift gate asserting that everytests/test_*.batsandtests/test_*.pyis either named in thetestrecipe or declared excluded in the comment block above it as# <file> is excluded — <reason>, that every registered path exists on disk, that every exclusion names a file that still exists, and that every exclusion states a reason.test_libvirt_helper.bats,test_shared_just.bats) in that machine-checkable form, each with its reason.Scope note: this issue is about the
Justfilerecipe only. CI registration —.github/workflows/unit-tests.ymlexecutes 27 of the 40 suites intests/, and never invokesjust test— is a separate, larger gap tracked on its own issue.Priority
Filed by quality agent (hold-gated mode)
🐝 Hive Agent:
quality| Instance:hosted-projectbluefin-knuckle-gjvq| SHA:44b4b9f— hive: agent=quality backend=copilot model=claude-opus-5