Captures pin the floor tier
Every capture path renders at the Floor quality tier, and it cannot do
otherwise by accident. Renderer::new_headless takes no tier argument and
resolves Floor by construction (Plan 0044 / ADR-0045),
so there is no field a test can forget and no environment variable that can change
what a baseline looks like. shot defaults to floor for the same reason and
deliberately does not read RLX_TIER.
Two reasons, and both are load-bearing:
- Reproducibility. A tier sets capacity — particle counts, the segment budget, the internal-grid caps — so a baseline blessed on a rich-tier run and compared against a floor-tier one differs for a reason that has nothing to do with the change under test. A capture is a pure function of its inputs (NFR §6), and the tier would otherwise be a hidden input.
- Suite cost. The golden and visual-QA suites run on the WARP software adapter, where fill and instance count translate directly into wall-clock. At rich values the same suite would draw 3x the attractor particles into a 4K-capped trail grid on a CPU rasterizer.
--tier rich is the deliberate opt-in, for spot-checking that the raised budgets
actually render.
A tier is no longer one number per scene, and the attractor is where that
started: its sample budget is a density against the render target, capped by one
ceiling in a window and a larger one under --render
(ADR-0140).
Every capture path — this page’s stills, filmstrips and reports, and both test
suites — takes the window’s ceiling, and at capture sizes the law’s lower
clamp resolves exactly the tier’s own count, so no baseline moves. See
--render for the path that does not.
A
Richcapture is an instrument, and never a baseline (ADR-0064). Use it to look, not to bless: a rich capture must never be written intocore/tests/golden/. The reason is dated rather than principled —TierConfig::RICH’s values are the provisional ones Plan 0044 shipped and its Phase 4 calibration has never run, so everyRichbaseline would be a re-bless waiting on a number nobody has measured yet. Revisit after that calibration, not before.
Omitting the flag is exactly --tier floor, byte for byte — verified at Plan 0057
Phase 1 rather than assumed, since “the default is the old behaviour” is the kind
of claim that quietly stops being true.
The consequence ADR-0045 names and accepts: rich-tier regressions are caught only by those spot checks and by on-device runs, not by the suite. That is a real hole, not a solved problem.
--sizeis part of that tuple, and since Plan 0033 it does more than crop: thetrailsandkaleido_*stages size their internal grid from the render target (ADR-0034), so a preset composing either one genuinely renders differently at 640x360 than at 1080p rather than merely smaller. A given size is still exactly reproducible; two sizes are no longer scaled versions of one picture. Capture at the size you are judging.
Everything here is dev/agent tooling. The image crate is a dev-dependency
only (ADR-0011), so the shipped ritmolux.exe is untouched; the CLI is a
cargo run --example, not a subcommand of the app.
Package name note: the standalone crate is
standalone, so the invocation iscargo run -p standalone --example shot -- ….
Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.