You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci: run the cross-repo nornax conformance tests, which never have
`jaccpot/nornax_adapter.py` satisfies nornax's `MutualForceModel` /
`FusedMutualForceModel` structurally, without importing nornax, so the
dependency graph stays acyclic. Nothing checks that at import time. The only
check is 24 tests in `tests/integration/test_mutual_fmm_nornax.py` and
`test_mutual_distributed_nornax.py` -- the protocol match, both block-step
schedules agreeing, and jaccpot's own base step against nornax's.
Those 24 have skipped on every CI run since they were written. nornax is
installed by no job, and `tests/conftest.py`'s `_find_sibling_checkout`
resolves it from a SIBLING CHECKOUT, which exists in a local layout and never
in a single-repo `actions/checkout`. So they pass locally, skip remotely, and a
skipped test passes: a protocol drift in nornax would not have turned anything
red.
Two jobs rather than one, because they cost different things:
* `test-cross-repo-nornax` -- the adapter file, one device, 25 min. Measured
137 s for its 12 tests locally.
* `test-cross-repo-nornax-distributed` -- the mesh file, four forced host
devices, 90 min. Both files together measured 32:48 locally with four devices
throughout; subtracting the adapter file at that device count leaves ~26 min
for this half.
Splitting them is not tidiness. Forcing four devices makes the single-device
file ~5x slower (~11 s/test without the flag, ~36 s/test with it, same tests,
same box), and folding them together would hold a two-minute protocol check
hostage to a 26-minute mesh suite.
Each job ends with a fail-if-skipped guard, modelled on the one
`test-distributed-mutual` already carries, since a green-but-vacuous job is the
exact state this is meant to end. The guards key on the module-level
`nornax unavailable` message, not on any SKIPPED line: the distributed file
legitimately skips per-test when a kernel needs sm_80, and reading that as
vacuity would fail the job over a test that could not run on a CPU box.
nornax is tracked unpinned on purpose. A pinned SHA gives a reproducible build
that by construction can never tell you the protocol drifted, which is the one
thing these jobs are for. The cost is that a nornax push can redden this CI.
The `integration` shard of `test-full` now ignores both files, so they are not
collected twice -- the same convention `tests/unit/runtime` already uses.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
0 commit comments