Skip to content

Run the conformance suite on x86_64 and aarch64, held to one baseline - #91

Merged
HackTuah merged 2 commits into
mainfrom
slice/049-conformance-arm64
Oct 20, 2026
Merged

HackTuah merged 2 commits into
mainfrom
slice/049-conformance-arm64

Conversation

@HackTuah

Copy link
Copy Markdown
Member

This change is CI only. Nothing a consumer of the package can hit changes.

The conformance job ran on x86_64 only. The fielded edge box is aarch64, so its conformance result had never been measured.

What changes

  • Two architectures: the job is a matrix over ubuntu-latest and ubuntu-24.04-arm, with the same toolchain request on both, so the architecture is the only variable.
  • One baseline: both jobs are held to the same conformance/baseline-<revision>.yml. The suite exits 1 on an unexpected failure and on a stale baseline entry, so two green jobs mean the same scenarios fail on both architectures. The job checks that equality; no one has to compare the results by eye.
  • One artifact per architecture (conformance-results-X64, conformance-results-ARM64), because one run cannot upload two artifacts with the same name.

Evidence

  • mix test test/beam_mcp/governance_test.exs (actions pinned by SHA, workflow posture): 7 tests, 0 failures.
  • reuse lint: compliant.

Not yet measured

  • The suite on aarch64. This run is its first measurement.

The conformance job ran on ubuntu-latest only. The fielded edge box is
aarch64, so its conformance result had never been measured.

The job is now a matrix over ubuntu-latest and ubuntu-24.04-arm, with the
same toolchain request on both (OTP 28, Elixir 1.18, Node 22). Both are
held to the same conformance/baseline-<revision>.yml. The suite exits 1
on an unexpected failure and on a stale baseline entry, so two green jobs
mean the same scenarios fail on both architectures. The results artifact
is named by architecture, because one run cannot upload two artifacts
with the same name.

Minutes for a public repository are free on both architectures. The
suite has not run on aarch64 yet; this pull request's first run is that
measurement.

Signed-off-by: Ayla Croft <aylacroft@proton.me>
The floor leg of gate run 39344186410 failed tracer_test.exs:913: two
calls into a traced module counted as one (weight 1, want 2). The
test's barrier before Tracer.stop/0 was :sys.get_state(Tracer), which
waits only for messages already in the tracer's mailbox. Trace messages
can still be on their way: erlang:trace_delivered/1's documentation says
their delivery "is dislocated on the time-line compared to other events",
and names trace_delivered as the way to wait for them. One trace message
arrived after the stop and was discarded.

handled/0 calls :erlang.trace_delivered(:all), waits for its reply (with
a 5 s bound), then calls :sys.get_state(Tracer). The seven tests that stop
the tracer after a barrier use it. trace:delivered/2 is the same BIF
for a session, so the tracer's private session handle is not needed.

The red was not reproduced locally (25 seeds at a 2-core cap, no
failure). After the change: 10 seeds without a failure, and the full
suite passes (11 properties, 767 tests, 0 failures).

Signed-off-by: Ayla Croft <aylacroft@proton.me>
@HackTuah
HackTuah force-pushed the slice/049-conformance-arm64 branch from 4593990 to b8bb54f Compare October 20, 2026 12:26
@HackTuah
HackTuah merged commit d0d0604 into main Oct 20, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant