The finding
Every ExUnit test in this repository is dead in CI. Not failing — never
executed, while the workflow, the job and the check-run all still appear.
There is exactly one mix test invocation in the whole tree:
.github/workflows/tests.yml:347 run: mix test --include integration
It lives in the integration-tests job, which declares needs: [build-images].
Build Test Images fails. A needs: edge to a failing job does not fail the
dependent job — it makes it skipped.
Measured on the run for 3bf9674a:
Build Test Images failure
Integration Tests skipped <- the only home of mix test
Why this matters more than a red suite
A red suite is visible. A needs:-skipped job looks like it participated: it is
listed, it has a name, it reports a conclusion. And a skipped conclusion
satisfies a required status check, so this can sit behind a green ruleset
indefinitely.
Concretely, it already has: test/unified-api-adapter-contract_test.exs is the
ABI wire-contract guard that #120 repointed from the dead src/abi/Types.idr
onto the live src/Hypatia/ABI/Types.idr, closing instance 21 of the
guard-reads-the-wrong-thing trap. That fix is correct in the tree and vacuous
in CI, and nothing anywhere said so.
Note also that mix test excludes 242 :verisim_data tests unconditionally
(test/test_helper.exs), so even once it runs, the denominator is ~83%.
Acceptance criteria
Integration Tests reaches conclusion success on a run against main — not
skipped, not cancelled. Either fix build-images, or move mix test out
from behind it into a job with no dependency on image building. The Elixir
unit suite does not need ArangoDB; only the :integration-tagged subset does.
- The fix is proven by a mutant: break one assertion in
test/unified-api-adapter-contract_test.exs (e.g. change one expected
connector name), push, and confirm the check goes red. Revert and confirm
green. A suite that cannot be made to fail is not evidence it runs.
- The run prints its denominator — the
N tests, M failures line must appear
in the log with N > 0. A zero-test run exits 0 and reads as success.
- A workflow-level assertion that no job carrying a test runner can resolve
skipped silently: either drop the needs: edge, or add a final job with
if: always() that fails when needs.integration-tests.result == 'skipped'.
- State plainly in the job or the README whether the 242
:verisim_data tests
are in scope. If they stay excluded, the exclusion is named, not implicit.
Probe for re-checking this class of fault anywhere
git grep -n 'mix test\|cargo test\|zig build test\|bun test' -- .github/workflows
gh run view <run-id> --repo O/R --json jobs --jq '.jobs[]|"\(.conclusion)\t\(.name)"' | sort
Ask "did it execute", never "does it exist".
Found while preparing #835.
The finding
Every ExUnit test in this repository is dead in CI. Not failing — never
executed, while the workflow, the job and the check-run all still appear.
There is exactly one
mix testinvocation in the whole tree:It lives in the
integration-testsjob, which declaresneeds: [build-images].Build Test Imagesfails. Aneeds:edge to a failing job does not fail thedependent job — it makes it
skipped.Measured on the run for
3bf9674a:Why this matters more than a red suite
A red suite is visible. A
needs:-skipped job looks like it participated: it islisted, it has a name, it reports a conclusion. And a
skippedconclusionsatisfies a required status check, so this can sit behind a green ruleset
indefinitely.
Concretely, it already has:
test/unified-api-adapter-contract_test.exsis theABI wire-contract guard that #120 repointed from the dead
src/abi/Types.idronto the live
src/Hypatia/ABI/Types.idr, closing instance 21 of theguard-reads-the-wrong-thing trap. That fix is correct in the tree and vacuous
in CI, and nothing anywhere said so.
Note also that
mix testexcludes 242:verisim_datatests unconditionally(
test/test_helper.exs), so even once it runs, the denominator is ~83%.Acceptance criteria
Integration Testsreaches conclusionsuccesson a run againstmain— notskipped, notcancelled. Either fixbuild-images, or movemix testoutfrom behind it into a job with no dependency on image building. The Elixir
unit suite does not need ArangoDB; only the
:integration-tagged subset does.test/unified-api-adapter-contract_test.exs(e.g. change one expectedconnector name), push, and confirm the check goes red. Revert and confirm
green. A suite that cannot be made to fail is not evidence it runs.
N tests, M failuresline must appearin the log with
N > 0. A zero-test run exits 0 and reads as success.skippedsilently: either drop theneeds:edge, or add a final job withif: always()that fails whenneeds.integration-tests.result == 'skipped'.:verisim_datatestsare in scope. If they stay excluded, the exclusion is named, not implicit.
Probe for re-checking this class of fault anywhere
Ask "did it execute", never "does it exist".
Found while preparing #835.