
Evidence
Built directly. Harness beside this file: probe-mark.mjs, results in probe-mark.json. Playwright/Chromium, --use-gl=swiftshader, a reducedMotion: 'reduce' context so each render is one chosen frame.
What changed, and why the copy needed it
The cloth hero's copy said the phantom mark was "resolved out of dots, never painted as a shade." Its code painted a DOM glyph at 52% opacity with a text-shadow split — a shade. The description outran the implementation.
Now the glyph is rasterised once into a mask, exactly as the DOM sets it (same face, weight, size, tracking, left padding — read from computed style), and thrown away. What survives is a list of cells on the 8 px lattice inside the glyph, each drawn as a witness mark whose radius is the field at today's seed:
r = R0 · (0.55 + 0.45 · v) R0 = 8 px · 0.44
v = pow(clamp((climate(nx + off.x, ny + off.y) − 0.18) / 0.72), 1.35)
off is the ephemeris's own noise-domain offset, published on window.MN_EPHEMERIS and re-broadcast on mn:ephemeris. The 0.44 the original evidence named as "chosen, not derived" is now actually applied. The climate is the page's JS noise with the field's constants — the same class of climate at the same offset, not the GLSL's pixels; the hash differs.
The chromatic lean is drawn, not shadowed: red at −split and cyan at +split as additive ghost passes, the witness core last and opaque. Delete both ghost passes and the mark is unchanged — law 5 by construction, as before.
The band, proven across the whole domain
30 offsets on a 6×5 grid over [0, 48]² — every date's offset lands inside one of these cells, so this is stronger than 30 consecutive dates, which would cluster. At 1440×900:
mask cells inside the glyph 309, identical on all 30 offsets
distinct renders 30 of 30 (the weather moves the radii)
lit pixels (alpha > 40) min 8,652 · mean 11,913 · max 16,043
max / min 1.854
same offset twice byte-identical (hash)
console errors 0
Every mask cell draws a core dot ≥ 55% of R0 on every offset, so the silhouette never drops a cell; the band is what guarantees the mark reads on a quiet day. The 1.85× spread is the weather's whole share.
Not established
- Real-GPU rendering; software GL only.
-
That the DOM glyph and the canvas mask agree to the pixel. They share font, size, tracking and padding from computed style, and letter-spacing is applied by hand from
measureText; the earlier builder's probe showed DOM and canvas metrics agreeing at 400 px (234.4 px both), and this reuses that path. Not re-measured here. - The 0.55 floor is chosen, not derived. It was set so the smallest weather still leaves a clearly dotted glyph; no legibility study across floors.
- The hero tag reads "seed = the text × <seed>" only once the ephemeris has published; before that it shows the unbound wording. Under a probe with no ephemeris it reads "× —".
Polish
The first render camouflaged: the mark's cells sat on the same 8 px lattice as the field's at similar radii, and at the solid glyph's 0.38 opacity a dotted glyph over a dotted ground did not separate. Two changes, both marks-not-fill: the mark's cells are interleaved by half a pitch so they fall in the field's gaps, and the canvas opacity is 0.72 (the 0.38 was tuned for a luminance band a solid glyph makes and marks do not). Re-probed on the same 30 offsets:
mask cells 303 constant on all offsets: True
lit pixels min 8,484 · mean 11,688 · max 15,742 max/min 1.855
distinct renders 30 · deterministic True