Skip to content

Runnable now — the Rich tier calibration

This one is not hardware-gated. Every item above waits on a box the user does not have; this waits only on the user sitting down at the machine they already own. It is here so it is not lost, not because it is blocked.

Plan 0044 shipped TierConfig::RICH as provisional multipliers, explicitly not measurements — the code says so in its own doc comment. Phase 4 was to replace them with measured values and was not run at the plan’s close, so the rich tier currently ships numbers nobody has timed.

  • Calibrate Rich on the midrange discrete GPU, native fullscreen. Run ritmolux.exe --tier rich (the pin, so the governor cannot demote mid-measurement) with the overlay on (F3), across the heaviest preset of each family: an attractor_*, a dense line preset with mirror + fold (fragment_kaleido), swarm_dense, a reaction_*, and a spectrum_*. Report per preset (a) whether frame time holds the display’s refresh rate and (b) the p99. Escalation: a miss is not a failure, it is the measurement — record which preset missed and by how much, and the specific TierConfig::RICH field that caused it comes down to the measured value. Route to dev with the numbers. The five fields and their provisional values: post_cap 2560x1440, attractor_particles 150 000, attractor_trail_cap 3840x2160, swarm_particles 30 000, max_segments 60 000 (core/src/render/tier.rs). attractor_particles is now an anchor and not the count drawn — since ADR-0140 the sample budget is a density against the render target, so a Rich window above the 640x360 anchor resolves up to attractor_particles_live_ceiling (600 000) instead. Record the size of the window the reading was taken at, because the drawn count now depends on it, and the relief lever for an attractor miss is that ceiling rather than the anchor. Lowering the anchor still costs shot noise at every size; lowering the ceiling costs it only on large displays. No number is invented upward to look good — that was the phase’s own rule, and it still binds. (Plan 0044 Phase 4, carried forward at that plan’s close 2026-07-30.) Two things changed under this item at Plan 0057’s close (2026-08-03), and both make it cheaper rather than different. It is still a frame-time measurement and every field above is still provisional. But attractor_particles is no longer a brightness: ADR-0065 divides the additive deposit by the count, so bringing that field down now costs shot-noise smoothness and not exposure — a look consequence this escalation used to carry silently. And the “how does it read at Rich” half of the question no longer needs the running app: shot --tier floor|rich exists (it always did — Plan 0044 Phase 3 built it and only --help omitted it), so a measurement is a capture. Keep the app for the frame-time run and for any judgement in motion; that is what it is still better at. And since Plan 0050 the frame-time run is an A/B in one sitting rather than two launches. [ and ] swap the tier on the running renderer, and the settings menu (S) shows which tier is live and whether it is (auto), (pinned) or (demoted). So the loop per preset is: hold on the preset with the F3 overlay up, read p99 at one tier, press the other bracket, let the trails re-accumulate, read p99 again. An in-app change pins the tier, so the governor cannot demote inside the measurement — the reason --tier was required for this before. It also writes [quality] tier, so remember to set it back (or pass --tier, which still wins at launch) before running anything that assumes the default. Plan 0050’s own Phase 6 item 3 asks for exactly this measurement; whichever runs first satisfies both.

Built from a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.