Nishi Family › Compare › Nishi Browser -- sovereign, hardware-up, all-OS
Nishi Compare · measured, not asserted
Nishi Browser -- sovereign, hardware-up, all-OS
Nishi vs the field — every Nishi cell is measured against real organ source at emit time; each gap names the watch contract that will close it.
Nishi vs Chrome+Edge (Blink/V8) / Firefox (Gecko/SpiderMonkey) / Safari (WebKit/JavaScriptCore) and the independent engines Ladybird (LibWeb/LibJS) / Servo (Servo/SpiderMonkey) -- one auditable render core from the assembler up, judged against the August-2026 field. Every rival ships one of five engine families; ours is the sixth.
Overview
The purpose, declared position and evidence coverage of this domain. Source presence and completed acceptance are different measures.
Where we are. Measured 2026-08-18. The top-20 real-site census (bench/top20, Chrome-151 headless + Windows OCR oracle, sovereign graders) reads 486 permil mean OCR reading recall over the 12 measured rows -- records x 965, linkedin 958, example 947, wikipedia 877, hackernews 744 -- with 6 FETCH-EMPTY (youtube, reddit, bing, instagram, duckduckgo, craigslist: the JS-SPA + fingerprint class) and 2 CHROME-BLOCKED (amazon, stackoverflow: the ORACLE was blocked, not us). This is the first census of the 07-29 binary (dot-collapse fix); the prior binary read 424-432 on 07-28/29 with a 13-row set, so the delta carries live-page and oracle variance and is NOT published as an engine gain. Structural axis, RE-MEASURED 2026-08-26 on saved bytes with the instrument stated: the deep window ay=by=800 h=2000 on bench/selfpage/wiki_aug.html against bench/top20/wikipedia_chrome_tall.png reads 845 permil matched, mean dy 7, mean dx 80 over 84 oracle bands at layout width 1024 -- which REPRODUCES the 846/dy8 this row used to quote and is how that window was identified rather than guessed -- and 892 permil, dy 8, dx 104 at layout width 1000. The 47-permil spread is not page variance and not an engine change, and its SCOPE was measured rather than assumed -- the first draft of this sentence generalised from wikipedia alone and the population refuted it the same hour. The code fact stands: br_shot_png hardcodes a 1000-pixel paint canvas while br_layout wraps at the callers viewport and struct Page carries no width field at all, so the two widths are independent constants (also a Rule-11 magic number). The measured EFFECT is page-dependent, 1 of 4 (the denominator moved from 3 to 4 when the CSS-OFF wikipedia capture was added, and it did not change the conclusion): the CSS-ON wikipedia page moves 845 to 892 permil between layout width 1024 and 1000 and its page height moves with it (7304 to 7406), while hackernews reads 769 at BOTH widths, linkedin 545 at BOTH, and even the CSS-OFF wikipedia capture 916 at BOTH -- their page heights barely move. Note what DOES move on that CSS-OFF page: matched holds at 916 while mean_dx swings 71 to 100 and dy 8 to 6, so the matched-permil is width-robust there while the drift columns are not, and a claim about one is not a claim about the other. So the defect fires on content that REFLOWS and is invisible on content that does not, which makes it a blocker for grading wikipedia-class pages and not a uniform instrument bias. The free discriminator is page_h: if it moves with the viewport, the width mismatch is in play. Which of 845 and 892 is the true reading is still OPEN -- the oracle was captured at 1024, so the control that settles it is a 1024-wide shot canvas, which is the fix (debt browser-shot-width). Full-page window 826 permil dy 9 dx 68 over 294 bands; first screen 533 permil dy 16 over 15 bands, so THE FIRST SCREEN IS THE WORST REGION, not the deep page. The renderer is deterministic (same bytes twice = bit-identical PNG). The shipping-tree Linux build was COMPILE-FAIL from 08-16 until 2026-08-18, when the cause was proven to be the COMPILER, not the browser: a fixed 262,144-token lexer pool (nx_compile_x86.nx) feeding an unguarded push_tok (nx_tokenizer.nx) silently overran on the estate's largest unit. FIXED BY DERIVATION (pool sized from the post-expansion byte count -- tokens <= bytes is an invariant, not a knob -- plus a fail-loud guard), proven by the equivalence net (10/10 byte-equal + self-host) and shipped through the canaried lane; nx_browser now BUILDS (7,127,960 B asm), and nx_browser.elf is PROMOTED LIVE (b2ce1f8e, 1,447,483 B) -- the first promoted Linux browser binary. The field: Chrome 151 (28 Jul 2026), Firefox 153 (21 Jul 2026), Safari 26.x, Edge (Chromium 151) [chrome151] [firefox153]; Interop 2026 = 20 focus areas + 4 investigations at wpt.fyi/interop-2026 [interop2026]; the two independent from-scratch engines publish their standards conformance -- Ladybird 2,067,263 WPT subtests passing (Apr 2026), alpha 2026 [ladybird26]; Servo 0.3 (Jun 2026) [servo03] -- and we HAVE now run WPT -- that clause read "we have NEVER run WPT" until 2026-08-26 while the answer row on this same board already reported per-directory counts from 08-18, so the board contradicted itself and the stale half was the alarming one. Re-measured 2026-08-26 on the COMPLETE upstream dom/lists directory (5 files, mirrored from web-platform-tests under 3-Clause BSD): 5 ran, render_or_read_fail=0, tests_pass=0 tests_fail=14, controls pass=1 fail=1, dur_ms=42 -- reproducing the previously published 0/14 exactly, which is itself a determinism result. The harness is now a ROW IN browser.gates rather than a sentence in this plan, and every counted run appends to knowledge/status/wpt_history.tsv so the next reading can say improving or regressing rather than only a level. Agentic browsers (Comet, Atlas, Claude for Chrome) exist at under 1 percent share [browsershare26]; Chrome holds 69.65 percent. 2026-09-02: REAL FONT FILES render through the sovereign TrueType engine (rung BR26) -- Liberation Sans outlines, hmtx advances and kern pairs from one file, measure and paint sharing one ruler. Re-measured with ONE instrument run twice on the same saved bytes (nx_browser_render_shot 1024, then 1024 face; nx_struct_diff deep window 800 800 2000): stroke font 880 permil dy 9 dx 45 page_h 7027; face 892 permil dy 9 dx 53 page_h 7048 against Chrome 7582; first screen 578 both, dx 185 to 155. The 845 and 892 figures earlier in this row are the 2026-08-26 binary at two widths and are superseded by that same-day pair, whose stroke-font reading (880) is the honest baseline for every later font rung. The reason the NAS census cannot yet grade any of this is now a named rung, BR29: the promoted Linux browser paints text through its own bitmap render core, not the shared one.
Where we need to go. SOTA and best-of-breed FOR A SOVEREIGN BROWSER means four things, in this order. (1) The shipping tree builds it -- a browser that cannot be built on the tree that deploys is not a product. (2) The honest yardstick is RUN: a sovereign WPT harness publishes OUR pass count per directory beside Ladybird's and Servo's, so the standards distance is a number, not an adjective. (3) The operator ratchet of 2026-07-28 stands: EXACT structural match to Chrome, Edge and Firefox on the top-20 -- same boxes, positions, visibility and order; the only licensed difference is font rasterization -- measured by struct_diff matched permil toward 1000 with dy and dx toward 0, CSS ON, oracle-metric advances on. (4) The dynamic web opens: the six FETCH-EMPTY sites render content. Throughout, the sovereign exceeds (own TLS, no JIT, one core from the assembler up, never-brick, WARC, doc omnitool, agent drive lane) are SHIPPING CRITERIA that no rung may trade away.
Research bar. Interop 2026 (wpt.fyi) is measured on the pass rate over 20 focus areas + 4 investigations, one dashboard for Chrome, Edge, Firefox and Safari. Theirs: the four vendors converge on the same areas each year (Interop 2025 ended at 95); advanced attr() still Chromium-only, container style queries bottlenecked in Firefox. Ours: 0 -- never run; BR1 publishes our directory-level pass counts on this page.
Research bar. Ladybird (independent engine, alpha 2026) is measured on WPT subtests passing + JS conformance. Theirs: 2,067,263 WPT subtests passing (Apr 2026), 97.8 percent JS conformance, style engine in Rust, profiles + private browsing, alpha 2026 for Linux + macOS, beta 2027. Ours: our peer class -- same from-scratch ambition, larger team, no OS-reach or own-crypto exceed; BR1 makes the comparison numeric.
Research bar. Servo 0.3 (Linux Foundation Europe) is measured on the wpt.servo.org focus-area dashboard. Theirs: 0.3 (Jun 2026): CSS font features, new DOM APIs, SpiderMonkey update, accessibility in flight, embedding API -- on under 8k USD a month. Ours: our peer for embeddability and honesty of measurement; ours adds the sovereign fetch stack Servo does not have.
Research bar. Chrome 151 and Firefox 153 (the content-web oracles) is measured on the census oracles: headless captures + OCR reading recall + struct_diff bands. Theirs: Chrome 151 stable 28 Jul 2026, Firefox 153 stable 21 Jul 2026, four-week cadence. Ours: 486 permil mean recall over 12 measured rows (2026-08-18); struct_diff 846 permil on the deep wikipedia page; the ratchet target is 1000 / dy 0 / dx 0.
Research bar. WebDriver BiDi (the 2026 automation standard) is measured on which browsers a standard driver can drive. Theirs: Firefox removed CDP at 141 and drives over BiDi; Puppeteer defaults to BiDi for Firefox; Selenium 5 removes CDP-only APIs; Ladybird and Servo run WPT through their own WebDriver servers. Ours: synthetic-user driver only, no standard endpoint; BR6.
Research bar. Lighthouse (page-quality audit) is measured on performance, accessibility, SEO and best-practice audits over a rendered page. Theirs: the incumbents ship it in DevTools and CI. Ours: nx_uiq_perf (static predictor), nx_uiq_contrast and nx_uiq_atree exist; the composed runtime audit is BR38.
Research bar. WebPageTest (synthetic lab) is measured on waterfalls, filmstrips and Core Web Vitals on real browsers at real connection profiles. Theirs: the field's lab bench for any URL. Ours: render_shot plus struct_diff plus the census column are the pieces; the one-command lab with a time spine is BR31.
Research bar. Speedometer 3.0 (responsiveness) is measured on simulated user interactions on representative web workloads, co-developed by the four vendors. Theirs: every incumbent publishes a score. Ours: cannot run until the JS lane opens (BR3); BR35 names it so the absence is a number, not silence.
Research bar. Perfetto (trace, memory, power) is measured on system-wide tracing with CPU, memory and power-rail counters on one timeline. Theirs: Chrome and Android profile with it. Ours: nx_trace_emit, nx_frame_budget, nx_resmon and nx_energy_probe are the sovereign pieces; wiring them to a page run is BR33.
Research bar. Web Vitals (LCP, INP, CLS) is measured on the three user-facing metrics with field thresholds. Theirs: reported by every incumbent in the field and the lab. Ours: computable from our own layout and paint passes with no rival present; BR32.
Research bar. text-rendering-tests (shaping oracle) is measured on shaping and positioning cases across scripts with expected output. Theirs: HarfBuzz, CoreText and DirectWrite grade against it. Ours: the third-party oracle for BR4 shaping and typography R3 (rung R6 on the typography plan).
Research bar. Media Capabilities (codec support) is measured on supported, smooth and power-efficient per codec configuration. Theirs: every incumbent answers decodingInfo. Ours: BR34 emits the same shape from actually running our decoders.
Research bar. test262 (JS conformance) is measured on the official ECMAScript conformance suite. Theirs: Ladybird publishes 97.8 percent. Ours: BR36 publishes a pre-declared slice for js_eval.
Research bar. browser-compat-data (compat ledger) is measured on machine-readable support per feature per browser version. Theirs: the incumbents' feature support is data. Ours: BR37 emits our column in the same shape.
Latest recorded release
2026-09-05 · BR48
THE PROBE THREAD IS CLOSED WITH A REFEREE (2026-09-05): the ruler defect this rung surfaced is now proven fixed and permanently watched -- nx_sigfixture + nx_behaveprobe self mode + nx_behaveprobe_gate 11/11 GREEN on the deployed binaries (details and the retraction on engineshift ES25); every later promote on this board is judged by a probe that names a signal death instead of hiding it
Release entries describe recorded changes; they do not establish that every capability passed evaluation.
65 of 124 capabilities measured|12 of them measured exceeds|59 open|coverage 524/1000|adoption 38 full / 27 partial
Evidence profile — what the gaps on this board actually are
Measured by nx_swcompare_evidence, read back by nx_evprofile_lib. Every figure is a count with its denominator — there is deliberately no score, no grade and no percentage anywhere in this band, because a stored scalar is a field a seat can edit and a counted partition is not.
evidence|grounded 54/54|unsupported 0|gates green 4/4|proven able to fail 0/4|never bitten 4|green at 0/0 0|open gaps 31|of them unnamed 1|of them proof withheld 0|flips ready 4
proven able to fail counts the gates that have a RECORDED RED — nx_gate_bite mutated the gate subject, rebuilt it, watched the gate go red, and that record is inside the shared TTL. never bitten is its complement over the same denominator: those gates ran and were green, and nothing has ever shown them able to detect anything, so their green is a statement about this run and not about the gate. green at 0/0 is a separate and much weaker observation — the gate printed GREEN on a zero denominator, so its own tooth counter says it examined nothing. A gate can be green, non-zero, and still never bitten; that is the common case and it is now visible instead of implied.
partition: grounded + unsupported = 54 vs present 54 · named + unnamed + withheld = 31 vs open 31 · both reconcile
liar-kill conj=GPQN · all four conjuncts held
graded document: BUILDROOT tree, 59003 bytes · gates map: PRIMARY · stamped 14d 15h ago · STALE against the shared TTL of 604800s — this is evidence about a build nobody can vouch for now · source ../knowledge/status/evstamp_browser.verdict
| Gap class | What it is, and the work it names |
|---|---|
| FLIP-READY | A watch contract symbol is now present in the organ it named: the cell can flip on a pure data edit with no new code. These are the cheapest closures on this board and they belong before any new work. |
| UNNAMED-GAP | A gap row carries a bare _ABSENT_ with no symbol after it, so it names no build contract and no seat can pick it up. Give it an _ABSENT_:<symbol> and it becomes work somebody can do. |
| STALE | This profile is older than the shared TTL, or its clock ran backwards. It is reported as unusable rather than as fresh, because being wrong in the direction of refusing is the safe direction. |
nx_swcompare_evidence browser itself and are not carried on the stamp, so this page names the classes and the producer names the rows. That split is stated rather than hidden: a count without a worklist is not actionable, and this band is honest about which half of that it is.Production map
Follow the dependencies, declared acceptance criteria and recorded priorities. Inspect source binding before treating a rank as executable work.
Ranking source binding: PLAN_MATRIX_BOUND_ONLY. Recorded priorities require current acceptance evidence and resource checks before execution.
Ranking matches the captured plan and matrix only. Latest execution outcome, research freshness, accepted delivery and investment return are unverified.
Recorded priority estimates
Order from nx_compare_rank (nx_dr_ocm: (deficit + cost-of-delay + option + enables) x sponsor x self-sufficiency x momentum / cost). FINISH rows are rungs whose symbol is present but whose organ is short of full adoption: listed before new work by this heuristic. Priority is not measured delivery cost or execution readiness. Stamp: # asof=1789541477 domain=browser target_version=1.0 rungs=50 done=10 open=40 finish=5 ranker=nx_dr_ocm
| # | Stage | Rung | Priority | Derivation |
|---|---|---|---|---|
| F | FINISH | Shipping-tree build GREEN (BR0) br_comp_border | REGISTERED-DARK | callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run |
| F | FINISH | Sovereign WPT harness (BR1) wpt_run | REGISTERED-DARK | callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) |
| F | FINISH | CSS-on structural exactness loop (BR2) bc_struct_col | REGISTERED-UNAUTHORISED | registered, no cap ever minted; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) |
| F | FINISH | Byte-preserving WPT corpus ingest (BR21) wsp_ingest_dir | REGISTERED-DARK | callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) |
| F | FINISH | Native world-frame emission (BR22) we_world_frame_emit | REGISTERED-DARK | callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) |
| #1 | 1.0 | Real font files + shaping (BR4) bs_shape_run | 2400 | v=24 m=2 c=20 |
| #2 | 1.0 | ONE render core: the Linux and NAS browser paints through nx_browser_render (BR29) br_render_core | 2400 | v=24 m=2 c=20 |
| #3 | later | Core Web Vitals on the sovereign render timeline (BR32) br_vitals | 8285 | v=29 m=2 c=7 |
| #4 | later | test262 conformance slice published (BR36) js_test262 | 8000 | v=24 m=1 c=3 |
| #5 | later | Every conformance figure is a numerator, a denominator and a date, never a bare percentage (BR46) js_conf_triple | 8000 | v=24 m=1 c=3 |
| #6 | later | Engine coverage and platform coverage are two fields and the resolver refuses to collapse them (BR43) bcd_engine_platform | 5600 | v=28 m=1 c=5 |
| #7 | later | ES2024 core + fetch/DOM API surface (BR3) js_fetch_api | 4923 | v=32 m=2 c=13 |
| #8 | later | Responsiveness benchmarks -- Speedometer 3, JetStream, MotionMark run in-house (BR35) bb_speedometer | 4800 | v=24 m=1 c=5 |
| #9 | later | Compat ledger emitted in browser-compat-data shape (BR37) bcd_emit | 4800 | v=24 m=1 c=5 |
| #10 | later | WebSocket wire (BR19) bws_connect | 3200 | v=16 m=1 c=5 |
| #11 | later | HTTP/2 in the fetch path (BR7) bh2_stream | 2900 | v=29 m=1 c=10 |
| #12 | later | Web fonts: @font-face URL loading + WOFF2 decode (BR28) bwf_load | 2400 | v=24 m=2 c=20 |
| #13 | later | Tabs, sessions, profiles UI (BR5) bt_tab_open | 2200 | v=22 m=1 c=10 |
| #14 | later | Cross-engine last mile on emitted pages (BR25) bx_engine_verify | 2133 | v=16 m=2 c=15 |
| #15 | later | Page-quality audit composed from the sovereign auditors (BR38) ba_audit | 1866 | v=28 m=1 c=15 |
| #16 | later | Accessibility tree (BR11) ba_tree | 1866 | v=28 m=1 c=15 |
| #17 | later | Interop-2026 CSS pack (BR10) css_anchor_pos | 1866 | v=28 m=2 c=30 |
| #18 | later | WASM in the browser (BR9) bw_instantiate | 1700 | v=17 m=1 c=10 |
| #19 | later | WebDriver BiDi endpoint (BR6) bwd_session | 1700 | v=17 m=2 c=20 |
| #20 | later | Codec capability matrix -- supported, smooth, power-efficient, measured by running our decoders (BR34) bmc_matrix | 1600 | v=16 m=1 c=10 |
| #21 | later | Trace, frame budget, memory and energy per page (BR33) br_resmeter | 1400 | v=14 m=1 c=10 |
| #22 | later | DevTools protocol (BR15) bdt_inspect | 1400 | v=28 m=1 c=20 |
| #23 | later | Web components (BR18) bsd_attach | 1400 | v=28 m=1 c=20 |
| #24 | later | Every rendering optimization is reported as a throughput and energy pair over the same run (BR44) ep_pair_receipt | 1250 | v=25 m=1 c=20 |
| #25 | later | Every published benchmark score carries suite, version, version date and run date, or is labelled UNCONTROLLED (BR42) bb_version_ledger | 1200 | v=6 m=1 c=5 |
| #26 | later | Per-site process sandbox (BR12) bsb_spawn | 1100 | v=22 m=1 c=20 |
| #27 | later | Canvas 2D + SVG raster (BR17) bc2_fill_rect | 1000 | v=20 m=1 c=20 |
| #28 | later | The Nishi browser opens /world/beach as the sovereign door: same world bytes, no third-party gatekeeper (BR40) br_world_door | 933 | v=28 m=1 c=30 |
| #29 | later | Video and audio elements (BR8) bv_play | 800 | v=16 m=1 c=20 |
| #30 | later | Web storage + origin model (BR16) bst_local_set | 800 | v=16 m=1 c=20 |
| #31 | later | The interop score is the intersection, with per-implementation rates beside it and an investigation class (BR45) wpt_interop_intersect | 800 | v=16 m=1 c=20 |
| #32 | later | Canvas GPU (WebGL2 first) (BR13) bg_webgl_ctx | 733 | v=22 m=1 c=30 |
| #33 | later | The browser lab: one sovereign run over a URL or saved bytes, every oracle on one time spine (BR31) bl_run | 700 | v=7 m=2 c=20 |
| #34 | later | Product surfaces (BR20) bpd_download | 666 | v=20 m=1 c=30 |
| #35 | later | Motion: emitted frame sequences (BR24) we_frame_seq_emit | 100 | v=1 m=2 c=20 |
| #36 | later | Every performance bar carries its primary source and date, and a beat flags DRIFTED when the vendor page moves (BR41) up_metric_prov | 100 | v=1 m=1 c=10 |
| #37 | later | Every named entity decodes and every unmapped codepoint is visible (BR39) ent_html5_table | 0 | v=0 m=2 c=10 |
| #38 | later | Browser-native launch (nishi-game marker) (BR23) br_launch_game | 0 | v=0 m=1 c=5 |
| #39 | later | The verifier proves a declared asset of any size by its head (BR48) ff_fetch_head | 0 | v=0 m=2 c=15 |
| #40 | later | The static front door honours Range on every static asset (BR49) sites_range_206 | 0 | v=0 m=2 c=20 |
Declared roadmap — contract, acceptance, executor, effort
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| Shipping-tree build GREEN (BR0) | br_comp_border | DONE 2026-08-18 (actual 1 u, estimate held): fault named -- a hardcoded token-pool cap + unguarded push_tok in the compiler, fixed by derived sizing through the canaried toolchain lane (equiv net 10/10, compiler live 5aaf6cd7, browser BUILT+PROMOTED b2ce1f8e). Original done-rule follows: either a compiler defect with a minimal reproducer + a fix promoted through the canaried toolchain lane (nx_cc_equiv_staged + contentdiff GREEN), or a source-shape rewrite with the reproducer banked as a compiler bite. Method fixed by the record: stub BODIES, never truncate; diagnose on the tree that ships (the laptop mirror is stale). Done when the Linux browser deploys again. | Compiler+Organ | 1 u |
| Sovereign WPT harness (BR1) after BR0 | wpt_run | V1 RAN + V2 CORRECTED 2026-08-18: nx_wpt_runner (sync testharness shim, shared-genv page lane, runtime controls that REFUSE counts if the harness cannot see a failure) over the FULL .html population of four slice directories. v2 numbers (v1's assert_throws any-throw overclaim removed -- published passes went DOWN 45 to 31, which is the correction discipline working): dom/nodes 31 pass / 1217 fail / 178 unsupported-assert / async 1-5-202-incomplete (171 of 178 ran), dom/collections 5/41/2, dom/lists 0/14, html/syntax/parsing-html-fragments 0/20 -- laptop-run like the census, results published here. v3 (08-19) is the OBSERVABILITY rung, field-grounded [otel-cicd26] [develocity-pts26] [wptfyi-runs26]: OTel-mapped TSV time spine (bench/wpt/wpt_history.tsv + the wpttrend- store plane), content-addressed skip on (engine sha, corpus sha) with --force, REGRESSION exit 4 vs the newest same-corpus row (bite-proven: a planted better prior row fired verdict AND exit -- the exit-code half was CAUGHT MISSING by the bite, the estate's own gate law live in a day-old organ), and --twice determinism proof (171 files x2, zero divergence). REFTESTS LANDED 08-19 (nx_wpt_reftest PROMOTED, telemetry on the extracted nx_wpt_spine shared lib -- the DRY law applied at consumer #2): floats 13/51, css-tables 60/56 match-pass/fail at exact-pixel 800x600; corpus = every test in the directory PLUS every reference it links, fetched to closure (0 missing). vNext: NAS fixture ingest so the wpttrend beat runs estate-side; fuzzy-meta tolerance; async event-driven tests. DRIFT CLOSED 2026-08-26, PROVEN BY THE HARNESS'S OWN TELEMETRY: a fresh /api/build of buildroot nx_wpt_runner.nx returns 9a97da75.../595,550 B and BOTH the serving root and the _offc twin ALREADY hold exactly those bytes, so live == staged == source; and the engine= field every counted run stamps into wpt_history.tsv reads 9a97da75f32c108d, meaning the time spine had been recording the current engine all along. The rebuild-on-a-quiet-box instruction this sentence used to carry was STALE -- a standing drift claim nobody re-measures costs the next reader the same investigation, and here the evidence that closed it was already inside the harness's own output. NEXT, NOW MEASURED RATHER THAN NAMED: async is the largest single hole in the count. Run 2026-08-26 over the six-file dom/nodes slice in knowledge/wpt: tests_pass=8 tests_fail=89 async_incomplete=147 dur_ms=84, controls pass=1 fail=1 -- so 147 of 244 assertions (602 permil) are UNJUDGED rather than failing, and Document-createElement.html alone contributes all 147 while returning ZERO sync verdicts. An unjudged assertion is an abstention nobody counts, so the honest denominator on this slice today is 97, not 244, and the async event-driven lane is what converts 602 permil of the corpus from invisible into scored. RESOLVED THE SAME DAY, AND THE FIRST DIAGNOSIS WAS WRONG: the missing piece was NOT only the absent event loop. A purpose-built fixture that separates the conjuncts (knowledge/wptprobe) proved the trailing load-dispatch script DOES execute and DOES fire registered handlers -- p2-after-html-script-ran and p5-handler-body-ran both PASS -- so the dispatch was necessary but not sufficient. The real blocker was in the shim's own async_test: it invoked the test body as g() with NO ARGUMENTS, so async_test(function(t){...}) received undefined and every t.step / t.done threw, leaving the test started and never finished. One correction, fn(t) instead of fn, and the slice reads async_incomplete 147 -> 0 with the partition reconciling EXACTLY: 137 async_fail + 10 async_unsup_assert = the 147 that were invisible. Judged assertions rise 97 -> 244 and the published pass rate therefore FALLS from 82 permil to 33 permil (8 of 244) -- the number got worse because it got honest, the same correction discipline that took v1's 45 published passes down to v2's 31. The 10 unsupported are assert_throws_dom needing DOMException identity, correctly routed to UNSUPPORTED rather than fake-passed. Engine f14f553a77ea1293, controls pass=1 fail=1, verdict=COUNTED. NAMED LIMIT, not fixed here: t.step and t.step_func still drop their arguments, so a test whose handler needs an event object is not yet reachable; and sync test(f, name) likewise passes no test object. AND THE RUN THAT PROVED ALL THIS WAS NOT BEING RECORDED. wsp_append sat behind if (histpath != 0), so a run invoked as `nx_wpt_runner <dir>` -- the documented first form of its own usage line -- printed WPT-ROW ... COUNTED and persisted NOTHING, while that same usage line promised every counted run appends a TSV row. Four runs on 2026-08-26, including the 147 -> 0 measurement, were absent from every history file, and TWO RIVAL SPINES had grown (bench/wpt/ and knowledge/status/) because each caller chose its own path -- the duplicate-ruler defect wearing a filename. A SPINE THAT ONLY RECORDS WHEN THE CALLER REMEMBERS THE PATH IS AN ADOPTION GAP WITH EXTRA STEPS. Fixed by defaulting to a single named owner and ANNOUNCING it: every run now prints a WPT-HISTORY line carrying the path plus a src field reading argv or DEFAULT, so a reader never guesses which file a row went to. Proven by the SPINE GROWING, not by the message appearing -- the first attempt printed a perfect-looking WPT-HISTORY line and appended nothing, because the path literal had been mangled to tsvu0000 in transit; only checking bytes-before vs bytes-after caught it (623 -> 703, delta 80). Live 3a6c48264dc7cc45. THEN THE REAL YARDSTICK RAN. With dom_nodes banked (178 files, BR21), the harness was pointed at the largest corpus we have and the async work paid out: async_incomplete 202 -> 56, files rendered 171 -> 174, and JUDGED assertions 1432 -> 1581 (+149) while PASS stayed EXACTLY 32. corpus_sha came back d49aee870a338154, IDENTICAL to the 2026-08-18 row, so the re-acquired corpus is byte-faithful and the two runs are comparable. THE HARNESS THEN CALLED ITS OWN IMPROVEMENT A REGRESSION: fail rose 1222 -> 1361 and it printed "same corpus, so the engine changed for the worse" with exit 4. That sentence asserts a cause the detector cannot know. AN ASSERTION THAT WAS NEVER JUDGED CANNOT PREVIOUSLY HAVE BEEN PASSING, so judging more can raise fail and can NEVER lower pass -- the asymmetry that makes the distinction sound rather than a loophole. The rule now separates them and is deliberately CONSERVATIVE: a pass DROP is always REGRESSION, and a fail rise is excused ONLY when FULLY covered by the fall in previously-unjudged assertions AND pass did not drop, so any unexplained fail still flags. Here 139 <= 146, so it reads RECLASSIFIED, exit 0, with all four numbers printed. A new row label RECLASSIFIED-vs-<epoch> keeps it its OWN bucket in the time spine rather than folding a fourth state into an existing one. 56 incomplete remain -- event patterns beyond load -- and that is the next rung, stated as a number rather than an adjective. BR21 CLOSED, AND NOT BY ME: a sibling seat shipped nx_wpt_ingest -- 49-tooth mutation-proven gate, on the standing roster, pin validation refusing any non-40-hex commit, a name allowlist, idempotent reuse, and a read-back compare that verifies what was WRITTEN. I built nx_wpt_corpus_ingest in parallel without detecting that work in flight; nx_presubmit and nx_capsearch both correctly reported the NAME and the CAPABILITY free, because neither can see a sibling mid-build. Theirs is the superset on every axis -- it already carried the very overrun margin I had to discover by clipping three files at got==cap -- so the duplicate was RETIRED reversibly to knowledge/retired/ rather than left standing. A SEARCH THAT CANNOT SEE WORK IN FLIGHT WILL CLEAR A DUPLICATE EVERY TIME; the check that would have caught it is the corpus manifest on disk, which already named the organ. What survives from the duplicate lane is the JSON reader fix it forced: jx_get_str and jx_get_str_raw required NO whitespace after the colon, so every pretty-printed producer read as an absent field, while jx_get_int one function above already skipped it -- a law applied in half an API. Original done-rule: A pre-declared WPT slice (html/syntax + html/dom, css/CSS2 box + css/css-flexbox + css/css-tables, dom/nodes) runs through the deterministic shot lane (reftests) and a testharness.js-subset shim on js_eval (testharness); results published on THIS page as pass/total PER DIRECTORY beside Ladybird's and wpt.fyi's, never a single percent. A known-failing fixture must FAIL (neg control) before any pass counts. The harness runs THROUGH the BiDi endpoint once BR6 lands (the Ladybird/Servo pattern). | Organ | 2 u |
| CSS-on structural exactness loop (BR2) | bc_struct_col | COLUMN LANDED 2026-08-26, BAR MEASURED AND UNMET, RUNG NOT DONE -- AND THE RANKER DISAGREES WITH THAT SENTENCE, WHICH IS ITSELF THE FINDING. nx_compare_rank decides done by SYMBOL PRESENCE, so the moment bc_struct_col was declared the board moved BR2 from open to done-but-partially-adopted and the operator ratchet reads satisfied while its own bar reads UNMET. That is A COMPLETION SIGNAL THAT KEYS ON A NAME REWARDING THE WRITING OF THE NAME, arriving at the RANKER rather than at the matrix where the estate already knows the shape, and it will fire on EVERY rung whose done-rule is a measured bar rather than a capability. The symbol is deliberately NOT renamed to dodge it (that is dodging a classifier by luck, the answer organ_kind.conf and organ_gate.conf both refused): the fix is for a measurement rung to be judged on the verdict its own organ emits -- nx_browser_census publishes br2_bar_verdict, MET or UNMET or UNOBSERVABLE, on every run -- and until the ranker can read that, this sentence is the only thing standing between the board and a false done. What shipped: bc_struct_col is declared in nx_browser_census.nx and delegates to nx_browser_struct_col_lib.nx, because the judgement has to live in a lib for nx_browser_struct_col_gate to prove it IN PROCESS -- a gate that forked the census binary would read NOT-REACHED for every mutant and its GREEN would mean nothing. Gate 29/29 GREEN, bite-proven twice (killed=1, not_reached=0, mutant_live=0, restore byte-identical), declared in organ_gate.conf so a ship of the census REFUSES rather than warns when the proof is missing. The census itself was PROMOTED-UNREGISTERED for its whole existence -- a real binary nobody could call -- and is now registered and invoked. The plane row grew FOUR additive fields, not three: struct_matched_pm, struct_dy, struct_dx AND struct_bands_oracle, and the fourth is the point. Measured the same day on saved bytes, google returned 1000 permille over TWO oracle text bands and stackoverflow 0 permille over ZERO: a perfect score and a total failure, both arithmetic on an empty subject, both arriving as numbers a scoreboard would have averaged. bsc_band_floor derives the smallest usable denominator FROM THE BAR (one band moves a reading by 1000/N permil and a 900 bar leaves 100 permil of headroom, so N >= 10) and such rows are counted UNDERPOWERED, named, never averaged and never silently dropped. THE NUMBERS, all on bench/selfpage saved bytes through the incumbent nx_struct_diff, CSS on with oracle advances, deterministic, no network, deep window ay=by=800 h=2000: wikipedia 845 permil dy 7 dx 80 over 84 oracle bands, hackernews 769 dy 12 dx 91 over 26, linkedin 545 dy 14 dx 66 over 77. Census aggregate mean 719 permil dy 11 dx 79 over 3 measured, 3 underpowered, 0 unmeasured of 6 rows seen (the partition sums), br2_bar_verdict UNMET. THE DONE-RULE NAMES TWO SITES THAT CANNOT DECIDE IT: an oracle self-control over every banked capture (each self-matches 1000 permil dy 0 dx 0, the positive control that proves the ruler can see) counts example at 6 text bands and x at 6, both below the floor of 10, so neither can resolve a 900 bar at all, while stackoverflow and amazon capture ZERO bands, the CHROME-BLOCKED class. Two of the four bar sites are structurally unmeasurable against the oracles we hold, and that is a defect in the done-rules subject, not a missing engine gain. THE INSTRUMENT DISAGREES WITH ITSELF ON REFLOWING PAGES, AND THE SCOPE WAS MEASURED AFTER THE FIRST DRAFT OF THIS LINE OVERSTATED IT. br_shot_png hardcodes a 1000-pixel paint canvas while br_layout wraps at the callers viewport and struct Page carries no width field, so the two widths are independent constants -- a real measure-equals-paint divergence on the WIDTH axis and a Rule-11 magic number. But the effect is 1 of 4 pages, not uniform: the CSS-ON wikipedia page reads 845 permil at layout width 1024 and 892 at 1000 with its page height moving 7304 to 7406, while hackernews reads 769 at BOTH, linkedin 545 at BOTH, and the CSS-OFF wikipedia capture 916 at BOTH, with page heights that barely move. It fires on content that REFLOWS and is invisible on content that does not, so it blocks grading wikipedia-class pages rather than biasing every reading. page_h moving with the viewport is the free discriminator. Which of 845 and 892 is true is still OPEN, since the oracle was captured at 1024 and the control that settles it is a 1024-wide shot canvas -- which is also the fix (debt browser-shot-width, three lines). On wikipedia the swing is the same order as the 55 permil still separating it from the bar, so it is fixed BEFORE further engine work is graded there. STILL OWED, each named rather than assumed: a paired census run carrying OCR recall on BOTH legs, since the pair verdict reads UNOBSERVABLE today (neither leg has a recall number) and the last real reading is still OFF 426 versus ON 311; a bytes-and-oracle capture taken as ONE act so ebay and yahoo have saved bytes to grade at all, which is why their named residuals could not be worked this session; and render_ab as an organ, since it exists only as _ops/render_ab.ps1, PowerShell that judges, and it grades by page height and OCR rather than by struct_diff. Original done-rule follows: The census gains a struct_diff column per site (matched permil, dy, dx) on CSS-ON renders with oracle advances ON; the styled-collapse residuals (ebay 40, yahoo 61 styled) are named defects worked to zero on saved bytes via render_ab; done when struct_diff matched >= 900 with dy <= 4 on wikipedia, hackernews, example and x deep pages AND the census pair no longer favours CSS-OFF, at which point CSS_ENABLED and oracle advances flip ON by default -- decided by the pair, not by taste. | Organ | 2 u |
| Lazy-load images + srcset (BR14) | bi_srcset | LIB + GATE LANDED 2026-08-26; the done-rule is HALF PROVEN and this row says which half. ROOT CAUSE NAMED: br_extract in nx_browser_render.nx read the src attribute AND NOTHING ELSE, so a lazy-loaded img handed the renderer its data: placeholder while the real URL sat unread in srcset or data-src -- the byte-exact decoders were never at fault, and the images-lazy debt row had the symptom without the mechanism. SHIPPED nx_srcset_lib (bi_srcset the candidate ruler; bi_img_source the element-level order over src, srcset, data-srcset, data-src, data-original, data-lazy-src; bi_sizes_px; bi_img_lazy) wired into br_extract at the ONE site that decides what an img points at, so every consumer of page.bsrc_off gains it in a single edit and no consumer changed shape. SELECTION IS DERIVED, NOT TABLED: target device px = size_px times dpr over 1000, size_px from the author sizes where evaluable else HTML own 100vw default, then the smallest candidate that covers the target and otherwise the largest -- nothing in the lib knows what 640 or 1280 mean, and moving the viewport moves the answer. nx_srcset_lib_gate 59/59 GREEN, mutation-proven killed=1 not_reached=0 mutant_live=0 with the restore byte-verified. THE GATE FOUND A REAL DEFECT IN ITS OWN SUBJECT BEFORE GOING GREEN: a candidate dropped for carrying two descriptors was refused but not CONSUMED, so the leftover 2x re-entered URL collection and a bare descriptor would have been served to the fetcher as an image URL. PROVEN: the descriptor grammar unit-exhaustively (w, x, fractional density, implicit 1x, embedded commas, whitespace runs, ties, overflow, and every malformed form refused BY NAME); the three trivial wrong selectors refuted by name (always-first, always-last, always-largest); byte-identity of the eager path checked against nx_dom_find_attr as an INDEPENDENT instrument rather than asserted; the wiring through the REAL br_layout (four figures resolve to the right URL, zero left holding a placeholder, the lazy flag recorded per box); and the paint chain end to end on a fixture PNG at laid 4 equals decoded 4 equals painted 4 with the pixels asserted in the framebuffer. NOT PROVEN, so this rung stays OPEN: the LIVE half -- the wikipedia benchmark page over the network -- was never run. nx_wpt_reftest was rebuilt and promoted on the new core (contentdiff GREEN, behaveprobe evidence WEAK so behavioural identity is NOT established), and nishi_gui, the Windows daily driver where the bounded fetch budget lives and where the eager-first ordering this rung adds actually pays, carries the source change but was NOT rebuilt: its PE lane is separate. Original done-rule follows: data-src / srcset / loading=lazy images are fetched and painted through the existing PNG/JPEG/WEBP path; done when the wikipedia benchmark page renders every figure it lays out (imgsrc_laid == painted) and the coarse grid on media pages moves. | Organ | 0.5 u |
| Real font files + shaping (BR4) after BR2 | bs_shape_run | FIRST HALF LANDED 2026-09-02 (rung BR26 below, symbol br_set_face): TTF outlines rasterized through the glyph atlas by the sovereign engine nx_ttf_fontlib, hmtx advances and kern-table pair kerning flowing through the ONE measure ruler (nx_font font_adv_em), Liberation Sans (SIL-OFL) as the default face on the Windows daily driver and on the render_shot instrument. MEASURED the same day on bench/selfpage/wiki_aug.html against bench/top20/wikipedia_chrome_tall.png with ONE instrument run twice (nx_browser_render_shot 1024, then 1024 face; nx_struct_diff deep window 800 800 2000): matched 880 to 892 permil, mean_dy 9 to 9, mean_dx 45 to 53, page_h 7027 to 7048 against Chrome 7582, first screen 578 to 578 permil with dx 185 to 155 -- a structural gain and not the bar, while the render itself changed far more than the bands can say (real proportional glyphs, runs no longer welded together, no monospace fallback lines). The hand-baked oracle-advance table was RETIRED after nx_ttf_fontlib_gate T13 proved it equal to floor(hmtx times 1000 over upem) for all 95 ASCII chars. STILL OPEN under this symbol: ligatures (GSUB), GPOS kerning beyond the legacy kern table, bidi runs; and dx toward 0 needs BR27 (family, weight and style resolution -- headings and bold still paint the regular face) and BR29 (the Linux and NAS browser paints bitmap text through a second render core, so the NAS census cannot see any of this yet). The bar stands: struct_diff dx on wrap points reaches 0 against Chrome on saved pages and OCR legibility does not regress below the parametric font's 984. | Organ | 2 u |
| Real TrueType faces in the render core (BR26) | br_set_face | DONE 2026-09-02 (actual 1 u): nx_ttf_fontlib upgraded to read professional faces (unitsPerEm, hhea ascender and descender, cmap glyphIdArray path, composite glyphs, negative side bearings, ink past the advance, kern table pairs -- all READ from the file; the first cut assumed 1000 upem and ascender 760 and would have halved every real font silently), gate 23/23 GREEN on Liberation Sans and Microsoft Arial with a runtime-synthesised cmap; br_set_face adopts a face into the glyph atlas and hands its advances and kern pairs to nx_font font_set_face so layout, wrap and paint agree by construction (nx_inline_vec_measure_gate 8/8, T7 face and kern reserved by layout, T8 clearing restores stroke widths); nishi.exe rebuilt with the face loaded at startup; the 100-row oracle table retired. Shipped in BOTH trees, hash-verified. | Organ | 1 u |
| Font-family, weight and style resolved to real faces (BR27) after BR26 | br_face_resolve | LANDED 2026-09-02 (actual 1 u), SHIPPED AWAITING THE REFEREE AND THE OPERATOR: a face registry of eight slots (Liberation Sans and Serif in regular, bold, italic, bold-italic) selected per text run by ONE resolver, nx_layout_face_for_box, that reads font-weight, font-style and font-family (and the font shorthand) with CSS inheritance and is called by layout before measuring and by paint (br_face_resolve) before drawing, so a run is measured and painted with the same face by construction; the UA sheet now makes h1 to h6 bold. nx_inline_vec_measure_gate 11/11 (T9 a run inside b is measured with the bold slot, T9b the resolver names slot 1, T10 no bold slot falls back to slot 0 and never to the stroke font). MEASURED on the saved wikipedia page, same instrument: struct mean_dx 53 to 49 (the done-rule asked for below 53), page_h 7048 to 7090 against Chrome 7582, matched 892 permil unchanged; the crops show the title and section headings in serif and bold, the hatnote in italic, and bold runs bold. THE BOLD HEADING, ROOT-CAUSED AND FIXED THE SAME HOUR -- after one WRONG correction that is retracted here: an earlier sentence said the fixture carried no heading-weight rule, on a truncated directory listing (5,326 was a cut column of 425,326 bytes); the fixture DOES carry .mw-heading,h1,h2{font-weight:bold} followed by .mw-heading1,h1{font-weight:normal}. Measure-gate teeth T11-T17 isolated the mechanism: single, comma-list and class-descendant author rules all beat the UA bold, but T17 (.zz,b{bold} then b{normal}) FAILED because rh_cascade computed specificity over the WHOLE comma list, so a class member leaked its specificity onto the type members of its list and the earlier list rule outranked the later plain rule (the source's own comment called this a later refinement). FIXED: rh_match_complex_spec returns the max specificity of the members that actually match, and the cascade sorts by that per-match value (18/18 GREEN). MEASURED on the saved wikipedia page, same instrument: first screen 578 to 684 permil (13 of 19 bands), dx 155 to 138; deep window 892 to 880 with dx 49 to 39 and dy 9 to 8; page_h 7090 to 7004 against Chrome 7582; the title now paints serif regular as Chrome does. Still open: edit-section links inherit the heading face, and no monospace slot. nishi.exe rebuilt with the whole family loaded from web_assets/fonts/ (or ../web_assets/fonts/ or the Windows system faces the user already owns, a runtime fallback only), OFL license shipped beside the fonts. | Organ | 1.5 u |
| Web fonts: @font-face URL loading + WOFF2 decode (BR28) after BR26 | bwf_load | Pages ship their own fonts as WOFF2 (Brotli-compressed sfnt); done when a fetched @font-face WOFF2 decodes to an sfnt our engine loads and paints on a banked fixture, with ONE sovereign Brotli codec shared with typography rung R0 so emit and load cannot disagree. | Organ | 2 u |
| ONE render core: the Linux and NAS browser paints through nx_browser_render (BR29) after BR26 | br_render_core | MEASURED 2026-09-02: nx_browser.nx (the promoted Linux binary, the NAS shot verb, the roster gate subject) declares its OWN br_layout, br_draw_fb and br_shot_png and paints text with the 8x8 bitmap font at 2x; it never imports nx_browser_render.nx, where the vector typography, the glyph atlas and the real faces live. Two render cores is the duplicate-ruler defect at the centre of this board, and it is why every NAS-side render of this roadmap is blind to the typography work. Done when nx_browser.nx composes the shared core (one br_layout, one paint), the NAS shot verb paints the same pixels the Windows build does, and nx_browser_gate row 12 stays GREEN through the change. | Organ | 2 u |
| Unicode text pipeline beyond ASCII (BR30) after BR26 | br_text_cp | Text is folded to ASCII before layout (accents to base letters, curly quotes straightened), so a real face is only asked for bytes 32 to 126 although the engine already decodes composite accented glyphs; done when layout and paint carry codepoints, the face covers Latin-1 and Latin Extended on the wikipedia benchmark, and the fold is retired for the scripts the face covers. | Organ | 2 u |
| The browser lab: one sovereign run over a URL or saved bytes, every oracle on one time spine (BR31) after BR26 | bl_run | WebPageTest-class synthetic lab composed from the incumbents the estate already has (render_shot, struct_diff, the census column, the WPT time spine) plus the meters BR32 and BR33 add: one command renders the page, grades it against the banked incumbent capture, records vitals, trace, memory and energy, and APPENDS one row to a content-addressed time spine so any seat, AI or human can read improving or regressing instead of a level; done when a run on the wikipedia fixture appends a row whose every column is measured (none UNOBSERVABLE) and a second identical run appends an identical row. | Organ | 2 u |
| Core Web Vitals on the sovereign render timeline (BR32) after BR26 | br_vitals | LCP and CLS computed from OUR layout and paint passes (largest paint box time, layout shift between passes) and INP once the JS lane (BR3) dispatches events, reported per page beside the incumbents' field thresholds; done when the wikipedia fixture reports LCP and CLS numbers that a repeat run reproduces and the static predictor (nx_uiq_perf) and the runtime meter agree in sign on a planted layout-shift fixture. | Organ | 1.5 u |
| Trace, frame budget, memory and energy per page (BR33) after BR31 | br_resmeter | Perfetto-class spans over fetch, parse, cascade, layout and paint (nx_trace_emit), the per-frame budget (nx_frame_budget), resident and committed memory (nx_resmon) and joules per page from the hardware-agnostic probe (nx_energy_probe), all keyed to the same page run; done when a render of the wikipedia fixture prints all four with a declared UNOBSERVABLE for any the host cannot supply, and the energy figure comes from a real counter or is declared MODELLED, never guessed. | Organ | 2 u |
| Codec capability matrix -- supported, smooth, power-efficient, measured by running our decoders (BR34) after BR33 | bmc_matrix | A MediaCapabilities-shaped table emitted from actually decoding banked fixtures (PNG, JPEG, WEBP-VP8L, VP8, H.264, AV1, Opus, AAC) through the sovereign codecs with frame time and energy per frame from BR33; done when every cell reads SUPPORTED-SMOOTH, SUPPORTED-SLOW or UNSUPPORTED with the measurement beside it, and the page publishes the matrix beside the incumbents' declared support. | Organ | 1 u |
| Responsiveness benchmarks -- Speedometer 3, JetStream, MotionMark run in-house (BR35) after BR3 | bb_speedometer | The cross-vendor benchmarks run through the sovereign JS and render lanes with the score published beside the incumbents; done when Speedometer 3 completes one full iteration in our browser and its score is on the page -- blocked on BR3 by construction, so the row stays a named watch until then. | Organ | 1 u |
| test262 conformance slice published (BR36) after BR3 | js_test262 | A pre-declared test262 directory slice run through js_eval with pass and fail per directory beside Ladybird's 97.8 percent; done when the counts are on the page and appended to the WPT time spine keyed by engine sha. | Organ | 1 u |
| Compat ledger emitted in browser-compat-data shape (BR37) after BR31 | bcd_emit | Every feature row on this board emitted as one BCD-shaped record (feature, version, support measured by a gate), so the sovereign column can be compared feature-for-feature with the incumbents' data instead of prose; done when the emitter covers every matrix row and a planted false support flag is refused. | Organ | 1 u |
| Page-quality audit composed from the sovereign auditors (BR38) after BR32 | ba_audit | Lighthouse-class audit over a rendered page composing nx_uiq_contrast, nx_uiq_atree (the ARIA tree), nx_ui_audit and the BR32 vitals into one scored report with named findings; done when the audit on the wikipedia fixture names at least one real finding a rival audit also names, and a planted contrast failure is caught. | Organ | 1.5 u |
| ES2024 core + fetch/DOM API surface (BR3) after BR1 | js_fetch_api | js_eval grows the ES2024 core (classes, async/await, Promise, modules) and the fetch/XHR + DOM/Event/History API surface the SPA shells need; done when at least 3 of the 6 FETCH-EMPTY rows (youtube, reddit, bing, instagram, duckduckgo, craigslist) read CONTENT-OK in the census with recall over 300, and a test262 core-slice pass count is published beside Ladybird's 97.8 percent. | Organ | 4 u |
| HTTP/2 in the fetch path (BR7) | bh2_stream | The existing h2 stack is wired into the browser fetch (ALPN h2, one connection, multiplexed streams); done when the census fetch time on the top-20 drops measurably with no regression, and h3 is scoped honestly as a separate rung. | Organ | 1 u |
| WASM in the browser (BR9) after BR3 | bw_instantiate | WebAssembly.instantiate through nx_wasm_vm from js_eval; done when a shipped wasm world runs INSIDE the Nishi browser with the same vm-gate equivalence its foreign-browser delivery passes. | Organ | 1 u |
| Video and audio elements (BR8) after BR7 | bv_play | The video element decodes through the sovereign H.264 lane and paints frames into the layout box; done when a banked MP4 fixture plays frame-accurately (row-hash asserted) in headless and GUI. | Organ | 2 u |
| Tabs, sessions, profiles UI (BR5) | bt_tab_open | Tabbed windows over the existing profile store, session restore; done when the synthetic-user driver opens, switches and restores three tabs with pixel-exact asserts. | Organ | 1 u |
| WebDriver BiDi endpoint (BR6) after BR1 | bwd_session | A standard BiDi session (session.new, browsingContext.navigate, captureScreenshot, script.evaluate) served by the browser; done when Puppeteer or Selenium drives a page and screenshot end-to-end and BR1 runs through it. | Organ | 2 u |
| DevTools protocol (BR15) after BR6 | bdt_inspect | Speak the Firefox DevTools protocol so the incumbent inspector attaches (the Ladybird/Servo pattern) -- element tree + styles + console first; done when Firefox's inspector shows our DOM for a live page. | Organ | 2 u |
| Accessibility tree (BR11) | ba_tree | An accessibility tree derived from the layout tree with roles and names, exposed to the platform on Windows first; done when a screen reader reads the wikipedia benchmark headings in order. | Organ | 1.5 u |
| Interop-2026 CSS pack (BR10) after BR1 | css_anchor_pos | CSS anchor positioning, container style queries, cross-document view transitions and scroll-driven animations -- graded by the BR1 harness on the Interop-2026 focus-area directories; done when each directory shows a published pass count, not before. | Organ | 3 u |
| Per-site process sandbox (BR12) after BR5 | bsb_spawn | Content processes per site over the existing sovereign process primitives, never-brick preserved; done when a crash in one tab's content process leaves the browser and other tabs alive under the synthetic-user driver. | Organ | 2 u |
| Canvas GPU (WebGL2 first) (BR13) after BR9 | bg_webgl_ctx | A WebGL2 context on canvas through the sovereign GPU lane; done when the /world delivery pages render INSIDE the Nishi browser and the same frame bit-compares against the CPU path at reference size. | Organ | 3 u |
| Web storage + origin model (BR16) after BR3 | bst_local_set | localStorage/sessionStorage over the profile store, IndexedDB over the seg-store plane, AND the origin model that scopes them (bcors_check same-origin enforcement in fetch -- the security half is part of the done-rule, not an afterthought); done when a saved SPA login fixture persists a session across a browser restart and a cross-origin read is REFUSED. | Organ | 2 u |
| Canvas 2D + SVG raster (BR17) after BR3 | bc2_fill_rect | The canvas element API over the existing sovereign raster primitives, and an SVG parser/rasterizer (bsvg_path) feeding the same image path -- unblanks the census's skipped .svg class; done when a banked canvas fixture and wikipedia's SVG figures render with row-hash asserts. | Organ | 2 u |
| Web components (BR18) after BR3 | bsd_attach | Shadow roots, the custom element registry, template instantiation -- graded by the BR1 harness on the custom-elements + shadow-dom WPT directories (scoped registries is an Interop-2026 area); done when a componentized fixture renders its composed tree. | Organ | 2 u |
| WebSocket wire (BR19) after BR3 | bws_connect | Expose the EXISTING 24-file sovereign WS stack (the rooms/SFU daemons already run on it) as the page WebSocket object -- the cheapest wire on the breadth list; done when a page script echoes through our own room daemon end-to-end. | Organ | 0.5 u |
| Product surfaces (BR20) after BR5 | bpd_download | Downloads manager, form autofill, credential store and per-site permissions over the profile store; print/save-to-PDF (bpr_to_pdf) from the layout tree; done when the synthetic-user driver exercises a download + an autofill + a print of the wikipedia fixture. | Organ | 3 u |
| Byte-preserving WPT corpus ingest (BR21) after BR1 | wsp_ingest_dir | The yardstick is only as reproducible as the corpus it reads, and on 2026-08-26 the corpus behind the published 08-18 numbers was found banked NOWHERE: bench/wpt held only the 370-byte history TSV, and an exhaustive WSL plus laptop search returned nothing. Two directories were re-acquired BY HAND that day and both hashed IDENTICAL to their 08-18 rows, so the numbers are sound -- but the method that recovered them cannot finish the job, and it fails in two DIFFERENT ways that a single organ closes. FIDELITY: the hand path re-emits each body through a text tool argument, which cannot carry UTF-16LE or a BOM, and html/syntax/parsing-html-fragments is the ENCODING-DETECTION suite (the-input-byte-stream-003.html is UTF-16LE with a BOM), so transcription would corrupt exactly the bytes under test. SCALE: dom/nodes is 178 files at two round-trips each, and a partial dom/nodes would be a SAMPLE, which may never be published as a population fact. Done when one call takes a WPT directory path plus a pinned commit sha and lands every file of that directory as RAW BYTES with no text layer anywhere in the path, verifies each file against both the size and the git blob sha GitHub declares for it, writes a manifest carrying the pin, and REFUSES to report the directory complete if any single file failed -- proven by re-ingesting dom_lists and dom_collections and reproducing corpus_sha16 54e90b086e0c6530 and 1819a1dcd3030f03 exactly, then ingesting html_syntax_fragments and dom_nodes and reproducing the 08-18 rows for both. Ships as a lib plus an in-process gate per estate law, so the ingest logic is mutation-provable rather than hidden behind a fork. LANDED 2026-08-26 as three files: nx_wpt_acquire_lib (the pure half -- manifest parse, dual verification, raw write, read-back compare, completeness conjunction, manifest and marker emit), nx_wpt_ingest (the acquisition half, carrying wsp_ingest_dir), and nx_wpt_ingest_gate (49 of 49 teeth GREEN, mutation-proven killed=1 not_reached=0 mutant_live=0, admitted to the standing gate roster). ALL FOUR done-rule bars met: dom/lists and dom/collections re-ingested and reproduced corpus_sha16 54e90b086e0c6530 and 1819a1dcd3030f03 exactly, and html/syntax/parsing-html-fragments and dom/nodes -- neither of which had ever been acquired -- came in COMPLETE at 13 of 13 and 178 of 178 and reproduced the 08-18 corpus hashes a075ffa0af05ccd7 and d49aee870a338154 exactly, including the-input-byte-stream-003.html, UTF-16LE with a BOM and a NUL as its fourth byte, landed with its BOM and its 2,632 bytes intact. The first mutation run is worth recording because it found a real defect rather than a gap in the gate: three of its four comparison sites came back NOT-REACHED, and all three were inside a SECOND decimal renderer and a SECOND length scan that the first draft had written beside the ones already in the file. The compiler eliminated the duplicates because nothing offline could call them, so a mutation there could not change the binary. Collapsing them onto the single renderer removed the duplicate ruler AND the blind spot in one edit, and the re-run reads not_reached=0. | Organ | 1 u |
Milestones
| Milestone | Rungs | Cumulative |
|---|---|---|
| M0 · Build + yardstick | BR0,BR1,BR21 | 4 u |
| M1 · The operator ratchet (structural exactness) | BR2,BR14,BR4,BR26,BR27,BR29 | 13 u |
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| Every named entity decodes and every unmapped codepoint is visible (BR39) after BR30 | ent_html5_table | The decoder table carried 112 hand-grown names and rendered Ø literally (probe 2026-09-02); it now carries the HTML 4.01 set of 253, generated per name length so no function exceeds the compiler's block pool. Remaining: the HTML5 superset of 2,231 names generated from the spec list into per-length tables, and an unmapped codepoint under a face draws the face's notdef box (what Chrome shows without a fallback font) instead of vanishing. Gate proves every HTML5 name decodes to its codepoint on a fixture, that an unknown name passes through literally, and that a CJK run under a face paints notdef cells with the advance of gid 0 | Organ | 1 u |
Milestones
| Milestone | Rungs | Cumulative |
|---|---|---|
| M2 · The dynamic web | BR3,BR7,BR9,BR8,BR28,BR30,BR39 | 21.5 u |
| M3 · Product parity of KIND with the Ladybird alpha | BR5,BR6,BR15,BR11 | 23 u |
| M4 · The 2026 field bar | BR10,BR12,BR13 | 31 u |
| M5 · Full-platform breadth | BR16,BR17,BR18,BR19,BR20 | 39.5 u |
| M6 · The measurement lab -- the industry's instruments as oracles, sovereign twins any seat can run | BR31,BR32,BR33,BR34,BR35,BR36,BR37,BR38 | 50.5 u |
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| Native world-frame emission (BR22) | we_world_frame_emit | LANDED 2026-08-27, GATE OWED -- the row states which half is proven. Operator directive: i want to emit, i dont want webgl and other 3d parties receiving our work and capabilities. SHIPPED runtime/nx_world_emit.nx (5,601 B src, elf df3477 19,616 B, PROMOTED + REGISTERED the same hour): COMPOSITION not a twin -- rendering stays in nx_world_snap.elf (the promoted capture instrument, the same nx_wasm_craft engine source the browser wasm is compiled from; it was REGISTERED-DARK until today and its first MCP invocation was this lane's probe), and the new organ is the missing SHIP LANE for frames: render, stage byte+PNG-signature assert, atomic renameat, read-back of what LANDED. First live emission receipts: WE-RENDER rc=0 stage_bytes=108223 png_ok=1; WE-DEPLOY rc=0; WE-READBACK bytes=108223 png_ok=1; served /world/emit_craft.png status=200 bytes=108223, nx_page_verify VERDICT=GREEN (PNG deep-decode). The browser.matrix watch row flips on the regen that publishes this text -- the flip is the receipt, NOT the proof. NOT DONE UNTIL: an in-process gate proves the lane (render-assert, deploy, read-back conjunction, mutation-proven, roster-admitted) and a beat row keeps the frame fresh -- a frame emitted once is a fossil with a URL. done when the watch cell reads the symbol, the served bytes verify, and the gate is GREEN + bite-proven. | Organ | 0.5 u |
| Browser-native launch (nishi-game marker) (BR23) | br_launch_game | MEASURED DONE 2026-08-27 for the laptop vantage -- and the wire PRE-EXISTED this migration: the census's job was to find it BUILT-UNADOPTED, not to build it. The whole chain was already in source: nx_game_page_emit stamps the nishi-game meta marker into every emitted world page (CE_NATIVE in nx_craft_emit names nx_desktop_craft); nx_browser br_game_organ extracts it FAIL-CLOSED (the page-controlled value becomes an exec path, so nx_[a-z0-9_]{1,60} or the whole marker REJECTS -- nx_browser_game_marker_gate, 7 teeth incl. traversal, uppercase, unterminated hostile pages); br_launch_game execs the native client. PROVEN LIVE TODAY: chain sentinel knowledge/status/nxgame_chain + local nx_browser.sov.elf against the LIVE https URL /world/craft -- fetched over the sovereign TLS stack, 82 boxes laid out, marker detected on the served bytes, native client exec'd: nx_desktop_craft selftest 7/7 GREEN on a REAL X server (S4 blit round-trip 0 of 432000 bytes mismatched, S5/S6 synthetic key+mouse walk camera and yaw exactly, S7 save/load persistence), NATIVE-CHAIN organ=nx_desktop_craft rc=0. nx_desktop_craft itself sat BUILT-UNPROMOTED+STAGED and is now PROMOTED (a643136b, 210,270 B, prev banked) + REGISTERED; source hash e75c16f5 is IDENTICAL laptop and NAS, so the local 7/7 proves the promoted source. RESIDUALS, named: the Windows PE daily driver carries the same marker source but its PE lane was not re-proven today; the NAS binary cannot run the X selftest (no X server on the NAS -- the bench verb is its headless proof surface); and WSLg's Xwayland socket was found dead after long uptime (empty /tmp/.X11-unix reading as X11-setup-failed rc=2) and restored by a WSL bounce -- an absent socket is indistinguishable from a broken client until you list the directory. | Organ | 0.5 u |
| Motion: emitted frame sequences (BR24) after BR22 | we_frame_seq_emit | OPEN, pre-declared. The motion stack exists as LIBS and the census measured its adoption rather than assuming it: nx_video_codec.nx (NishiVideo v1: I-frame codec, entropy, perceptual quant, deblock, reference, MV search) has exactly ONE importer (nx_video_codec_v1_adapter); nx_room_stream.nx (the sovereign no-WebSocket media down-channel) has ONE (nx_vroom_daemon, live on :8446); nx_room_relay.nx has 10. A codec with one importer is a capability the frequency board prices at zero -- the adoption metric for this rung is IMPORTER COUNT RISING, not registration. done when a frame SEQUENCE of the generated world is emitted server-side (nx_world_emit grows we_frame_seq_emit) and delivered as plain media through a sovereign wire (the nx_room_stream down-channel or an emitted NishiVideo/YUV artifact with a published decode), consumable by the native browser AND the last-mile browsers with zero client-side capability, proven by served bytes plus a gate on the sequence lane. | Organ | 2 u |
| Cross-engine last mile on emitted pages (BR25) after BR22 | bx_engine_verify | OPEN -- the lane-D watch contract bx_engine_verify names it: verify the emitted-output pages (plain media plus minimal HTML, zero capability JS) render on Nishi native, Chrome, Waterfox and Edge. done when bx_engine_verify runs the emitted /world frame surface across the engine set with a published per-engine verdict row (the top-20-census pattern applied to OUR OWN emitted pages), and the only licensed difference is font rasterization. | Organ | 1.5 u |
Milestones
| Milestone | Rungs | Cumulative |
|---|---|---|
| M6 · Native emission migration (zero client-side capability) | BR22,BR23,BR24,BR25 | 4.5 u |
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| The Nishi browser opens /world/beach as the sovereign door: same world bytes, no third-party gatekeeper (BR40) | br_world_door | OPERATOR 2026-09-03 (gpu and gameengine goal rows): third-party browsers are the final mile and this browser is where the stack is sovereign. MEASURED the same day: the served beach is 630629 B of which the hand-written JS shell is the interop half gameengine GE22 and GE38 ratchet to zero, the engine is a wasm module our compiler emitted, and the frame is drawn by WebGL2 today with WebGPU levered (gpu GP3 ladder) and cross-origin isolation paid but unconsumed (lang LN33). Done when this browser opens the world URL, fetches the content-hashed module and recipe planes (performance PF1, gameengine GE46), instantiates the module in the sovereign wasm VM (the nx_wasm_vm_verify twin), presents through the native raster door the GE42 kernel names with the HUD reading door nishi-native, reaches first frame inside the GE15 budget, and the frame is bit-identical to nx_world_snap at the same seed (the GE27 tooth) -- the page JS shell is bypassed, never re-implemented; a world that still needs the JS shell to draw reads REFUSED by name with the un-drained function named | Organ | 3 u |
| Every performance bar carries its primary source and date, and a beat flags DRIFTED when the vendor page moves (BR41) | up_metric_prov | DONE-RULE PRE-DECLARED 2026-09-04. A bar row carries the vendor URL and its last-updated date [webvitals26]; publishing a bar with only a secondary witness is REFUSED; a beat re-reads the primary and a planted date change must flag DRIFTED. | Organ | 1 u |
| Every published benchmark score carries suite, version, version date and run date, or is labelled UNCONTROLLED (BR42) | bb_version_ledger | DONE-RULE PRE-DECLARED 2026-09-04. Four fields on every score [browserbench-ann] [jetstream3]; a planted score with an unknown suite version must render UNCONTROLLED, never bare. | Organ | 1 u |
| Engine coverage and platform coverage are two fields and the resolver refuses to collapse them (BR43) | bcd_engine_platform | DONE-RULE PRE-DECLARED 2026-09-04. The resolver emits engine and platform coverage separately [webgpu-status26]; a caller asking for one boolean is refused by name. Bite: WebGPU must read engine=all, platform=partial. | Organ | 1 u |
| Every rendering optimization is reported as a throughput and energy pair over the same run (BR44) | ep_pair_receipt | DONE-RULE PRE-DECLARED 2026-09-04. The receipt carries both deltas [servo-jul26]; a throughput number without its energy twin is refused; a planted run that raises frame rate while raising joules per frame must read as a regression. | Organ | 2 u |
| The interop score is the intersection, with per-implementation rates beside it and an investigation class (BR45) | wpt_interop_intersect | DONE-RULE PRE-DECLARED 2026-09-04. Score = tests passing in every compared implementation [interop2026-webkit]; per-implementation rates published; an area with no valid rate carries the investigation class rather than a number. Bite: a planted area with one failing implementation must lower the intersection and not the others' rates. | Organ | 2 u |
| Every conformance figure is a numerator, a denominator and a date, never a bare percentage (BR46) | js_conf_triple | DONE-RULE PRE-DECLARED 2026-09-04. Three fields with the denominator from a versioned import [ladybird-apr26]; a planted shrinking denominator must be visible in the triple where the percentage alone would hide it. | Organ | 1 u |
Milestones
| Milestone | Rungs | Cumulative |
|---|---|---|
| M7 · September 2026 SOTA: the web platform field's own findings admitted as bars, watches and pre-declared contracts | BR41,BR42,BR43,BR44,BR45,BR46 | 8 u |
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| The verifier fetches what the page declares it will fetch (BR47) after BR1 | pr_declared_hit | nx_pageref_lib gains the declared-asset vocabulary (a meta row named nishi-<kind> with a content path is a promise the page's script will fetch that path), nx_page_verify follows it like an img src, counts it on its summary line as declared-assets and proves a declared NXA by its NXANIM01 magic, and .nxa joins the must-not-answer-HTML class; done-rule: nx_pageref_gate carries the meta-declared hit, a description meta and a non-meta content attribute as negative controls and the .nxa extension class, and nx_page_verify on /world/rigview reads checked=2 with the rig fetched and MAGIC-OK, so a GREEN on a 3D page means the character was seen | Organ | 1 u |
Milestones
| Milestone | Rungs | Cumulative |
|---|---|---|
| M8 · The verifier sees what the page fetches | BR47,BR48,BR49 | 56 u |
| Rung | Closes with | Definition of done (pre-declared) | Executor | Est. |
|---|---|---|---|---|
| The verifier proves a declared asset of any size by its head (BR48) after BR47 | ff_fetch_head | nx_https_fetch_follow.nx gains a bounded-prefix entry (send GET, read the headers and at most N body bytes, close) that returns the prefix and its status instead of failing on overflow, nx_page_verify's head-range retry composes it, and nx_page_verify https://nishifamily.com/world/rigview reads verified-by-head=1 unobservable=0 VERDICT=GREEN against the 10,758,232 B rig -- with a neg-control asset whose head carries no known magic still reading UNOBSERVABLE | seat | 1.5 u |
| The static front door honours Range on every static asset (BR49) after BR47 | sites_range_206 | the edge that serves sites/nishifamily/world/ref9d.nxa answers Range: bytes=0-65535 with 206 Partial Content + Content-Range + Accept-Ranges by composing the range arithmetic nx_media_server already ships (its Accept-Ranges and Content-Range emission), proven by nx_audio_serve_gate's shape (a 4-11 range returns exactly those bytes) run against a static path, and nx_page_verify's head-range retry then reads head-range status=206 on the rig -- a daemon deploy through the health-checked /api/deploy, an operator decision because every request crosses this door | traffic-owner | 2 u |
Inspect a rung and its prerequisites
Declared nodes 50. Rank input binding: PLAN_MATRIX_BOUND_ONLY. Dependency order is authored. Implementation, acceptance evidence, authority and resource readiness are unverified. No action is recommended or dispatched here.
Plan SHA-256 6206a50b0641bbe79dc8d8ecfeb7481c1c5d1e820a4050026c86bb0406587c90. Target rows 0; role rows 0. Existing risks and release worklog retain their own scope; no node completion is inferred.
Use Enter or Space on a rung to inspect its contract. Prerequisite links locate another rung in this list; open its summary to inspect it. Estimates are authored effort, not forecasts.
BR0 — Shipping-tree build GREEN
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
br_comp_borderAcceptance: DONE 2026-08-18 (actual 1 u, estimate held): fault named -- a hardcoded token-pool cap + unguarded push_tok in the compiler, fixed by derived sizing through the canaried toolchain lane (equiv net 10/10, compiler live 5aaf6cd7, browser BUILT+PROMOTED b2ce1f8e). Original done-rule follows: either a compiler defect with a minimal reproducer + a fix promoted through the canaried toolchain lane (nx_cc_equiv_staged + contentdiff GREEN), or a source-shape rewrite with the reproducer banked as a compiler bite. Method fixed by the record: stub BODIES, never truncate; diagnose on the tree that ships (the laptop mirror is stale). Done when the Linux browser deploys again.
Authored effort: 1. Executor kind: Compiler+Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR1 — Sovereign WPT harness
Prerequisites: BR0 (acceptance unverified)
Contract:
wpt_runAcceptance: V1 RAN + V2 CORRECTED 2026-08-18: nx_wpt_runner (sync testharness shim, shared-genv page lane, runtime controls that REFUSE counts if the harness cannot see a failure) over the FULL .html population of four slice directories. v2 numbers (v1's assert_throws any-throw overclaim removed -- published passes went DOWN 45 to 31, which is the correction discipline working): dom/nodes 31 pass / 1217 fail / 178 unsupported-assert / async 1-5-202-incomplete (171 of 178 ran), dom/collections 5/41/2, dom/lists 0/14, html/syntax/parsing-html-fragments 0/20 -- laptop-run like the census, results published here. v3 (08-19) is the OBSERVABILITY rung, field-grounded [@otel-cicd26] [@develocity-pts26] [@wptfyi-runs26]: OTel-mapped TSV time spine (bench/wpt/wpt_history.tsv + the wpttrend- store plane), content-addressed skip on (engine sha, corpus sha) with --force, REGRESSION exit 4 vs the newest same-corpus row (bite-proven: a planted better prior row fired verdict AND exit -- the exit-code half was CAUGHT MISSING by the bite, the estate's own gate law live in a day-old organ), and --twice determinism proof (171 files x2, zero divergence). REFTESTS LANDED 08-19 (nx_wpt_reftest PROMOTED, telemetry on the extracted nx_wpt_spine shared lib -- the DRY law applied at consumer #2): floats 13/51, css-tables 60/56 match-pass/fail at exact-pixel 800x600; corpus = every test in the directory PLUS every reference it links, fetched to closure (0 missing). vNext: NAS fixture ingest so the wpttrend beat runs estate-side; fuzzy-meta tolerance; async event-driven tests. DRIFT CLOSED 2026-08-26, PROVEN BY THE HARNESS'S OWN TELEMETRY: a fresh /api/build of buildroot nx_wpt_runner.nx returns 9a97da75.../595,550 B and BOTH the serving root and the _offc twin ALREADY hold exactly those bytes, so live == staged == source; and the engine= field every counted run stamps into wpt_history.tsv reads 9a97da75f32c108d, meaning the time spine had been recording the current engine all along. The rebuild-on-a-quiet-box instruction this sentence used to carry was STALE -- a standing drift claim nobody re-measures costs the next reader the same investigation, and here the evidence that closed it was already inside the harness's own output. NEXT, NOW MEASURED RATHER THAN NAMED: async is the largest single hole in the count. Run 2026-08-26 over the six-file dom/nodes slice in knowledge/wpt: tests_pass=8 tests_fail=89 async_incomplete=147 dur_ms=84, controls pass=1 fail=1 -- so 147 of 244 assertions (602 permil) are UNJUDGED rather than failing, and Document-createElement.html alone contributes all 147 while returning ZERO sync verdicts. An unjudged assertion is an abstention nobody counts, so the honest denominator on this slice today is 97, not 244, and the async event-driven lane is what converts 602 permil of the corpus from invisible into scored. RESOLVED THE SAME DAY, AND THE FIRST DIAGNOSIS WAS WRONG: the missing piece was NOT only the absent event loop. A purpose-built fixture that separates the conjuncts (knowledge/wptprobe) proved the trailing load-dispatch script DOES execute and DOES fire registered handlers -- p2-after-html-script-ran and p5-handler-body-ran both PASS -- so the dispatch was necessary but not sufficient. The real blocker was in the shim's own async_test: it invoked the test body as g() with NO ARGUMENTS, so async_test(function(t){...}) received undefined and every t.step / t.done threw, leaving the test started and never finished. One correction, fn(t) instead of fn, and the slice reads async_incomplete 147 -> 0 with the partition reconciling EXACTLY: 137 async_fail + 10 async_unsup_assert = the 147 that were invisible. Judged assertions rise 97 -> 244 and the published pass rate therefore FALLS from 82 permil to 33 permil (8 of 244) -- the number got worse because it got honest, the same correction discipline that took v1's 45 published passes down to v2's 31. The 10 unsupported are assert_throws_dom needing DOMException identity, correctly routed to UNSUPPORTED rather than fake-passed. Engine f14f553a77ea1293, controls pass=1 fail=1, verdict=COUNTED. NAMED LIMIT, not fixed here: t.step and t.step_func still drop their arguments, so a test whose handler needs an event object is not yet reachable; and sync test(f, name) likewise passes no test object. AND THE RUN THAT PROVED ALL THIS WAS NOT BEING RECORDED. wsp_append sat behind if (histpath != 0), so a run invoked as `nx_wpt_runner <dir>` -- the documented first form of its own usage line -- printed WPT-ROW ... COUNTED and persisted NOTHING, while that same usage line promised every counted run appends a TSV row. Four runs on 2026-08-26, including the 147 -> 0 measurement, were absent from every history file, and TWO RIVAL SPINES had grown (bench/wpt/ and knowledge/status/) because each caller chose its own path -- the duplicate-ruler defect wearing a filename. A SPINE THAT ONLY RECORDS WHEN THE CALLER REMEMBERS THE PATH IS AN ADOPTION GAP WITH EXTRA STEPS. Fixed by defaulting to a single named owner and ANNOUNCING it: every run now prints a WPT-HISTORY line carrying the path plus a src field reading argv or DEFAULT, so a reader never guesses which file a row went to. Proven by the SPINE GROWING, not by the message appearing -- the first attempt printed a perfect-looking WPT-HISTORY line and appended nothing, because the path literal had been mangled to tsvu0000 in transit; only checking bytes-before vs bytes-after caught it (623 -> 703, delta 80). Live 3a6c48264dc7cc45. THEN THE REAL YARDSTICK RAN. With dom_nodes banked (178 files, BR21), the harness was pointed at the largest corpus we have and the async work paid out: async_incomplete 202 -> 56, files rendered 171 -> 174, and JUDGED assertions 1432 -> 1581 (+149) while PASS stayed EXACTLY 32. corpus_sha came back d49aee870a338154, IDENTICAL to the 2026-08-18 row, so the re-acquired corpus is byte-faithful and the two runs are comparable. THE HARNESS THEN CALLED ITS OWN IMPROVEMENT A REGRESSION: fail rose 1222 -> 1361 and it printed "same corpus, so the engine changed for the worse" with exit 4. That sentence asserts a cause the detector cannot know. AN ASSERTION THAT WAS NEVER JUDGED CANNOT PREVIOUSLY HAVE BEEN PASSING, so judging more can raise fail and can NEVER lower pass -- the asymmetry that makes the distinction sound rather than a loophole. The rule now separates them and is deliberately CONSERVATIVE: a pass DROP is always REGRESSION, and a fail rise is excused ONLY when FULLY covered by the fall in previously-unjudged assertions AND pass did not drop, so any unexplained fail still flags. Here 139 <= 146, so it reads RECLASSIFIED, exit 0, with all four numbers printed. A new row label RECLASSIFIED-vs-<epoch> keeps it its OWN bucket in the time spine rather than folding a fourth state into an existing one. 56 incomplete remain -- event patterns beyond load -- and that is the next rung, stated as a number rather than an adjective. BR21 CLOSED, AND NOT BY ME: a sibling seat shipped nx_wpt_ingest -- 49-tooth mutation-proven gate, on the standing roster, pin validation refusing any non-40-hex commit, a name allowlist, idempotent reuse, and a read-back compare that verifies what was WRITTEN. I built nx_wpt_corpus_ingest in parallel without detecting that work in flight; nx_presubmit and nx_capsearch both correctly reported the NAME and the CAPABILITY free, because neither can see a sibling mid-build. Theirs is the superset on every axis -- it already carried the very overrun margin I had to discover by clipping three files at got==cap -- so the duplicate was RETIRED reversibly to knowledge/retired/ rather than left standing. A SEARCH THAT CANNOT SEE WORK IN FLIGHT WILL CLEAR A DUPLICATE EVERY TIME; the check that would have caught it is the corpus manifest on disk, which already named the organ. What survives from the duplicate lane is the JSON reader fix it forced: jx_get_str and jx_get_str_raw required NO whitespace after the colon, so every pretty-printed producer read as an absent field, while jx_get_int one function above already skipped it -- a law applied in half an API. Original done-rule: A pre-declared WPT slice (html/syntax + html/dom, css/CSS2 box + css/css-flexbox + css/css-tables, dom/nodes) runs through the deterministic shot lane (reftests) and a testharness.js-subset shim on js_eval (testharness); results published on THIS page as pass/total PER DIRECTORY beside Ladybird's and wpt.fyi's, never a single percent. A known-failing fixture must FAIL (neg control) before any pass counts. The harness runs THROUGH the BiDi endpoint once BR6 lands (the Ladybird/Servo pattern).
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR2 — CSS-on structural exactness loop
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bc_struct_colAcceptance: COLUMN LANDED 2026-08-26, BAR MEASURED AND UNMET, RUNG NOT DONE -- AND THE RANKER DISAGREES WITH THAT SENTENCE, WHICH IS ITSELF THE FINDING. nx_compare_rank decides done by SYMBOL PRESENCE, so the moment bc_struct_col was declared the board moved BR2 from open to done-but-partially-adopted and the operator ratchet reads satisfied while its own bar reads UNMET. That is A COMPLETION SIGNAL THAT KEYS ON A NAME REWARDING THE WRITING OF THE NAME, arriving at the RANKER rather than at the matrix where the estate already knows the shape, and it will fire on EVERY rung whose done-rule is a measured bar rather than a capability. The symbol is deliberately NOT renamed to dodge it (that is dodging a classifier by luck, the answer organ_kind.conf and organ_gate.conf both refused): the fix is for a measurement rung to be judged on the verdict its own organ emits -- nx_browser_census publishes br2_bar_verdict, MET or UNMET or UNOBSERVABLE, on every run -- and until the ranker can read that, this sentence is the only thing standing between the board and a false done. What shipped: bc_struct_col is declared in nx_browser_census.nx and delegates to nx_browser_struct_col_lib.nx, because the judgement has to live in a lib for nx_browser_struct_col_gate to prove it IN PROCESS -- a gate that forked the census binary would read NOT-REACHED for every mutant and its GREEN would mean nothing. Gate 29/29 GREEN, bite-proven twice (killed=1, not_reached=0, mutant_live=0, restore byte-identical), declared in organ_gate.conf so a ship of the census REFUSES rather than warns when the proof is missing. The census itself was PROMOTED-UNREGISTERED for its whole existence -- a real binary nobody could call -- and is now registered and invoked. The plane row grew FOUR additive fields, not three: struct_matched_pm, struct_dy, struct_dx AND struct_bands_oracle, and the fourth is the point. Measured the same day on saved bytes, google returned 1000 permille over TWO oracle text bands and stackoverflow 0 permille over ZERO: a perfect score and a total failure, both arithmetic on an empty subject, both arriving as numbers a scoreboard would have averaged. bsc_band_floor derives the smallest usable denominator FROM THE BAR (one band moves a reading by 1000/N permil and a 900 bar leaves 100 permil of headroom, so N >= 10) and such rows are counted UNDERPOWERED, named, never averaged and never silently dropped. THE NUMBERS, all on bench/selfpage saved bytes through the incumbent nx_struct_diff, CSS on with oracle advances, deterministic, no network, deep window ay=by=800 h=2000: wikipedia 845 permil dy 7 dx 80 over 84 oracle bands, hackernews 769 dy 12 dx 91 over 26, linkedin 545 dy 14 dx 66 over 77. Census aggregate mean 719 permil dy 11 dx 79 over 3 measured, 3 underpowered, 0 unmeasured of 6 rows seen (the partition sums), br2_bar_verdict UNMET. THE DONE-RULE NAMES TWO SITES THAT CANNOT DECIDE IT: an oracle self-control over every banked capture (each self-matches 1000 permil dy 0 dx 0, the positive control that proves the ruler can see) counts example at 6 text bands and x at 6, both below the floor of 10, so neither can resolve a 900 bar at all, while stackoverflow and amazon capture ZERO bands, the CHROME-BLOCKED class. Two of the four bar sites are structurally unmeasurable against the oracles we hold, and that is a defect in the done-rules subject, not a missing engine gain. THE INSTRUMENT DISAGREES WITH ITSELF ON REFLOWING PAGES, AND THE SCOPE WAS MEASURED AFTER THE FIRST DRAFT OF THIS LINE OVERSTATED IT. br_shot_png hardcodes a 1000-pixel paint canvas while br_layout wraps at the callers viewport and struct Page carries no width field, so the two widths are independent constants -- a real measure-equals-paint divergence on the WIDTH axis and a Rule-11 magic number. But the effect is 1 of 4 pages, not uniform: the CSS-ON wikipedia page reads 845 permil at layout width 1024 and 892 at 1000 with its page height moving 7304 to 7406, while hackernews reads 769 at BOTH, linkedin 545 at BOTH, and the CSS-OFF wikipedia capture 916 at BOTH, with page heights that barely move. It fires on content that REFLOWS and is invisible on content that does not, so it blocks grading wikipedia-class pages rather than biasing every reading. page_h moving with the viewport is the free discriminator. Which of 845 and 892 is true is still OPEN, since the oracle was captured at 1024 and the control that settles it is a 1024-wide shot canvas -- which is also the fix (debt browser-shot-width, three lines). On wikipedia the swing is the same order as the 55 permil still separating it from the bar, so it is fixed BEFORE further engine work is graded there. STILL OWED, each named rather than assumed: a paired census run carrying OCR recall on BOTH legs, since the pair verdict reads UNOBSERVABLE today (neither leg has a recall number) and the last real reading is still OFF 426 versus ON 311; a bytes-and-oracle capture taken as ONE act so ebay and yahoo have saved bytes to grade at all, which is why their named residuals could not be worked this session; and render_ab as an organ, since it exists only as _ops/render_ab.ps1, PowerShell that judges, and it grades by page height and OCR rather than by struct_diff. Original done-rule follows: The census gains a struct_diff column per site (matched permil, dy, dx) on CSS-ON renders with oracle advances ON; the styled-collapse residuals (ebay 40, yahoo 61 styled) are named defects worked to zero on saved bytes via render_ab; done when struct_diff matched >= 900 with dy <= 4 on wikipedia, hackernews, example and x deep pages AND the census pair no longer favours CSS-OFF, at which point CSS_ENABLED and oracle advances flip ON by default -- decided by the pair, not by taste.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR14 — Lazy-load images + srcset
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bi_srcsetAcceptance: LIB + GATE LANDED 2026-08-26; the done-rule is HALF PROVEN and this row says which half. ROOT CAUSE NAMED: br_extract in nx_browser_render.nx read the src attribute AND NOTHING ELSE, so a lazy-loaded img handed the renderer its data: placeholder while the real URL sat unread in srcset or data-src -- the byte-exact decoders were never at fault, and the images-lazy debt row had the symptom without the mechanism. SHIPPED nx_srcset_lib (bi_srcset the candidate ruler; bi_img_source the element-level order over src, srcset, data-srcset, data-src, data-original, data-lazy-src; bi_sizes_px; bi_img_lazy) wired into br_extract at the ONE site that decides what an img points at, so every consumer of page.bsrc_off gains it in a single edit and no consumer changed shape. SELECTION IS DERIVED, NOT TABLED: target device px = size_px times dpr over 1000, size_px from the author sizes where evaluable else HTML own 100vw default, then the smallest candidate that covers the target and otherwise the largest -- nothing in the lib knows what 640 or 1280 mean, and moving the viewport moves the answer. nx_srcset_lib_gate 59/59 GREEN, mutation-proven killed=1 not_reached=0 mutant_live=0 with the restore byte-verified. THE GATE FOUND A REAL DEFECT IN ITS OWN SUBJECT BEFORE GOING GREEN: a candidate dropped for carrying two descriptors was refused but not CONSUMED, so the leftover 2x re-entered URL collection and a bare descriptor would have been served to the fetcher as an image URL. PROVEN: the descriptor grammar unit-exhaustively (w, x, fractional density, implicit 1x, embedded commas, whitespace runs, ties, overflow, and every malformed form refused BY NAME); the three trivial wrong selectors refuted by name (always-first, always-last, always-largest); byte-identity of the eager path checked against nx_dom_find_attr as an INDEPENDENT instrument rather than asserted; the wiring through the REAL br_layout (four figures resolve to the right URL, zero left holding a placeholder, the lazy flag recorded per box); and the paint chain end to end on a fixture PNG at laid 4 equals decoded 4 equals painted 4 with the pixels asserted in the framebuffer. NOT PROVEN, so this rung stays OPEN: the LIVE half -- the wikipedia benchmark page over the network -- was never run. nx_wpt_reftest was rebuilt and promoted on the new core (contentdiff GREEN, behaveprobe evidence WEAK so behavioural identity is NOT established), and nishi_gui, the Windows daily driver where the bounded fetch budget lives and where the eager-first ordering this rung adds actually pays, carries the source change but was NOT rebuilt: its PE lane is separate. Original done-rule follows: data-src / srcset / loading=lazy images are fetched and painted through the existing PNG/JPEG/WEBP path; done when the wikipedia benchmark page renders every figure it lays out (imgsrc_laid == painted) and the coarse grid on media pages moves.
Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR4 — Real font files + shaping
Prerequisites: BR2 (acceptance unverified)
Contract:
bs_shape_runAcceptance: FIRST HALF LANDED 2026-09-02 (rung BR26 below, symbol br_set_face): TTF outlines rasterized through the glyph atlas by the sovereign engine nx_ttf_fontlib, hmtx advances and kern-table pair kerning flowing through the ONE measure ruler (nx_font font_adv_em), Liberation Sans (SIL-OFL) as the default face on the Windows daily driver and on the render_shot instrument. MEASURED the same day on bench/selfpage/wiki_aug.html against bench/top20/wikipedia_chrome_tall.png with ONE instrument run twice (nx_browser_render_shot 1024, then 1024 face; nx_struct_diff deep window 800 800 2000): matched 880 to 892 permil, mean_dy 9 to 9, mean_dx 45 to 53, page_h 7027 to 7048 against Chrome 7582, first screen 578 to 578 permil with dx 185 to 155 -- a structural gain and not the bar, while the render itself changed far more than the bands can say (real proportional glyphs, runs no longer welded together, no monospace fallback lines). The hand-baked oracle-advance table was RETIRED after nx_ttf_fontlib_gate T13 proved it equal to floor(hmtx times 1000 over upem) for all 95 ASCII chars. STILL OPEN under this symbol: ligatures (GSUB), GPOS kerning beyond the legacy kern table, bidi runs; and dx toward 0 needs BR27 (family, weight and style resolution -- headings and bold still paint the regular face) and BR29 (the Linux and NAS browser paints bitmap text through a second render core, so the NAS census cannot see any of this yet). The bar stands: struct_diff dx on wrap points reaches 0 against Chrome on saved pages and OCR legibility does not regress below the parametric font's 984.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR26 — Real TrueType faces in the render core
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
br_set_faceAcceptance: DONE 2026-09-02 (actual 1 u): nx_ttf_fontlib upgraded to read professional faces (unitsPerEm, hhea ascender and descender, cmap glyphIdArray path, composite glyphs, negative side bearings, ink past the advance, kern table pairs -- all READ from the file; the first cut assumed 1000 upem and ascender 760 and would have halved every real font silently), gate 23/23 GREEN on Liberation Sans and Microsoft Arial with a runtime-synthesised cmap; br_set_face adopts a face into the glyph atlas and hands its advances and kern pairs to nx_font font_set_face so layout, wrap and paint agree by construction (nx_inline_vec_measure_gate 8/8, T7 face and kern reserved by layout, T8 clearing restores stroke widths); nishi.exe rebuilt with the face loaded at startup; the 100-row oracle table retired. Shipped in BOTH trees, hash-verified.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR27 — Font-family, weight and style resolved to real faces
Prerequisites: BR26 (acceptance unverified)
Contract:
br_face_resolveAcceptance: LANDED 2026-09-02 (actual 1 u), SHIPPED AWAITING THE REFEREE AND THE OPERATOR: a face registry of eight slots (Liberation Sans and Serif in regular, bold, italic, bold-italic) selected per text run by ONE resolver, nx_layout_face_for_box, that reads font-weight, font-style and font-family (and the font shorthand) with CSS inheritance and is called by layout before measuring and by paint (br_face_resolve) before drawing, so a run is measured and painted with the same face by construction; the UA sheet now makes h1 to h6 bold. nx_inline_vec_measure_gate 11/11 (T9 a run inside b is measured with the bold slot, T9b the resolver names slot 1, T10 no bold slot falls back to slot 0 and never to the stroke font). MEASURED on the saved wikipedia page, same instrument: struct mean_dx 53 to 49 (the done-rule asked for below 53), page_h 7048 to 7090 against Chrome 7582, matched 892 permil unchanged; the crops show the title and section headings in serif and bold, the hatnote in italic, and bold runs bold. THE BOLD HEADING, ROOT-CAUSED AND FIXED THE SAME HOUR -- after one WRONG correction that is retracted here: an earlier sentence said the fixture carried no heading-weight rule, on a truncated directory listing (5,326 was a cut column of 425,326 bytes); the fixture DOES carry .mw-heading,h1,h2{font-weight:bold} followed by .mw-heading1,h1{font-weight:normal}. Measure-gate teeth T11-T17 isolated the mechanism: single, comma-list and class-descendant author rules all beat the UA bold, but T17 (.zz,b{bold} then b{normal}) FAILED because rh_cascade computed specificity over the WHOLE comma list, so a class member leaked its specificity onto the type members of its list and the earlier list rule outranked the later plain rule (the source's own comment called this a later refinement). FIXED: rh_match_complex_spec returns the max specificity of the members that actually match, and the cascade sorts by that per-match value (18/18 GREEN). MEASURED on the saved wikipedia page, same instrument: first screen 578 to 684 permil (13 of 19 bands), dx 155 to 138; deep window 892 to 880 with dx 49 to 39 and dy 9 to 8; page_h 7090 to 7004 against Chrome 7582; the title now paints serif regular as Chrome does. Still open: edit-section links inherit the heading face, and no monospace slot. nishi.exe rebuilt with the whole family loaded from web_assets/fonts/ (or ../web_assets/fonts/ or the Windows system faces the user already owns, a runtime fallback only), OFL license shipped beside the fonts.
Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR28 — Web fonts: @font-face URL loading + WOFF2 decode
Prerequisites: BR26 (acceptance unverified)
Contract:
bwf_loadAcceptance: Pages ship their own fonts as WOFF2 (Brotli-compressed sfnt); done when a fetched @font-face WOFF2 decodes to an sfnt our engine loads and paints on a banked fixture, with ONE sovereign Brotli codec shared with typography rung R0 so emit and load cannot disagree.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR29 — ONE render core: the Linux and NAS browser paints through nx_browser_render
Prerequisites: BR26 (acceptance unverified)
Contract:
br_render_coreAcceptance: MEASURED 2026-09-02: nx_browser.nx (the promoted Linux binary, the NAS shot verb, the roster gate subject) declares its OWN br_layout, br_draw_fb and br_shot_png and paints text with the 8x8 bitmap font at 2x; it never imports nx_browser_render.nx, where the vector typography, the glyph atlas and the real faces live. Two render cores is the duplicate-ruler defect at the centre of this board, and it is why every NAS-side render of this roadmap is blind to the typography work. Done when nx_browser.nx composes the shared core (one br_layout, one paint), the NAS shot verb paints the same pixels the Windows build does, and nx_browser_gate row 12 stays GREEN through the change.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR30 — Unicode text pipeline beyond ASCII
Prerequisites: BR26 (acceptance unverified)
Contract:
br_text_cpAcceptance: Text is folded to ASCII before layout (accents to base letters, curly quotes straightened), so a real face is only asked for bytes 32 to 126 although the engine already decodes composite accented glyphs; done when layout and paint carry codepoints, the face covers Latin-1 and Latin Extended on the wikipedia benchmark, and the fold is retired for the scripts the face covers.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR31 — The browser lab: one sovereign run over a URL or saved bytes, every oracle on one time spine
Prerequisites: BR26 (acceptance unverified)
Contract:
bl_runAcceptance: WebPageTest-class synthetic lab composed from the incumbents the estate already has (render_shot, struct_diff, the census column, the WPT time spine) plus the meters BR32 and BR33 add: one command renders the page, grades it against the banked incumbent capture, records vitals, trace, memory and energy, and APPENDS one row to a content-addressed time spine so any seat, AI or human can read improving or regressing instead of a level; done when a run on the wikipedia fixture appends a row whose every column is measured (none UNOBSERVABLE) and a second identical run appends an identical row.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR32 — Core Web Vitals on the sovereign render timeline
Prerequisites: BR26 (acceptance unverified)
Contract:
br_vitalsAcceptance: LCP and CLS computed from OUR layout and paint passes (largest paint box time, layout shift between passes) and INP once the JS lane (BR3) dispatches events, reported per page beside the incumbents' field thresholds; done when the wikipedia fixture reports LCP and CLS numbers that a repeat run reproduces and the static predictor (nx_uiq_perf) and the runtime meter agree in sign on a planted layout-shift fixture.
Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR33 — Trace, frame budget, memory and energy per page
Prerequisites: BR31 (acceptance unverified)
Contract:
br_resmeterAcceptance: Perfetto-class spans over fetch, parse, cascade, layout and paint (nx_trace_emit), the per-frame budget (nx_frame_budget), resident and committed memory (nx_resmon) and joules per page from the hardware-agnostic probe (nx_energy_probe), all keyed to the same page run; done when a render of the wikipedia fixture prints all four with a declared UNOBSERVABLE for any the host cannot supply, and the energy figure comes from a real counter or is declared MODELLED, never guessed.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR34 — Codec capability matrix -- supported, smooth, power-efficient, measured by running our decoders
Prerequisites: BR33 (acceptance unverified)
Contract:
bmc_matrixAcceptance: A MediaCapabilities-shaped table emitted from actually decoding banked fixtures (PNG, JPEG, WEBP-VP8L, VP8, H.264, AV1, Opus, AAC) through the sovereign codecs with frame time and energy per frame from BR33; done when every cell reads SUPPORTED-SMOOTH, SUPPORTED-SLOW or UNSUPPORTED with the measurement beside it, and the page publishes the matrix beside the incumbents' declared support.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR35 — Responsiveness benchmarks -- Speedometer 3, JetStream, MotionMark run in-house
Prerequisites: BR3 (acceptance unverified)
Contract:
bb_speedometerAcceptance: The cross-vendor benchmarks run through the sovereign JS and render lanes with the score published beside the incumbents; done when Speedometer 3 completes one full iteration in our browser and its score is on the page -- blocked on BR3 by construction, so the row stays a named watch until then.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR36 — test262 conformance slice published
Prerequisites: BR3 (acceptance unverified)
Contract:
js_test262Acceptance: A pre-declared test262 directory slice run through js_eval with pass and fail per directory beside Ladybird's 97.8 percent; done when the counts are on the page and appended to the WPT time spine keyed by engine sha.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR37 — Compat ledger emitted in browser-compat-data shape
Prerequisites: BR31 (acceptance unverified)
Contract:
bcd_emitAcceptance: Every feature row on this board emitted as one BCD-shaped record (feature, version, support measured by a gate), so the sovereign column can be compared feature-for-feature with the incumbents' data instead of prose; done when the emitter covers every matrix row and a planted false support flag is refused.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR38 — Page-quality audit composed from the sovereign auditors
Prerequisites: BR32 (acceptance unverified)
Contract:
ba_auditAcceptance: Lighthouse-class audit over a rendered page composing nx_uiq_contrast, nx_uiq_atree (the ARIA tree), nx_ui_audit and the BR32 vitals into one scored report with named findings; done when the audit on the wikipedia fixture names at least one real finding a rival audit also names, and a planted contrast failure is caught.
Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR3 — ES2024 core + fetch/DOM API surface
Prerequisites: BR1 (acceptance unverified)
Contract:
js_fetch_apiAcceptance: js_eval grows the ES2024 core (classes, async/await, Promise, modules) and the fetch/XHR + DOM/Event/History API surface the SPA shells need; done when at least 3 of the 6 FETCH-EMPTY rows (youtube, reddit, bing, instagram, duckduckgo, craigslist) read CONTENT-OK in the census with recall over 300, and a test262 core-slice pass count is published beside Ladybird's 97.8 percent.
Authored effort: 4. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR7 — HTTP/2 in the fetch path
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bh2_streamAcceptance: The existing h2 stack is wired into the browser fetch (ALPN h2, one connection, multiplexed streams); done when the census fetch time on the top-20 drops measurably with no regression, and h3 is scoped honestly as a separate rung.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR9 — WASM in the browser
Prerequisites: BR3 (acceptance unverified)
Contract:
bw_instantiateAcceptance: WebAssembly.instantiate through nx_wasm_vm from js_eval; done when a shipped wasm world runs INSIDE the Nishi browser with the same vm-gate equivalence its foreign-browser delivery passes.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR8 — Video and audio elements
Prerequisites: BR7 (acceptance unverified)
Contract:
bv_playAcceptance: The video element decodes through the sovereign H.264 lane and paints frames into the layout box; done when a banked MP4 fixture plays frame-accurately (row-hash asserted) in headless and GUI.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR5 — Tabs, sessions, profiles UI
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bt_tab_openAcceptance: Tabbed windows over the existing profile store, session restore; done when the synthetic-user driver opens, switches and restores three tabs with pixel-exact asserts.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR6 — WebDriver BiDi endpoint
Prerequisites: BR1 (acceptance unverified)
Contract:
bwd_sessionAcceptance: A standard BiDi session (session.new, browsingContext.navigate, captureScreenshot, script.evaluate) served by the browser; done when Puppeteer or Selenium drives a page and screenshot end-to-end and BR1 runs through it.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR15 — DevTools protocol
Prerequisites: BR6 (acceptance unverified)
Contract:
bdt_inspectAcceptance: Speak the Firefox DevTools protocol so the incumbent inspector attaches (the Ladybird/Servo pattern) -- element tree + styles + console first; done when Firefox's inspector shows our DOM for a live page.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR11 — Accessibility tree
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
ba_treeAcceptance: An accessibility tree derived from the layout tree with roles and names, exposed to the platform on Windows first; done when a screen reader reads the wikipedia benchmark headings in order.
Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR10 — Interop-2026 CSS pack
Prerequisites: BR1 (acceptance unverified)
Contract:
css_anchor_posAcceptance: CSS anchor positioning, container style queries, cross-document view transitions and scroll-driven animations -- graded by the BR1 harness on the Interop-2026 focus-area directories; done when each directory shows a published pass count, not before.
Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR12 — Per-site process sandbox
Prerequisites: BR5 (acceptance unverified)
Contract:
bsb_spawnAcceptance: Content processes per site over the existing sovereign process primitives, never-brick preserved; done when a crash in one tab's content process leaves the browser and other tabs alive under the synthetic-user driver.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR13 — Canvas GPU (WebGL2 first)
Prerequisites: BR9 (acceptance unverified)
Contract:
bg_webgl_ctxAcceptance: A WebGL2 context on canvas through the sovereign GPU lane; done when the /world delivery pages render INSIDE the Nishi browser and the same frame bit-compares against the CPU path at reference size.
Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR16 — Web storage + origin model
Prerequisites: BR3 (acceptance unverified)
Contract:
bst_local_setAcceptance: localStorage/sessionStorage over the profile store, IndexedDB over the seg-store plane, AND the origin model that scopes them (bcors_check same-origin enforcement in fetch -- the security half is part of the done-rule, not an afterthought); done when a saved SPA login fixture persists a session across a browser restart and a cross-origin read is REFUSED.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR17 — Canvas 2D + SVG raster
Prerequisites: BR3 (acceptance unverified)
Contract:
bc2_fill_rectAcceptance: The canvas element API over the existing sovereign raster primitives, and an SVG parser/rasterizer (bsvg_path) feeding the same image path -- unblanks the census's skipped .svg class; done when a banked canvas fixture and wikipedia's SVG figures render with row-hash asserts.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR18 — Web components
Prerequisites: BR3 (acceptance unverified)
Contract:
bsd_attachAcceptance: Shadow roots, the custom element registry, template instantiation -- graded by the BR1 harness on the custom-elements + shadow-dom WPT directories (scoped registries is an Interop-2026 area); done when a componentized fixture renders its composed tree.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR19 — WebSocket wire
Prerequisites: BR3 (acceptance unverified)
Contract:
bws_connectAcceptance: Expose the EXISTING 24-file sovereign WS stack (the rooms/SFU daemons already run on it) as the page WebSocket object -- the cheapest wire on the breadth list; done when a page script echoes through our own room daemon end-to-end.
Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR20 — Product surfaces
Prerequisites: BR5 (acceptance unverified)
Contract:
bpd_downloadAcceptance: Downloads manager, form autofill, credential store and per-site permissions over the profile store; print/save-to-PDF (bpr_to_pdf) from the layout tree; done when the synthetic-user driver exercises a download + an autofill + a print of the wikipedia fixture.
Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR21 — Byte-preserving WPT corpus ingest
Prerequisites: BR1 (acceptance unverified)
Contract:
wsp_ingest_dirAcceptance: The yardstick is only as reproducible as the corpus it reads, and on 2026-08-26 the corpus behind the published 08-18 numbers was found banked NOWHERE: bench/wpt held only the 370-byte history TSV, and an exhaustive WSL plus laptop search returned nothing. Two directories were re-acquired BY HAND that day and both hashed IDENTICAL to their 08-18 rows, so the numbers are sound -- but the method that recovered them cannot finish the job, and it fails in two DIFFERENT ways that a single organ closes. FIDELITY: the hand path re-emits each body through a text tool argument, which cannot carry UTF-16LE or a BOM, and html/syntax/parsing-html-fragments is the ENCODING-DETECTION suite (the-input-byte-stream-003.html is UTF-16LE with a BOM), so transcription would corrupt exactly the bytes under test. SCALE: dom/nodes is 178 files at two round-trips each, and a partial dom/nodes would be a SAMPLE, which may never be published as a population fact. Done when one call takes a WPT directory path plus a pinned commit sha and lands every file of that directory as RAW BYTES with no text layer anywhere in the path, verifies each file against both the size and the git blob sha GitHub declares for it, writes a manifest carrying the pin, and REFUSES to report the directory complete if any single file failed -- proven by re-ingesting dom_lists and dom_collections and reproducing corpus_sha16 54e90b086e0c6530 and 1819a1dcd3030f03 exactly, then ingesting html_syntax_fragments and dom_nodes and reproducing the 08-18 rows for both. Ships as a lib plus an in-process gate per estate law, so the ingest logic is mutation-provable rather than hidden behind a fork. LANDED 2026-08-26 as three files: nx_wpt_acquire_lib (the pure half -- manifest parse, dual verification, raw write, read-back compare, completeness conjunction, manifest and marker emit), nx_wpt_ingest (the acquisition half, carrying wsp_ingest_dir), and nx_wpt_ingest_gate (49 of 49 teeth GREEN, mutation-proven killed=1 not_reached=0 mutant_live=0, admitted to the standing gate roster). ALL FOUR done-rule bars met: dom/lists and dom/collections re-ingested and reproduced corpus_sha16 54e90b086e0c6530 and 1819a1dcd3030f03 exactly, and html/syntax/parsing-html-fragments and dom/nodes -- neither of which had ever been acquired -- came in COMPLETE at 13 of 13 and 178 of 178 and reproduced the 08-18 corpus hashes a075ffa0af05ccd7 and d49aee870a338154 exactly, including the-input-byte-stream-003.html, UTF-16LE with a BOM and a NUL as its fourth byte, landed with its BOM and its 2,632 bytes intact. The first mutation run is worth recording because it found a real defect rather than a gap in the gate: three of its four comparison sites came back NOT-REACHED, and all three were inside a SECOND decimal renderer and a SECOND length scan that the first draft had written beside the ones already in the file. The compiler eliminated the duplicates because nothing offline could call them, so a mutation there could not change the binary. Collapsing them onto the single renderer removed the duplicate ruler AND the blind spot in one edit, and the re-run reads not_reached=0.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR39 — Every named entity decodes and every unmapped codepoint is visible
Prerequisites: BR30 (acceptance unverified)
Contract:
ent_html5_tableAcceptance: The decoder table carried 112 hand-grown names and rendered Ø literally (probe 2026-09-02); it now carries the HTML 4.01 set of 253, generated per name length so no function exceeds the compiler's block pool. Remaining: the HTML5 superset of 2,231 names generated from the spec list into per-length tables, and an unmapped codepoint under a face draws the face's notdef box (what Chrome shows without a fallback font) instead of vanishing. Gate proves every HTML5 name decodes to its codepoint on a fixture, that an unknown name passes through literally, and that a CJK run under a face paints notdef cells with the advance of gid 0
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR22 — Native world-frame emission
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
we_world_frame_emitAcceptance: LANDED 2026-08-27, GATE OWED -- the row states which half is proven. Operator directive: i want to emit, i dont want webgl and other 3d parties receiving our work and capabilities. SHIPPED runtime/nx_world_emit.nx (5,601 B src, elf df3477 19,616 B, PROMOTED + REGISTERED the same hour): COMPOSITION not a twin -- rendering stays in nx_world_snap.elf (the promoted capture instrument, the same nx_wasm_craft engine source the browser wasm is compiled from; it was REGISTERED-DARK until today and its first MCP invocation was this lane's probe), and the new organ is the missing SHIP LANE for frames: render, stage byte+PNG-signature assert, atomic renameat, read-back of what LANDED. First live emission receipts: WE-RENDER rc=0 stage_bytes=108223 png_ok=1; WE-DEPLOY rc=0; WE-READBACK bytes=108223 png_ok=1; served /world/emit_craft.png status=200 bytes=108223, nx_page_verify VERDICT=GREEN (PNG deep-decode). The browser.matrix watch row flips on the regen that publishes this text -- the flip is the receipt, NOT the proof. NOT DONE UNTIL: an in-process gate proves the lane (render-assert, deploy, read-back conjunction, mutation-proven, roster-admitted) and a beat row keeps the frame fresh -- a frame emitted once is a fossil with a URL. done when the watch cell reads the symbol, the served bytes verify, and the gate is GREEN + bite-proven.
Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR23 — Browser-native launch (nishi-game marker)
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
br_launch_gameAcceptance: MEASURED DONE 2026-08-27 for the laptop vantage -- and the wire PRE-EXISTED this migration: the census's job was to find it BUILT-UNADOPTED, not to build it. The whole chain was already in source: nx_game_page_emit stamps the nishi-game meta marker into every emitted world page (CE_NATIVE in nx_craft_emit names nx_desktop_craft); nx_browser br_game_organ extracts it FAIL-CLOSED (the page-controlled value becomes an exec path, so nx_[a-z0-9_]{1,60} or the whole marker REJECTS -- nx_browser_game_marker_gate, 7 teeth incl. traversal, uppercase, unterminated hostile pages); br_launch_game execs the native client. PROVEN LIVE TODAY: chain sentinel knowledge/status/nxgame_chain + local nx_browser.sov.elf against the LIVE https URL /world/craft -- fetched over the sovereign TLS stack, 82 boxes laid out, marker detected on the served bytes, native client exec'd: nx_desktop_craft selftest 7/7 GREEN on a REAL X server (S4 blit round-trip 0 of 432000 bytes mismatched, S5/S6 synthetic key+mouse walk camera and yaw exactly, S7 save/load persistence), NATIVE-CHAIN organ=nx_desktop_craft rc=0. nx_desktop_craft itself sat BUILT-UNPROMOTED+STAGED and is now PROMOTED (a643136b, 210,270 B, prev banked) + REGISTERED; source hash e75c16f5 is IDENTICAL laptop and NAS, so the local 7/7 proves the promoted source. RESIDUALS, named: the Windows PE daily driver carries the same marker source but its PE lane was not re-proven today; the NAS binary cannot run the X selftest (no X server on the NAS -- the bench verb is its headless proof surface); and WSLg's Xwayland socket was found dead after long uptime (empty /tmp/.X11-unix reading as X11-setup-failed rc=2) and restored by a WSL bounce -- an absent socket is indistinguishable from a broken client until you list the directory.
Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR24 — Motion: emitted frame sequences
Prerequisites: BR22 (acceptance unverified)
Contract:
we_frame_seq_emitAcceptance: OPEN, pre-declared. The motion stack exists as LIBS and the census measured its adoption rather than assuming it: nx_video_codec.nx (NishiVideo v1: I-frame codec, entropy, perceptual quant, deblock, reference, MV search) has exactly ONE importer (nx_video_codec_v1_adapter); nx_room_stream.nx (the sovereign no-WebSocket media down-channel) has ONE (nx_vroom_daemon, live on :8446); nx_room_relay.nx has 10. A codec with one importer is a capability the frequency board prices at zero -- the adoption metric for this rung is IMPORTER COUNT RISING, not registration. done when a frame SEQUENCE of the generated world is emitted server-side (nx_world_emit grows we_frame_seq_emit) and delivered as plain media through a sovereign wire (the nx_room_stream down-channel or an emitted NishiVideo/YUV artifact with a published decode), consumable by the native browser AND the last-mile browsers with zero client-side capability, proven by served bytes plus a gate on the sequence lane.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR25 — Cross-engine last mile on emitted pages
Prerequisites: BR22 (acceptance unverified)
Contract:
bx_engine_verifyAcceptance: OPEN -- the lane-D watch contract bx_engine_verify names it: verify the emitted-output pages (plain media plus minimal HTML, zero capability JS) render on Nishi native, Chrome, Waterfox and Edge. done when bx_engine_verify runs the emitted /world frame surface across the engine set with a published per-engine verdict row (the top-20-census pattern applied to OUR OWN emitted pages), and the only licensed difference is font rasterization.
Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR40 — The Nishi browser opens /world/beach as the sovereign door: same world bytes, no third-party gatekeeper
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
br_world_doorAcceptance: OPERATOR 2026-09-03 (gpu and gameengine goal rows): third-party browsers are the final mile and this browser is where the stack is sovereign. MEASURED the same day: the served beach is 630629 B of which the hand-written JS shell is the interop half gameengine GE22 and GE38 ratchet to zero, the engine is a wasm module our compiler emitted, and the frame is drawn by WebGL2 today with WebGPU levered (gpu GP3 ladder) and cross-origin isolation paid but unconsumed (lang LN33). Done when this browser opens the world URL, fetches the content-hashed module and recipe planes (performance PF1, gameengine GE46), instantiates the module in the sovereign wasm VM (the nx_wasm_vm_verify twin), presents through the native raster door the GE42 kernel names with the HUD reading door nishi-native, reaches first frame inside the GE15 budget, and the frame is bit-identical to nx_world_snap at the same seed (the GE27 tooth) -- the page JS shell is bypassed, never re-implemented; a world that still needs the JS shell to draw reads REFUSED by name with the un-drained function named
Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR41 — Every performance bar carries its primary source and date, and a beat flags DRIFTED when the vendor page moves
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
up_metric_provAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. A bar row carries the vendor URL and its last-updated date [@webvitals26]; publishing a bar with only a secondary witness is REFUSED; a beat re-reads the primary and a planted date change must flag DRIFTED.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR42 — Every published benchmark score carries suite, version, version date and run date, or is labelled UNCONTROLLED
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bb_version_ledgerAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. Four fields on every score [@browserbench-ann] [@jetstream3]; a planted score with an unknown suite version must render UNCONTROLLED, never bare.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR43 — Engine coverage and platform coverage are two fields and the resolver refuses to collapse them
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
bcd_engine_platformAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. The resolver emits engine and platform coverage separately [@webgpu-status26]; a caller asking for one boolean is refused by name. Bite: WebGPU must read engine=all, platform=partial.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR44 — Every rendering optimization is reported as a throughput and energy pair over the same run
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
ep_pair_receiptAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. The receipt carries both deltas [@servo-jul26]; a throughput number without its energy twin is refused; a planted run that raises frame rate while raising joules per frame must read as a regression.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR45 — The interop score is the intersection, with per-implementation rates beside it and an investigation class
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
wpt_interop_intersectAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. Score = tests passing in every compared implementation [@interop2026-webkit]; per-implementation rates published; an area with no valid rate carries the investigation class rather than a number. Bite: a planted area with one failing implementation must lower the intersection and not the others' rates.
Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR46 — Every conformance figure is a numerator, a denominator and a date, never a bare percentage
Prerequisites: None declared; this does not establish execution eligibility.
Contract:
js_conf_tripleAcceptance: DONE-RULE PRE-DECLARED 2026-09-04. Three fields with the denominator from a versioned import [@ladybird-apr26]; a planted shrinking denominator must be visible in the triple where the percentage alone would hide it.
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR47 — The verifier fetches what the page declares it will fetch
Prerequisites: BR1 (acceptance unverified)
Contract:
pr_declared_hitAcceptance: nx_pageref_lib gains the declared-asset vocabulary (a meta row named nishi-<kind> with a content path is a promise the page's script will fetch that path), nx_page_verify follows it like an img src, counts it on its summary line as declared-assets and proves a declared NXA by its NXANIM01 magic, and .nxa joins the must-not-answer-HTML class; done-rule: nx_pageref_gate carries the meta-declared hit, a description meta and a non-meta content attribute as negative controls and the .nxa extension class, and nx_page_verify on /world/rigview reads checked=2 with the rig fetched and MAGIC-OK, so a GREEN on a 3D page means the character was seen
Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.
BR48 — The verifier proves a declared asset of any size by its head
Prerequisites: BR47 (acceptance unverified)
Contract:
ff_fetch_headAcceptance: nx_https_fetch_follow.nx gains a bounded-prefix entry (send GET, read the headers and at most N body bytes, close) that returns the prefix and its status instead of failing on overflow, nx_page_verify's head-range retry composes it, and nx_page_verify https://nishifamily.com/world/rigview reads verified-by-head=1 unobservable=0 VERDICT=GREEN against the 10,758,232 B rig -- with a neg-control asset whose head carries no known magic still reading UNOBSERVABLE
Authored effort: 1.5. Executor kind: seat. Responsible, accountable and verifier not established. Inspect retained worklog.
BR49 — The static front door honours Range on every static asset
Prerequisites: BR47 (acceptance unverified)
Contract:
sites_range_206Acceptance: the edge that serves sites/nishifamily/world/ref9d.nxa answers Range: bytes=0-65535 with 206 Partial Content + Content-Range + Accept-Ranges by composing the range arithmetic nx_media_server already ships (its Accept-Ranges and Content-Range emission), proven by nx_audio_serve_gate's shape (a 4-11 range returns exactly those bytes) run against a static path, and nx_page_verify's head-range retry then reads head-range status=206 on the rig -- a daemon deploy through the health-checked /api/deploy, an operator decision because every request crosses this door
Authored effort: 2. Executor kind: traffic-owner. Responsible, accountable and verifier not established. Inspect retained worklog.
Learning and practice paths
No structured learning path is declared for this plan. Existing research, roadmap and worklog remain available above.
Capability comparisons
Compare the field, search individual capabilities and open their source and adoption evidence. Documented presence does not establish comparative quality.
Position map — centrality and distinctiveness
The four-quadrant map the field uses for brand strategy (Dawar and Bagga, HBR June 2015), re-derived from this matrix on every publish. Centrality is the share of the category's feature mass a player covers, each feature weighted by how many hold it; distinctiveness is the average lead over each rival on the rows the player holds; breadth is the depth-weighted share of the whole matrix (the bubble); depth is how deeply the rows held are held; momentum is the day-over-day move off the spine (green rising, red falling, grey until day two); the dashed path runs first day → previous day → today. Dividers are the category means. Axes are fitted to the field of play, so read the tick numerals, not the frame. Rival marks are documented presence, so a rival's position reads the record, never its quality. The picture grades its own readability below; the table beside it is the same data for a screen reader or a second method.
knowledge/compare/browser.cdmap (cut|x|y, cube|x|y|z); absent = the HBR defaultsbubble area = breadth · ring = momentum (green rising, red falling, grey until day two) · dashed = category means · axes fitted to the field of play: centrality 500–1000, distinctiveness 50–250 of 0–1000 permil (the full range put every player in one corner)
readability of the 2D cut, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 5 (a fact of the data: two players that close are that close) · data spread 719 permil of the plot · quadrant words unseated 0
text contrast, measured with wcag2-ratio (floors from contrast.conf), light theme: labels 16.24 (floor 4.50) · notes 16.24 (floor 4.50) · quadrant words 5.89 (floor 4.50) · tick numerals 5.89 (floor 4.50) · axis titles 5.59 (floor 4.50) · dark theme: labels 13.78 (floor 4.50) · quadrant words 5.55 (floor 4.50) · axis titles 5.97 (floor 4.50) · dark classes under their floor 0 (one figure serves both themes: a dark shortfall is a token to fix, never a class to hide) · classes refused under their floor 0 (a refused class is not drawn; the scale classes are measured, never hidden) · export: SVG PNG (receipt, rendered by the estate's own rasteriser from this page)
readability of the 3D cube, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 7 (a fact of the data: two players that close are that close) · data spread 383 permil of the plot
10 panels over 5 registered axes, every pair once (the lower axis on x, the higher on y) · each panel fitted to its own field of play, first and last tick numerals shown · no labels in a small cut, the legend names the colours; the grade below reports the mark terms only (MM summed over the panels, spread averaged)
readability of the small multiples, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 71 (a fact of the data: two players that close are that close) · data spread 600 permil of the plot
| Player | Quadrant | centrality | distinctiveness | breadth | depth | momentum | Rows held | Days on spine | First seen |
|---|---|---|---|---|---|---|---|---|---|
| Nishi | Unconventional | 551 | 197 | 381 | 728 | 0 since 2026-09-15 | 65 | 2 | 2026-09-15 |
| Chrome | Aspirational | 983 | 205 | 844 | 926 | 0 since 2026-09-15 | 113 | 2 | 2026-09-15 |
| Firefox | Aspirational | 984 | 189 | 827 | 908 | 0 since 2026-09-15 | 113 | 2 | 2026-09-15 |
| Safari | Aspirational | 956 | 184 | 803 | 922 | 0 since 2026-09-15 | 108 | 2 | 2026-09-15 |
| Edge | Aspirational | 978 | 207 | 841 | 923 | 0 since 2026-09-15 | 113 | 2 | 2026-09-15 |
| Ladybird | Peripheral | 881 | 92 | 602 | 769 | 0 since 2026-09-15 | 97 | 2 | 2026-09-15 |
| Servo | Mainstream | 905 | 98 | 610 | 756 | 0 since 2026-09-15 | 100 | 2 | 2026-09-15 |
| Day | Matrix rows reviewed | Players recorded |
|---|---|---|
| 2026-09-15 | 124 | 7 |
| 2026-09-16 | 124 | 7 |
players 7|matrix rows 124|feature mass 709|centrality mean 891|distinctiveness mean 167|axes 5|spine days 2 (shown 2)|rows written today 0|readability defects 2D 0 cube 0|spine knowledge/status/cdmap/browser.spine
comparewatch- plane row flips with it. A dark tag means the organ file EXISTS but does not declare the contracted symbol: something shipped there under another name, and until the contract is repointed to the real entry point (the plan rung and this row) or the function is renamed, that capability is invisible to this board — a build lost to darkness, named so it is not. The flip is necessary, not sufficient: it proves the symbol exists, never that the capability is good. The bar is the rung's pre-declared done-rule, proven by its gate — a symbol shipped without the behaviour behind it is a defect, and the flip is exactly what makes that defect visible instead of quiet. Competitor marks record documented capability presence — presence, not depth or scale. Adoption is measured too: every measured row carries where its organ stands on the estate's ladder (source → built → promoted → registered → invoked; libraries by importer reach minus validation importers; gates by the execution surfaces that run them). A row is fully adopted only at the top of its ladder; anything short is tagged partial with the exact remedy, so a build nobody promoted can no longer read as shipped. Census stamps: importers asof 1789497476, gate census asof 1789498715 (unix seconds; -1 = census absent).Capability matrix — measured against source
◉ leads / measured exceed● present◐ partial○ absent · click any capability for its evidence
| Capability | Nishi | Chrome | Firefox | Safari | Edge | Ladybird | Servo |
|---|---|---|---|---|---|---|---|
Headless full-cascade layout and PNG screenshot with no X11Measured:br_layout exists in runtime/_hdl_build/nx_browser.nx, verified at emit. The windowed browser is an X11/WSLg app and cannot run on a headless NAS, so a `shot` verb renders a LOCAL FILE through the FULL pipeline and returns before _url.txt, the CA bundle and X11 are ever touched: UA defaults plus author style plus @media filtered AT THE REAL VIEWPORT WIDTH, into a 16384-box tree, cascaded, block-laid-out, painted and written as PNG. MEASURED 2026-08-26: /compare/librarian boxes=2018 computed_decls=6512 page_h=25927px and /compare/browser boxes=3926 computed_decls=16921 page_h=28108px at vw=1000. It reports the LAYOUT NUMBERS rather than a pass bit, because a boolean cannot tell you a page rendered to 40 boxes where it used to render to 400, and it REFUSES on zero boxes or zero height rather than writing a clean-looking blank PNG. Every engine here ships headless screenshots so this is PARITY, not an exceed rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
EVERY published board rendered, full population not a sampleMeasured:pr_render exists in runtime/nx_pagerender_lib.nx, verified at emit. MEASURED 2026-08-26 over the estate's own SSOT (regen.list), one shared render ruler for both the single-page CLI and the fleet sweep so they cannot disagree about what rendered means: domains_listed=84 passed=84 skipped=0 failed=0 sum=84 partition=RECONCILES, rendered_html_bytes=6431948 extracted_text_bytes=3019622 worst_lit_subpixels=534 against a NON-BLANK floor of 16. The WORST case is published, never the mean, because a mean hides the one board that nearly went blank. SKIP and FAIL are counted apart on purpose: not-published-yet and renderer-could-not-draw-it take opposite remedies and one counter cannot say which. Rendering is table stakes for every engine here so this is PARITY; what is unusual is running it over the whole published surface and reconciling the partition rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=1 nonval=1 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Headless render of our OWN published pages, argv-drivenMeasured:ro_contains exists in runtime/nx_browser_render_own_test.nx, verified at emit. Renders from disk with no network: HTML into nx_html_to_text, painted through the 5x7 bitmap font into an RGBA framebuffer, with a NON-BLANK subpixel assertion and the ASCII raster written out as VISIBLE proof rather than a boolean. MEASURED 2026-08-26 against the live /compare/librarian page: html=74844B text=32135B painted_chars=76 lit_subpixels=754 of 61440 raster=61568B, glyphs legible in the raster. It previously HARDCODED all three inputs (fixture path, expected marker, raster output) so it could only ever prove the pipeline on ONE document, the homepage; now any page we publish is a one-line regression check. Headless rendering is table stakes for every engine here, so this is PARITY and is marked as such, not an exceed rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Runs on NishiOS -- sovereign OS reachMeasured exceed:nb_boot_image in runtime/_hdl_build/nx_nishios_browser.nx, verified at emit. No incumbent and neither independent engine can target NishiOS; the Nishi browser fetched the REAL internet there (13/13 gate, nishios_net_wire.bmp). Ladybird alpha targets Linux+macOS only; Servo targets Linux/macOS/Windows/Android/OpenHarmony. Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: compiled, never promoted to the serving root: /api/promote it | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
Own TLS 1.3 stack -- no BoringSSL, NSS, OpenSSL or rustlsMeasured exceed:tls13_client_hello_emit in runtime/nx_tls13_hello.nx, verified at emit. incumbents ship third-party crypto; Ladybird links OpenSSL/curl, Servo links rustls/hyper; ours is own TLS 1.3+1.2 hardware-up (AES-NI/PCLMULQDQ in our own assembler), with handshake-fragment reassembly (Cloudflare/Fastly/Meta class certs) proven live 2026-07-24. Adoption: LIB-WIRED importers=33 nonval=9 — fully adopted (top of its ladder).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, Servo; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
One render core from the assembler up -- no libc, no OS toolkitMeasured exceed:br_layout in runtime/_hdl_build/nx_browser_render.nx, verified at emit. a single auditable core (br_layout/br_draw_fb) on Linux+Windows+NishiOS with no libc/Qt/AppKit/winit underneath; every rival, including Ladybird (Qt/AppKit) and Servo (winit/wgpu), rides an OS toolkit. Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, Servo; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
No V8/JIT RCE attack surface -- by constructionMeasured exceed:js_eval in runtime/nx_js_eval.nx, verified at emit. tree-walking interpreter, no JIT pages, so the recurring type-confusion/RCE CVE class is ABSENT by construction (Chrome 140 alone patched a high-severity V8 flaw). Ladybird's LibJS is likewise a no-JIT interpreter (coded Yes); Servo embeds SpiderMonkey with its JIT. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: PROMOTED-UNREGISTERED — PARTIAL: a real binary nobody can call over MCP: /api/tools/register it; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: a real binary nobody can call over MCP: /api/tools/register it; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ◉ | ○ | ○ | ○ | ○ | ● | ○ |
Attack-vector neutralized by constructionMeasured exceed:wh_neutralize in runtime/_hdl_build/nx_web_harden.nx, verified at emit. 90s-neutral hardening defangs forced-download/popunder/nav-to-binary; Firefox and Safari offer privacy options but neither neutralizes these vectors by construction; the independent engines have no such lane. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, Servo; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ◉ | ○ | ◐ | ○ | ◐ | ○ | ○ |
Auditable native binary -- 757KB PE + 1.2MB fetch engineMeasured exceed:gi_rva in runtime/nx_pe_compile_win_gui.nx, verified at emit. nishi.exe 757,248 B + nishi_fetch.exe 1,198,080 B (measured 2026-08-18), every byte in-house source, vs 200-400MB installs; Ladybird and Servo are tens of MB with vendored deps. Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: compiled, never promoted to the serving root: /api/promote it | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
Clean-browse live archive and preservationMeasured exceed:ad_preserve_one in runtime/_hdl_build/nx_archive_daemon.nx, verified at emit. built-in WARC archive + clean reader view + KVS de-obfuscation; no rival bundles sovereign preservation. Adoption: LIVE-DAEMON — fully adopted (top of its ladder).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, Servo; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
Never-brick clean-view sandbox -- by constructionMeasured exceed:sg_new in runtime/_hdl_build/nx_surrogate.nx, verified at emit. reaches no persistent hardware state (Rule 26); surrogate-and-satisfy clean view. Adoption: LIB-WIRED importers=11 nonval=6 — fully adopted (top of its ladder).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, Servo; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
Document omnitool -- opens .docx/.md/.csv natively in the pageMeasured exceed:br_doc_conv in runtime/_hdl_build/nx_browser.nx, verified at emit. registry-dispatched conversion renders office/markdown/csv INLINE when navigated to (nx_browser: doc omnitool rendered); incumbents open PDF natively and download the rest (coded Part.); the independent engines open neither. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run.Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run | ◉ | ◐ | ◐ | ◐ | ◐ | ○ | ○ |
Publishes its own parity census against rivals -- measured, not assertedMeasured exceed:sd_bands in runtime/_hdl_build/nx_struct_diff.nx, verified at emit. bench/top20 (20 real sites vs Chrome/Edge oracles: OCR reading recall + coarse/tight visual grids + text-line-band struct_diff with honest controls: self 1000, cross-site 769) and a determinism tooth (same saved bytes rendered twice = bit-identical PNG). Rivals publish standards conformance (Interop / wpt.fyi) not rival parity -- coded Part. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: source exists, never compiled: /api/build it | ◉ | ◐ | ◐ | ◐ | ◐ | ◐ | ◐ |
Standards yardstick run in-house -- WPT through the sovereign harness, published per directoryMeasured:wpt_run exists in runtime/nx_wpt_runner.nx, verified at emit. Every rival runs web-platform-tests in CI and publishes to wpt.fyi or its own dashboard [wptfyi-runs26]; ours runs the banked, pinned corpus with runtime controls and a content-addressed time spine (the WPT rows below). PARITY of method; the counts are the distance. Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Pixel-exact reftests through our own paintMeasured:rt_render exists in runtime/nx_wpt_reftest.nx, verified at emit. Test and reference painted through the sovereign render core at a fixed 800x600 viewport and compared exact-pixel, with self-match and known-mismatch controls; 73 spec reftests pass PIXEL-EXACT (css/CSS2/floats and css-tables, 2026-08-19). Every rival runs reftests the same way (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Core Web Vitals -- static predictor present, runtime meter on the sovereign paint timeline is a watch (BR32)Measured:main exists in runtime/_hdl_build/nx_uiq_perf.nx, verified at emit. LCP, INP and CLS are the field's three user-facing metrics [webvitals26]; nx_uiq_perf predicts them STATICALLY from the HTML (blocking css and js, unsized media) and is gate-proven; the runtime half -- LCP and CLS computed from OUR layout and paint passes with no rival present -- is rung BR32 and the row directly below. Incumbents report all three (Best); the independent engines expose the timing APIs (Part). Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on disk; ahead of Ladybird, ServoCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Web Vitals measured on the sovereign render timeline (BR32)DARK —runtime/_hdl_build/nx_browser_render.nx EXISTS but does not declare br_vitals: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH br_vitals: largest-contentful-paint box and time from the paint pass, layout shift between the two layout passes, INP once BR3 dispatches events [webvitals26] [lighthouse26]; done when the wikipedia fixture reports numbers a repeat run reproduces and a planted layout-shift fixture moves CLS in the same direction the static predictor names.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
The browser lab -- one sovereign run over a URL or saved bytes, every oracle on one time spine (BR31)Open — watchingruntime/nx_browser_lab.nx : bl_run, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bl_run, the WebPageTest-class synthetic lab [webpagetest26]: render_shot, struct_diff against the banked incumbent capture, the census column, vitals, trace, memory and energy composed into ONE command that APPENDS one row to a content-addressed time spine, so any seat, AI or human reads improving or regressing rather than a level. The incumbents rely on external labs for this (Yes); the independent engines have none (No); no rival ships the lab INSIDE the browser it grades, which is the exceed once it lands.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge; open contract, nothing on disk yet | ○ | ● | ● | ● | ● | ○ | ○ |
Trace, frame budget, memory and energy per page -- the sovereign pieces exist estate-wide, the browser wiring is a watch (BR33)Measured:ep_read exists in runtime/_hdl_build/nx_energy_probe.nx, verified at emit. Perfetto-class tracing puts CPU, memory and power rails on one timeline [perfetto26]; the estate already has nx_trace_emit (spans), nx_frame_budget (per-frame budget from target FPS), nx_resmon and nx_memvel (resident and committed memory, leak velocity) and nx_energy_probe (a HARDWARE-AGNOSTIC joules and watts reader over the platform power supply and energy counters, present here) -- none yet keyed to a page run. Chrome, Firefox and Edge expose energy impact and power profiling (Part); Safari via Instruments; the independent engines none. Adoption: LIB-GATE-ONLY importers=1 — PARTIAL: imported only by validation organs (gates, tests, benches): wire it into a shipping program.Pros Nishi has it, measured on disk; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: imported only by validation organs (gates, tests, benches): wire it into a shipping program | ● | ◐ | ◐ | ○ | ◐ | ○ | ○ |
Per-page trace + memory + energy meter wired to the render (BR33)DARK —runtime/_hdl_build/nx_browser_render.nx EXISTS but does not declare br_resmeter: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH br_resmeter: spans over fetch, parse, cascade, layout and paint, the frame budget verdict, resident and committed memory, and joules per page from a real counter or declared MODELLED [perfetto26]; done when the wikipedia fixture prints all four with a declared UNOBSERVABLE for whatever the host cannot supply.Pros none measured yetCons behind Chrome, Firefox, Edge; open contract, nothing on disk yet | ○ | ◐ | ◐ | ○ | ◐ | ○ | ○ |
Codec capability matrix -- supported, smooth, power-efficient, measured by running our own decoders (BR34)Open — watchingruntime/nx_browser_codecs.nx : bmc_matrix, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bmc_matrix in the shape of the Media Capabilities API [mediacap26]: every cell earned by DECODING a banked fixture through the sovereign codecs (PNG, JPEG, WEBP-VP8L, VP8, H.264, AV1, Opus, AAC) with frame time and energy per frame from BR33, never declared. The estate's video-quality referee (nx_vqoe_gate) is the quality half. Every incumbent answers decodingInfo (Best); the independent engines partially (Yes).Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
JS conformance -- a pre-declared test262 slice run through js_eval (BR36)DARK —runtime/nx_js_eval.nx EXISTS but does not declare js_test262: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH js_test262 against the official ECMAScript suite [test262-26]: pass and fail per directory beside Ladybird's published 97.8 percent, appended to the WPT time spine keyed by engine sha. Every rival publishes a test262 number (Best).Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Shaping conformance -- the third-party text-rendering oracle (typography R6, browser BR4)Open — watchingruntime/nx_font_shape.nx : fs_shape_tests, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH fs_shape_tests: the unicode-org text-rendering-tests suite [textrendertests26] (shaping and positioning cases with expected output, the oracle HarfBuzz, CoreText and DirectWrite grade against) run through the sovereign shaper with pass and fail per script; one oracle for both boards. Every rival ships a shaper graded against it (Best).Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Compat ledger emitted in browser-compat-data shape (BR37)Open — watchingruntime/nx_browser_compat.nx : bcd_emit, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bcd_emit: every feature row on this board emitted as one machine-readable support record in the shape of mdn/browser-compat-data [mdnbcd26], support measured by a gate and never hand-graded, so the sovereign column compares feature-for-feature with the incumbents' data. The incumbents' support IS that data (Best).Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Accessibility audit pieces -- ARIA-tree snapshot and tree-edit distance present, the composed page audit is a watch (BR38)Measured:at_snap exists in runtime/_hdl_build/nx_uiq_atree_lib.nx, verified at emit. nx_uiq_atree snapshots the ARIA tree and scores structural change by Zhang-Shasha tree edit distance; nx_uiq_contrast and nx_ui_audit are its siblings. The composed Lighthouse-class audit [lighthouse26] is rung BR38; the browser's OWN accessibility tree for screen readers is the separate BR11 row. Incumbents ship axe-class audits in DevTools (Best); the independent engines report a11y in progress (Part). Adoption: LIB-WIRED importers=3 nonval=2 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Ladybird, Servo; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Page-quality audit composed from the sovereign auditors (BR38)Open — watchingruntime/nx_browser_audit.nx : ba_audit, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH ba_audit: contrast, ARIA tree, the ui audit and the BR32 vitals composed into one scored report with named findings [lighthouse26]; done when the audit on the wikipedia fixture names at least one finding a rival audit also names, and a planted contrast failure is caught.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Responsiveness benchmarks run in-house -- Speedometer 3, JetStream, MotionMark (BR35)Open — watchingruntime/nx_browser_bench.nx : bb_speedometer, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bb_speedometer: the cross-vendor responsiveness benchmark the four incumbents co-develop [speedometer3] run through the sovereign JS and render lanes with the score on this page; blocked on BR3 by construction, so the absence is a named number, not silence. Every rival publishes a score (Best).Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Shipping-tree Linux build -- the tree that deploys builds and promotes the browser (BR0)Measured:br_comp_border exists in runtime/_hdl_build/nx_browser.nx, verified at emit. BR0 DONE 2026-08-18: the 08-16 COMPILE-FAIL was a compiler defect (a fixed 262,144-token lexer pool feeding an unguarded push_tok silently overran on the estate's largest unit), fixed by derivation + a fail-loud guard through the canaried toolchain lane (equiv net 10/10 + self-host, compiler promoted 5aaf6cd7); nx_browser BUILT (7,127,960 B asm) and nx_browser.elf PROMOTED LIVE (b2ce1f8e, 1,447,483 B), the first promoted Linux browser binary. Row ADDED 2026-08-23 because rung BR0 had NO matrix row, so the ranker read it UNMAPPED and could never count it done. Every rival ships from its own tree by construction (coded Yes). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run.Pros Nishi has it, measured on diskCons not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run | ● | ● | ● | ● | ● | ● | ● |
HTML + CSS static render -- cascade, box, float, inline-block, tableMeasured:nx_layout_block_layout exists in runtime/nx_layout_block.nx, verified at emit. full cascade + box + float + table (Wikipedia 14,760 boxes) with %-height auto, shared px/%/em/rem font-size resolver, max-width + auto-margin centering (CSS 2.1 s10.3.3/10.4); parity of KIND, not depth -- the WPT delta is unmeasured (see the open rows). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=28 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads) | ● | ◉ | ◉ | ◉ | ◉ | ● | ● |
Flexbox -- basis auto, grow, shrinkMeasured:_layout_flex_grow exists in runtime/nx_layout_block.nx, verified at emit. flex-basis:auto = content size (was 0), grow shares sum-of-bases-subtracted free space, minimal shrink resolves explicit-width overflow (killed the x.com login-card sliver 07-28); no wrap/order/align-content yet. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=28 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
CSS table layout -- auto column widths shared down the columnMeasured:_layout_table_cols exists in runtime/nx_layout_block.nx, verified at emit. CSS 2.1 s17.5.2 auto algorithm: column width = max-content across rows, nested-table save/restore; hackernews 471->695 recall on landing; colspan/rowspan still open. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=28 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
HTML5-lite tokenizer + tree builder -- raw-text elements, end-tag mirror stackMeasured:nx_html_consume_raw_text exists in runtime/nx_html_tokenizer.nx, verified at emit. script/style/title raw-text consumption + tag-mirror end-tag matching killed two ancestor-double-pop classes (07-28); NOT the full HTML5 insertion-mode tree builder = the html/ WPT delta named in the plan. UNQUOTED-ATTRIBUTE-VALUE STATE LANDED 2026-08-27 AND IT TURNED A WHOLE PAGE OF LINKS BACK INTO LINKS. Being QUOTE-aware was necessary and NOT sufficient: HTML5 13.2.5 makes '/' the self-closing marker only in the before-attribute-name and after-attribute-value states, while inside an UNQUOTED value it is an ordinary character. danluu.com writes its hrefs unquoted and its URLs end in a slash, so every `<a href=https://danluu.com/perf-opt/>` ended in the byte pair `/>` and tokenized as SELF-CLOSING. A self-closing <a> takes no children, so every article title fell OUTSIDE its own anchor and painted as plain black text -- an entire page of links silently becoming non-links with nothing failing loudly. The tell was that exactly one link worked: `href=#pt`, the only href on that page with no trailing slash. FIX: an `inuv` state entered after '=' (whitespace skipped) when the value does not open with a quote, left only at whitespace or '>'. FOUND BY LOOKING AT THE RENDER -- and the metric actively argued against it. ALSO FIXED THE INSTRUMENT: the local harness's `ink` counted a pixel only when ALL THREE channels were < 160, so link blue (~0,0,238) failed on the blue channel and was INVISIBLE to it. Ink read 32,205 on the BROKEN page and 4,556 on the CORRECT one -- it moved 7x in the wrong direction on a large visible improvement, biased toward precisely the failure being fixed. It now derives the background as the modal pixel of the frame and counts every pixel that differs: no threshold to guess, no channel favoured, and it inverts correctly for dark mode. Honest figures after both fixes: danluu 74,990 px (10.17pc), news.ycombinator 99,937 (13.55pc), wikipedia/Ogre 126,760 (17.19pc). A SEPARATE, EARLIER unquoted-value fix in nx_layout_from_dom's attribute extractor (which stopped the value at '/' and also lacked LF/CR/FF terminators) is LAPTOP-TREE ONLY and correctly so: the NAS twin has no attribute extractor at all, proven by pulling the file rather than assumed. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=39 nonval=20 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Mutable DOM tree + CSS queryMeasured:dt_parse exists in runtime/nx_domtree.nx, verified at emit. materialized mutable DOM with CSS selector query. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=4 nonval=1 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Unquoted attribute values -- HTML5 tokenizer state fidelityMeasured:nx_html_next_token exists in runtime/nx_html_tokenizer.nx, verified at emit. LANDED 2026-08-27, AND IT TURNED A WHOLE PAGE OF LINKS BACK INTO LINKS. Being QUOTE-aware was necessary and NOT sufficient. HTML5 13.2.5 makes '/' the self-closing marker only in the before-attribute-name and after-attribute-value states; inside an UNQUOTED value it is an ordinary character. danluu.com writes hrefs unquoted and its URLs end in a slash, so every <a href=https://danluu.com/perf-opt/> ended in the byte pair /> and tokenized as SELF-CLOSING. A self-closing anchor takes no children, so every article title fell OUTSIDE its own link and painted as plain black text -- an entire page of links silently becoming non-links, with nothing failing loudly. The tell: exactly ONE link worked, href=#pt, the only href on that page with no trailing slash. FIX: an inuv state entered after '=' once whitespace is skipped and the value does not open with a quote, left only at whitespace or '>'. Parity of KIND with every rival here (they all implement the state machine); what is worth recording is that it was found BY LOOKING AT THE RENDER while the metric argued against the fix -- see the ink note on the legibility row. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=39 nonval=20 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
HTTPS live fetch -- TLS 1.3, redirects, cookie jarMeasured:bf_status exists in runtime/_hdl_build/nx_browser_fetch.nx, verified at emit. live TLS 1.3 fetch (~360ms warm vs ~100ms -- no speed exceed claimed); cookie-jar header on redirect-following fetches; HTTP/1.1 only (h2/h3 open below). ENGINE REBUILT 2026-08-26: nishi_fetch.exe had been frozen on 2026-07-29 assembly for a month because its source did not LINK (duplicate _lc, and arena_new/arena_alloc defined in both nx_runtime.nx and runtime.nx) while the pre-08-18 compiler FAILED OPEN on exactly that class, so nothing announced it. Rebuilt 1,054,208 B and now behind a build lane that refuses a linux crash guard in a PE and rolls back unless it actually fetches. MEASURED THE SAME DAY, 5 real sites, no sampling: wikipedia/Ogre 261,285 B, nishifamily.com/compare/browser 149,307 B, rfc-editor.org/rfc/rfc9110.html 1,192,451 B FETCHED; news.ycombinator.com and danluu.com return ZERO with verdict=3 (connect-fail), i.e. 3 of 5 AT THAT HOUR -- NOW 5 OF 5, RE-MEASURED over the same five sites with no sampling: wikipedia/Ogre 261,285 B, nishifamily.com/compare/browser 160,547 B, rfc9110 1,192,451 B, news.ycombinator.com 34,334 B, danluu.com 22,257 B. WIDENED 2026-08-27 to TEN sites, still no sampling: the five above plus lwn.net 28,909 B, github.com 574,560 B, motherfuckingwebsite.com 4,763 B, example.com 559 B all FETCH -- 9 of 10. The tenth, www.gnu.org/software/, reports conjunct=TCP-CONNECT, and the CONTROL RUN FIRST is what makes that honest: this host's own OS cannot reach 209.51.188.116:443 either (Test-NetConnection false, no AAAA record), so gnu.org is unreachable from this vantage entirely and the engine's diagnosis is exactly right. Scored as 9 of 9 REACHABLE, with the unreachable one named rather than folded into a failure count -- the same control discipline that stopped a defect being filed against a working engine earlier the same day. ROOT-CAUSED AND FIXED THE SAME DAY -- AND THE MECHANISM THIS ROW PUBLISHED FIRST WAS WRONG, SO IT IS RETRACTED HERE RATHER THAN QUIETLY RE-COUNTED: it blamed 'OUR resolve/connect path', true only in the sense that the query we SENT was malformed. The chain had collapsed a specific answer FOUR times (12 DNS parse verdicts -> PARSE_FAIL -> DNS_FAIL -> a bare 'connect-fail'), so every layer reported the ABSENCE of a diagnosis and invited the story the reader already believed. Naming each collapse in turn ended at rcode=3 NXDOMAIN from all three failover resolvers -- i.e. every resolver was telling the truth and the NAME WE ASKED FOR genuinely did not exist. Printing the queried bytes showed len=11 for a 10-byte host: 'danluu.com' with a trailing SPACE (lastbyte=32). CAUSE, and it is not in the browser at all: the Windows PE argv tokenizer in nx_pe_compile_win_nishi recorded where argv[1] BEGAN and never NUL-terminated it, so argv[1] was 'the rest of the command line'. cmd.exe leaves a trailing space after stripping redirections, and nx_url_parse correctly ends the host scan at '/' -- so the stray byte was INVISIBLE for any URL with a path and swallowed into the hostname for any URL without one. That is exactly why a bare host failed while the same host with a trailing '/' worked, and why a CORRECT URL parser masked the defect for months. The same tokenizer also glued a SECOND argument onto the first, so no Windows PE organ could ever receive two arguments. FIX: a quote-aware tokenizer whose argv array and string scratch are DERIVED from the command line's own length at runtime -- slots n/2+2 and scratch n+1 are proofs (a token needs >=1 separator; sum(len+1) <= n+1), not estimates, so there is no cap to guess and none that can overflow; a static array sized for the 32,767-char Windows limit would have cost ~160 KB inside a 4 KB thunk slack. Alloc failure degrades to a zeroed static array rather than faulting. RE-MEASURED, same 5 sites, no sampling: wikipedia 261,285 B, compare/browser 160,547 B, rfc9110 1,192,451 B, news.ycombinator.com 34,334 B, danluu.com 22,257 B = 5 of 5. Both halves are now BUILD-LANE TEETH (a bare-host fetch and a two-argument fetch, each rolling the binary back on failure), because the existing smoke URL carried a path and so could never have expressed this bug -- a smoke test whose input cannot express the defect is not a test. The tooth was bite-proven with NO rebuild by reconstructing the pre-fix argv through the new quoting support: that exact guard URL returns 0 bytes and NXDOMAIN, so it genuinely fires. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=7 nonval=7 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Served by fingerprinting WAFs -- Chrome-JA3 ClientHelloMeasured:nx_tls13_client_session_run_chrome exists in runtime/nx_tls13_chrome_session.nx, verified at emit. a JA3-gated Chrome-fingerprint hello wired into the fetch path beat the craigslist RST (verdict 4->5, 07-24); Ladybird and Servo are routinely challenged by anti-bot WAFs (coded Part.); 6 of the top-20 still FETCH-EMPTY for us (JS-SPA + fingerprint class). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=12 nonval=9 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Ladybird, Servo; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Inline images (PNG/JPEG/WEBP)Measured:load_images exists in runtime/_hdl_build/nishi_gui.nx, verified at emit. PNG + JPEG + WEBP-VP8L (byte-exact vs libwebp on real Wikimedia assets, 24-tooth gate) decode + aspect-preserving blit; the OGRE infobox photo renders on Wikipedia (07-29, dec 0->2). Lazy-load / srcset / data-src images are NOT fetched and SVG is skipped by design -- most figures on media-heavy pages are still blank. IMAGE REFLOW LANDED 2026-08-26, and it was FOUND BY LOOKING AT THE RENDER, NOT BY ANY METRIC: converted a wikipedia/Ogre shot to PNG and the Poussin painting was drawn ON TOP OF FIVE LINES of body text, its caption truncated mid-sentence. The ink metric called that render healthy (72,777 px, 9.87pc) because ink counts GLYPH PIXELS and is structurally blind to OCCLUSION -- the text is drawn, then covered. CAUSE: an <img> is an INLINE_BLOCK and, with no CSS height, layout gave the replaced element ONE LINE HEIGHT (~17px) against a ~220px decoded bitmap, so the blit overflowed its own box by ~200px. Intrinsic size is only known after fetch+decode, which runs AFTER layout (nishi_gui.nx:831 lays out, :832 loads), and nothing re-flowed. FIX: the two-pass reflow every browser does -- decoded dimensions are carried into layout by box index through a setter (the shape l_vec_measure already uses, so LayoutCtx is untouched) and br_layout runs a second time; unarmed it is byte-identical, and CSS width/height still win. RESULT ON THE SAME PAGE: ink 72,777 -> 74,945 (+2,168, +2.98pc) as previously-occluded text became visible, the caption now reads in full (Giovanni Lanfranco: Norandino and Lucina Discovered by the Ogre, oil on canvas, c.1624), and body text flows BELOW the figure. nx_inline_vec_measure_gate stayed GREEN 6/6 across the change. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: source exists, never compiled: /api/build it | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Click / back / history navigationMeasured:br_hit_link exists in runtime/_hdl_build/nx_browser.nx, verified at emit. link hit-test, back/forward, address bar on all three OSs. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Forms -- input / textarea / submitMeasured:bf_form exists in runtime/_hdl_build/nx_browser_forms.nx, verified at emit. sovereign form model (parse/focus/submit); input value= synthesis renders google's buttons as real text boxes. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: source exists, never compiled: /api/build it | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Find-in-pageMeasured:br_find exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. case-insensitive find with highlight + scroll-to; servoshell does not document find-in-page in the 0.3 notes read 2026-08-18. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Servo; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ○ |
Persistent profile storeMeasured:bp_put exists in runtime/nx_browser_profile_store.nx, verified at emit. profile STORE exists (no tabs/sessions UI yet); Ladybird shipped profiles + private browsing Jul 2026. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Servo; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◐ |
Native Windows buildMeasured:fetch_url exists in runtime/_hdl_build/nishi_gui.nx, verified at emit. real win32 CreateWindow + message pump + address bar (nishi.exe renders live Wikipedia); Safari has no Windows build; the Ladybird alpha is Linux+macOS only; Servo builds on Windows. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi has it, measured on disk; ahead of Safari, LadybirdCons behind Chrome (leads), Firefox (leads), Edge (leads); not adopted yet: source exists, never compiled: /api/build it | ● | ◉ | ◉ | ○ | ◉ | ○ | ● |
Dark mode -- prefers-color-scheme + dark UA sheetMeasured:br_draw_fb_at exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. page.dark_mode swaps the UA sheet + base background; var()-bg dark pages render correctly (bg gate 20 teeth). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Servo; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◐ |
Text legibility -- OCR measuredMeasured:br_draw_fb exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. Windows-OCR reading recall vs Chrome (2026-08-18 census): x 965, linkedin 958, example 947, wikipedia 877, hackernews 744, google 451, github 326 -- mean 486 over 12 measured rows; the body-size dot-collapse (periods/dots invisible below ~22px in the vector path) was root-caused + fixed 07-29. INTER-ELEMENT WHITESPACE COLLAPSE LANDED 2026-08-26, AND AGAIN IT WAS FOUND BY LOOKING AT THE RENDER RATHER THAN BY A METRIC: news.ycombinator.com read 'nderjung4 hours ago' and 'toomanyriches2 hours ago' -- every story byline had its author welded to its timestamp, and the header read 'Hacker Newsnew'. The ink metric could not see it (7,799 px, 1.06pc of viewport) because every glyph IS drawn; only the SPACING is wrong, and ink counts lit pixels, not words -- the same structural blindness that hid the image occlusion above, from the opposite direction. CAUSE: the whitespace between an inline element and the next one is its OWN text node, entirely whitespace, and _lfd_is_blank dropped every such node in order to kill the huge gaps that HTML source indentation creates between BLOCK siblings. Correct for blocks, wrong for inlines: under CSS white-space:normal that run collapses to a SINGLE SPACE between inline-level boxes and only vanishes at the edges of a line box. The organ's own comment admitted it 'approximates CSS collapse', and the approximation over-applied. FIX: emit a one-byte space TEXT box when the parent's last child is inline-level (INLINE / INLINE_BLOCK / TEXT) -- the half of the CSS rule that is answerable while streaming, since the next element is not parsed yet but an inline PREVIOUS sibling already proves we are mid-line. The byte is forced to 0x20 because a raw newline reaching nx_paint_text is treated as a hard break, which is the exact failure the blanket drop was introduced to avoid. First-child whitespace is still skipped, which is also what CSS does. PROVEN VISUALLY on the same page: 'nderjung 4 hours ago', 'Philpax 8 hours ago', 'leopoldj 5 hours ago' all separate correctly; ink 7,799 -> 7,904. NOT CLAIMED AS FIXED: 'Hacker Newsnew' in that header is a different thing -- HN's source carries no whitespace between those two links at all, and real browsers separate them with CSS padding, so it is a style gap, not this defect. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
JS execution depthMeasured:js_eval exists in runtime/nx_js_eval.nx, verified at emit. runs a real ES subset (minified jQuery 3.7.1 class; JS2 fetcher live 07-27) but full ES2024 + DOM/fetch API surface is BEHIND: youtube/reddit/bing/instagram/duckduckgo/craigslist are FETCH-EMPTY (SPA shells). Ladybird's LibJS passes 97.8% of test262 (Apr 2026); Servo ships SpiderMonkey. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: PROMOTED-UNREGISTERED — PARTIAL: a real binary nobody can call over MCP: /api/tools/register it; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: a real binary nobody can call over MCP: /api/tools/register it; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Smooth scrolling + scrollbarMeasured:br_draw_fb_at exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. keys/wheel scroll with a right-edge scrollbar; the paint-ignores-scroll-offset defect was root-caused + fixed 2026-07-14. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Professional proportional typography (generative vector)Measured:br_paint_vec_atlas exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. body + headings in a PARAMETRIC stroke font generated from code (NO font files); pioneer benchmark 4/4; live in GUI + headless. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Real-face advances + pair kern through the ONE measure rulerMeasured:font_set_face exists in runtime/nx_font.nx, verified at emit. SUPERSEDES the oracle-advance watch 2026-09-02: the hand-baked Liberation table (laptop-only, never in the shipping tree) is RETIRED and the face itself is the ruler -- font_set_face receives the loaded face's 1000-em advances and kern pairs, font_adv_em answers from them first, and font_vec_text_w_fs and font_vec_next_break_fs (the width sum and the wrap scan, which the render copy now delegates to) add the pair kern in exactly the order the paint pen does. Shipped in BOTH trees, hash-verified. Chrome-compatible wrap points are now a property of the loaded file, not of a table someone has to regenerate. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=12 nonval=8 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Glyph-atlas cached text rasterMeasured:bpv_cell exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. rasterize each glyph+size ONCE then blit cached coverage -- 690x (11.7s -> 17ms warm) makes full-page vector interactive. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Headless render / screenshot -- deterministicMeasured:br_shot_png exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. the SAME core renders to a headless PNG (the Playwright/Puppeteer screenshot analog); DETERMINISM PROVEN: the same saved bytes rendered twice give a bit-identical PNG (md5 equal), so every remaining permille gap is a named defect, never noise. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Programmatic scroll / click / resize (synthetic user)Measured:us_frame exists in runtime/_hdl_build/nx_browser_user_sim.nx, verified at emit. drives the REAL render core (scroll/resize/maximize/click/find) with pixel-exact row-hash asserts + APNG clips -- the Playwright interaction analog, but not a standard protocol (see WebDriver BiDi below). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Agent-driven browsing -- CLI/MCP drive laneMeasured:bmeta_int exists in runtime/_hdl_build/nx_browser_drive.nx, verified at emit. the browser is drivable by an external agent (nish CLI + the drive organ; Claude Code operates it) but ships NO in-browser assistant. August-2026 field: Chrome ships Gemini + agentic mode, Edge ships Copilot Mode (coded Best), Firefox an opt-in AI sidebar, Safari Apple-Intelligence summaries (Part.); Comet/Atlas-class AI browsers exist at under 1% share; Ladybird/Servo none. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi has it, measured on disk; ahead of Safari, Ladybird, ServoCons behind Edge (leads); not adopted yet: source exists, never compiled: /api/build it | ● | ● | ● | ◐ | ◉ | ○ | ○ |
WPT web-platform-tests conformance -- the honest yardstickMeasured:wpt_run exists in runtime/nx_wpt_runner.nx, verified at emit. FIRST RUN 2026-08-18, v2 CORRECTED SAME DAY (sovereign testharness shim, shared-genv JS+DOM lane, runtime neg+pos controls proven before any counting, full .html population per directory, no sampling; v2 removed v1's assert_throws any-throw OVERCLAIM -- 14 fake passes deleted -- and made async_test synchronous with arithmetic incompleteness): dom/nodes 31 pass / 1217 fail / 178 unsupported-assert + async 1 pass / 5 fail / 202 incomplete, over 171 of 178 files; dom/collections 5 / 41 / 2; dom/lists 0 / 14; html/syntax/parsing-html-fragments 0 / 20. The bar: Ladybird 2,067,263 passing subtests (Apr 2026) [ladybird-apr26], Servo publishes wpt.servo.org, Interop 2026 at wpt.fyi/interop-2026. Low pass IS the yardstick working -- per-directory counts, never a single percent. v3 (2026-08-19) added the TIME SPINE + test intelligence, measured against the August-2026 field [otel-cicd26] [develocity-pts26] [wptfyi-runs26]: every run appends a TSV row keyed by (engine sha256, corpus sha256) -- content-addressed EXACT skipping where Develocity-class selection is a calibrated bet; regression vs the newest same-corpus row exits 4 for a beat to alarm; and --twice REFUTES flakiness instead of managing it (171 dom/nodes files ran twice with ZERO divergence in 5.9s -- any divergence is a real engine bug, exit 5). Rows live in knowledge/status/wpt_history.tsv + the wpttrend- plane -- CORRECTED 2026-08-26: this row published bench/wpt/wpt_history.tsv from 2026-08-19 and that path is OUTSIDE the sovereign write boundary (nx_mkdirp refuses any path not under knowledge/, sites/ or /tmp/), -- and that first correction was itself WRONG, SELF-CORRECTED WITHIN THE HOUR: bench/wpt is not empty, it is LAPTOP-RELATIVE (nishi-core/nxc2/bench/wpt/) and holds 4 rows written by the 08-19 laptop runs, so the real defect is that the spine is SPLIT ACROSS TWO MACHINES and a NAS-side reader finds nothing while every NAS run stayed spineless. FIRST NAS ROWS LANDED 2026-08-26, and the spine then paid for itself twice: two NAS rows share corpus 603f84a71d76e7a0 across DIFFERENT engine shas e64db8ebdf819e58 and 9a97da75f32c108d with identical 8 pass / 89 fail / 147 async-incomplete; and the 08-19 laptop dom_lists row carries corpus 54e90b086e0c6530, byte-identical to today's NAS domlists corpus, with identical 0 pass / 14 fail under engine 0f570c01e8ce4c68 versus e64db8ebdf819e58 -- engine-invariance proven twice, a week apart, on two machines, by content address rather than by assertion. BR21 THEN CLOSED THE CORPUS HOLE 2026-08-26: nx_wpt_ingest re-ingested all four slices byte-preserving at pin a7b5671e50ee3610ec3ad2e1278a33b2cb11339c and the harness reproduced EVERY declared corpus sha exactly -- dom_lists 54e90b086e0c6530, dom_collections 1819a1dcd3030f03, html_syntax_fragments a075ffa0af05ccd7, dom_nodes d49aee870a338154 over 178 files with a MANIFEST.tsv carrying the pin -- so the published numbers are reproducible from banked bytes for the first time. The encoding suite is the fidelity proof: it holds the-input-byte-stream-003.html as UTF-16LE with a BOM, and a matching corpus sha means no text layer ever touched the path. AND THE SPINE EARNED ITS KEEP THE SAME HOUR: on that identical dom_nodes corpus, engine 0f570c01e8ce4c68 of 08-19 versus 0d9285dc9de7ebc0 of 08-26 moved files-rendered 171 to 174 and async_incomplete 202 to 56 with async_fail 142, i.e. the engine now FINISHES async tests it used to abandon and failures once hidden as incomplete are counted -- real progress that reads as a pass drop from 32 to 31 unless the spine attributes it to the engine, which only a content-addressed corpus permits; the engine key equals the PROMOTED nx_wpt_runner.elf sha, proven byte-identical between the laptop and NAS builds. REFTESTS RAN 2026-08-19 (nx_wpt_reftest: test + reference painted through the browser's own render core at a fixed 800x600 viewport, exact-pixel compare -- no OCR, no tolerance; runtime self-match AND known-mismatch controls refuse counts when the harness cannot see): css/CSS2/floats 13 match-pass / 51 match-fail (67 with-ref of 106 files) and css/css-tables 60 match-pass / 56 match-fail (121 with-ref of 264) -- 73 spec reftests pass PIXEL-EXACT, the July table-layout work measurably holds; fuzzy-meta tolerance and .xht tests are declared out of v1 scope. Reftest rows ride the same time spine and the wpttrend- plane. RUN ON THE NAS FOR THE FIRST TIME 2026-08-26 (every earlier run was laptop-run), engine sha16 9a97da75f32c108d from the promoted 595,550 B nx_wpt_runner.elf, against a corpus re-acquired and pinned to WPT commit a7b5671e50ee3610ec3ad2e1278a33b2cb11339c: dom/lists 0 pass / 14 fail over 5 files (8,059 corpus bytes, corpus_sha16 54e90b086e0c6530) and dom/collections 5 pass / 41 fail / 2 unsupported-assert over 10 files (24,624 corpus bytes, corpus_sha16 1819a1dcd3030f03). Both corpus hashes AND every counter came back identical to the 08-18 rows while the engine binary DIFFERED, so these two directories are now INDEPENDENTLY REPRODUCED rather than merely recorded -- and that identity is also the proof the re-acquisition was byte-faithful, since a single wrong byte would move the hash. The neg control fired on every counted run (WPT-CONTROL pass=1 fail=1, counts refused otherwise) and --twice reported zero divergence on both. WHY A RE-ACQUISITION WAS NEEDED AT ALL, recorded because it is the load-bearing finding: the corpus behind the 08-18 numbers was banked in NEITHER tree -- bench/wpt was absent on the NAS and an exhaustive laptop and WSL search returned nothing, so only the 370-byte history TSV survived and for eight days these published counts were reproducible by nobody. The engine was version-controlled; the yardstick was not. dom/nodes (178 files) and html/syntax/parsing-html-fragments (13) are still unbanked and their 08-18 counts therefore stand UNREPRODUCED, blocked on two different failures that one organ closes: fragments is the encoding-detection suite and carries UTF-16LE-with-BOM fixtures that a text-safe hand path corrupts by construction, and dom/nodes is a scale a hand path cannot reach without sampling. That organ is rung BR21, and M0 was reopened to hold it, because a benchmark whose fixtures are not stored is an assertion rather than a measurement. Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ● | ● |
Reproducible pinned test corpus -- the yardstick's own fixturesMeasured:wsp_ingest_dir exists in runtime/nx_wpt_ingest.nx, verified at emit. Every engine on this board runs WPT from a VENDORED, PINNED checkout in CI and publishes the result: the four majors export continuously to wpt.fyi, Ladybird reports 2,067,263 passing subtests against a pinned tree, Servo publishes wpt.servo.org. It is pure table stakes and we are the only column without it -- which is why this is coded Best across all six rather than graded on depth. MEASURED 2026-08-26: our corpus was banked in NEITHER tree. bench/wpt was absent on the NAS, an exhaustive laptop and WSL search returned zero WPT directories, and only the 370-byte history TSV survived, so every BR1 count published on 08-18/19 was for eight days reproducible by nobody. Content-addressing made it sharper, not safer: the runner keys a run on (engine sha, corpus sha) and refuses to re-run on a match, and that key was being computed over files that no longer existed. dom_lists and dom_collections were recovered by hand on 08-26 and both reproduced their 08-18 corpus_sha EXACTLY, which is simultaneously the proof the recovery is byte-faithful and the proof the loss was real. CLOSED 2026-08-26 by BR21 (nx_wpt_ingest, symbol wsp_ingest_dir): one call takes a WPT directory path and a 40-hex commit and lands every declared file as RAW BYTES, verified against BOTH the size and the git blob sha GitHub declares for it, with a MANIFEST.tsv carrying the pin and an INCOMPLETE-DO-NOT-PUBLISH marker written and removed mechanically. All four directories now read COMPLETE at pin a7b5671e: dom/lists 5 of 5, dom/collections 10 of 10, html/syntax/parsing-html-fragments 13 of 13, dom/nodes 178 of 178, every file re-verified against upstream on a second idempotent pass that fetched nothing. The proof it is byte-faithful is not ours to give: the git blob sha is computed upstream, so a single flipped byte anywhere in our transport fails, and all four corpus_sha16 values reproduce the 2026-08-18 rows EXACTLY (54e90b086e0c6530, 1819a1dcd3030f03, a075ffa0af05ccd7, d49aee870a338154) including the UTF-16LE-with-BOM fixture whose fourth byte is a NUL and which no text-argument carrier can transport. The yardstick is now reproducible by a third party from the pin alone. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Interop-2026 CSS -- anchor positioning, container style queries, view transitions, scroll-driven animations, attr(), shape()DARK —runtime/nx_css_apply.nx EXISTS but does not declare css_anchor_pos: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. the 2026 focus-area CSS the four vendors are converging on [interop2026-webkit]; Ladybird/Servo partial; ours implements none of the six -- and even CSS Grid is track-sizing only.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
CSS-on structural exactness loop -- a struct_diff column per site in the census (BR2, the operator ratchet of 2026-07-28)Measured:bc_struct_col exists in runtime/nx_browser_census.nx, verified at emit. WATCH bc_struct_col LANDED 2026-08-26 -- AND THE FLIP IS THE RECEIPT, NOT THE PROOF: the column publishes, the BAR IS UNMET, and the rung is deliberately NOT marked done. bc_struct_col is declared in nx_browser_census.nx and delegates to nx_browser_struct_col_lib.nx so nx_browser_struct_col_gate can prove it IN PROCESS (29/29 GREEN, bite-proven killed=1 not_reached=0 mutant_live=0); a gate that forked the census binary would read NOT-REACHED for every mutant. The census, PROMOTED-UNREGISTERED since it was written, is now registered and invoked. The row grew FOUR fields, not three, and the fourth is the point: struct_bands_oracle is the DENOMINATOR, because measured the same day google returned 1000 permille over TWO oracle bands and stackoverflow 0 permille over ZERO -- a perfect score and a total failure that are both arithmetic on an empty subject. The usable floor is DERIVED from the bar (one band moves a reading by 1000/N permil, a 900 bar leaves 100 permil of headroom, so N >= 10) and thinner rows count UNDERPOWERED, never averaged. MEASURED on bench/selfpage saved bytes, deterministic, deep window ay=by=800 h=2000: wikipedia 845 permil dy 7 dx 80 over 84 bands, hackernews 769 dy 12 dx 91 over 26, linkedin 545 dy 14 dx 66 over 77; aggregate 719 permil dy 11 dx 79, br2_bar_verdict UNMET. An oracle self-control over every banked capture (each self-matches 1000 permil dy 0 dx 0) shows example at 6 bands and x at 6 -- BELOW THE FLOOR, so two of the four sites the done-rule names cannot resolve a 900 bar at all, and stackoverflow and amazon capture zero. The incumbents ARE the oracle (coded Best); Ladybird and Servo render CSS-on but are not the reference (Yes). Row ADDED 2026-08-23: rung BR2 had no matrix row, so the ranker priced the operator's standing ratchet at value 0 (UNMAPPED). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-UNAUTHORISED — PARTIAL: registered, no cap ever minted; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); not adopted yet: registered, no cap ever minted; no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ● | ◉ | ◉ | ◉ | ◉ | ● | ● |
Lazy-load images + srcset -- data-src / srcset / loading=lazy painted through the image path (BR14)Measured:bi_srcset exists in runtime/_hdl_build/nx_srcset_lib.nx, verified at emit. WATCH bi_srcset: data-src / srcset / loading=lazy images are fetched and painted through the existing PNG/JPEG/WEBP path (load_images, the row above this section); done when the wikipedia benchmark page renders every figure it lays out (imgsrc_laid == painted) and the coarse grid on media pages moves. Every rival fetches lazy/srcset images (Best). Row ADDED 2026-08-23: rung BR14 had no matrix row (priority 0 on the ranked board). ORGAN FIELD REPOINTED 2026-08-26 from nishi_gui.nx to nx_srcset_lib.nx, and the repoint is a correction not a convenience: the watch ruler is sd_declared, which grounds a symbol only where it is DECLARED, and nishi_gui CALLS the image path rather than declaring bi_srcset -- so this row could never have flipped where it pointed, however well the work went. LANDED 2026-08-26: nx_srcset_lib declares bi_srcset (candidate parse plus selection), bi_img_source (element-level order over src, srcset, data-srcset, data-src, data-original, data-lazy-src), bi_sizes_px and bi_img_lazy, wired into br_extract in nx_browser_render.nx -- the one site that decides what an img points at, so every consumer of page.bsrc_off gains it in a single edit. nx_srcset_lib_gate 59/59 GREEN, mutation-proven killed=1 not_reached=0 mutant_live=0 with the restore byte-verified. PROVEN: the descriptor grammar unit-exhaustively, the three trivial wrong selectors refuted by name, byte-identity of the eager path against an independent reader, the wiring through the REAL br_layout (four figures resolve to the right URL, zero left holding a data URI placeholder), and the paint chain end to end on a fixture PNG at laid 4 equals decoded 4 equals painted 4. NOT PROVEN and deliberately not claimed: the live wikipedia render over the network, which needs the Windows GUI binary and a network. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=3 nonval=2 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
ES2024 core + fetch/DOM API surface -- what the SPA shells need to render (BR3)DARK —runtime/nx_js_eval.nx EXISTS but does not declare js_fetch_api: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH js_fetch_api: js_eval grows the ES2024 core (classes, async/await, Promise, modules) and the fetch/XHR + DOM/Event/History API surface; done when at least 3 of the 6 FETCH-EMPTY rows (youtube, reddit, bing, instagram, duckduckgo, craigslist) read CONTENT-OK in the census with recall over 300, and a test262 core-slice pass count is published beside Ladybird's 97.8 percent. Incumbents Best; Ladybird LibJS 97.8 percent test262 (Best-class); Servo SpiderMonkey (Best). Row ADDED 2026-08-23: rung BR3 had no matrix row (UNMAPPED, value 0) although the JS-depth row above carries the measured distance. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Tabs / sessions / profiles UIOpen — watchingruntime/nx_browser_tabs.nx : bt_tab_open, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. profile STORE exists but no tabbed UI / session restore; Ladybird ships tabs + profiles + private windows; servoshell has tabs. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ● |
DevTools -- inspector / debugger / network panelOpen — watchingruntime/nx_browser_devtools.nx : bdt_inspect, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no element inspector, JS debugger, or network panel; Ladybird and Servo both speak the Firefox DevTools protocol (attach Firefox's inspector) -- coded Part. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Extensions ecosystemOpen — no implementing organ is measured for this axis yet. no extension / add-on API; neither independent engine has one either. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); no implementing organ measured | ○ | ◉ | ◉ | ◉ | ◉ | ○ | ○ |
In-browser video / A-V playbackOpen — watchingruntime/nx_browser_video.nx : bv_play, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. our H.264 codec EXISTS (nx_media_convert) but is NOT wired into the browser; Ladybird decodes video/audio (WebAudio runs Doom 3, Jul 2026), Servo via GStreamer. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
WASM in the browserOpen — watchingruntime/nx_browser_wasm.nx : bw_instantiate, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. nx_wasm_vm EXISTS and vets shipped games (five live wasm worlds), but is not wired as a browser feature; Ladybird has LibWasm, Servo has SpiderMonkey wasm. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
HTTP/2 and HTTP/3 in the fetch pathOpen — watchingruntime/nx_browser_h3.nx : bh2_stream, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. measured 2026-08-18: a 9-file sovereign h2 stack (frames/streams/flow/serve) AND a 15-file QUIC stack (keys/aead/hdr) EXIST in runtime/, but the browser fetch path is HTTP/1.1 -- built-and-not-browser-wired. Ladybird (curl) and Servo (hyper) speak h2; h3 partial. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Complex-script shaping (HarfBuzz-class) + real font filesOpen — watchingruntime/nx_browser_shape.nx : bs_shape_run, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. REAL FONT FILES LANDED 2026-09-02 (the rows directly below: TTF outlines, hmtx advances and kern-table pair kerning through the sovereign engine, Liberation Sans as the default face). STILL ABSENT under this symbol: ligatures (GSUB), GPOS-table kerning, bidi run shaping and WOFF2. Both independent engines ship HarfBuzz + FreeType/system fonts. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Real TrueType faces in the render core -- outlines + hmtx advances + kern from ONE file (BR26)Measured:br_set_face exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. LANDED 2026-09-02: br_set_face adopts a face parsed by nx_ttf_fontlib into the glyph atlas (coverage records adopted as-is, no re-raster, no second copy) and hands its 1000-em advances and 95x95 kern pairs to nx_font font_set_face, THE measure ruler, so layout, wrap and paint agree by construction; nx_inline_vec_measure_gate 8/8 (T7 face advances plus kern reserved by layout, T8 clearing the face restores stroke widths); nishi.exe rebuilt with Liberation Sans loaded at startup through win32 CreateFileA and ReadFile into a NAMED reserve whose overflow refuses the face. Measured on the saved wikipedia page against the Chrome capture: deep-window struct 880 to 892 permil, page_h 7027 to 7048 (Chrome 7582), first-screen dx 185 to 155. Every engine here renders real fonts, so PARITY of kind; the difference is that the reader is 700 lines of our own source with no FreeType. NOT yet: family, weight and style resolution (BR27), web fonts (BR28), the Linux and NAS browser (BR29), non-ASCII (BR30). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Sovereign TrueType engine reads professional fonts -- upem, hhea, cmap glyphIdArray, composites, kern all READ from the fileMeasured:tf_adv_em1000 exists in runtime/_hdl_build/nx_ttf_fontlib.nx, verified at emit. nx_ttf_fontlib_gate 23/23 GREEN 2026-09-02 on Liberation Sans 2.1.5 (2048 upem, 908 kern pairs, 1076 composite glyphs) plus a runtime-synthesised cmap subtable: the first cut assumed unitsPerEm 1000 and ascender 760 (true only of our emitted house font), so every professional face would have rasterized at half size with halved advances and nothing would have failed loudly -- T15 catches exactly that (A at 32px reads 22 ink rows = capHeight scaled by the READ upem). T13 proves the hmtx-derived 1000-em advances equal the retired hand-baked oracle table for space, i, m and W; T21 proves Microsoft Arial and Liberation Sans agree on all 95 ASCII advances through OUR parser (metric compatibility read, never assumed). FreeType is the reference reader (Best) and HarfBuzz reads the same tables for shaping (Best); fontTools reads and writes them (Yes); Noto is a font, not a reader (No); Ladybird and Servo read fonts through FreeType (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=5 nonval=4 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Edge; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ● | ○ | ◉ | ◉ |
Font-family, weight and style resolved to real faces (BR27)Measured:br_face_resolve exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. LANDED 2026-09-02, shipped awaiting the referee and the operator: eight face slots (Liberation Sans and Serif in regular, bold, italic, bold-italic) selected per run by ONE resolver (nx_layout_face_for_box: font-weight, font-style, font-family and the font shorthand, CSS-inherited, memoised per box) that layout calls before measuring and paint calls through br_face_resolve before drawing, so measure and paint cannot disagree on the face; h1 to h6 bold in the UA sheet. Measure gate 11/11 (bold slot measured, resolver names slot 1, no-bold-slot falls back to regular never to the stroke font). Same-instrument measurement on the saved wikipedia page: mean_dx 53 to 49, page_h 7048 to 7090 against Chrome 7582; headings paint serif, bold runs bold, the hatnote italic. The bold heading WAS a cascade defect after all (one wrong correction retracted): rh_cascade scored a comma list's specificity over the whole list, so a class member leaked its specificity onto the type members and wikipedia's earlier .mw-heading,h1{bold} outranked its later .mw-heading1,h1{normal}; fixed by per-matching-member specificity (measure gate T11-T17, 18/18), first screen 578 to 684 permil and dx 155 to 138 on the saved page, the title now serif regular as Chrome paints it. Still open: edit links inherit the heading face, no monospace slot. Every rival resolves families (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Web fonts -- @font-face URL loading + WOFF2 decode with a sovereign Brotli (BR28)Open — watchingruntime/nx_browser_webfont.nx : bwf_load, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bwf_load: pages ship their own fonts as WOFF2 (Brotli-compressed sfnt); done when a fetched @font-face WOFF2 decodes to an sfnt our engine loads and paints on a banked fixture, with the Brotli codec shared with typography rung R0 (WOFF2 emit) so there is ONE codec and emit and load cannot disagree. Every rival loads web fonts (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
ONE render core -- the Linux and NAS browser paints through nx_browser_render (BR29)DARK —runtime/_hdl_build/nx_browser.nx EXISTS but does not declare br_render_core: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. MEASURED 2026-09-02: nx_browser.nx (the promoted Linux binary, the NAS shot verb, the roster gate subject) declares its OWN br_layout, br_draw_fb and br_shot_png and paints text with the 8x8 bitmap font at 2x -- it never imports nx_browser_render.nx, where the vector typography, the glyph atlas and now the real faces live. Two render cores is the duplicate-ruler defect at the centre of this board: the NAS census and every headless NAS shot structurally cannot see the typography work until the Linux browser composes the shared core. Done when nx_browser.nx imports nx_browser_render and the NAS shot verb paints the same pixels the Windows build does. Every rival has one render core by construction (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Unicode text pipeline beyond ASCII -- codepoints through layout and paint (BR30)Measured:br_text_cp exists in runtime/_hdl_build/nx_browser_render.nx, verified at emit. WATCH br_text_cp: text is folded to ASCII before layout (accents dropped to base letters, curly quotes straightened), so a real face is only ever asked for bytes 32 to 126 although the engine already decodes composites for accented glyphs; done when layout and paint carry codepoints, the face covers Latin-1 and Latin Extended on the wikipedia benchmark, and the fold is retired for the scripts the face covers. Every rival renders Unicode (Best). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=32 nonval=17 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Accessibility / screen-reader treeOpen — watchingruntime/nx_browser_a11y.nx : ba_tree, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no accessibility tree / screen-reader support; Ladybird and Servo both report a11y as in progress (Servo 0.3 notes). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Per-site process sandboxOpen — watchingruntime/nx_browser_sandbox.nx : bsb_spawn, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. single-process; no per-site process isolation. Ladybird is multi-process (WebContent per tab, sandboxed); Servo has a multiprocess mode. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ◐ |
Standard WebDriver BiDi automation endpointOpen — watchingruntime/nx_browser_webdriver.nx : bwd_session, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. the field moved in 2026: Firefox removed CDP (141), Puppeteer drives Firefox over BiDi by default, Selenium 5 removes CDP-only APIs [bidi26]; Ladybird and Servo both run WPT through their own WebDriver servers. Ours has the synthetic-user driver but no STANDARD external protocol -- tracked on /compare/racing.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
WebGPU / WebGL canvas in the browserOpen — watchingruntime/nx_browser_gpu.nx : bg_webgl_ctx, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. Chrome/Edge 113+, Safari 26, Firefox 147 ship WebGPU [webgpu-status26]; Servo's wgpu-backed WebGPU is one of its strengths; Ladybird has WebGL via ANGLE. Ours emits WebGL2/WebGPU pages for OTHER browsers (the /world delivery lane) but renders no canvas 3D itself.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ● |
CSS custom properties -- var() collection + expansionMeasured:cx_expand exists in runtime/_hdl_build/nx_css_vars.nx, verified at emit. cx_collect/cx_expand resolve var() chains with depth guard + clamp(); the /experiential dark-theme var(--bg) body renders correctly through it. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
CSS Grid -- track sizing (px/fr/rem/em)Measured:_layout_display_grid exists in runtime/nx_layout_block.nx, verified at emit. grid-template-columns track sizing with fr-weight leftover split and gaps (landed 07-29); NO auto-placement, areas, or subgrid -- track sizing only, the delta is a named WPT directory once BR1 runs. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=28 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; ahead of Ladybird; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◐ | ◉ |
CSS positioning -- relative / absolute / fixed / stickyMeasured:_layout_position exists in runtime/nx_layout_block.nx, verified at emit. the positioned-box pass exists in the shared layout core (verified in buildroot); depth vs the spec (containing blocks, z-index stacking contexts) is unmeasured until BR1. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=28 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Cookie engine -- parse / emit / SameSiteMeasured:nx_http_session_parse_cookie exists in runtime/nx_http_session.nx, verified at emit. sovereign Set-Cookie emit + parse with session plumbing serves our own auth surfaces; the browser fetch carries a cookie jar on redirects. Third-party-cookie policy (the 2026 privacy axis) is not implemented. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Measure == paint -- layout reserves and BREAKS on the same advances paint drawsMeasured:font_vec_next_break_fs exists in runtime/nx_font.nx, verified at emit. ADDED 2026-08-25 because the board had no row for the invariant every typography claim on it depends on, and it was FALSE in three places at once. br_layout set text_measured=1 (8x8 BITMAP metric) and vec_headings=2 (VECTOR paint) in ONE function; the wrap branch had a measured arm and a legacy arm and NO vector arm, so a run whose width was reserved in vectors was then BROKEN on bitmap advances; and layout measured RAW DOM bytes while paint drew DECODED+ASCII-FOLDED bytes, making café eleven characters to one stage and four to the other. Fixed by one shared absolute-px metric (font_vec_adv_fs / font_vec_text_w_fs / font_vec_next_break_fs, with the layout copy now DELEGATING so the two cannot drift), a vector arm in the wrap branch, and a fold-before-layout pass that hands both stages the same bytes. PROVEN, not asserted: nx_inline_vec_measure_gate is PROMOTED + REGISTERED + ROSTERED and answers GREEN 6/6 through /api/gate_run, with four of its six teeth named neg-control-* so the census can count them. Incumbents do this correctly by construction (coded Best); this is parity of KIND, not an exceed. MEASURED 2026-08-26, isolated to ONE change on a real page (nishifamily.com/compare/browser, headless f0, ink = pixels darker than 160 on all three channels): 07-29 binary 24,103 -- vec-measure+wrap 24,103 (IDENTICAL, because ink counts GLYPHS and is structurally blind to re-wrapping; cmp showed those renders differ) -- fold-before-layout 26,190, i.e. +2,087 = +8.66pc MORE TEXT ON THE PAGE. That delta is the entity-bearing runs which previously failed layout's coverage test on RAW bytes and were measured at raw length while paint drew the decoded form. STILL NOT CLAIMED: real TTF outlines, kerning, ligatures or bidi -- see the shaping row. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=12 nonval=8 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Media queries -- @media evaluationMeasured:rh_filter_media exists in runtime/_hdl_build/nx_render_html.nx, verified at emit. CORRECTED 2026-08-25 -- the previous note claimed there is NO named media-query evaluator in the shipping tree and that was FALSE, so this row was sending readers to build a duplicate of a shipped organ. rh_filter_media(src,off,len,out,out_cap,vw) is declared at nx_render_html.nx:136 and has 17 call sites (corpus_complete=1). The real defect was upstream of it and is now fixed: nx_browser.nx:286 passed a LITERAL 1000 as vw while deriving the true window width two lines BELOW the call, so every responsive page was STYLED for a 1000px viewport and LAID OUT at the real width, and because br_layout re-runs on resize the styles were never re-selected. The sibling render core (nx_browser_render.nx:567) already passed the real vw -- half a fix living in one organ and not its twin. STILL UNMEASURED and NOT claimed: which @media features the filter actually supports, and its WPT media-queries pass count once BR1 runs that directory. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=44 nonval=9 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
WebSocket in the browserOpen — watchingruntime/nx_browser_ws.nx : bws_connect, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. a 24-file sovereign WS stack EXISTS (client upgrade, frames; the rooms/signaling/SFU daemons run on it live) but the page JS surface has no WebSocket object -- built-and-not-browser-wired, the cheapest wire on this list. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
Web storage -- localStorage / sessionStorage / IndexedDBOpen — watchingruntime/nx_browser_storage.nx : bst_local_set, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. nothing browser-side; the estate has seg-stores and the profile store to back it, but no storage API surface -- most SPA login flows (the FETCH-EMPTY class) depend on this plus BR3. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
Web Workers + postMessageOpen — watchingruntime/nx_browser_workers.nx : bwk_spawn, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no worker threads in the page runtime; the sovereign process primitives exist but no Worker API. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
Service workers + PWAOpen — watchingruntime/nx_browser_sw.nx : bsw_register, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no service-worker registration, cache API, or install surface; neither independent engine ships this yet either. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ○ | ○ |
Canvas 2D contextOpen — watchingruntime/nx_browser_canvas2d.nx : bc2_fill_rect, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. the sovereign raster primitives exist (solid rects, text paint, PNG encode -- the render core itself) but no canvas element API is exposed to page JS. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ● |
SVG renderingOpen — watchingruntime/nx_browser_svg.nx : bsvg_path, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no SVG parser/rasterizer anywhere in the tree (measured 0 files); the census deliberately SKIPS .svg images -- a whole image class on wikipedia-class pages renders blank. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
CSS transforms / transitions / animationsDARK —runtime/nx_css_apply.nx EXISTS but does not declare css_transform_apply: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. no transform matrix, transition, or @keyframes support in the layout/paint path (the 10 files matching are the video codec, not CSS). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◉ |
Shadow DOM + custom elements + templatesOpen — watchingruntime/nx_browser_components.nx : bsd_attach, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no shadow roots, custom element registry, or template instantiation -- the web-components sites (incl. scoped-registries, an Interop-2026 area) cannot render componentized DOM. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
CSP + SRI enforcement in the pageOpen — watchingruntime/nx_browser_csp.nx : bcsp_enforce, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. our SITES emit CSP server-side, but the BROWSER does not enforce Content-Security-Policy or Subresource-Integrity on fetched pages; with no JS cross-origin surface the exposure is latent, not absent. Row un-merged 2026-08-18 after the generator row cap became DERIVED (was a silent 64; debt 1787077715 RESOLVED). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
CORS / same-origin enforcement in fetchOpen — watchingruntime/nx_browser_cors.nx : bcors_check, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. our own daemons EMIT Access-Control headers (cors.nx serves them live) but the browser fetch path enforces no origin model -- required before BR3 opens cross-origin JS fetch (BR16 carries it). rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Web Audio / audio-video element outputOpen — watchingruntime/nx_browser_audio.nx : bau_ctx, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no audio element or AudioContext; sovereign synthesis organs exist (the audio lanes) but nothing browser-wired -- pairs with the BR8 video rung. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
WebRTC -- RTCPeerConnectionOpen — watchingruntime/nx_browser_rtc.nx : brtc_peer, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. the estate runs sovereign signaling + SFU daemons (nx_room_sfu, nx_signaling_v2) that CURRENT browsers connect to, but our browser has no RTCPeerConnection -- an Interop-2026 focus area. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ○ | ◐ |
GPU compositing / display-list rasterOpen — watchingruntime/nx_browser_compositor.nx : bcmp_layer, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. our paint is single-pass CPU into one framebuffer (glyph-atlas cached); no layer tree, damage tracking, or GPU raster -- fine at census sizes, the scaling ceiling for animation and video. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ◉ |
Downloads / autofill / password manager / permissions UIOpen — watchingruntime/nx_browser_product.nx : bpd_download, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. the product surfaces around the engine: download manager, form autofill, credential store, per-site permissions. The profile STORE could back them; none exist as browser UI -- BR20. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ○ |
Print / save-to-PDFOpen — watchingruntime/nx_browser_print.nx : bpr_to_pdf, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. no print pipeline or PDF emitter from the layout tree (measured 0 files); neither independent engine ships print yet either -- BR20. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ○ | ○ |
Browser gate builds its claim set through the sovereign lane -- no binutils, abstains instead of convictingMeasured:bg_sov_resolve exists in runtime/nx_browser_gate.nx, verified at emit. LANDED 2026-08-27: bg_build forks _offc/nx_sov_build_run.elf --build-only per row (13 rows, cache-HIT reruns), builder refusals (admit/canon/timeout/exec) become gv_need preconditions -> SKIP, never RED; baseline run 13/13 GREEN after two real fixes; nx_gate_bite GREEN (compiling mutant killed, restore byte-verified). The gate had published 0/12 RED for its whole recent history because it forked a compiler absent on this host and shelled the .s through /usr/bin/as+ld, which the sovereign host deliberately does not ship. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: GATE:DEPLOYED-DARK trial=RED — PARTIAL: deployed, no execution surface runs it: admit it to the gate roster.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: deployed, no execution surface runs it: admit it to the gate roster | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
The shipped browser artifact is gated -- headless shot row, subject-substitutableMeasured:bg_subject_resolve exists in runtime/nx_browser_gate.nx, verified at emit. LANDED 2026-08-27: row 12 forks <artifact> shot <runtime fixture> - (full layout, PNG deliberately withheld); argv[1] names the build under test (the ship loop passes the staged .sov.elf.new, nx_gate_bite subject mode passes the mutant), argless judges the promoted nx_browser.elf -- which is what the roster should judge, because it is what is served. Rows 0..11 prove the libraries; none of them executed nx_browser itself until this row. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: GATE:DEPLOYED-DARK trial=RED — PARTIAL: deployed, no execution surface runs it: admit it to the gate roster.Pros Nishi has it, measured on diskCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); not adopted yet: deployed, no execution surface runs it: admit it to the gate roster | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
HTTP request buffer derived from its builder, never guessedMeasured:nx_http_client_request_cap exists in runtime/nx_http_client.nx, verified at emit. LANDED 2026-08-27: a 256-byte guess overran its arena the day the identity + derived-caps headers reached ~357 B (crash guard: ARENA-OVERRUN prev_alloc_size=256, the Accept header spilling into the next cell) and the corrupted response convicted the browser with exit 80. The bound now lives in the owner file; 14 call sites censused (corpus_complete=1), the 6 that guessed low now compose it (page-demo rebuilt and run, exit 0). Debt 1787853210 names the 4 mesh siblings + image-demo as source-fixed-unbuilt. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=49 nonval=32 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Transport decoding composed at the fleet chokepoint -- gzip/deflate/chunked stripped onceMeasured:hf_decode_transport exists in runtime/nx_https_fetch_lib.nx, verified at emit. LANDED 2026-08-27 on the gate's page-demo row: example.com is Cloudflare-fronted since 2026-08-26 and answers our advertised Accept-Encoding with gzip; the raw-socket row dechunked by hand and read 1f 8b bytes as HTML. It now composes hf_decode_transport (the one decoder every fetch consumer inherits; refusals carried as their own exits so a server coding fault never reads as a render fault), and the rendered text is the real page: title, h1, paragraph, link. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=15 nonval=11 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads) | ● | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Worlds delivered as EMITTED output -- the browser consumes rendered frames, never capability sourceMeasured:load_images exists in runtime/_hdl_build/nishi_gui.nx, verified at emit. OPERATOR DIRECTION 2026-08-27: the /world surfaces move to NATIVE EMISSION -- our renderer produces the frames, third-party engines receive rendered output only, so no WebGL/JS capability source ever ships to a rival runtime. The receiving half is PROVEN today: the browser paints PNG/JPEG/WEBP inline through its own bits-up decoders and renders emitted board pages headlessly (layoutsweep, shot). The emitting half is the watch row below. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.Pros Nishi has it, measured on disk; ahead of Ladybird, ServoCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads); not adopted yet: source exists, never compiled: /api/build it | ● | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Native world-frame EMISSION path -- server-side render to image/stream, no third-party runtimeMeasured exceed:we_world_frame_emit in runtime/nx_world_emit.nx, verified at emit. WATCH 2026-08-27 (operator: "i want to emit i dont want webgl and other 3d parties receiving our work and capabilities"): the done-rule is a sovereign organ that renders a world scene to emitted frames (PNG or stream) consumable by ANY browser as plain media -- rivals structurally cannot offer this (their model ships capability JS to the client). Ship the organ with this symbol and the cell flips on the next regen; the flip is the receipt, the rung's gate is the proof. Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked).Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked) | ◉ | ○ | ○ | ○ | ○ | ○ | ○ |
Native world MOTION emission -- frame sequences as plain media over the sovereign wireDARK —runtime/nx_world_emit.nx EXISTS but does not declare we_frame_seq_emit: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH 2026-08-27 (BR24, dep BR22): the done-rule is a server-emitted frame SEQUENCE of the generated world delivered as plain media (the nx_room_stream down-channel or an emitted NishiVideo/YUV artifact with a published decode) consumable by any browser with zero client-side capability. Ship we_frame_seq_emit in the named organ and this cell flips on the next regen -- the flip is the receipt, the rung gate is the proof. Adoption metric: importer counts of nx_video_codec (now 1, adapter only) and nx_room_stream (now 1, the vroom daemon) rising.Pros none measured yetCons open contract, nothing on disk yet | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Cross-engine last mile over EMITTED-OUTPUT pages -- Chrome verified, Waterfox and Edge unverifiedOpen — watchingruntime/nx_browser_crossverify.nx : bx_engine_verify, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. HONEST GAP 2026-08-27: the last-mile claim ("runs on Chrome, Waterfox, Edge") is verified today only against headless Chrome-class rendering; Waterfox and Edge have no verify lane. Subject is the EMITTED-OUTPUT pages (boards, world frames) -- never capability-bearing JS, per the native-emission direction. Done-rule: a verify organ that loads the emitted pages in each named engine and asserts the same structural content; not a browser farm, a checker. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
Every published /compare board lays out through the real cascade -- native sweep, reconciling partition, worst namedMeasured exceed:br_layout in runtime/_hdl_build/nx_browser.nx, verified at emit. MEASURED 2026-08-27 on the promoted 1,439,825 B binary, minutes after promote: nx_browser layoutsweep over the whole compare tree -> boards_listed=104 laid_out=101 skipped=3 (career, sharing, civic carry no index.html) failed=0, partition RECONCILES; total_boxes=177,996, computed_decls=645,781; WORST board 98 boxes / 557 px -- the worst is printed, never the mean, because an average hides the board that laid out to almost nothing. No rival engine ships a verb that sweeps its own published estate and refuses on a partition leak. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: REGISTERED-DARK — PARTIAL: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run.Pros Nishi leads, a measured exceed; ahead of Chrome, Firefox, Safari, Edge, Ladybird, ServoCons not adopted yet: callable, authorised, completed MCP invocation not established by supplied journal window; lifetime history unknown (direct execution may be recorded elsewhere; this scan does not establish lifetime use); no execution surface runs it either (clock, cron, daemon, roster, actlog and surfaced forks checked); only referenced by nx_browser_doc_gate -- a mention, not a run | ◉ | ◐ | ◐ | ◐ | ◐ | ○ | ○ |
| WORLD | |||||||
the Nishi browser opens /world/beach natively -- sovereign wasm VM plus the native raster door, the JS shell bypassed (BR40)Open — watchingruntime/nx_browser.nx : br_world_door, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. OPERATOR 2026-09-03: this browser and NishiOS are where the game stack is sovereign; the incumbents run the same page through WebGL2 with WebGPU behind a lever today (gpu GP3), so every mainstream column codes present and the two independent engines part, all at INDEX LEVEL and UNPINNED for this row. Ours is absent by measurement: the page JS shell is the only path that instantiates the world module, and this browser has no wasm host or raster door wired to a fetched page. Contract in browser.plan BR40. rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind themPros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
WPT conformance delta series with manifest-diff attributionDARK —runtime/nx_wpt_runner.nx EXISTS but does not declare wpt_delta_series: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH wpt_delta_series. Ladybird crossed 2,088,677 passing WPT subtests and still targets its first alpha in 2026 [ladybird-aug26]. Done when the sovereign runner publishes a monthly series of pinned suite revision, absolute passing count and month-over-month delta, with a manifest diff that separates gains from newly imported tests from gains from new engine capability -- a rising count with no attribution is a number, not a measurement.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ● |
Conformance triple: numerator, denominator and date as three fieldsDARK —runtime/nx_js_eval.nx EXISTS but does not declare js_conf_triple: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH js_conf_triple. Ladybird passes 97.8 percent of test262, 52,045 of 53,207 [ladybird-apr26]. Done when every conformance figure the estate publishes carries numerator, denominator and run date as separate fields with the denominator sourced from a versioned external import, so a percentage can never hide a shrinking denominator.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird (leads), Servo (leads); open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ |
Contribution-provenance gateDARK —runtime/_hdl_build/nx_gated_edit.nx EXISTS but does not declare ge_author_standing: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH ge_author_standing. Ladybird stopped accepting public pull requests on 2026-06-05 [ladybird-devmodel26]. The estate-shaped extraction is not a closed door but a named one: done when every code change carries a responsible maintainer identity and the write path REFUSES a change whose author cannot be attributed to a person with standing review authority, naming the rule.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge, Ladybird, Servo; open contract, nothing on disk yet | ○ | ◐ | ◐ | ◐ | ◐ | ● | ◐ |
Dual-implementation A/B over a live stream before an incumbent is deletedOpen — watchingruntime/_hdl_build/nx_behaveprobe.nx : bp_dual_impl_stream, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bp_dual_impl_stream. Both independent engines moved core rendering to Rust in 2026 and Chrome followed in its own parser [ladybird-aug26]. nx_behaveprobe already compares live against staged on a workload; done when it runs old and new implementations over the same live input STREAM, asserts byte-identical serialized output, counts divergences, and the incumbent is deleted only at zero divergence over the full population. Exceed claimed narrowly: a divergence COUNT over the population, where the rivals report a migration as done.Pros none measured yetCons behind Chrome, Firefox, Edge, Ladybird, Servo; open contract, nothing on disk yet | ○ | ◐ | ◐ | ○ | ◐ | ● | ● |
Typed-delta style invalidation measured against a banked baselineDARK —runtime/_hdl_build/nx_browser_render.nx EXISTS but does not declare br_typed_delta: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH br_typed_delta. Ladybird published head-to-head StyleBench 116.3 against Firefox 232.8 and Safari 129.5 [ladybird-aug26]. Done when DOM mutations, state changes and CSSOM edits are a stream of typed deltas routed only to the selectors depending on them, and the score is measured against a banked baseline artifact, never against a description. LARGE: a rewrite of the invalidation core.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ● |
Throughput and energy reported as a pairDARK —runtime/_hdl_build/nx_energy_probe.nx EXISTS but does not declare ep_pair_receipt: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH ep_pair_receipt. Servo v0.5.0's multithreaded 2D canvas reports plus 55 percent frame rate AND minus 42 percent power per frame together [servo-jul26]. Done when every rendering optimization on this board is reported as a PAIR -- throughput delta and joules-per-unit-of-work delta over the same run -- so a change that raises frame rate while worsening energy per frame is visible as the regression it is. Exceed claimed narrowly: a receipt that REFUSES a throughput number without its energy twin.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge, Servo (leads); open contract, nothing on disk yet | ○ | ◐ | ◐ | ◐ | ◐ | ○ | ◉ |
Post-quantum WebCrypto behind NIST known-answer testsDARK —runtime/nx_pq_hybrid.nx EXISTS but does not declare pq_webcrypto_kat: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH pq_webcrypto_kat. Servo is the first engine to fully implement ML-KEM and ML-DSA in WebCrypto [servo-jan26]. Two separately gated legs: a TLS client offering hybrid X25519MLKEM768 that ANNOUNCES rather than silently performs a classical downgrade, and ML-KEM plus ML-DSA behind a WebCrypto-shaped API gated by NIST KATs. Done when both legs pass their KATs and the leading claim is a linked cross-implementation run, never prose. LARGE: lattice schemes from scratch, constant-time.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge, Servo (leads); open contract, nothing on disk yet | ○ | ◐ | ◐ | ◐ | ◐ | ○ | ◉ |
Metric-provenance gate with a DRIFTED stateDARK —runtime/_hdl_build/nx_uiq_perf.nx EXISTS but does not declare up_metric_prov: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH up_metric_prov. REFUTED by the sweep's own verifier: there is no new Core Web Vitals metric and no tightened LCP threshold in 2026 [webvitals26] -- a circulating secondary claim that the primary page does not support. Done when every performance bar carries the primary vendor URL defining it plus that page's last-updated date, refuses to publish a bar whose only witness is secondary, and a beat re-reads the primary and flags DRIFTED when its date moves. Exceed claimed: the DRIFTED leg, which turns a bar from a claim into a watched fact.Pros none measured yetCons open contract, nothing on disk yet | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Soft-navigation attributor for SPA vitalsDARK —runtime/_hdl_build/nx_browser_render.nx EXISTS but does not declare br_softnav: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH br_softnav. The real 2026 CWV change is measurement REACH: Chrome 151 shipped soft-navigation APIs so single-page applications can be measured per route [chrome151-notes]. Done when the conjunction of user interaction, URL change and paint emits a new time origin and re-attributes subsequent paint and interaction measurements to the new route, with browser coverage published beside every SPA vitals number.Pros none measured yetCons behind Chrome (leads), Firefox, Safari, Edge (leads); open contract, nothing on disk yet | ○ | ◉ | ◐ | ◐ | ◉ | ○ | ○ |
Post-MVP WebAssembly as the target, priced including compilationOpen — watchingruntime/_hdl_build/nx_compile_wat.nx : wasm_postmvp_gc, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH wasm_postmvp_gc. JetStream 3.0 shipped on 2026-03-31 and makes post-MVP WebAssembly -- exception handling, SIMD, WasmGC -- mandatory to score [jetstream3], while the W3C TR track sits at 2.0 and 3.0 is the living de-facto target [wasm-core-tr]. Done when the sovereign wasm lane covers those three with first-iteration cost measured INCLUDING compilation and instantiation, so a lazy strategy is priced honestly; six source toolchains is the anti-vacuity control. LARGE: WasmGC is a collector plus a type system.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
Benchmark-version ledger with an UNCONTROLLED labelOpen — watchingruntime/nx_browser_bench.nx : bb_version_ledger, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bb_version_ledger. The 2026 stack is JetStream 3.0 (2026-03-31) and Speedometer 3.1 (2025-03-31) per the vendor's own dated index [browserbench-ann]. Done when every published score carries suite name, exact suite version, that version's release date and the run date, and a score whose suite version is unknown is labelled UNCONTROLLED rather than published bare. Exceed claimed narrowly: the UNCONTROLLED label, which no rival's published score carries.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge, Ladybird, Servo; open contract, nothing on disk yet | ○ | ● | ● | ● | ● | ● | ● |
Gate on metric values, never on audit identifiersOpen — watchingruntime/nx_browser_audit.nx : ba_metric_only, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH ba_metric_only. Lighthouse has no successor -- it was consolidated into shared Performance Insights at 13.0 [lighthouse13], so audit identifiers may be renamed or removed underneath a consumer. Done when the sovereign audit computes its verdict from metric VALUES, which are stable and spec-defined, and treats audit-derived advice as a non-scoring worklist -- a separation the vendor itself states.Pros none measured yetCons behind Chrome (leads), Edge (leads); open contract, nothing on disk yet | ○ | ◉ | ○ | ○ | ◉ | ○ | ○ |
Interop score as the INTERSECTION with an investigation classDARK —runtime/nx_wpt_runner.nx EXISTS but does not declare wpt_interop_intersect: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH wpt_interop_intersect. Interop 2026 scores 20 focus areas plus 4 investigations on wpt.fyi [interop2026-webkit]. Done when the sovereign interop score counts only tests passing in EVERY implementation under comparison, publishes per-implementation pass rates beside it, and carries an explicit investigation class for areas where no valid pass rate can yet be computed rather than scoring them.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ● | ● |
Engine coverage and platform coverage as separate fieldsOpen — watchingruntime/nx_browser_compat.nx : bcd_engine_platform, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH bcd_engine_platform. WebGPU ships by default in all three engines but is NOT Baseline [webgpu-status26] -- the whole 2026 dispute is engine coverage against platform coverage collapsed into one boolean. Done when the support-status resolver keeps the two as separate fields and REFUSES to reduce them to one, naming the rule.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
GPU feature-level ladder with a named fallback doorDARK —runtime/nx_wgsl.nx EXISTS but does not declare wg_tier_ladder: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH wg_tier_ladder. WebGPU compatibility mode shipped in Chrome 146 and reaches OpenGL ES 3.1 class hardware [webgpu146]. Done when GPU work requests the highest tier, falls back to a NAMED restricted tier, and announces which door was taken and why -- the restricted tier a first-class target with its own gate, per the estate's scale-from-a-sensor standing order.Pros none measured yetCons behind Chrome (leads), Firefox, Safari, Edge (leads), Servo; open contract, nothing on disk yet | ○ | ◉ | ◐ | ◐ | ◉ | ○ | ◐ |
Energy per unit of work with host and workload in the receiptDARK —runtime/_hdl_build/nx_energy_probe.nx EXISTS but does not declare ep_per_load: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. WATCH ep_per_load. There is NO standard for energy or resource measurement of page loads in 2026 [wsg-ir26]. Done when the probe pins the host, names the workload, samples platform power counters across a fixed number of loads or frames, and publishes joules per load with host and workload in the receipt, kept strictly separate from any proxy-based estimate. Exceed claimed narrowly: a counter-backed number where the field has only proxies.Pros none measured yetCons behind Chrome, Firefox, Safari, Edge, Servo; open contract, nothing on disk yet | ○ | ◐ | ◐ | ◐ | ◐ | ○ | ◐ |
Living-spec build date pinned, TR level recorded separatelyOpen — watchingruntime/_hdl_build/nx_compile_wat.nx : wat_spec_pin, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. WATCH wat_spec_pin. WebAssembly 3.0 is the de-facto target while the W3C track sits at 2.0 [wasm-core-tr]. Done when the sovereign lane implements against the Community Group living spec and PINS the exact revision date it targets, recording the W3C TR level as a separate compliance fact never used as the implementation target, and gates on the JetStream 3.0 wasm workloads.Pros none measured yetCons behind Chrome (leads), Firefox (leads), Safari (leads), Edge (leads), Ladybird, Servo; open contract, nothing on disk yet | ○ | ◉ | ◉ | ◉ | ◉ | ◐ | ◐ |
| VERIFIER | |||||||
the headless verifier fetches what the page declares it will fetchMeasured:pr_declared_hit exists in runtime/nx_pageref_lib.nx, verified at emit. every engine column executes the page script and so fetches the model, texture or animation the script asks for, and the field's page audit runs the page in a real engine and sees every fetched resource [lighthouse26]; the sovereign headless verifier does not run the script -- it follows the page's own meta name=nishi-<kind> declaration, fetches that asset and checks its magic bytes (NXA MAGIC-OK), so a WebGL page can no longer pass on one advert PNG; running the script itself is BR3's door, and a page that declares nothing still reads as unverified by name Adoption: LIB-WIRED importers=3 nonval=2 — fully adopted (top of its ladder).Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth) | ● | ● | ● | ● | ● | ● | ● |
Delivery and evidence
Inspect risks, technical debt, rendered observations, experiments and references. Read scope and limitations alongside every result.
Debt register
| Id | Sev | What it is | Unblock |
|---|---|---|---|
| browser-build-desyncnot in this scope | 8 | nx_browser.nx is COMPILE-FAIL on buildroot since 2026-08-16, and 2026-08-18 SHARPENED it: the fault is a COMPILER PARSER BUG, not a br_comp_border source defect. REPRODUCED LOCALLY (no NAS load) by mirroring the 214-file import closure and building with the sovereign compiler -- control fails identically (br_draw not registered, error misattributed to the signature line). A plain-style rewrite of br_comp_border that removed every ampersand and bound every arithmetic subexpression did NOT clear it; a properly-closed trivial stub of br_comp_border made br_draw register but the SAME desync (kind=45 = &) reappeared inside br_draw, reading valid locals (bw2) as undefined and a correct 4-arg br_comp_bg call as wrong-arity. LOCALIZED 2026-08-18 to the border value-extraction block (the wv/hp digit scans in br_comp_border): removing that block alone makes br_draw register, keeping it in any form does not. Six source variants were built and REFUTED as the fix -- ampersand-free, every-subexpression-bound, cursor-clobber-free plain loops, a trivial closed stub, and splitting the block into a helper function (the desync just moves into the helper). Isolated probes of the same block build clean, so the trigger fires ONLY inside the full 214-file import closure. This is a compiler parser bug (a consumed closing brace under a specific statement block in a large translation unit), not a source defect, and no reasonable rewrite of br_comp_border clears it. Every NAS-side browser gate, deploy and census organ is blocked; the Windows daily driver (built from nishi_gui.nx) is unaffected. | RESOLVED 2026-08-18: the desync was not in nx_parse at all -- nx_compile_x86.nx passed a fixed 262,144-token cap to lex_source and nx_tokenizer.nx's push_tok had no bound check, so every token past the cap silently overwrote the neighbouring allocation (the browser unit is ~1M tokens; the compiler's own unit sits ~5 percent under the cap, which is why only the browser fell). Fixed by DERIVATION (pool sized from post-expansion bytes; cap survives only as a floor) + a fail-loud push_tok guard; equiv net 10/10 + self-host GREEN, compiler promoted 5aaf6cd7, nx_browser BUILT and PROMOTED b2ce1f8e. The eight construct bisects failed because the defect was positional, not syntactic. |
| css-off-defaultnot in this scope | 6 | The daily driver still renders CSS-OFF by default (CSS_ENABLED=0) because the census pair favours OFF (426 vs 311 permil): the styled path collapses on ebay/yahoo and the OCR ruler penalises sub-14px styled text -- a measurement-philosophy gap as much as a render gap. 2026-08-26: the flip decision is now MECHANICAL rather than a reading of two numbers -- bsc_pair_verdict calls anything inside the census-variance band TIED rather than a win, so 426 versus 311 still says FAVOURS-CSS-OFF (a 115-permil gap against a 60-permil band) but a smaller future gap can no longer be spent as a flip. It reads UNOBSERVABLE today because the seeded planes carry struct readings and no OCR recall on either leg, which is exactly the honest answer for a census that has only run one axis. | BR2 -- fs-normalised OCR or the struct axis weighted into the flip decision; the pair decides, never taste. And the struct axis is NOT yet weighable: on saved bytes the CSS-OFF wikipedia capture reads 916 permil deep against the CSS-ON captures 845, but those are two different saved documents rather than one document rendered twice, so it is not an A/B and must not be quoted as one. The paired run that would settle it needs OCR recall on both legs and one document per leg. |
| fetch-empty-sixnot in this scope | 6 | youtube, reddit, bing, instagram, duckduckgo, craigslist are FETCH-EMPTY: SPA shells that need the JS/API surface, plus a HelloRetryRequest the Chrome-JA3 hello does not yet handle (craigslist verdict=5). | BR3, and the HRR path in the TLS client. |
| ua-sheet-site-hacksnot in this scope | 5 | COUNT CORRECTED 2026-08-26 -- this row UNDERSTATED itself by more than half. Enumerated from the UA sheet literal in nx_browser_render.nx (both the light and dark copies carry the same set), there are TEN MediaWiki-specific selectors, not four: .vector-menu-content-list, .vector-dropdown, .mw-interlanguage-selector, .wbc-editpage, .vector-toc, .vector-toc-list, .vector-toc-list-item, .vector-toc-link and .vector-page-toolbar all display:none, plus .infobox floated right at a hardcoded 300px. Nine hides and one float, all keyed on one sites class names, in the sheet every page on the web is rendered through. | BR2 -- and the measurement that DECIDES retirement now exists, so this stops being a judgement call: render bench/selfpage/wiki_aug.html with the ten selectors removed and struct_diff the deep window ay=by=800 h=2000 against bench/top20/wikipedia_chrome_tall.png. The baseline is banked at 845 permil matched, dy 7, dx 80 over 84 oracle bands (2026-08-26, layout width 1024). If the reading holds, the crutches were carrying nothing and they go; if it falls, they were carrying a real layout gap and THAT gap is the rung, not the hack. Blocked only on a browser rebuild, which is the same blocker as debt browser-shot-width. |
| census-variancenot in this scope | 4 | The same binary read 486 (08-18) and 424-432 (07-28/29): live-page churn + oracle version + OCR variance is on the order of 60 permil, so the census cannot adjudicate a small engine change on its own. | Publish every census with its row set, binary hash and oracle version; grade engine changes ONLY on saved bytes (render_ab + struct_diff); the census is the trend line. |
| queued-build-deploys-while-promising-otherwisenot in this scope | 6 | MEASURED 2026-08-26 on this very lane, and it is not browser-specific. /api/build target=nx_wpt_runner was REFUSED by nx_build_admit (procs_blocked 10 against a blocked_max of 8 -- an I/O storm, not CPU) and ABSORBED as deployq row BQ-nx_wpt_runner. Its refusal body promises, in these words, that the result lands in a planrun store and that you should promote DELIBERATELY AFTERWARDS. What actually happened when the row fired is in its own artifact: the queued lane builds through nx_sov_build_run, which printed DEPLOYED to serving root (twin refresh, live for the next fork). Measured either side of that fire, the served binary moved 598,416 -> 595,550 B and the engine sha16 moved 0f570c01e8ce4c68 -> 9a97da75f32c108d. So a caller who was told a build was merely QUEUED had a new binary installed on the serving root with NO nx_behaveprobe, NO nx_contentdiff and no promote decision anywhere in the path. The gap is between the promise and the mechanism, not in either alone: read on its own, the refusal text teaches every seat that a queued build is safe to leave unattended. NOTE FOR THE NEXT READER, because two seats reached different conclusions the same day: a sibling recorded the BR1 drift as already closed on the evidence that live equals staged equals source, and that reading was taken AFTER this deploy landed, when it was true. Both observations are correct about different moments; this row supplies the before-figure that the after-figure cannot contain. | Either make the queued lane build-only and leave the promote to a deliberate call as the refusal already promises, or change the refusal text to say plainly that an absorbed build DEPLOYS. Whichever is chosen, the two must agree -- a message that describes a mechanism it does not have is worse than no message. |
| wpt-corpus-unbankednot in this scope | 7 | MEASURED 2026-08-26: the WPT corpus behind the 08-18/19 published counts was banked in NEITHER tree. bench/wpt did not exist on the NAS and held only wpt_history.tsv (370 B) on the laptop; an exhaustive WSL and laptop search returned zero WPT directories. The engine was banked and version-controlled, the YARDSTICK WAS NOT, so for eight days every published BR1 number was unreproducible by anyone including its author -- a benchmark whose fixtures are not stored is an assertion, not a measurement, and content-addressing makes this WORSE not better, because the runner refuses to re-run on a matching (engine, corpus) key and the key is computed from files that no longer exist. Two directories have since been recovered by hand and both hashed identical to their 08-18 rows, which is what proves the recovery faithful AND proves the loss was real. Still unbanked: dom_nodes (178 files) and html_syntax_fragments (13). | BR21 -- one byte-preserving ingest closes both, and the recovered dom_lists plus dom_collections in bench/wpt with CORPUS.md are the pinned reference it must reproduce. |
| wpt-corpus-duplicated-and-spine-dir-keynot in this scope | 4 | TWO defects found together 2026-08-26, both cheap. (1) DUPLICATE CORPUS: two seats independently re-acquired dom/lists the same day into bench/wpt/dom_lists and knowledge/wpt/domlists. Proven byte-identical -- both produce corpus_sha16 54e90b086e0c6530 -- so this is genuine corroboration of fidelity from two directions, but it is also a second ruler and one of the two should be retired by adjudication, never unilaterally. The retrieval failure was mine: I searched bench/wpt (the path the harness's own history line names) and the laptop, and did not search knowledge/. (2) SPINE DIR KEY: the time spine keys a row on the directory BASENAME, so those two identical corpora recorded as dir=dom_lists and dir=domlists -- two independent trend lines over the same bytes, and the REGRESSION check compares only within a dir key, so neither run can ever see the other's history. A corpus is already identified exactly by its corpus_sha; letting a path basename shadow that hash is what splits the record. | Retire one copy by adjudication and key regression on corpus_sha rather than on the basename, or state plainly that dir is a display label and not an identity. |
| images-lazynot in this scope | 4 | Lazy-load / srcset / data-src images are not fetched and SVG is skipped, so media-heavy pages render most figures blank even though the decoders are byte-exact. | PARTLY RESOLVED 2026-08-26 by BR14, and the two halves of this row turn out to be two different defects that shared a symptom. THE SOURCE-SELECTION HALF IS FIXED AND PROVEN: nx_srcset_lib is wired into br_extract, so srcset, data-srcset, data-src, data-original and data-lazy-src resolve to a real URL instead of a data: placeholder (gate 59/59, mutation-proven, and laid 4 equals decoded 4 equals painted 4 through the real br_layout and the real paint on a fixture PNG). STILL OPEN AND NOT CLAIMED: SVG is still skipped, and that is NOT this rung -- nishi_gui load_images rejects a .svg suffix because the estate has no SVG rasterizer, which is BR17 bsvg_path; and the live wikipedia figure count was not measured because the Windows GUI binary was not rebuilt. Do not close this row on the strength of the selection fix: reading it as done would quietly claim the SVG half. |
| font-oracle-undeployednot in this scope | 4 | The oracle-metric font advances (hmtx-derived, Arial==Liberation Sans, measured 103/1000em drift, wikipedia to 99.4% of Chrome) EXIST in the laptop tree but font_set_adv_oracle is absent from buildroot/runtime/nx_font.nx -- a build-desync, so the compare cell honestly reads absent-from-shipping. This is the same class as the browser-build-desync: capability written and not deployed. | BR2/BR4 -- deploy the font work to buildroot, or (if it depends on the browser build) land it with BR0; the watch flips on the next beat when the symbol reaches the shipping tree. |
| laptop-mirror-stalenot in this scope | 5 | CORRECTED 2026-08-25 -- THE DIAGNOSIS IN THIS ROW WAS WRONG IN A WAY THAT MAKES ITS OWN REMEDY DESTRUCTIVE, AND THE REMEDY WAS THE PART BEING ACTED ON. It said the laptop is STALE against buildroot and to SYNC THE CLOSURE FROM BUILDROOT. Measured on nx_http_client.nx by comparing both function sets (laptop 18 decls, NAS 34 via nx_fs outline; sizes 24,023 vs 24,092 -- only 69 bytes apart, which is what first refuted the simple missing-function story): the two files are BIDIRECTIONALLY FORKED. NAS-only: hc_set_identity hc_identity hc_put_ua hc_xhdr_has_ua hc_put_ua_x hc_put_caps nx_http_client_build_request_xhdr nx_http_client_build_request_cookie_xhdr. LAPTOP-only: nx_http_chunked_end nx_http_ci_match nx_http_client_build_request_ka nx_http_client_close nx_http_client_connect nx_http_client_get_on nx_http_client_read_one nx_http_content_length nx_http_hdr_end nx_http_hexval nx_http_is_chunked -- i.e. the whole chunked-transfer and keep-alive path. A one-way sync in EITHER direction silently DELETES eleven or eight functions. This is the same bidirectional shape already measured on nishi_gui.nx, so it is the mirror's general condition, not one file's accident. RAISED 3 -> 5 because a wrong remedy that reads as routine housekeeping is worse than a known gap. | PARTLY RESOLVED 2026-08-25 -- the nx_http_client.nx instance is DONE and the Windows fetch engine SHIPS. Method, which is the reusable part: take the NAS-only functions ADDITIVELY (the laptop had none of the 8, so nothing could collide) while KEEPING the laptop-only 11; 18 -> 26 decls, nothing removed. NX_MAGIC_1024 deliberately kept under the NAS's own name -- renaming it to something better in ONE tree is how the pair forked in the first place, so a merge converges names rather than improving them. A SECOND duplicate then surfaced underneath: arena_new/arena_alloc defined in BOTH nx_runtime.nx and runtime.nx, two files that (line-endings normalised) differ by EXACTLY ONE LINE -- which syscall surface they import -- with identical 13-function sets and identical bodies. The estate had ALREADY solved that class and shipped the pattern: syscalls.nx is a 967-byte ALIAS STUB whose own comment says it splices the canonical file once and other importers dedupe to the same splice, no duplicate symbols, fixing the nxasm_main.nx duplicate-symbol error on 2026-05-19. runtime.nx was simply never given the same treatment. Converted it to that stub, which fixes all 21 `import runtime.nx` consumers globally, not just this closure. RESULT: nishi_fetch.exe rebuilt 1,054,208 B (1a9e0757, was ae9decdb from 07-29), smoke_exit=0 fetched_bytes=149307, and the GUI renders end-to-end through it. STILL OPEN: the fork is the MIRROR'S GENERAL CONDITION, not one file's -- nishi_gui.nx is bidirectionally forked too (NAS has the W_WriteFile const, laptop has the headless/ppm lane). Every future sync needs the same function-set diff first; there is still no instrument that produces one, and that missing organ is the real remedy. |
| linux-browser-second-render-corenot in this scope | 7 | MEASURED 2026-09-02: nx_browser.nx declares its own br_layout, br_draw_fb and br_shot_png and paints text with br_paint_text2x (the 8x8 bitmap at 2x); it does not import nx_browser_render.nx. The board's one-render-core row is TRUE of the Windows and NishiOS builds and FALSE of the promoted Linux binary, the NAS shot verb and the roster gate subject -- so the NAS census, the layoutsweep and nx_browser_gate row 12 all grade a renderer the typography work never touches. Two render cores is the duplicate-ruler defect at the centre of the board, and it hid in plain sight because both cores share every function name. | BR29 -- compose the shared core into nx_browser.nx; nx_browser_gate row 12 must stay GREEN through the change and the NAS shot verb must paint the same pixels nishi.exe does. |
| nas-font-fixturenot in this scope | 4 | The NAS serving root has no font file the engine can read: web_assets/fonts/ is absent and web_assets/nishi_sans.ttf (the house font nx_ttf_fontlib_gate loads first) is absent too, only web_assets/nishi.ttf exists -- so the gate exited RED at its first tooth on the one host that publishes, and could never reach the professional-face teeth. 2026-09-02: the gate now SKIPs the house half via gv_need instead of exiting, the Liberation tarball is mirrored and pinned (knowledge/fetched/cmp_browser_liberation-fonts-ttf-2.1.5.tar.gz, sha 11387cec, 4392960 B), and nx_untar (gunzip ISIZE-derived, ustar, write boundary enforced) lands it under knowledge/fonts/ where the gate and the render instrument look second. | run nx_untar on the mirrored tarball into knowledge/fonts/ and nx_font_ttf_emit for the house font, then wire nx_ttf_fontlib_gate into typography.gates and browser.gates as executed evidence. |
| leading-space-at-line-startnot in this scope | 4 | SEEN IN THE RENDER 2026-09-02 (stroke font and face alike): a run that wraps after an inline link begins the next line with a leading space -- the Functionality paragraph on the wikipedia fixture starts its second line with ' tiles, and pausing'. CSS white-space normal removes a collapsible space at the start of a line box; ours paints it, one glyph advance of dx on every such line, which struct_diff mean_dx carries. | the wrap scan (font_vec_next_break_fs) and the paint pen both skip a collapsible space at a line start, proven by a fixture whose second line begins with a space in source and a tooth on the first glyph x of that line. |
Risk register
| Risk | Likelihood x impact | Mitigation |
|---|---|---|
| A third-party engine, codec, shaper or toolchain enters the build or run path | possible x catastrophic (operator 2026-09-02: never a third party in the build path, estate-wide license clean, sovereign from the first byte up and from the electronics up) | The font lane is the template: the TrueType engine, the browser, every gate and the Windows PE are NishiLang through nx_cc, nxasm and our own PE writer; the Liberation faces are SIL-OFL DATA read by our engine with the OFL text shipped beside them (web_assets/fonts/ on the laptop, knowledge/fonts/ on the NAS); a Windows system face is a runtime fallback the user already owns, never a dependency; the industry instruments on the measurement rows are comparators run OUTSIDE, only their numbers and content-pinned mirrors enter. nx_selfsuff is the ruler; a twin that links, forks or shells a third-party binary has imported the oracle, not built a twin. |
Release history and work log
| When | Rung | Kind | Entry |
|---|---|---|---|
| 2026-09-02 | BR26 | lesson | The read engine nx_ttf_fontlib hard-coded unitsPerEm 1000 and ascender 760 (our house font); every professional face would have rasterized at half size with halved advances and nothing would have failed loudly. A metric that can be READ from the file must never be assumed. |
| 2026-09-02 | BR26 | land | nx_ttf_fontlib rewritten (upem, hhea, cmap glyphIdArray path, composites, negative lsb, ink past advance, kern table) + nx_ttf_fontlib_gate 23/23 bite-proven (planted upem=1000 -> RED T11/T13/T15; dead kern -> RED T14), both trees hash-verified 6b2aec85; the hand-baked oracle table retired after T13 proved it equal to hmtx for 95/95 chars. |
| 2026-09-02 | BR26 | measure | bench/selfpage/wiki_aug.html vs bench/top20/wikipedia_chrome_tall.png, nx_browser_render_shot 1024 then 1024 face, nx_struct_diff deep 800/800/2000: stroke 880 permil dy 9 dx 45 page_h 7027; face 892 dy 9 dx 53 page_h 7048 (Chrome 7582); first screen 578 both, dx 185 to 155. |
| 2026-09-02 | BR26 | land | Face hook = ONE ruler: nx_font font_set_face feeds font_adv_em, pair kern in font_vec_text_w_fs and font_vec_next_break_fs, render copies delegate; bpv_cell adopts tf_glyph records; nx_inline_vec_measure_gate 8/8; nishi.exe rebuilt (bdedbb5a) with Liberation loaded; NAS sources written under CAS. |
| 2026-09-02 | BR29 | lesson | nx_browser.nx (the promoted Linux binary, the NAS shot verb, the roster gate subject) declares its OWN br_layout/br_draw_fb/br_shot_png and paints 8x8 bitmap text -- a second render core sharing every function name with the shared one, so the NAS census is structurally blind to typography work. Debt 1788353483. |
| 2026-09-02 | BR26 | lesson | nx_research_fetch inflated a gzip PAYLOAD as transport encoding: the Liberation tarball mirror is a 4,392,960 B ustar with a provenance row reading complete against a 2,385,008 B upstream. A mirror whose bytes are not the URL's bytes has an unverifiable pin. Debt 1788353998; nx_untar detects gzip by magic, never by name. |
| 2026-09-02 | BR26 | land | nx_untar (new, LIVE) landed all 12 Liberation faces + OFL LICENSE under knowledge/fonts/ on the NAS; Regular hashes 76d04c18 = the laptop pin; nx_ttf_fontlib_gate on the NAS: Liberation half 12/12 PASS. |
| 2026-09-02 | BR26 | lesson | A gv_need on a witness structurally absent on the publishing host (a Windows system font on the NAS) makes a gate SKIP forever there: 12/12 teeth passed and the verdict still read SKIP. Such witnesses are OPTIONAL and announced. |
| 2026-09-02 | BR27 | land | Eight-slot face registry (Liberation Sans+Serif R/B/I/BI) selected per run by ONE resolver nx_layout_face_for_box (font-weight, font-style, font-family, font shorthand, inherited, memoised) called by layout before measuring and by paint via br_face_resolve; UA h1-h6 bold; measure gate 11/11; nishi.exe 3e4a83dd; NAS layout via 3 anchored edits (137,559 B exceeds the 131,072 B per-argument cap). |
| 2026-09-02 | BR27 | measure | Same instrument, full family: deep 892 permil dy 9 dx 49, page_h 7090 (Chrome 7582), first screen 578 dx 155; crops: serif headings, bold runs, italic hatnote. |
| 2026-09-02 | BR27 | retract | A published correction said the fixture carried no heading-weight rule; it carries .mw-heading,h1,h2{font-weight:bold} then .mw-heading1,h1{font-weight:normal} (425,326 B -- a cut listing column read 5,326). Withdrawn on the measure gate's T15/T17. |
| 2026-09-02 | BR2 | land | Cascade root cause: rh_cascade scored comma-list specificity over the whole list, so a class member leaked onto its type members and the earlier bold rule outranked the later normal one. Fixed by per-matching-member specificity (rh_match_complex_spec); measure gate T11-T17, 18/18; NAS render_html patched by 4 anchored edits (39,652 B); nishi.exe 8b8b5952. |
| 2026-09-02 | BR2 | measure | Same instrument after the cascade fix: first screen 578 to 684 permil (13 of 19 bands) dx 155 to 138; deep 892 to 880 dx 49 to 39 dy 9 to 8; page_h 7004; the title paints serif regular as Chrome does. |
| 2026-09-02 | BR27 | lesson | A correction is a hypothesis too: run the discriminating tooth before publishing it. The wrong correction stood on the board for under an hour only because the gate was already in the path. |
| 2026-09-02 | BR26 | queue | Behind nx_build_admit (I/O storm): nx_ttf_fontlib_gate (T21 optional witness), nx_font_full (house font), nx_inline_vec_measure_gate, nx_browser_render_shot. Recipe: nx_filecopy buildroot/_build/<t>.sov.elf <t>.sov.elf.new overwrite, nx_filehash, /api/promote expect_sha256; then run the gate on the NAS and add its rows to typography.gates and browser.gates. |
| 2026-09-02 | BR31 | queue | The emitter grew a work-log renderer (plan_pass in nx_swcompare_lib, rows of this kind rendered per rung); nx_swcompare_matrix and nx_swcompare_sota rebuilds are queued behind admission. Recipe after they land: promote both with expect_sha256, then nx_restage both so buildroot/_offc (the copy the publisher forks) matches, then nishi_compare_regen; until then these rows are on the board as data the old emitter skips. |
| 2026-09-02 | BR30 | measure | nx_inline_vec_measure_gate 20/20 (T18: a covered U+00E9 keeps its UTF-8 bytes and reserves the face advance; T19: uncovered folds to e and the widths differ), nx_ttf_fontlib_gate 23/23; bench/selfpage/unicode_probe.html renders accented Latin, Greek, Cyrillic, bold and italic from real outlines through render_shot face (20 boxes) |
| 2026-09-02 | BR30 | land | Laptop tree: nx_ttf_fontlib tf_glyph_cp and tf_raster; nx_font font_next_cp (composes nx_utf8) and a codepoint-indexed face table FS_FACE_CPS=8704 (U+0000..U+21FF); nx_browser_render br_fold_text (fold only what the face lacks, both stages), br_text_cp (the contract symbol), atlas cells by codepoint, br_face_register covering the cmap; nx_html_entities regenerated per length (253 names). NAS: fontlib, measure gate and entities pushed whole under CAS; font and render pushed as hunk ladders |
| 2026-09-02 | BR30 | lesson | A heredoc-written patch collapsed backslash escapes and wrote a raw NUL into source; the compiler blamed the auto-appended crash handler (lang LN24) and a 253-name if-chain overflowed the per-function block pool (lang LN25). Construct high bytes in fixtures, write patch scripts with an exact-byte tool, split big tables by key |
| 2026-09-02 | BR30 | queue | Unmapped codepoints (CJK, Arabic, Devanagari) vanish instead of drawing the face notdef box; BR39 owns the notdef and the HTML5 entity superset; scripts beyond U+21FF need faces plus shaping (BR4). NAS rebuilds of the six queued targets fire behind admission; stage and promote each when they land |
| 2026-09-02 | BR39 | land | First half SHIPPED on the laptop: an unmapped codepoint under a face (beyond the U+21FF table, or with no cmap entry above it) draws the face's notdef box with gid 0's advance instead of vanishing -- slot 0 of the advance table is the notdef advance, font_face_has covers every beyond-table codepoint when it is set, the atlas keys those cells on codepoint 0 (tf_glyph_notdef). Measure gate 22/22 with T20 (bytes kept, notdef advance reserved) and T21 (no notdef advance folds away); the probe page shows three boxes for the CJK run. nishi.exe rebuilt 725,504 B 1A814622. The HTML5 entity superset stays open |
| 2026-09-02 | BR30 | measure | Closure ruler for the ship lane: 36 files in the browser build closure, 31 identical across trees, 5 diverged BOTH ways (nx_render_html, nx_glyph_stroke, nx_layout_block, nx_layout_from_dom, nx_png_write). Each side held real work the other lacked: the laptop had the dark-scheme media guard, real-deflate PNGs, the disc rounding fix and the image-reflow code; the NAS had the magic-const hoists and a void-tag rewrite. The union was computed per file, the laptop rebuilt from it (gates 22/22 and 23/23, probe renders) and the unions pushed to the NAS as hunk ladders verified to reproduce each union |
| 2026-09-02 | BR30 | lesson | Two seats fixing one tree from two roots produce a fork where BOTH sides are right; adopting either copy wholesale deletes the other seat's fix. The union has to be computed per file and pushed as anchored hunks -- a closure ruler that names the diverged files is what makes the ship lane honest |
| 2026-09-02 | BR30 | measure | Executable evidence on the NAS: nx_inline_vec_measure_gate laptop-built from the byte-equal tree (closure 38/38), promoted 25903ccb through the stage slot, run on the NAS 22/22 GREEN (T18 covered U+00E9 keeps bytes and the face advance, T20 beyond-table codepoint reserves the notdef advance). Row added to browser.gates. nx_browser_render_shot ships next |
| 2026-09-02 | BR30 | land | nx_browser_render_shot laptop-built from the byte-equal tree, staged through the door (574,680 B, 12 chunks) and promoted 1084adaa; the NAS now serves the same Unicode render core the daily driver uses. Regen #6 published 205 pages GREEN with forkfresh 4/4 after the byte-copy restage |
| 2026-09-02 | BR39 | land | Second half on the laptop: the decoder table is the FULL HTML5 named character reference set, 2,125 names generated per length and per first byte (largest bucket 40 names, no function near the block pool), 93 two-codepoint references served by nx_html_entity_second so the public one-codepoint contract (nx_js_eval, nx_html_to_text) is untouched; the living standard wins the two disagreements (lang, rang moved to U+27E8/U+27E9). The decoder's name-length bound is DERIVED from the table (ENT_NAME_MAX=31; the old bound of 12 passed every longer reference through as literal text -- measured on hookleftarrow and NotEqualTilde). Notdef refined: an uncovered non-Latin codepoint inside the table draws the box too (Latin still folds to its base letter). Probe page: every HTML5 name decodes, every uncovered symbol boxes. nishi.exe rebuilt C4384123. The 554 KB table exceeds the per-argument write cap, so it ships to the NAS through the door under EC26 |
| 2026-09-02 | BR39 | lesson | A search bound written as a constant beside a growing table is a second copy of the table's shape: the entity decoder looked 12 bytes ahead for the semicolon while the spec's longest name is 31, so the very names the new table added were the ones it could never reach. Derive the bound from the data it bounds |
| 2026-09-02 | BR39 | queue | The HTML5 table (554,696 B) is on BOTH trees (NAS f88507fa via the EC26 door); the render tool rebuilt from the byte-equal closure (36/36) is 1,387,902 B sha 4983bfef on the laptop and NOT yet on the NAS: its upload (29 chunks) was stopped mid-run while the array storm holds, and the NAS still serves 1084adaa (pre-HTML5). Recipe when load allows: nx_content_put_client.py _build/nx_browser_render_shot.sov.elf nx_browser_render_shot.sov.elf.new contentput.cap, then /api/promote with expect_sha256=4983bfef...; regen #7 (job 1788383462) was still CLAIMED at 30 min |
| 2026-09-02 | BR31 | land | THE WORKED PLAN IS ON THE BOARD: regen #7 (the first run of the generators carrying the log-row renderer) published sites/nishifamily/compare/browser/index.html with the Work log section (h2 id=worklog, one row per log entry, newest last, each linking its rung) -- 195 pages published; the five thin domains refused by the liar-kill kept their previous pages. Every plan with log rows now renders its ledger; a crash leaves the next seat this page, not a transcript |
| 2026-09-02 | BR31 | land | THE WORKED PLAN IS ON THE BOARD: regen #7 (the first run of the generators carrying the log-row renderer) published sites/nishifamily/compare/browser/index.html with the Work log section (h2 id=worklog, one row per log entry, newest last, each linking its rung) -- 195 pages published; the five thin domains refused by the liar-kill kept their previous pages. Every plan with log rows now renders its ledger; a crash leaves the next seat this page, not a transcript |
Risk register
| Risk | Likelihood x impact | Mitigation |
|---|---|---|
| A compiler fix for BR0 miscompiles the estate | possible x catastrophic | The compiler ships only through its canaried lane: nx_cc_equiv_staged over the pre-declared roster + nx_contentdiff GREEN before promote; if equivalence cannot be proven, the source-shape rewrite ships with the reproducer banked as a bite and the compiler defect stays filed. |
| A WPT number gets read as marketing | likely x medium | Publish pass/total PER DIRECTORY with the failing-fixture control shown; never a single percent; the slice is pre-declared before the run. |
| Chasing the live census instead of structural exactness | likely x high | The ratchet metric is struct_diff on saved bytes (render_ab); the live census is the trend line and its variance is a named debt on this page. |
| Browser-sized builds hammer the box | likely x medium | A browser build emits ~9 MB of assembly; bisect and build on the laptop toolchain, NAS builds only through nx_build_admit, and never retry a 503 in a loop. |
Release history continued
| When | Rung | Kind | Entry |
|---|---|---|---|
| 2026-09-04 | M7 | land | SEPTEMBER 2026 SOTA ADMITTED FOR THE WEB PLATFORM AS COMPARE DATA, JOINING THE MEASUREMENT SECTION THIS BOARD ALREADY CARRIED AS THE ESTATE'S TEMPLATE: 11 new pinned refs, 17 rows, 6 pre-declared contracts. The sweep's browser domain returned 18 findings and its adversarial verifier confirmed 17, dropping 1 UNDATED; one confirmation was itself a REFUTATION -- there is NO new Core Web Vitals metric and no tightened LCP threshold in 2026 [webvitals26], a circulating secondary claim the primary page does not support, which is why the first contract admitted here is a metric-provenance gate with a DRIFTED state rather than a new metric. DEDUPLICATED BY URL BEFORE FETCHING, NOT BY KEY: four of the sweep's sources were already pinned on this board and are cited by their existing keys -- ladybird-apr26, webvitals26, interop2026-webkit, webgpu-status26 -- and one existing key, chrome151, names a DIFFERENT url than the release notes, so the notes were admitted under their own slug rather than colliding. Eleven new sources fetched at status=200, one of them 938 bytes, which the fetch lane's stub-refusal history made suspect; read in full it is a genuine static index with zero script tags and five dated links, small because it IS small, and it was admitted -- and it also shows Speedometer 3.1 dated 2025-03-31 and says nothing about MotionMark, so the row it backs claims only what the page says. THE FINDINGS THAT CHANGE THE LANE: Ladybird crossed 2,088,677 passing WPT subtests [ladybird-aug26] and passes 97.8 percent of test262 as 52,045 of 53,207 [ladybird-apr26] -- the buildable unit is the reporting discipline, numerator and denominator and date as three fields so a percentage cannot hide a shrinking denominator; Servo's multithreaded canvas reports plus 55 percent frame rate AND minus 42 percent power per frame together [servo-jul26], the pair this board now requires of every rendering optimization; JetStream 3.0 makes post-MVP WebAssembly mandatory to score [jetstream3] while the W3C TR track sits at 2.0 under a living 3.0 [wasm-core-tr]; Lighthouse has no successor [lighthouse13], so the sovereign audit gates on metric VALUES never audit identifiers; WebGPU ships everywhere but is not Baseline [webgpu-status26], which is engine coverage and platform coverage collapsed into one boolean -- admitted as a resolver that refuses to collapse them; and there is NO standard for page-load energy measurement [wsg-ir26], where the estate's counter-backed probe is a narrow exceed over a field of proxies. Six contracts BR41 to BR46 under milestone M7 with ver 7.0, each done-rule pre-declared with a control. All three appends verified single by row-unique counts on the NAS. ⚠RECORDED, NOT FIXED, BECAUSE IT IS NOT MINE: this plan already carries TWO ms rows named M6 -- the measurement lab and a native-emission migration -- both at ver 6.0; a milestone id declared twice is a coin flip wearing a schema for whichever reader takes first-match, the same class organ_kind.conf was found to have, and it predates this admission. The owning seat should renumber one. |
| 2026-09-05 | BR40 | measure | head-mode census for the character lane, 2026-09-05: nx_browser runs page JS through nx_js_eval but has no WebGL or canvas context (txtscan count=0 for WebGL in nx_browser.nx and for getContext in nx_js_eval.nx), so /world/rigview and the DanceXR WebGL web player (an itch.io iframe running the LW build, mirrored as charsim ref dancexr-play) both render only in a third-party browser; nx_page_verify reads rigview GREEN having checked one PNG and not the script-fetched NXA -- the world door BR40 is what the character boards (charsim R36, koikatsu KK18) wait on |
| 2026-09-05 | BR47 | measure | found while using the estate as a third party on DanceXR (2026-09-05): nx_page_verify read /world/rigview GREEN with checked=1, the one asset an advert PNG, while the page's whole subject is a 1.7 MB NXA fetched by script from the meta nishi-nxa declaration the page already carries -- a vacuous head-mode verdict for every WebGL page in the estate; the vocabulary owner nx_pageref_lib now carries pr_declared_hit and the verifier follows it (source landed, build through /api/build under admission) |
| 2026-09-05 | BR47 | lesson | board hygiene seen while adding this rung: browser.plan carries ms |
| 2026-09-05 | BR47 | measure | THE GATE BIT BEFORE THE PROMOTE (2026-09-05): nx_pageref_gate rebuilt with the declared-asset teeth (BUILT 42024 B sha 4b00a33d) and nx_behaveprobe live-vs-staged read live_rc=0 other_rc=1 -- the staged gate was RED on the first cut of pr_declared_hit, which walked back to the tag opener and exited at offset 0 WITHOUT reading it, so a tag opening the buffer (every fixture, any page fragment) could never be a meta; on a real page the doctype always precedes the tag, so production would have hidden the defect and only the fixture exposed it; fixed by testing the byte before the floor check, gate and verifier rebuild follow; the earlier 617488 B page_verify build carries the unfixed lib and is NOT promoted |
| 2026-09-05 | BR47 | land | DECLARED-ASSET VERIFICATION LIVE (2026-09-05): nx_pageref_gate rebuilt through the SOVEREIGN lane (36299 B sha b03a564c -- the mgmt lane had returned the pre-fix bytes 4b00a33d for the changed source), staged by nx_filecopy, nx_behaveprobe live-vs-staged read live_rc=0 other_rc=0 with 2476 B of teeth output against 1952 (the declared-asset teeth and both negative controls executed and passed), PROMOTED with prev banked and offc-installed; nx_page_verify built from the fixed lib (617496 B sha 5fafc976, contentdiff strict superset, 861 gained runs) PROMOTED with prev banked; the acceptance run on /world/rigview follows -- done-rule checked=2, declared-assets=1, NXA MAGIC-OK |
| 2026-09-05 | BR47 | measure | ACCEPTANCE RUN, FIRST PASS (2026-09-05): the promoted verifier on /world/rigview reads checked=2 declared-assets=1 -- it now fetches /world/ref9d.nxa from the page's meta declaration where the old binary fetched one advert PNG -- and the verdict moved from a vacuous GREEN to UNOBSERVABLE unreadable-assets=1: the 1.7 MB rig came back status=0 bytes=-4 at fetch stage 4 with the TLS 1.2 fallback reporting t12-incomplete-flight (no SH/SKE inside the read budget) while the box sat in an I/O storm (procs_blocked 5-11); the advert PNG on the same page decoded fine; so the half of the done-rule that is the verifier's (follow the declaration, count it, refuse to acquit what it could not read) holds, and the half that is the fetch lane's (read a 1.7 MB asset through the sovereign edge under load) is the next re-run on a calm box -- MAGIC-OK unwitnessed |
| 2026-09-05 | BR47 | retract | THIS RUNG WAS FILED AS BR41 AND COLLIDED (2026-09-05): browser.plan already carried rung BR41 (every performance bar carries its primary source and date) in the M7 block, and the live nx_goalmap v1.2 refused the whole board by name with duplicate-rung-id BR41 on its first 8-board run -- the detector built this morning against gameengine's GE50 pair fired on the seat that built it; renumbered to BR47 (BR40-BR46 taken), the ms M8 member and every log row this seat wrote moved with it, the other lane's BR41 untouched; the lesson is the one the goalmap already encodes: a rung id is claimed by a count over the board, never by the last id a seat happened to read |
| 2026-09-05 | BR47 | measure | THE MAPPER NAMED THE MISSING CELL (2026-09-05): after the renumber, nx_goalmap v1.2 mapped browser without refusal (48 rungs, 15 matched, BR47 scored 4 with 6 log rows) and reported BR47 status=UNMAPPED -- the rung named pr_declared_hit but browser.matrix carried no row for it, so the published page could never flip; one VERIFIER watch row appended (organ runtime/nx_pageref_lib.nx, six engine columns all 1 because every engine executes the script and fetches the asset, grounds [lighthouse26]); re-mapped: status=PRESENT, matrix_rows 125 -> 126; the lesson is the goalmap's own -- a rung without a matrix row is a promise the hive cannot measure |
| 2026-09-05 | BR47 | measure | SECOND ACCEPTANCE RUN, BOX AT GRANT (2026-09-05, load1 22.7 with run queue 4/8 and D-state 4/8): nx_page_verify https://nishifamily.com/world/rigview -> page 200 49751 B, declared-assets=1 (the meta nishi-model row resolved to /world/ref9d.nxa), the asset's TLS 1.3 handshake completed (sh+kex 27 ms, fin 1 ms) but NO transfer line followed, the fetch ladder fell to a TLS 1.2 flight that read no ServerHello inside its budget (t12 rc=-3), and the asset was reported status=0 bytes=-4 UNOBSERVABLE (fetch stage 4); the advert PNG decoded 728x90; VERDICT=UNOBSERVABLE unreadable-assets=1 -- the third state fired correctly and MAGIC-OK stays UNWITNESSED; the discriminating fact is that the declared asset is a multi-megabyte rig and the only asset the verifier had ever read was a 3.7 KB PNG, so the per-asset read budget is the suspect, diagnosis in the next row |
| 2026-09-05 | BR47 | measure | ROOT CAUSE OF THE MAGIC-OK MISS, MEASURED (2026-09-05): the declared asset /world/ref9d.nxa is 10,758,232 B (nx_fs size, exact=1) against the verifier's fixed PV_CAP of 8,388,608 B, so pv_check_asset's nx_https_fetch_follow returns -NX_FF_GET and the asset reads UNOBSERVABLE -- the EXACT seed-san.vrm class (10,917,800 B) the source already names in a comment; the third state fired correctly, this is not a lie, it is a fixed buffer cap that must be guessed, which the estate's own law forbids. A browser-grade verifier that only needs the MAGIC BYTES (NXANIM01, 8 bytes) must NOT read the whole 10 MB body -- the SOTA fix is a head-range read (nx_https_fetch_range, first 64 KB), which fits every asset, is resource-excellent, and is what a real engine does for media heads; this completes BR47's MAGIC-OK half |
| 2026-09-05 | BR47 | queue | HEAD-RANGE VERIFICATION SOURCE-LANDED (2026-09-05): nx_page_verify.nx 46847 -> 49455 B in four sequential CAS-verified edits -- PV_HEAD_CAP 65536 (the fetch spine's own padding unit NX_MAGIC_65536, not a fresh number), PV_HTTP_PARTIAL 206 and PV_HTTP_OK 200 named, static PV_HEADVER, and pv_check_asset's n<0 branch now re-fetches the asset head through nx_https_fetch_range and counts an NXANIM01 head as NXA MAGIC-OK VERIFIED-BY-HEAD (separate axis, printed verified-by-head=), a head without known magic stays UNOBSERVABLE, a head that cannot be read keeps the old line; recipe to finish: nx_sov_build_run nx_page_verify --build-only --debug, nx_filecopy the _build artifact to nx_page_verify.sov.elf.new, nx_contentdiff live vs staged (expect only gains), nx_behaveprobe, /api/promote by sha, nx_offc_install, then nx_page_verify https://nishifamily.com/world/rigview must read verified-by-head=1 unobservable=0 VERDICT=GREEN -- the before/after on the live rig IS the bite pair (UNOBSERVABLE measured twice before the edit) |
| 2026-09-05 | BR47 | measure | HEAD-RANGE RETRY LIVE, AND IT MOVED THE BLOCKER ONE LAYER DOWN (2026-09-05): nx_page_verify rebuilt (623400 B sha c47b0baa, contentdiff strict superset +4, behaveprobe live rc=3 vs staged rc=3 with 174 more bytes), PROMOTED prev=1, offc; live run on /world/rigview: the retry fired, its TLS 1.3 handshake completed on the pinned edge (sh+kex 20 ms fin 1 ms), and the GET stage failed with NO status ( head-range status=0 bytes=-4), so the page still reads verified-by-head=0 unobservable=1 VERDICT=UNOBSERVABLE; a status of 0 after a good handshake means no HTTP response was parsed, which is the overflow signature -- the edge answered the Range request with the whole 10 MB body and the spine's completing reader fails on overflow instead of handing back a prefix; the verifier lost nothing and gained one honest measurement per asset, but MAGIC-OK on a rig over 8 MB now needs either an edge that honours Range on static assets (206 + Content-Range) or a bounded-prefix reader in the fetch spine, and neither exists today -- declared as the successor rung, not folded into BR47 |
| 2026-09-05 | BR49 | queue | HANDED TO THE TRAFFIC OWNER (2026-09-05): PM intake 1788634653 carries the measurement (Range ignored by the static door, TLS handshake good, reader overflow with no status), the incumbent to compose (nx_media_server's Accept-Ranges + Content-Range emission, nx_audio_serve_gate's 4-11 range proof shape, Content-Range PRESENT in 26 sites by nx_absent) and the done-rule; a front-door daemon deploy through the health-checked /api/deploy is an operator decision, so this lane ships the seat half (BR48) instead |
| 2026-09-05 | BR48 | queue | BOUNDED-PREFIX READER SOURCE-LANDED (2026-09-05): nx_https_get_complete.nx -- nx_https_req_complete now delegates to _gc_req_core(prefix_ok=0), new nx_https_req_prefix delegates with prefix_ok=1, and the record that crosses the cap is copied up to the cap, sealed TRUNCATED (announced) and returned instead of NX_HTTPS_GC_BUF_OVERFLOW; nx_https_fetch_follow.nx -- nx_https_fetch_range delegates to _ff_range_core(prefix_ok=0), new nx_https_fetch_head delegates with 1, same signature; nx_page_verify's head-range retry now calls nx_https_fetch_head; every existing caller keeps byte-identical behaviour by construction (additive extraction, the shape this file family already used on 2026-07-04); recipe: sovereign debug build of nx_page_verify compiles the closure, contentdiff + behaveprobe on a completing consumer (nx_https_get) prove the old path unchanged, promote by sha, live rigview must read verified-by-head=1 |
| 2026-09-05 | BR48 | land | BOUNDED-PREFIX READER LIVE AND WITNESSED ON THE RIG (2026-09-05): nx_page_verify rebuilt through the sovereign lane (624592 B sha 3384269e), contentdiff lost exactly one run -- the nx_https_fetch_range symbol name the verifier no longer references, lost_other=0 -- and gained 4, behaveprobe live rc=3 vs staged rc=0, PROMOTED with allow_capability_loss=yes prev=1, offc; live run on https://nishifamily.com/world/rigview: the retry's prefix reader announced nishi-xfer TRUNCATED expected=10759112 got=139264 short=10619848, head-range status=200 bytes=65536 (the static door ignored Range and answered the whole body -- BR49's measurement, now from the 200 itself), NXA MAGIC-OK VERIFIED-BY-HEAD, checked=2 declared-assets=1 unobservable=0 verified-by-head=1 broken=0 VERDICT=GREEN; the page (49751 B cl-stop) and the advert PNG (3708 B DECODE-OK) went through the completing path with prefix_ok=0 and read identically to the previous binary, the in-run control for the extraction; the neg-control in BR48's done-rule (a head with no known magic stays UNOBSERVABLE) is exercised by the code path but not yet by a gate fixture -- owed, named here |
| 2026-09-05 | BR47 | land | MAGIC-OK HALF WITNESSED (2026-09-05): with BR48 live the declared rig on /world/rigview reads NXA MAGIC-OK VERIFIED-BY-HEAD and the page VERDICT=GREEN, the before/after on the live subject being UNOBSERVABLE (measured three times: pre-edit, first head-range cut, and the fetch_range cut) -> GREEN; BR47's done-rule is met on the mechanical side: the verifier fetches what the page declares (declared-assets=1) and proves it by its bytes; referee grade + operator ACCEPT owed |
| 2026-09-05 | BR48 | measure | THE COMPLETING PATH IS PROVEN UNCHANGED, NOT ASSUMED (2026-09-05): nx_https_truncation_gate -- the spine's own gate for the refuse-on-overflow law -- rebuilt through the sovereign lane on the new _gc_req_core (35251 B sha b6b8e852, up from 31411 B), behaveprobe live-vs-staged: live_rc=0 other_rc=0 1590 B both sides first_diff_off=-1 IDENTICAL STRONG; promoted so the served gate matches its source; together with the rigview run's page and PNG fetches this is two independent witnesses that prefix_ok=0 callers kept byte-identical behaviour, while the prefix reader announced its truncation on the only call that asked for it |
| 2026-09-05 | BR48 | queue | THE BITE PAIR SOURCE-LANDED IN THE VERIFIER'S OWN GATE (2026-09-05): nx_page_verify_gate.nx 16266 -> 22885 B -- at setup it writes two SPARSE fixtures under sites/nishifamily/render3d/ at the live rig's measured size (PVG_BIGHEAD_BYTES 10758232, lseek END check so a roster run never rewrites them): negctl_bighead_magic.nxa (head NXANIM01) and negctl_bighead_nomagic.nxa (zero head), plus two pages declaring them by meta name=nishi-model; teeth T15 fixture-reached-the-condition (both on disk at the declared size), T16 POSITIVE CONTROL (magic page GREEN with VERIFIED-BY-HEAD and verified-by-head=1), T17 neg-control (no-magic twin exits 3 with the no-known-magic line and verified-by-head=0), T18 never-RED-on-nomagic-head, T19 gv_bite pair; first sovereign build refused by admission (run queue 17/8), paced re-issue; recipe: build, stage, behaveprobe (other_rc must be 0 with 19/19), promote by sha, offc, then the roster carries it |
| 2026-09-05 | BR48 | retract | THE GATE I PROMOTED CRASHES, AND THE PROBE THAT CLEARED IT MEASURED THE WRONG RUN (2026-09-05): nx_page_verify_gate 4e88f8d4 (44700 B) was promoted on contentdiff GREEN strict-superset + behaveprobe live_rc=0 other_rc=0, then the promoted binary died SIGSEGV after T8 at 0x405531 touching 0x40b09a -- 154 bytes PAST the mapped end of its own image (offset 45210, page end 45056) -- before any new tooth printed; the fixture directory held none of the bighead files, so the probe's rc=0 with 300 FEWER output bytes than live cannot have been a run of this binary's main to completion (the discrepancy was visible in the probe receipt and I read it as unexplained instead of as disqualifying); MECHANISM: pvg_has exits its inner loop with k = k + 1000 and then re-reads lit[k] -- the cursor-sentinel over-read nx_srclint hunts -- latent in the LIVE gate for weeks and armed the moment new literals moved one tooth string within 1000 bytes of the image end; FIX: pvg_has bounded by the literal's measured length with break, source-landed; the lesson is the estate's own: a probe whose output SHRINKS after teeth were ADDED is a RED, not a curiosity -- promote refused until the tooth count is read |
| 2026-09-05 | BR48 | land | BITE PAIR LIVE ON THE EDGE, 19/19 (2026-09-05): nx_page_verify_gate fb6105b8 (51736 B, debug flavour, pvg_has rewritten with a bounded loop) PROMOTED prev=1 and offc-installed, replacing the crashing 4e88f8d4; behaveprobe live_rc=0 (the crasher, misreported -- debt filed on nx_behaveprobe) other_rc=0 other_bytes=4088 vs 2675, and the INDEPENDENT witness that the setup ran was the fixture pair appearing on disk at exactly 10,758,232 B each; the promoted run via nx_job_run: T15 fixture-reached PASS, bighead-magic exit=0 T16 PASS (VERIFIED-BY-HEAD, verified-by-head=1, GREEN), bighead-nomagic exit=3 T17 PASS (verified-by-head=0, no-known-magic line), T18 never-RED PASS, T19 gv_bite BITE-PROVEN, NX-PAGE-VERIFY-GATE passed 19/19 verdict=GREEN; BR48's done-rule is met both directions on permanent published fixtures the gate maintains itself; follow-up source-landed (fixture paths joined onto the subject's dirname via PVG_ROOTP/pvg_abs so a probe forked from buildroot cannot write the fixture where no edge serves it) awaiting one more build and promote; referee grade + operator ACCEPT owed |
| 2026-09-05 | BR48 | land | GATE PATHS ANCHORED ON THE SUBJECT, LIVE 19/19 (2026-09-05): nx_page_verify_gate 4351bd6a (52608 B, debug) -- fixture paths joined onto pvg_dirname(elf) through PVG_ROOTP/pvg_abs so a roster beat, a probe or a seat forking from any cwd writes and reads the fixtures where the edge serves them -- contentdiff strict superset (+1 symbol), PROMOTED prev=1, offc-installed; promoted run via nx_job_run: T15 found both fixtures through the derived path without rewriting them, T16 PASS, T17 PASS, T18 PASS, T19 BITE-PROVEN, NX-PAGE-VERIFY-GATE passed 19/19 verdict=GREEN; BR47 and BR48 are complete on the mechanical side with permanent bite pairs on the live edge; open on this thread: BR49 (traffic owner, intake 1788634653), debt 1788635942 (nx_behaveprobe reports rc=0 for a signal-killed subject), referee grade + operator ACCEPT rows |
| 2026-09-05 | BR48 | retract | THE PROBE DEFECT WAS A STALE BINARY, NOT A MISSING RULE (2026-09-05): debt 1788635942 framed nx_behaveprobe as mapping a signal to rc=0; reading the source shows the estate fixed exactly that on 2026-08-25 (wait_status_rc: a signal death reads 128+signal, the crash guard exits 139, nx_waitrc_gate proves both) and tr_run_capture already composes it -- but the SERVED probe lacked the tool_run diagnostic strings added 2026-08-28 (contentdiff: candidate gained NX-EXEC-FAILED and the crash-guard lines, 21 runs, nothing lost), so it predated the rule; rebuilt through the sovereign lane (26274 B sha 0dd7d287), PROMOTED prev=1, offc-installed; the lane-flavour size drop (29237 -> 26274) is the measured 6-17 percent band, not a loss; PROOF OWED and being built: nx_sigfixture, a registered subject that dies by a named signal on itself (SIGTERM for a true signal death, exit <code> as the control arm), so any live ruler can be asked how it reads a signal death instead of trusting its source; first build refused by admission, paced |
| 2026-09-05 | BR48 | measure | THE PROBE IS PROVEN, NOT ASSERTED (2026-09-05): nx_sigfixture built (16316 B sha 357085ce), PROMOTED, REGISTERED (callable), offc, twin staged; nx_behaveprobe nx_sigfixture 15 -> live_rc=143 other_rc=143 (a true SIGTERM death read as 128+15 on both sides; the only byte difference is the printed pid), nx_behaveprobe nx_sigfixture exit 7 -> 7/7 IDENTICAL (the control arm); debt 1788635942 closed with a superseding correction record naming the false mechanism (a mapping defect) and the true one (a served ruler older than the estate's own 2026-08-25 rule); lesson: a stale copy of a correct instrument is indistinguishable from a broken one, and the only cure that survives is a referee that forks the LIVE ruler against a subject that dies by signal -- owed as nx_behaveprobe_gate, spend-gated next |
| 2026-09-05 | BR48 | land | THE PROBE THREAD IS CLOSED WITH A REFEREE (2026-09-05): the ruler defect this rung surfaced is now proven fixed and permanently watched -- nx_sigfixture + nx_behaveprobe self mode + nx_behaveprobe_gate 11/11 GREEN on the deployed binaries (details and the retraction on engineshift ES25); every later promote on this board is judged by a probe that names a signal death instead of hiding it |
| 2026-09-12 | BR6 | operator | operator-unstall-20260912: Resume Nishi Browser alongside Beach, Video and Search through existing MCP/API owners. Current installed nx_browser shot of published browser board succeeds (job 1789237041: html=538954B boxes=12362 computed_decls=54682 page_h=211792 vw=1000); this proves headless layout, not navigation or served interaction. Existing BR29 remains source-grounded: nx_browser owns br_layout/br_draw_fb/br_shot_png and imports no nx_browser_render; shot paint width remains 1000 independently of requested layout width. Acceptance: callable navigation, input, screenshot and retained-evidence workflow on the shared render core; same viewport and source bytes, per-engine structural comparison, visible nishifamily.com interaction, dated release record. Installed/private/deployed/user-verified states must remain distinct. Reuse BR6/BR29 owners, no duplicate browser service. |
Person · product · place — not yet measured for this domain
knowledge/compare/browser.ppp (rows surface|nishi or c1..c4|label|url|connect naming OUR live surface and each rival's front door), run nx_ppp_probe domain browser, and this section fills itself on the next beat: the same ruler on both sides — privacy and CX (third-party hosts, tracker classes, cookies, security headers), design and longevity (design hygiene, computed WCAG contrast, render-blocking resources, unsized media, script weight, theme and motion queries), findability (landmarks, skip link, on-site search, breadcrumb, headings, internal links).Mined from the field — review and competitive intelligence proposed to this board
Rows written by nx_intelmine_propose from nx_reviewmine_lib signals (Steam reviews under the exceeds / meets / mixed / does-not-meet rubric, the installed-title census) and routed here by capability_map.conf. DEFECT names a rival failing that a rung here answers; DEMANDED a capability buyers ask for and do not get; WE-DO-BETTER an exceed the reviews corroborate; THEY-DO-WELL a bar this board must meet; SHIPS a rival capability to match. A proposal is a lead, never a rung — it closes only when a rung with a gate lands, and nothing in this band changes a measured cell.
| Signal | Kind | Term | Title | Proposed rung | Evidence |
|---|---|---|---|---|---|
| SHIPS | engine | Chromium | DanceXR 1905510 | Web-runtime titles: DanceXR ships a Chromium runtime -- the Nishi browser as a game runtime door | fingerprint=installed-tree |
proposals 1|malformed rows 0 (counted, never rendered: a row that is not prop| with 10 fields)|read-capped 0
The field — discovered, not chosen
Rows written by nx_field_discover from browser.seeds: the industry's own lists (Wikipedia wikitext, GitHub topics, awesome lists) read mechanically, every candidate counted across seeds. The matrix columns above are a SEAT'S pick; this band is the population they were picked from, and the stats line measures one against the other. A rival here is a lead, never a verdict — it earns a column when its capabilities are read and pinned.
field|seeds=4|scanned=4|fetched=4|reused=0|failed=0|named=4|candidates=4|mentions=4|capped=0
rival|Chrome|1|1|col0-chrome|https://developer.chrome.com/docs/lighthouse/overview|named
rival|Firefox|1|1|col1-firefox|https://endoflife.date/firefox|named
rival|Ladybird|1|1|col4-ladybird|https://ladybird.org/|named
rival|Servo|1|1|col5-servo|https://servo.org/wpt/|named
| Rank | Rival | Seeds | Mentions | First seed | Kind | Link |
|---|---|---|---|---|---|---|
| 1 | Chrome | 1 | 1 | col0-chrome | named | https://developer.chrome.com/docs/lighthouse/overview |
| 2 | Firefox | 1 | 1 | col1-firefox | named | https://endoflife.date/firefox |
| 3 | Ladybird | 1 | 1 | col4-ladybird | named | https://ladybird.org/ |
| 4 | Servo | 1 | 1 | col5-servo | named | https://servo.org/wpt/ |
field candidates 4|shown 4 of 4|matrix columns in the field 4 of 6|discovered rivals with no column 0|malformed rows 0 (counted, never rendered)|read-capped 0
Gaps from the record — what the estate does that no board carries
The record census (nx_goalmap record) reads the invoked-tool population and every plan queue row and files each organ or directive that NO matrix, plan or gates row names. A row here is a callout the boards missed: adjudicate it onto a board or declare it infrastructure. Census state BLIND (age 74262 s), sources read 4 of 7 declared — a BLIND census is a FLOOR: unread sources can only add rows.
| kind | name | board | source | evidence |
|---|---|---|---|---|
| directive | nx_font_full | browser | plan-queue | rung=BR26 |
| directive | nx_browser_render_shot | browser | plan-queue | rung=BR26 |
| directive | nx_audio_serve_gate | browser | plan-queue | rung=BR49 |
| directive | nx_https_req_prefix | browser | plan-queue | rung=BR48 |
| directive | nx_https_fetch_head | browser | plan-queue | rung=BR48 |
rows shown 5|this board's directives 5|estate-wide un-boarded organs 492 (listed in full on /compare/ecosystem)|census rows 611|malformed 0 (counted, never rendered)
References
- [lighthouse26] Chrome for Developers, Lighthouse overview: an open-source automated tool for improving the quality of web pages -- audits for performance, accessibility, progressive web apps, SEO and more, run against any web page, public or requiring authentication. publisher · read in our library
knowledge/fetched/cmp_browser_lighthouse-overview.html· pinha3a5e253981908f1abd751e81b8f5c3c0420c9cb221e475c8d23e094d686aef8· accessed 2026-09-02 · vendor-docGrounds: The field's page-quality audit (performance, a11y, SEO) that the sovereign page audit rows grade against: nx_uiq_perf is its static Core-Web-Vitals half, the runtime half is a watch. - [webpagetest26] WebPageTest (catchpoint/WebPageTest on GitHub): the open-source web performance testing platform -- waterfalls, filmstrips, Core Web Vitals, real browsers at real connection profiles. publisher · read in our library
knowledge/fetched/cmp_browser_webpagetest-readme.html· pinh8c324d0177ee6ada6ae444582f2c4b3b46dffeed0219090d6e40b30fbfddc0b6· accessed 2026-09-02 · source-readGrounds: The synthetic-lab model (filmstrip + waterfall + connection profiles) the browser lab rung composes into ONE sovereign run over a URL or saved bytes. - [speedometer3] BrowserBench Speedometer 3.0, About: a benchmark for web application responsiveness, jointly developed by Apple, Google, Mozilla and Microsoft, measuring simulated user interactions on representative web workloads. publisher · read in our library
knowledge/fetched/cmp_browser_speedometer3-about.html· pinh3938fdf99faa55c0ad180622492c275f5c33752d27094b831ebaf095e1fa6f16· accessed 2026-09-02 · published-standardGrounds: The cross-vendor responsiveness yardstick every incumbent publishes; our JS lane cannot yet run it (BR3), so the benchmark row is a watch with the dependency named. - [perfetto26] Perfetto documentation: system-wide tracing and profiling for Linux, Android and Chrome -- CPU scheduling, memory, power rails and counters, with trace processor SQL for analysis. publisher · read in our library
knowledge/fetched/cmp_browser_perfetto-docs.html· pinh35e5bf275d07712071f83a6e4883b588f0e6fd216f4eb1a80a9d68d26540dcca· accessed 2026-09-02 · vendor-docGrounds: The model for the sovereign trace and resource meter: per-frame timing, memory and power on ONE time spine; the estate already has nx_trace_emit (spans), nx_frame_budget and nx_energy_probe as the pieces. - [webvitals26] web.dev, Web Vitals: the Core Web Vitals -- Largest Contentful Paint, Interaction to Next Paint and Cumulative Layout Shift -- with their thresholds, measured in the field and in the lab. publisher · read in our library
knowledge/fetched/cmp_browser_web-vitals.html· pinh392e9890514a2fb1324180d47b6e1fdb652490f8db5a9ae678969c0b6b920739· accessed 2026-09-02 · vendor-docGrounds: Names the three user-facing metrics the sovereign render must report on its OWN paint timeline (LCP and CLS are computable from our layout and paint passes without any rival present). - [textrendertests26] unicode-org text-rendering-tests (GitHub): a test suite for text rendering engines -- shaping and positioning cases across scripts with expected SVG output, run by HarfBuzz, CoreText, DirectWrite and others. publisher · read in our library
knowledge/fetched/cmp_browser_text-rendering-tests.html· pinh908bed781bb57d6fc64a4d587d1f7c86ba2052228ff4e978a60b0f2879edecb9· accessed 2026-09-02 · datasetGrounds: The third-party shaping oracle for BR4 and typography R3: a sovereign shaper is graded against these expected outputs, never against itself. - [mediacap26] W3C Media Capabilities specification (editor's draft): decodingInfo and encodingInfo -- whether a given codec configuration is supported, smooth and power-efficient on the device. publisher · read in our library
knowledge/fetched/cmp_browser_media-capabilities-spec.html· pinhd8de115cd21548f78670e6a63f1b8a60692e99d75f31f2609b0e4a4881552e41· accessed 2026-09-02 · published-standardGrounds: The API shape for the sovereign codec-capability matrix: supported, smooth and power-efficient per configuration, measured by running our own decoders, not declared. - [test262-26] tc39/test262 (GitHub): the official ECMAScript conformance test suite. publisher · read in our library
knowledge/fetched/cmp_browser_test262-readme.html· pinh2125a3fdbc1554da6eb44c320222fd9dc259e2a3a4c124bd49605ebbea746407· accessed 2026-09-02 · datasetGrounds: The JS yardstick named in rung BR3 (Ladybird publishes 97.8 percent against it); the sovereign runner row grades js_eval on a pre-declared slice of it. - [mdnbcd26] mdn/browser-compat-data (GitHub): the machine-readable browser compatibility data behind MDN and caniuse-style tables, per feature per browser version. publisher · read in our library
knowledge/fetched/cmp_browser_mdn-bcd-readme.html· pinhd0f9e98584399bfe34c4149a899f91e876c0b0b4f161790e7a62202c4ec1548c· accessed 2026-09-02 · datasetGrounds: The compat ledger the sovereign column should be emitted INTO (one row per feature, measured by a gate, never hand-graded) so the estate's support matrix is comparable to the incumbents feature-for-feature. - [interop2026] web-platform-tests Interop 2026: README (20 focus areas + 4 investigation efforts: accessibility testing, JPEG XL, mobile testing, WebVTT); dashboard at wpt.fyi/interop-2026. publisher · read in our library
knowledge/fetched/cmp_browser_interop2026.html· pinhc68777bfc65a3b73f9eb65063bfd41ab4815547e643da8f2f0990458bf933f33· accessed 2026-08-18 · published-standardGrounds: THE 2026 yardstick the four vendors converge on: the WPT row's bar, the Interop-2026 CSS row and rung BR10 grade against these directories -- and the honest admission that we have never run any of it. - [interop2026-webkit] WebKit blog: Announcing Interop 2026 (published 2026-02-12) -- twenty focus areas, fifteen brand new and five carried over from Interop 2025; carry-over scores quoted on the page: Navigation API 92.3 percent, view transitions 90.8 percent overall (Safari 99.2), WebRTC 91.6 percent. publisher · read in our library
knowledge/fetched/cmp_browser_interop2026_webkit.html· pinhbc3d9ee371e1c4076db2d9b8656becaec32cac54b35e7ea96262eb3c9e5dbf76· accessed 2026-08-18 · vendor-docGrounds: Grounds the claim that the incumbents' 2026 work is convergence on shared focus areas (carry-overs still in the low-90s percent), not new engines -- so the parity target for the content web is stable. - [ladybird26] Ladybird (independent from-scratch browser and engine, 501(c)(3) non-profit): first Alpha for Linux and macOS targeted for 2026; Rust adopted as the C++ successor language with subsystems ported incrementally; July 2026 newsletter blurb lists private browsing and browser profiles; Changing How We Develop Ladybird (2026-06-05) changed how code enters the project ahead of shipping to real users. publisher · read in our library
knowledge/fetched/cmp_browser_ladybird26.html· pinha968ef3739623f923f551f6f4208da12185182563604453688685346323ac135· accessed 2026-08-18 · vendor-docGrounds: The from-scratch peer class this page now judges beside: the Ladybird column codes come from these reads; a sovereign engine that publishes no WPT number is behind this peer on the one axis peers can be compared on (the number itself is in the ladybird-apr26 row). - [ladybird-apr26] Ladybird. This Month in Ladybird -- April 2026: WPT score went from 2,003,537 to 2,067,263 (headline gain of 63,726 subtests, of which 53,207 came from the upstream import of test262, where Ladybird passes 52,045 -- a 97.8 percent pass rate); Rust now mandatory in the build. publisher · read in our library
knowledge/fetched/cmp_browser_ladybird_apr26.html· pinh342410a39c479d7f2fc818c12d6b49a2c0c53a0f0219e9120478708b1dd15bdb· accessed 2026-08-18 · vendor-docGrounds: The WPT-row bar for the independent-engine peer class (2.07M passing subtests) is quoted from this page, not from recall; it is the number rung BR1 has to publish beside. - [servo03] Servo (Linux Foundation Europe): WPT Pass Rates dashboard tracking focus areas and the whole CSS and WPT suites, with per-test drill-down on wpt.fyi; Servo is a web rendering engine written in Rust with WebGL and WebGPU support (page description). publisher · read in our library
knowledge/fetched/cmp_browser_servo_wpt.html· pinh00b094dfdf540cc1304a4bbfdcbdbd72113cb942a37b94d23e3812c80ef5ffbb· accessed 2026-08-18 · vendor-docGrounds: The second independent-engine column: Servo's WPT dashboard is the model for rung BR1 (publish per-directory pass counts on the compare page); its wgpu-backed WebGPU is why the canvas-GPU row codes Servo Yes (the gpuweb wiki lists it as in progress behind the dom.webgpu.enabled pref). - [chrome151] Google Chrome release history (endoflife.date): Chrome 151 stable 28 Jul 2026, 150 on 30 Jun, 149 on 02 Jun, 148 on 05 May, 147 on 07 Apr 2026 -- four-week cadence. publisher · read in our library
knowledge/fetched/cmp_browser_chrome_eol.html· pinh8da2ee3e05b4c04f7fca6cd6b4af3e0c8cad52c8000e8441f3e39cfb6a60788d· accessed 2026-08-18 · vendor-docGrounds: Names the oracle version behind the 2026-08-18 census (Chrome 151 headless) so the census row set and its oracle can be re-run against the same version, and dates the incumbent column. - [firefox153] Mozilla Firefox release history (endoflife.date): Firefox 153 stable 21 Jul 2026 (153.0.4 on 11 Aug), 152 on 16 Jun, 151 on 18 May, 150 on 21 Apr 2026; 153 is the current ESR. publisher · read in our library
knowledge/fetched/cmp_browser_firefox_eol.html· pinh72a0eaa4512d887faa88a4327f87cb477e756aeadcd1e44373a10fbe75ae80c5· accessed 2026-08-18 · vendor-docGrounds: Dates the Firefox column and the Waterfox/Firefox-family oracle the ratchet still owes (Firefox is the third oracle the operator named on 2026-07-28). - [bidi26] Firefox Developer Experience: CDP retirement in Firefox -- the CDP implementation removed in Firefox Nightly 141, so 141 is the first version where CDP cannot be used and WebDriver BiDi is the supported remote protocol; Puppeteer switched to BiDi for Firefox and removed its Firefox CDP support; Selenium APIs relying on CDP migrated to BiDi; Cypress drives Firefox over BiDi by default. publisher · read in our library
knowledge/fetched/cmp_browser_bidi26.html· pinha4a90b66248bc708bfdb7fe2b759bb4a7ff0343485be365f7a209d172ae0165b· accessed 2026-08-18 · vendor-docGrounds: Why the automation row is now named WebDriver BiDi rather than CDP, and why rung BR6 targets BiDi: the standard moved and the independent engines run their WPT through WebDriver servers. - [webgpu-status26] W3C GPU for the Web CG: WebGPU implementation status (living wiki page) -- Chrome 113 on Windows and Mac (121 on Android 12+), Firefox 141 on Windows and 147 on all macOS versions with Linux enabled in Nightly and expected to ship in 2026, Safari enabled by default in macOS Tahoe 26, iOS 26, iPadOS 26 and visionOS 26; Servo in progress behind a pref. publisher · read in our library
knowledge/fetched/cmp_browser_webgpu_status.html· pinh13147bcf021b934d075cde4594ee9f208e5188b38d49fa81c4fe5e05a376c013· accessed 2026-08-18 · vendor-docGrounds: Grounds the canvas-GPU row's incumbent codes (all four Best) and the honest Nishi absence: we EMIT WebGL2/WebGPU pages for other browsers but render no canvas GPU ourselves (rung BR13). - [otel-cicd26] OpenTelemetry CI/CD Observability SIG: semantic conventions for pipelines and tests (cicd.* / test.* attribute families, Semantic Conventions v1.27+). publisher · accessed 2026-08-19 · published-standardGrounds: The wpt time-spine row schema is MAPPED onto these conventions (documented in nx_wpt_runner's header) so an OTLP exporter is a future formatter, not a redesign -- the observability lane speaks the field's language from day one.
- [develocity-pts26] Gradle Develocity 2026.1: Predictive Test Selection (probabilistic, calibrated to catch over 99 percent of non-flaky failures) and Flaky Test Detection (fail+pass within one execution marks FLAKY; flaky tests always selected). publisher · accessed 2026-08-19 · vendor-docGrounds: The August-2026 test-intelligence bar the runner is measured against -- and the honest exceed: their selection is a calibrated BET, ours is content-addressed EXACT (same engine sha + corpus sha cannot differ) because the engine is bit-deterministic; their flakiness is managed, ours is REFUTED (--twice: any divergence is a real bug, exit 5).
- [wptfyi-runs26] web-platform-tests wpt.fyi: run history keyed by browser + version + revision over time, diffable across runs. publisher · accessed 2026-08-19 · vendor-docGrounds: The domain-native precedent for results-documented-against-time: our wpt_history.tsv rows (epoch, dir, engine sha, corpus sha, partition, duration, verdict) are the same model held sovereign, with regression exit codes a beat can alarm on.
- [ladybird-aug26] Ladybird newsletter 2026-08-31: 2,088,677 passing WPT subtests, StyleBench 116.3, core rendering moved to Rust, first alpha still targeted for 2026. publisher · read in our library
knowledge/fetched/cmp_browser_ladybird20260831.html· pinhf1a73460763f83f604894bad27a4220670dc81730e938e10816d5852945cbf79· accessed 2026-09-04 · vendor-docGrounds: WPT conformance delta series with manifest-diff attribution - [ladybird-devmodel26] Ladybird: Changing how we develop Ladybird (2026-06-05) -- public pull requests no longer accepted. publisher · read in our library
knowledge/fetched/cmp_browser_ladybirdchanginghowwedev.html· pinh6b59ef263b380351b790f593498191ca0f75e19f2e0d9646a83938faf8bb6af7· accessed 2026-09-04 · vendor-docGrounds: Contribution-provenance gate - [servo-jul26] Servo blog 2026-08-31, July in Servo: v0.5.0, multithreaded 2D canvas at plus 55 percent frame rate and minus 42 percent power per frame. publisher · read in our library
knowledge/fetched/cmp_browser_servojulyinservo.html· pinhd722378151e5349e1fb28d3cd496bfbb963ffb1f7cc6a74896ba9fb84879e6c5· accessed 2026-09-04 · vendor-docGrounds: Throughput and energy reported as a pair - [servo-jan26] Servo blog 2026-02-28, January in Servo: first engine to fully implement ML-KEM and ML-DSA in WebCrypto. publisher · read in our library
knowledge/fetched/cmp_browser_servojanuaryinservo.html· pinhd2e9a5c1f88bbe7e9f7b4ad0928c7c32ffc82c09688eb7f98f62af7fdba1d620· accessed 2026-09-04 · vendor-docGrounds: Post-quantum WebCrypto behind NIST known-answer tests - [chrome151-notes] Chrome 151 release notes: soft-navigation APIs for single-page applications ship. publisher · read in our library
knowledge/fetched/cmp_browser_developer151.html· pinh5c7ff57469ec788cd1951b263ec654bc554bc5ef7dd2f0965823b7c4b64df6b4· accessed 2026-09-04 · vendor-docGrounds: Soft-navigation attributor for SPA vitals - [jetstream3] BrowserBench: Announcing JetStream 3.0 (2026-03-31) -- post-MVP WebAssembly mandatory to score. publisher · read in our library
knowledge/fetched/cmp_browser_browserbenchjetstream3.html· pinh1b66ef83c2b797124883703b3d4e8733d336a9fac3334ae742eae20b932cd413· accessed 2026-09-04 · benchmarkGrounds: Post-MVP WebAssembly as the target, priced including compilation - [lighthouse13] Chrome for Developers: Lighthouse 13.0 -- audits consolidated into shared Performance Insights, no successor tool. publisher · read in our library
knowledge/fetched/cmp_browser_developerlighthouse130.html· pinh5a353a37edb1a593d3b0ed0b05542b789b7f55c1930afd1f76438160dd4067cd· accessed 2026-09-04 · vendor-docGrounds: Gate on metric values, never on audit identifiers - [webgpu146] Chrome for Developers: New in WebGPU 146 -- compatibility mode reaches OpenGL ES 3.1 class hardware. publisher · read in our library
knowledge/fetched/cmp_browser_developernewinwebgpu146.html· pinh25cc929d951ad6bcce1093bf8b062185110f8a8f5c60689020a3f55159222560· accessed 2026-09-04 · vendor-docGrounds: GPU feature-level ladder with a named fallback door - [wsg-ir26] W3C Draft Note, Web Sustainability Guidelines implementation report, 2026-08-20 -- no standard yet for page-load energy measurement. publisher · read in our library
knowledge/fetched/cmp_browser_w3dnotewsgir202608.html· pinh85afc9fa03a92721760a739ef92b4f04e4c6325acdef1d5be83365c6f14265a6· accessed 2026-09-04 · published-standardGrounds: Energy per unit of work with host and workload in the receipt - [wasm-core-tr] W3C WebAssembly Core Specification, all versions -- the TR track sits at 2.0 while 3.0 is the living de-facto target. publisher · read in our library
knowledge/fetched/cmp_browser_w3all.html· pinhd73bf555333fc18ac0a78d9864068810a8e6b137a05c2009d31d32eee1e646a3· accessed 2026-09-04 · published-standardGrounds: Living-spec build date pinned, TR level recorded separately - [browserbench-ann] BrowserBench announcements index: JetStream 3.0 (2026-03-31), Speedometer 3.1 (2025-03-31), Speedometer 3.0 (2024-03-11). publisher · read in our library
knowledge/fetched/cmp_browser_browserbenchannouncements.html· pinh3e3d00f605b066d23d6325edf92cb3b9d353c054b8c90ae720e44203d463559c· accessed 2026-09-04 · mirrored-indexGrounds: Benchmark-version ledger with an UNCONTROLLED label
generated by nx_swcompare_matrix (sovereign NishiLang organ) from knowledge/compare/browser.matrix · source checks show implementation presence; runtime and user-outcome evidence are reported separately · JavaScript supports page controls