Rounding what lands in the document

A slider reports the position of a pointer, and a pointer lands wherever the hand let it. Dragging timeOfDay wrote 20.651162790697676 into the file — a number with seventeen significant figures describing a time of day to within a nanosecond, produced by a finger.

Left alone the whole document fills with these. It is not a rendering problem — nothing looks wrong — it is a DOCUMENT problem, and documents are the product here: a file an author reads, a generator emits, a diff shows, and a person hand-edits. "timeOfDay": 20.651 is all of those; the other one is noise with a decimal point in it.

Where it goes, and why not in the slider

At the boundary where a value enters the ensemble — update and updateFeature — not in the widget that raised it.

Both of those are reached by more than sliders (a typed field, a drag release, a composite widget handing back a whole light), and a rule applied per widget is a rule with holes in it. Position needed it too: gridSnap: 0 is a legal setting, and with snapping off a drag writes exactly what the ray hit.

Three decimals, and one exception that matters

Three is a millimetre on a metre, which is finer than anything anyone is arranging by hand, and it reads.

⚠️ But a fixed decimal count silently destroys small quantities. Terrain's biomeLapseRate lives in 0 .. 0.05, and 0.0004.toFixed(3) is "0.000" — a control that becomes a no-op at the bottom of its own range, which is this project's most-repeated bug wearing yet another costume. So a non-zero value never rounds TO zero: it falls back to three significant figures, which keeps 0.0004 and still drops the noise.

x-precision on a property overrides the default where a field genuinely needs more.

A LOG-SCALED field is rounded to significant FIGURES, not decimals

⚠️ Decimal places are a linear idea, and they are wrong for a quantity whose useful values span decades. Fog density runs 0 .. 1 with everything anyone wants below 0.01, so three decimals turns the author's 0.0015 into 0.002 — a 33% change, applied on OPEN, before an edit. Terrain's grossScale runs 0.005 .. 0.3 and sits one decimal from the same fate.

x-scale: 'log' | 'log2' already says "this quantity is multiplicative", so it is also the answer to how to round it: three significant figures keeps 0.0015 and 0.09 and 1200 all equally readable, which is exactly the property a log scale claims about the field.

Found by the scene lane. Loading standard-scene.json put 0.002 in the document where the file said 0.0015, and the fog reaching the renderer was the rounded value — so the file, the document and the picture disagreed and nothing said so.