# Tier 1: the CPU battery.  Runs on any machine with Python and the declared
# dependencies; this is what a GitHub-hosted runner executes on every push and
# pull request.
#
# Selector: -m "not gpu and not bigcard and not assets"
#
# The list is files, not a bare "tests/", so that adding a test file is a
# deliberate act of deciding which tier it belongs to.  A new file that nobody
# added here is not silently absorbed into the tier that runs everywhere.
#
# Every file below also carries members of other tiers; the marker selector is
# what separates them, and tests/conftest.py applies the gpu and assets markers
# by AST so an unmarked test cannot leak into this tier by omission.

# what the distribution declares, against what the package actually is
tests/test_packaging_declaration.py

# the engine range and the two surfaces that must name it: the derived
# dependency specifier, the installed-engine drift check `doctor` makes at
# install time, and the door's refusal.  Real files and real SHA-256, no
# card, no network -- and it belongs in the tier that runs on every push
# because the defect it answers (pip resolving an engine the seam pin
# refuses) is a defect of the DECLARATION, which is what a push changes
tests/test_engine_pin.py

# the checkout produces one artefact rather than one per builder: line endings
# are pinned, so the LICENSE and NOTICE bytes inside dist-info/licenses/ do not
# depend on the cloner's core.autocrlf
tests/test_checkout_reproducibility.py

# the three front doors: argument surfaces, executable resolution ladders,
# product coverage, and every named refusal
tests/test_init_door.py
tests/test_render_door.py

# the forecast door: argument grammar, the refusal inventory, and the device
# admission decision.  The decision is exercised at free-memory values no
# card here has, which is the only way to test the refusal that fires when a
# card is too small; the door's one point of device contact is substituted
tests/test_forecast_door.py

# the proof guards: pin structure, authority pin shapes, and the ordering law
# that the source pins are verified before the checkout guard reads the
# manifest module's constants
tests/test_proof_guard_pins.py
tests/test_proof_guard_ordering.py

# the multi-GPU partition executor's pure logic (the transport and halo
# reasoning that does not need a device to be wrong)
tests/test_partition_executor_v841.py

# the source manifests that name this tree's own files: every declared row is
# a file that is here, and the recorded manifest refuses rather than hashing a
# hole
tests/test_source_manifests.py

# mesh validation against a synthetic defect-free variable-resolution sphere:
# the arc-length tolerance has to admit binary32 storage noise at fine spacing
# and still refuse metre-scale corruption at coarse spacing.  Builds its own
# mesh, so it belongs in the tier that needs no assets
tests/test_mesh_validation.py

# the sizing gates: a resolution spec the BUILD refuses has to be refused by
# SIZING first.  Its arithmetic members run anywhere; the members that drive
# rw_mpas_mesh skip by name when no generator is staged, which is the state a
# hosted runner is in
tests/test_mesh_spec_gates.py

# the full-physics harness's non-device surface: constructor audits, contract
# pins, surface classification.  Its four asset-touching members are marked
# and land in tier 2.
tests/test_cuda_v841_full_physics_x4.py

# the big-card preflight itself, which in this tier only proves that it skips
# with a number rather than passing vacuously
tests/test_device_capacity.py

# the observational referee: manifest strictness, the metric arithmetic against
# hand-computed values, case-block bootstrap reproducibility, canonical-bundle
# byte determinism, the fail-closed treatment receipt, and the synthetic
# end-to-end suite run twice for identical digests.  It needs numpy and nothing
# else -- no card, no assets, no network -- and it was in no tier list at all
# until the referee's first real run, which meant the machinery that decides
# whether the physics is right was not gated on any push.
tests/test_obs_referee.py
# the history stream's refl10cm/q2 publication: the writer surface (dims,
# units, bitwise q2, the q2_products_allowed flip), the diagflag pass-through
# by signature, and the model bundle's composite-reflectivity and dewpoint
# derivations against the engine's own formula.  Dropping either field from
# the default stream makes divergence 3's declared referee unrunnable, which
# is exactly what the first real run reported.
tests/test_history_refl_q2.py
