Axiom/Docs
Guides / Conformance testing

Conformance testing

The live suite that decides whether a pack can be trusted to answer for a game, and why it is the load-bearing part of third-party support.

Running the suite

Every root capability ships a suite. A pack claiming entity.query@1 runs that capability's tests against the live game, not against a fixture.

TERMINALaxiom pack test
$ axiom pack test --build 1.4.2
 
entity.query@1
handles_stable_across_frames pass
generation_increments_on_despawn pass
count_matches_enumeration pass
survives_level_load pass
no_duplicate_ids pass
empty_world_returns_empty pass
stale_handle_reports_dead pass
bulk_matches_scalar pass
under_load_1000_entities pass 9/9
 
entity.transform@1
position_is_metres pass
rotation_is_radians FAIL
expected |r| <= 2pi, got 147.3
right_handed pass
y_is_up pass
write_then_read_roundtrip skip (read-only binding)
bulk_matches_scalar pass
stale_handle_fails pass
identity_on_dead_entity pass 7/8, 1 skipped

Packs are arbitrary code walking arbitrary structures, so the live test suite is the only thing standing between a confident pack and a generic mod quietly reading nonsense. Portability dies one unverified pack at a time.

What the tests check

The stuff that is wrong silently rather than loudly. Anything that fails loudly is already a Failed a user can report.

Test familyCatches
Handle stabilityA pack that reuses indices without generations
Generation on despawnThe stale-handle bug, which otherwise corrupts live entities
Count vs enumerationA free-list walk that misses or double-counts slots
Units and handednessA pack that forgot to convert, so every mod is subtly wrong
Bulk vs scalarTwo code paths that disagree, the worst kind of bug to chase
Under loadA snapshot that races the game's own writes at high counts
Level loadA cached pool base that is stale after a map change
rotation_is_radians is the most common first failure

It usually means the pack is handing through the game's own degrees. Every pack must normalize to the Axiom conventions: right-handed, +Y up, radians, metres, column-major. A mod that assumed otherwise would be subtly wrong on half its games, and subtly wrong is worse than denied.

Skips are honest, failures are published

A read-only binding skips write tests and the pack is marked read-only for that capability, which a mod can see through the writable flag. A failure is published alongside the pack rather than blocking it: a pack at 7/8 is still useful, and a user choosing between two packs can see which is better tested.

ResultShown asEffect
passCountedCapability provided normally
skipCounted separatelyCapability provided, flagged read-only or partial
FAILPublished on the listingCapability still provided, score visible to users

Results are per build

A pack passing on 1.4.2 and untested on 1.4.3 shows exactly that, so nobody discovers the gap mid-session. The manager surfaces an untested build before attach rather than after.

Extensions bring their own suite

A pack defining x.alice.mygame.spellbook@1 writes the tests for it too. There is no root suite for an extension by definition, so the pack author owns that bar, and the registry shows whether a suite exists at all.