{"v":1,"run":"browser-parity-2026-07-16b","workstream":"S21 experiential / S18 graphics — browser chrome-parity ratchet","title":"Nishi browser vs Chrome — run 2: the inline text-flow fix, before/after","date":"2026-07-16","verdict":"Three measure-vs-paint drifts unified in one root arc (layout now reserves the exact widths the vector paint draws; paint now inherits font-size the same way layout does; both int parsers truncate at the decimal). Result you can see: Wikipedia link-gaps GONE, /experiential labels flow, the readability usability study is now PASS (100% task success, 1 cosmetic left). Chrome match overall: still NOT YET — heights 61%/106%, tight paint parity 57.3%/45.5% (font raster dominates that number; the flow fix is proven by the pixels and a contiguity gate, not by the parity delta).","artifacts":[{"file":"before_after_wikipedia.png","caption":"Wikipedia, Nishi vs Nishi — BEFORE (left): every inline link surrounded by phantom gaps, the hatnote sprawls in fragments. AFTER (right): \"Please help improve it or discuss these issues on the talk page…\" flows like a real browser. Root cause: layout reserved bitmap-font widths while paint drew the narrower vector font; layout now sums the same font_adv_em metric paint advances by (gate: exact widths + contiguity)."},{"file":"before_after_experiential.png","caption":"/experiential, Nishi vs Nishi — BEFORE (left): intro labels overlap the body text. AFTER (right): labels sit inline; the census table is single-line 13px rows with aligned headers. The fix chain also killed a paint-side wrap regression caught mid-arc: paint resolved font-size on the element only (default 16) while layout inherited 13 — paint now walks ancestors exactly like layout (br_comp_int_inh)."},{"file":"comp_experiential_after.png","caption":"/experiential after — Chrome (left) vs Nishi (right). Remaining visible deltas: pill shapes (no border-radius paint), vector face vs system font, bold-line placement."},{"file":"comp_wikipedia_after.png","caption":"Wikipedia after — Chrome (left) vs Nishi (right). Remaining: image floats left overlapping text (float support queued), Wikipedia skin chrome not rendered, font raster."}],"metrics":[{"name":"Usability study (readability tasks)","value":"PASS — 100% task success, 0 major, 0 minor, 1 cosmetic","note":"Arc across the day: FAIL 25% -> FAIL 50% -> CONDITIONAL 75% -> PASS 100%; every step forced by a gated root-fix; the anti-sticker controls stayed GREEN throughout"},{"name":"Inline flow correctness","value":"nx_inline_vec_measure_gate GREEN 4/4","note":"Layout width == exact vector-advance sum (27px vs bitmap 34px for the fixture); next run starts exactly where the last ended; legacy bitmap mode byte-unchanged"},{"name":"Wikipedia layout height","value":"8037px vs Chrome 7582px (106%)","note":"Was 111% before the fix — narrower true widths = fewer wraps"},{"name":"/experiential layout height","value":"1367px vs Chrome 2227px (61%)","note":"Denser than Chrome: padding/margin shorthands + line-height still unsupported (queued, the height-axis rung)"},{"name":"Tight paint parity","value":"/experiential 57.3% · Wikipedia 45.5% (was 56.5/45.1)","note":"Honest read: this metric is dominated by font-rasterizer differences per cell, so a real flow fix moves it ~1 point; the proof of the fix is the before/after pixels + the contiguity gate, and the metric stays as the font-parity ratchet"},{"name":"Regression caught mid-arc","value":"table cells painted 2 lines over 1-line rows","note":"The fix itself exposed the third drift (paint font-size resolver); caught by re-seeing the recording, root-fixed same arc, all gates GREEN after"},{"name":"Gates after the arc","value":"inline-vec-measure 4/4 · fontsize-frac 4/4 · bg-cascade 4/4 · ux-study 4/4","note":"Every prior gate re-run GREEN — no silent regressions shipped"}]}
