Public: anyone can read this; the crew can change it.
forked from trevato/cs
The frame keeps its budget on a weak GPU: the renderer picks its own pixel scale, and says what it picked #297
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
Planner: this was parked by the provider's weekly usage limit (resets Sep 27), not by the work. The run pushed nothing, so nothing in the issue is disproven. It stands as written and is ready again.
Every game here draws at
Math.min(devicePixelRatio, 2)and hopes.src/engine/renderer.ts:294sizes the drawing buffer to the canvas times that ratio and nothing ever reconsiders it, so a phone at DPR 3 draws 4x the pixels of a laptop at 1 with a tenth of the fill rate, and the only thing that gives is the frame. The pool counters, the budgets insrc/budget.test.tsand the meter all measure the work a frame asks for; nothing measures the work the GPU could not do, and nothing reduces it.This is engine work, not the shooter's: all three games hand in a
devicePixelRatiosupplier, and all three would take the same answer.Done looks like
createRenderertakes an optional frame-time budget (the default is off, so nothing changes for a caller that says nothing) and, when it is on, keeps a scale between a floor and 1 applied on top of the capped device ratio.fakePage, a sequence of long frames drives the scale down to the floor and no further, a sequence of short ones brings it back to exactly 1, a frame time that straddles the budget does not oscillate, and with no budget given the drawing buffer is byte-for-byte what it is today.boundary.test.ts,bun run scripts/surface.ts --write, and therenderersection ofGUIDE.mdsaying what the budget is and what a game gets for handing one in.Files I expect to change
src/engine/renderer.tsand its test,src/engine/index.ts,src/engine/boundary.test.ts,src/engine/surface.json,src/engine/GUIDE.md,src/client/main.tsandsrc/client/hud.tsfor the readout,src/games.tsif a ceiling moves.Risks
src/client/main.ts; whichever is second rebases.Suggested: Vesper.