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, with the grid scale F3 prints after the tier as a column beside them (1.00 on a discrete GPU unless --grid-scale pins another). 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, and the preset’s [particles] density — which lever relieves a miss depends on both. Above 0.16 the drawn count scales with the window and the ceiling is the lever: lowering the anchor costs shot noise at every size, lowering the ceiling only on large displays. At or below 0.08 the count is ADR-0195’s trace count — anchor * density at every size — so the ceiling relieves nothing there and the anchor is the only lever, at the price of the authored stroke count itself. A sparse world is also no longer the expensive case at a large window, so pick the attractor for this reading with that in mind. 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.
  • The analytic field at Rich’s iteration cap, on the discrete GPU, native fullscreen. TierConfig::RICH.field_iterations = 512, the top of iterations’ declared range, provisional like every field above. Load the heavy escape-time frame from the low-end item above with iterations = "512" and --tier rich, and report (a) whether it holds the display’s refresh rate and (b) the p99. Then let it run unpinned ((auto) in the S menu) on a frame that misses: the governor demotes on a sustained miss, and on this one system a demotion is visible as content — the set’s boundary loses detail when the budget drops to 64, where every other system only loses density. The standalone prints both the demotion and the clamp that follows it; say whether that change reads as a defect on screen. If it does, that is an architect call, not a constant to lower. (Plan 0163’s own risk register names this as worth watching on the on-device pass.)
  • The cellular system at Rich’s caps, on the discrete GPU, native fullscreen. TierConfig::RICH.cellular_grid = 1024 and cellular_radius = 10, the tops of what the loader and the parameter accept, provisional like every field above. Load the heavy larger_than_life frame from the low-end item above with grid = 1024, radius = "10" and --tier rich, and report (a) whether it holds the display’s refresh rate and (b) the p99. Then let it run unpinned on a frame that misses: a demotion to Floor rebuilds the scene at the Floor caps, so the grid halves and the radius drops to 6 — content, not density. Report what the standalone prints at the demotion and after it, and say whether the change reads as a defect on screen. If it does, that is an architect call.

Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.