Nishi Family › Compare › Emitted Charts and Boards

Nishi Compare · capabilities, evidence and delivery

Emitted Charts and Boards

Compare capabilities and delivery evidence. Source discovery, qualification, deployment and accepted outcomes are separate; an open contract names work still to verify.

Nishi compare emitters vs Datawrapper and Observable Plot and Vega-Lite and D3

Overview

The purpose, declared position and evidence coverage of this domain. Source presence and completed acceptance are different measures.

Where we are. Measured 2026-09-15. The compare emitter draws the position map (2D cut and 3D cube), the day spine, the leaderboard and every board table from data on every publish, and since today it fits each axis to the field of play, seats every label clear of every other mark and label, paints rivals in a colour-blind-safe palette on the page's own theme tokens, ships a title, a description and a data twin with every figure, and PRINTS ITS OWN READABILITY GRADE (label overlaps, off-canvas labels, unresolved labels, data spread) beside the picture and in api.json. The junk verdict was right: the same five players on the fixed 0 to 1000 canvas grade 9 defects; the fitted layout grades 0. Absent: measured text contrast per the WCAG 3 draft, small multiples, an annotation layer, an outside referee over the rendered pixels, export, print, and the JS door for hover and filter.

Where we need to go. Every chart the estate emits reads at a glance on any device and both themes, grades itself before it ships, is refuted from outside by a browser render judged on pixels, and every board inherits each improvement on the next beat because there is ONE layout ruler and ONE emitter.

The unit. 1 u = one measured session-leg. Calibration: DV1 (the layout ruler, its gate on the live junk cluster, the renderer rewrite for both views, the board data) landed in one leg on 2026-09-15.
Where we are: 8 open rungs. The ruler and the self-grade are in; the outside referee and the remaining field conveniences are the climb. Counts measured at emit below this line.
Cost to a refuted grade: 2 u. DV2 the outside referee over a real browser render, so the self-grade is a claim somebody else can kill.
Cost to field parity: 5 u. DV3 contrast, DV4 small multiples, DV5 annotations, DV6 export, DV7 print.
Cost to interaction: 2 u. DV8 the JS door with the zero-JS floor intact, DV9 the fleet ratchet.

Latest recorded release

2026-09-17 · DV11

SUBSTRATE ROWS OFF THE MAP (2026-09-17): cd_sym_is_substrate and cd_substrate_mask in nx_cdmap_lib (plan join by rung symbol and rungrole, _ABSENT_ prefix stripped), the mask applied in nx_swcompare_lib cdmap_pass_heading with rows_matrix and rows_substrate_excluded in api.json and a Rows sentence in the page, nx_cdmap_gate T14 to T14g (135 of 135 GREEN on the laptop, planted plan excluded=2); sources on the NAS, generators building; the day spine's rows column records the denominator change, so the momentum across the change is read beside it, never as movement

Release history and work log

Release entries describe recorded changes; they do not establish that every capability passed evaluation.

23 of 23 capability source symbols found|7 of them authored stronger-claims|0 open|coverage 1000/1000|adoption 23 full / 0 partial

Evidence profile — what the gaps on this board actually are

Unstamped. No evidence profile is published for this domain yet: run nx_swcompare_evidence datavis and this section fills itself on the next beat. No numbers are shown, deliberately — a zero-filled profile would read as a board with no gaps, which is the one wrong answer nobody would question.

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=1790082194 domain=datavis target_version=- rungs=11 done=11 open=0 finish=0 ranker=nx_dr_ocm

#StageRungPriorityDerivation
The rank artefact carries no rows: nothing open, or the ranker refused -- read its stamp above.

Declared roadmap — contract, acceptance, executor, effort

RungCloses withDefinition of done (pre-declared)ExecutorEst.
The layout ruler and the self-grade (DV1)cl_criticnx_chartlay_lib: domain-fit scales with nice ticks, integer scaling, collision-free label placement with leaders, the Okabe-Ito palette, and the readability critic; cdmap_pass composes it for both views and prints the grade. DONE-RULE: nx_chartlay_gate GREEN with the live junk cluster grading as junk and the fitted layout at zero defects, both trees identical, the emitter promoted and restaged, the search page showing the grade line with defects 0 on both views and api.json carrying readability_cut and readability_cubeOrgan1 u
Outside referee: a browser render judged on pixels (DV2)
after DV1
crg_judgeA real browser (the estate's own, or a foreign one used ONLY as an oracle outside the build path) renders the published page; an in-estate judge counts text overlaps and clipping on the rendered pixels and compares them with the self-grade. DONE-RULE: a planted overlap the self-grade cannot see (a font-metric drift) is caught by the referee and named; agreement on the live page is journaled per beat. This is the liar-killer for DV1, the same shape as BRIGHT for search [insight26]Organ2 u
Measured text contrast per the WCAG 3 draft (DV3)
after DV1
cl_contrastEvery label's colour against its rendered background is measured with a size-and-weight-aware contrast rule and the figure refuses to publish a label under the floor. The 10 September 2026 draft leaves the algorithm to be determined; the rung binds to the draft's Core requirement and names the algorithm chosen as DATA so it can move when the draft does [wcag3]Organ1 u
Small multiples over every registered axis pair (DV4)
after DV1
cdp_splomA scatterplot matrix of the registered axes (every pair as one small cut sharing the fitted domains), so a five-axis registry reads as ten small pictures instead of one cubeOrgan1 u
Annotation layer (DV5)
after DV1
cdp_annotateA board-authored note pinned to a mark or a region (knowledge/compare/<dom>.cdnotes) rendered by the emitter with the same placer so it never collidesOrgan1 u
Export SVG and PNG (DV6)
after DV1
cdp_exportA download of any figure as standalone SVG and as PNG rasterised by the estate's own rasteriser, never a foreign rendererOrgan1 u
Print stylesheet for boards (DV7)sc_print_cssA print media block in the emitted CSS so a board prints as pages: figures unbroken, tables paginated, chips and filters hiddenOrgan0.5 u
Interaction as a JS door over the zero-JS floor (DV8)
after DV1
cdp_interactHover reveals the values, legend toggles hide a player, brushing selects a region; the zero-JS render stays complete without it and the interaction trace is itself evidence a claim can be checked against [insight26]Organ1 u
Every emitted chart composes the one layout ruler (DV9)
after DV1
cl_adoption_gateA fleet gate that names every SVG-emitting function in the compare generators and refuses a chart that scales, places or colours by hand; a second ruler is the defect this board exists to preventOrgan1 u

Milestones

MilestoneRungsCumulative
M0 · The gradeDV11 u
M1 · Refuted from outsideDV23 u
M2 · Field parityDV3 DV4 DV5 DV6 DV78 u
M3 · Interaction and the fleetDV8 DV911 u

Ladder to SOTA

Two dated targets, and every rung's role toward them. Best in class is the proven, deployed leader today; the frontier is the research edge as of its month. Each target is dated by a sotabar row and judged against the current month by the bar-age ruler (FRESH, ATTESTED with the fallback month named, or refused). Each rung is substrate (what the target's own methods consume), an arm (a sovereign arm that triangulates without competing for the number), a contender (its done-rule is a number against the target) or superseded (kept as capability, retired as a claim), and carries the rungs it stands on.
best-in-class (T-BIC-DATAVIS), dated by SB-DATAVIS = 2026-09 UNATTESTED. Every emitted figure reads at a glance: fitted axes with numerals, no label collides with anything, a CVD-safe palette on both themes, a title, a description and a data twin, and a self-grade printed beside it that an outside referee can refute ref fidelity26
frontier (T-FR-DATAVIS), dated by SB-DATAVIS = 2026-09 UNATTESTED. A chart whose claims a reader or an agent can verify from what it shows, with an interaction trace that is itself evidence, rendered from one sovereign ruler on any device from a sensor to a supercomputer ref insight26
RungRoleTowardStands onWhy
DV1substrateT-BIC-DATAVIS-the one layout ruler every figure composes and the grade every figure prints
DV2contenderT-BIC-DATAVISDV1the outside referee that can refute the self-grade: without it the grade is a claim
DV3substrateT-BIC-DATAVISDV1contrast is the accessibility floor the September draft names
DV4armT-BIC-DATAVISDV1small multiples are how the field reads more than two variables
DV5armT-FR-DATAVISDV1annotations are the claims a reader verifies against the marks
DV6armT-BIC-DATAVISDV1export is table stakes for every rival named
DV7armT-BIC-DATAVIS-print is the last device on the ladder
DV8contenderT-FR-DATAVISDV1interaction traces are the frontier's evidence; the door must stay optional
DV9substrateT-BIC-DATAVISDV1one ruler or the board rots into hand-drawn charts again
RungCloses withDefinition of done (pre-declared)ExecutorEst.
Second ruler: the self-grade re-derived from the SVG and re-measured with real glyph advances (DV10)
after DV1
cr_criticnx_cdmap_referee_lib parses the published cdmap figure back out of the page (marks, labels, the plot frame), runs the same critic over the emitter's own widths (the heuristic must REPRODUCE the published readability_cut or the page and its api.json disagree) and again over real TrueType advances from a real sans face (Liberation Sans, SIL-OFL data, nx_ttf_fontlib) so the 560-permil-em estimate is checked against measured glyphs. DONE-RULE: the gate's planted label-on-label and label-on-mark defects fire under both rulers, the live page's self-grade is reproduced from its SVG, and the program's verdict on the live page is journaled. It is an ARM, not the pixel referee: a stand-in face, no kerning, no pixels -- DV2 stays the contenderOrgan1 u
RungRoleTowardStands onWhy
DV10armT-BIC-DATAVISDV1a second method class over the emitter's own claim; it triangulates the self-grade without competing for the number, and the browser-pixel referee DV2 remains the contender it hands its findings to
RungCloses withDefinition of done (pre-declared)ExecutorEst.
Substrate rows stay off the position map: a matrix row whose plan rung carries the role substrate is the estate's scaffolding, not a category feature (DV11)
after DV1
cd_substrate_maskThe centrality and distinctiveness map plots what customers perceive (Dawar and Bagga 2015). A kernel, a bound or an instrument the board itself marks substrate on its ladder is not a feature a rival could hold, so counting it inflated Nishi's distinctiveness and carried inherited rival cells onto the picture (measured 2026-09-17 on the search board: the engine's kernel rows sat on the customer map). nx_cdmap_lib.cd_substrate_mask joins each matrix row's symbol to its rung row and that rung's rungrole row, both DATA the board already declares; cdmap_pass drops the substrate rows before computing the points, announces rows_substrate_excluded beside rows in api.json and states it in the page prose. Done-rule: nx_cdmap_gate T14 proves the join on a planted plan (bare and _ABSENT_-prefixed symbols excluded, contender and role-less rungs mapped, an empty plan excludes nothing, a symbol prefix is not a join) and the live search api.json reports rows_substrate_excluded above zero with the map re-derived from the feature rows onlyOrgan1 u
RungRoleTowardStands onWhy
DV11substrateT-BIC-DATAVISDV1the map cannot read at a glance if scaffolding rows move the players; the board's own ladder data is the only honest row classifier
Ladder verdict. LADDERED. Targets, rung roles and bars are counted in the tables below, each partition re-derived beside its total. Bars read STALE against the current month 2026-10.
Ladder verdict, counted (17 rows, more than the 12-row disclosure bar)
Ladder verdict, counted
ClassCountNote
targets2sotatarget rows on the plan
best in class1targets whose class is best-in-class, by code
frontier1targets whose class is frontier, by code
undated0targets naming no bar that exists
bad class0targets whose class is neither word
duplicate0target ids an earlier row already carries
rungs11rung rows on the plan
placed11rungs carrying a rungrole row
unplaced0rungs with no role toward any target
bad role0rungrole rows naming a role the ladder does not know
bad target0rungrole rows naming a target no sotatarget row declares
rungs, summed11RECONCILED: the parts sum to the total 11
substrate4what the target's own methods consume
arm5a sovereign arm that triangulates without competing for the number
contender2its done-rule is a number against the target
superseded0kept as capability, retired as a claim
placed, summed11RECONCILED: the parts sum to the total 11
Bar freshness, counted
ClassCountNote
bars1sotabar rows on the plan
fresh0the bar month is the current month
attested0an older bar with a this-month barscan reporting no newer entry
stale0a this-month scan saw a newer month the bar ignores
unattested1nobody looked this month
malformed0a sotabar row missing a field
duplicate0bar ids an earlier row already carries
bars, summed1RECONCILED: the parts sum to the total 1
current month2026-10the month every bar is judged against
Treatment verdict. PARTIAL -- a declared row is unmet: the ranker refuses this board until every declared row verifies. The declared rows, the rungs and the evidence read are counted in the table below, the row partition re-derived beside its total. The complete effective clock view could not be read. Agent absence remains UNPROVEN; restore that observation before claiming completion.
Treatment verdict, counted
ClassCountNote
rows2treat rows declared on the plan
complete0every declared step verifies against the evidence
partial2a declared step is unmet
malformed0a treat row missing a field
rows, summed2RECONCILED: the parts sum to the total 2
rungs11rungs on the plan
undeclared9rungs with no treat row
allowlist bytes read207162the MCP allowlist the ranker reads
roster bytes read119881the gate roster
clock plane bytes read0the clock DESIRED plane
RungMCP rowAPI routePrimitiveWorkflowAgent beatVerdict
DV11nx_cdmap_gate present/api/tools/call name=nx_cdmap_gate presentnx_cdmap_lib presentboardship-datavis presentcdmappixjudge declaredPARTIAL
DV10nx_cdmap_referee present/api/tools/call name=nx_cdmap_referee presentnx_cdmap_referee_lib presentboardship-datavis presentcdmappixjudge declaredPARTIAL

Inspect a rung and its prerequisites

Declared nodes 11. 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 c6934c8511de9dddaa343a047d81b32c7f2973b755588e6eeeed6c983059af21. Target rows 2; role rows 11. Existing risks and release worklog retain their own scope; no node completion is inferred.

Runtime observation coverage: 0 of 11 rungs have current, identity-bound execution observations. Observation may report RED. Accepted completion remains unknown; source presence, qualification and deployment do not establish it.

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.

  1. DV1 — The layout ruler and the self-grade

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: cl_critic

    Acceptance: nx_chartlay_lib: domain-fit scales with nice ticks, integer scaling, collision-free label placement with leaders, the Okabe-Ito palette, and the readability critic; cdmap_pass composes it for both views and prints the grade. DONE-RULE: nx_chartlay_gate GREEN with the live junk cluster grading as junk and the fitted layout at zero defects, both trees identical, the emitter promoted and restaged, the search page showing the grade line with defects 0 on both views and api.json carrying readability_cut and readability_cube

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  2. DV2 — Outside referee: a browser render judged on pixels

    Prerequisites: DV1 (acceptance unverified)

    Contract: crg_judge

    Acceptance: A real browser (the estate's own, or a foreign one used ONLY as an oracle outside the build path) renders the published page; an in-estate judge counts text overlaps and clipping on the rendered pixels and compares them with the self-grade. DONE-RULE: a planted overlap the self-grade cannot see (a font-metric drift) is caught by the referee and named; agreement on the live page is journaled per beat. This is the liar-killer for DV1, the same shape as BRIGHT for search [@insight26]

    Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  3. DV3 — Measured text contrast per the WCAG 3 draft

    Prerequisites: DV1 (acceptance unverified)

    Contract: cl_contrast

    Acceptance: Every label's colour against its rendered background is measured with a size-and-weight-aware contrast rule and the figure refuses to publish a label under the floor. The 10 September 2026 draft leaves the algorithm to be determined; the rung binds to the draft's Core requirement and names the algorithm chosen as DATA so it can move when the draft does [@wcag3]

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  4. DV4 — Small multiples over every registered axis pair

    Prerequisites: DV1 (acceptance unverified)

    Contract: cdp_splom

    Acceptance: A scatterplot matrix of the registered axes (every pair as one small cut sharing the fitted domains), so a five-axis registry reads as ten small pictures instead of one cube

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  5. DV5 — Annotation layer

    Prerequisites: DV1 (acceptance unverified)

    Contract: cdp_annotate

    Acceptance: A board-authored note pinned to a mark or a region (knowledge/compare/<dom>.cdnotes) rendered by the emitter with the same placer so it never collides

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  6. DV6 — Export SVG and PNG

    Prerequisites: DV1 (acceptance unverified)

    Contract: cdp_export

    Acceptance: A download of any figure as standalone SVG and as PNG rasterised by the estate's own rasteriser, never a foreign renderer

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  7. DV7 — Print stylesheet for boards

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: sc_print_css

    Acceptance: A print media block in the emitted CSS so a board prints as pages: figures unbroken, tables paginated, chips and filters hidden

    Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  8. DV8 — Interaction as a JS door over the zero-JS floor

    Prerequisites: DV1 (acceptance unverified)

    Contract: cdp_interact

    Acceptance: Hover reveals the values, legend toggles hide a player, brushing selects a region; the zero-JS render stays complete without it and the interaction trace is itself evidence a claim can be checked against [@insight26]

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  9. DV9 — Every emitted chart composes the one layout ruler

    Prerequisites: DV1 (acceptance unverified)

    Contract: cl_adoption_gate

    Acceptance: A fleet gate that names every SVG-emitting function in the compare generators and refuses a chart that scales, places or colours by hand; a second ruler is the defect this board exists to prevent

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  10. DV10 — Second ruler: the self-grade re-derived from the SVG and re-measured with real glyph advances

    Prerequisites: DV1 (acceptance unverified)

    Contract: cr_critic

    Acceptance: nx_cdmap_referee_lib parses the published cdmap figure back out of the page (marks, labels, the plot frame), runs the same critic over the emitter's own widths (the heuristic must REPRODUCE the published readability_cut or the page and its api.json disagree) and again over real TrueType advances from a real sans face (Liberation Sans, SIL-OFL data, nx_ttf_fontlib) so the 560-permil-em estimate is checked against measured glyphs. DONE-RULE: the gate's planted label-on-label and label-on-mark defects fire under both rulers, the live page's self-grade is reproduced from its SVG, and the program's verdict on the live page is journaled. It is an ARM, not the pixel referee: a stand-in face, no kerning, no pixels -- DV2 stays the contender

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

  11. DV11 — Substrate rows stay off the position map: a matrix row whose plan rung carries the role substrate is the estate's scaffolding, not a category feature

    Prerequisites: DV1 (acceptance unverified)

    Contract: cd_substrate_mask

    Acceptance: The centrality and distinctiveness map plots what customers perceive (Dawar and Bagga 2015). A kernel, a bound or an instrument the board itself marks substrate on its ladder is not a feature a rival could hold, so counting it inflated Nishi's distinctiveness and carried inherited rival cells onto the picture (measured 2026-09-17 on the search board: the engine's kernel rows sat on the customer map). nx_cdmap_lib.cd_substrate_mask joins each matrix row's symbol to its rung row and that rung's rungrole row, both DATA the board already declares; cdmap_pass drops the substrate rows before computing the points, announces rows_substrate_excluded beside rows in api.json and states it in the page prose. Done-rule: nx_cdmap_gate T14 proves the join on a planted plan (bare and _ABSENT_-prefixed symbols excluded, contender and role-less rungs mapped, an empty plan excludes nothing, a symbol prefix is not a join) and the live search api.json reports rows_substrate_excluded above zero with the map re-derived from the feature rows only

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

    Runtime observation: UNKNOWN; outcome UNKNOWN; observed epoch -1. Declared owner: . Receipt , SHA-256 . Identity-bound observation is not accepted completion. Qualification and deployment remain unverified by this projection.

Learning and practice paths

No structured learning path is declared for this plan. Existing research, roadmap and worklog remain available above.

Rung dossiers — every record that bears on a rung, in one place

Joined by symbol, never typed. Each dossier is assembled on every publish from the rows this board already carries: the plan's rung row, the matrix row that carries its contract symbol (its status re-measured by the one symbol ruler), the gate the organ declares and the verdict the evidence referee recorded on its last run, the reference marks in the rung text, the design rows that name the rung and the work log filed against it. The capability matrix links each cell to its dossier and each dossier links back to its cell and forward to the rungs it stands on; a dependency naming no rung on this plan is written as UNRESOLVED rather than linked. Absences are named: NO-MATRIX-ROW, NO-GATE-DECLARED, UNRECORDED.
Gate verdicts: UNSTAMPED — no per-gate verdict artifact is published for this domain yet (nx_swcompare_evidence datavis writes it beside its stamp); every gate below reads UNRECORDED until it runs.
Gate declarations: knowledge/organ_gate.conf read from this working directory (1 rows) and from the estate root (196 rows); rows in both counted once: 0; declarations read: 197. Every declaration in either copy counts, so a stub beside the publisher can never hide the root.
DV1 The layout ruler and the self-grade · cell PRESENT · gate UNRECORDED
Contractcl_critic · executor Organ · 1 u · stands on nothing
Definition of donenx_chartlay_lib: domain-fit scales with nice ticks, integer scaling, collision-free label placement with leaders, the Okabe-Ito palette, and the readability critic; cdmap_pass composes it for both views and prints the grade. DONE-RULE: nx_chartlay_gate GREEN with the live junk cluster grading as junk and the fitted layout at zero defects, both trees identical, the emitter promoted and restaged, the search page showing the grade line with defects 0 on both views and api.json carrying readability_cut and readability_cube
Matrix cellReadability critic self-grade · runtime/nx_chartlay_lib.nx · PRESENT decl
Gatenx_chartlay_gate · UNRECORDED — no recorded verdict for this gate (it is declared for the organ but the evidence referee's last run did not record it: it is not on this board's gates map, or the referee has not run since the per-gate record shipped)
Work log2026-09-15 land Source-landed and laptop-proven: buildroot/runtime/nx_chartlay_lib.nx (12947 B, both trees), _hdl_build/nx_chartlay_gate.nx 48/48 GREEN on the laptop lane (junk_label_overlaps=9, junk_spread_permil=223, fit_spread_permil=690, fit_unresolved=0, fit_mark_overlaps=1 which is Mojeek and Marginalia genuinely 11 permil apart), cdmap_pass_heading rewritten in nx_swcompare_lib.nx (both views fitted, placed, graded; readability_cut, readability_cube and the fitted domains in api.json). NAS build, promote, restage and regen follow in this leg.
2026-09-15 lesson A fixed full-range canvas is a chart of the scale, not of the data: five players inside 21 percent of the width read as one blob. Fit the axes, print the numerals, and let a critic count what the eye cannot read -- then publish the count, because a grade nobody can see is a grade nobody can refute.
2026-09-15 land SHIPPED through the mgmt lane: nx_chartlay_gate NAS qualify 48/48 GREEN (jobs 1789487254 and 1789487425, the second after the chl_slen rename), /api/build nx_chartlay_gate 52360 B sha 56b9e0a3 PROMOTED + offc + registered + rostered; nx_leaderboard_gate NAS 34/34 GREEN, 52392 B sha eb45e31a PROMOTED + offc + registered + rostered; organ_gate.conf rows nx_chartlay_lib and nx_leaderboard_lib; the emitter nx_swcompare_matrix /api/build 758768 B sha 29c369e9 (src_path verified, src_stable 1), contentdiff BIDIRECTIONAL lost 38 of 2714 runs (14 permil: the old fixed-canvas renderer's two hard-coded fills, its lead paragraph, the overflow wrapper, aria-label, the grey marker, the currentColor frame, the retired cdp_fill symbol, one source path -- every one superseded by the fitted renderer) gained 185, PROMOTED with allow_capability_loss=yes naming that list, offc-installed, nx_restage RESTAGED buildroot/_offc 758768 B; nishi_compare_regen launched (job 1789487604). ⚠The first emitter build FAILED: cl_slen was defined twice in the closure (nx_catalog_lib owns cl_slen) -- a new lib's prefix must be checked against every lib in its consumers' closures, not only the registry; renamed chl_slen, both trees, both gates re-proven.
2026-09-15 measure nx_compare_rank datavis: BARFRESH bars=1 fresh=1 verdict=FRESH; LADDER targets=2 rungs=9 placed=9 verdict=LADDERED; rungs=9 done=1 open=8; critical path #1 DV2 (the outside referee), then DV4 DV5 DV6 DV8 DV3 DV7 DV9; DV1 reads LIB-UNCENSUSED (a library younger than the last eco-graph build), which clears on the next graph build. The DARK-CONTRACT labels on the open rungs are the ruler's known reading of an honest _ABSENT_ row on an existing organ file (nx_swcompare_lib, nx_swcompare_matrix, nx_chartlay_lib), not builds lost to darkness.
2026-09-15 measure FIRST PUBLISH READ BACK from sites/nishifamily/compare/search/index.html (659575 B) while the regen was still walking: the 2D cut renders axes fitted 700-1000 x 0-350 with seven and eight numerals, the means labelled 882 and 136, quadrant names centred, five seated labels (Marginalia to the left of its mark), grade line label overlaps 0, labels over marks 0, off-canvas 0, unresolved 0, mark overlaps 1, spread 690 permil; api.json carries readability_cut. The cube graded 0 label defects but mark overlaps 3 and spread 171 permil -- the critic was handed the whole 760x560 canvas while the cube occupies its own rhombus, and the 220 px unit left a third of the canvas empty. REFINED at once, both trees (nx_swcompare_lib 260820 B, hash 13b26574): the critic judges spread against the cube's own extent (left corner, z top, right corner, bottom corner) and the unit is 250 px with the origin raised to 290; rebuilt 758984 B sha 8dd44362, promote and restage follow the running regen so its fork copy is not swapped under it.
DV2 Outside referee: a browser render judged on pixels · cell LANDED · gate UNRECORDED
Contractcrg_judge · executor Organ · 2 u · stands on DV1
Definition of doneA real browser (the estate's own, or a foreign one used ONLY as an oracle outside the build path) renders the published page; an in-estate judge counts text overlaps and clipping on the rendered pixels and compares them with the self-grade. DONE-RULE: a planted overlap the self-grade cannot see (a font-metric drift) is caught by the referee and named; agreement on the live page is journaled per beat. This is the liar-killer for DV1, the same shape as BRIGHT for search [insight26]
Matrix cellOutside referee: browser render judged on pixels · runtime/nx_cdmap_pixjudge_lib.nx · LANDED decl
Gatenx_cdmap_pixjudge_gate · UNRECORDED — no recorded verdict for this gate (it is declared for the organ but the evidence referee's last run did not record it: it is not on this board's gates map, or the referee has not run since the per-gate record shipped)
Work log2026-09-15 lesson A REFEREE THAT SHARES THE EMITTER'S NUMBERS PROVES ONLY CONSISTENCY. DV10 re-derives the grade from the published bytes and swaps one input (glyph width) for a measured one, so it can refute a self-grade that the page itself contradicts or that real glyphs overturn -- and it cannot see what a browser draws. That is why DV10 is an arm and DV2 (crg_judge, a render judged on pixels) is still the critical path.
2026-09-15 land SHIPPED THE PIXEL REFEREE from the first byte: nx_cdmap_pixjudge_lib (crg_judge: every player label rasterised through the sovereign TrueType engine nx_ttf_fontlib, glyph coverage at or above 128 of 255 is ink, marks as disks, LL LM OFF MM counted on the pixels, DEFECTS = LL+LM+OFF slot for slot with the self-grade, a label's own mark skipped as cl_critic skips it), program nx_cdmap_pixjudge (page + api.json + two faces, optional journal row per run, verdict AGREE/DISAGREE/UNPROVEN exit 0/1/3, every offender named) and gate nx_cdmap_pixjudge_gate (34 teeth, runtime fixtures, the drift plant derived from the ruler's own reserve); NAS /api/build gate 95176 B sha d65ec2d7 PROMOTED + REGISTERED + offc, program 90184 B sha 94d42ec7 built and promoted by hash; sources byte-identical in both trees (lib ae69ed9c 14935 B, program 17d70b4f 8520 B, gate b68e4765 15155 B); the matrix row repointed from runtime/_hdl_build/nx_cdmap_render_gate.nx to runtime/nx_cdmap_pixjudge_lib.nx so the crg_judge watch can flip on the next emit
2026-09-15 measure GATE 34/34 GREEN FIRST RUN ON THE NAS with Liberation Sans: the planted font-metric drift is CAUGHT and named (six W at 13 px: heuristic reserve 43 px, real ink 72 px, label B placed at x=145 just past the reserve; the box ruler reads LL=0 on those bytes and the pixel ruler LL=1 with 43 shared ink pixels); a label on another player's mark reads LM=1 (11 ink pixels inside the disk) while 135 own-mark ink pixels are not a defect; ink past the frame reads OFF=1 (ink x1 754 against frame x1 730); no face, no figure and unpaired labels are named refusals never zero vectors; LIVE /compare/search: pixel defects 0 = published 0, AGREE. The done-rule's first clause is met by the plant; the second clause (agreement journaled per beat) is the clock row queued below
2026-09-15 queue PER-BEAT JOURNAL: a clock row running nx_cdmap_pixjudge over the served search page and api.json with the Liberation faces and the journal path knowledge/status/cdmap_pixjudge.jrnl, one pj row per day beside the compare beat; the foreign-browser oracle (a real browser screenshot read outside the build path) remains the cross-check of the sovereign rasteriser itself and is never a dependency
2026-09-15 measure BITE-PROVEN: nx_gate_bite nx_cdmap_pixjudge_gate over runtime/nx_cdmap_pixjudge_lib.nx (2 comparison sites): baseline GREEN 95176 B, site 0 SURVIVED (a measurement, not yet adjudicated: one of the two bounds on a guarded comparison, mutate the whole invariant before calling the tooth vacuous), site 1 KILLED on a compiling mutant, valid_mutants=2 not_reached=0 void_build_lane=0 killed=1, restore byte-identical 14935 B, both twins RESTORED, verdict GREEN. LIVE RUN of the program on /compare/search (nx_job_run nx_cdmap_pixjudge with the Liberation faces and the journal path): 5 labels 5 marks, ink 164/197/146/189/292 px, pixel LL=0 LM=0 OFF=0 MM=1 DEFECTS=0 = published 0, AGREE, the first pj row appended to knowledge/status/cdmap_pixjudge.jrnl (78 B). Registered nx_cdmap_pixjudge + nx_cdmap_pixjudge_gate, offc installed, cap ~/.nishi/pixjudge0915.cap, organ_gate.conf pairs, gateroster and datavis.gates rows, importers.tsv re-censused (nx_cdmap_pixjudge_lib importers=2 nonval=1)
2026-09-15 land PER-BEAT JOURNAL WIRED: clock row cdmappixjudge 86400 = nx_cdmap_pixjudge.elf over the served search page and api.json with the Liberation faces and knowledge/status/cdmap_pixjudge.jrnl (CLOCKJOB-PUT ok rows=187, desired state; the scheduler folds it at its next window init, verify on the live plane with nx_clockjob get cdmappixjudge and by the journal growing one pj row per day). The DV2 done-rule is met on both clauses once the live plane carries the row: the drift plant is caught and named, and agreement on the live page is journaled per beat. Still an ARM beside the self-grade, not the operator's acceptance: a foreign-browser screenshot read outside the build path remains the oracle that cross-checks the sovereign rasteriser itself
DV3 Measured text contrast per the WCAG 3 draft · cell LANDED · gate UNRECORDED
Contractcl_contrast · executor Organ · 1 u · stands on DV1
Definition of doneEvery label's colour against its rendered background is measured with a size-and-weight-aware contrast rule and the figure refuses to publish a label under the floor. The 10 September 2026 draft leaves the algorithm to be determined; the rung binds to the draft's Core requirement and names the algorithm chosen as DATA so it can move when the draft does [wcag3]
Matrix cellText contrast measured (WCAG 3 draft) · runtime/nx_chartlay_lib.nx · LANDED decl
Gatenx_chartlay_gate · UNRECORDED — no recorded verdict for this gate (it is declared for the organ but the evidence referee's last run did not record it: it is not on this board's gates map, or the referee has not run since the per-gate record shipped)
Work log2026-09-15 queue INCUMBENTS named by the ranker (ES28) before any build: nx_uiq_contrast (measured text contrast against the rendered background with a floor) and nx_a11y_check (per-label WCAG contrast with a size-aware rule) already exist -- DV3 COMPOSES one of them inside the layout ruler and binds the algorithm as data; a second contrast ruler is refused.
2026-09-15 land CONTRAST MEASURED, FLOORS AS DATA, REFUSAL WIRED (2026-09-15): nx_chartlay_lib gained cl_contrast (composes the estate's ONE WCAG 2.x kernel nx_uiq_color.uiq_ratio100, KAT black/white 21.00 and 767676/white 4.54), cl_blend, cl_contrast_floor (size-and-weight tiers), cl_contrast_ok and cl_contrast_conf, which reads knowledge/compare/contrast.conf -- algorithm
2026-09-15 lesson A COLOUR TOKEN AT PARTIAL OPACITY IS A DIFFERENT COLOUR, AND THE ONLY WAY TO KNOW ITS CONTRAST IS TO BLEND IT OVER THE SURFACE IT SITS ON AND MEASURE THE RESULT: the quadrant words had been drawn at 0.75 opacity for weeks and read as muted on purpose; the first measurement (cl_blend then uiq_ratio100) put them at 3.67 against a 4.50 floor, under AA by a margin no eye can judge. A floor that lives in a conf row is a bar a machine can read (contrast.conf: algorithm, floors, size tiers), and an algorithm the ruler does not implement falls to the defaults ANNOUNCED rather than silently, so the WCAG 3 draft can be adopted by editing one row when its measure is named. Refuse the classes a placer seats (labels, notes, quadrant words) and print the classes that are structure (ticks, axis titles): hiding a scale to pass a contrast bar is the blank-chart defect wearing an accessibility badge. Also: a word whose eight leader seats all collide needs a seat inside its OWN region (cl_reseat_in), not a ninth candidate on the same ring.
2026-09-16 land DARK REGISTER MEASURED (2026-09-15, the extension the DV3 land row queued): cdp_contrast now measures the same classes against the brand SSOT's DARK rows (bt_emit_dark_root_buf -> rs_theme_load -> the dark fg/mut/panel/bg) beside the light ones -- labels, quadrant words and axis titles as x100 ratios, the count of dark classes under their floors, and the dark tokens read -- printed in the figcaption ("dark theme: ...") and in api.json (contrast_dark_labels_x100, contrast_dark_quadrant_x100, contrast_dark_axes_x100, contrast_dark_under_floor, contrast_dark_tokens_read). ONE figure serves both themes through var() tokens, so a dark shortfall is printed and counted, never hidden: the refusal flags stay the light register's, and the remedy for a dark shortfall is a token in the brand SSOT. Promoted matrix d426dbd7 and sota 06f7a94a (rulers GREEN, no loss); the buildroot/_offc twins refresh once the running compare beat releases them, then search and datavis republish with the dark line.
DV4 Small multiples over every registered axis pair · cell LANDED · gate NO-GATE-DECLARED
Contractcdp_splom · executor Organ · 1 u · stands on DV1
Definition of doneA scatterplot matrix of the registered axes (every pair as one small cut sharing the fitted domains), so a five-axis registry reads as ten small pictures instead of one cube
Matrix cellSmall multiples (scatterplot matrix) · runtime/nx_swcompare_lib.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_swcompare_lib; declare nx_swcompare_lib TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-15 land SOURCE-LANDED (both trees byte-identical, nx_swcompare_lib.nx 273524 B sha 0842d11b, replayed onto the NAS under a four-hunk size ladder 260820 to 272936 to 273303 to 273455 to 273524): cdp_splom draws every pair of the five registered axes as one small cut (ten panels, three per row, 246 x 190 cells), each panel fitted to its own field of play through the one layout ruler (cl_domain and cl_scale_dom), first and last tick numerals, category means dashed, the same momentum-ringed marks as the cut at half radius (floor 3 px), no labels (the legend names the colours), the critic called with zero-size boxes and only its MARK terms read (MM per panel, spread per panel), a grade line summing MM and averaging spread, and cdp_splom_json emitting a splom block (panels, axes, mark_overlaps_total, spread_min_permil, spread_mean_permil, panels_list with x, y, mark_overlaps, spread_permil, fit_x_lo/hi, fit_y_lo/hi) into api.json; computed once before the branches so page and JSON carry the same numbers. NOT YET BUILT: the emitters compile after the R0 cross-encoder run frees the box (load 7.9 on 8 cores while it runs); the DV4 done-rule (ten small pictures from a five-axis registry, sharing the fitted domains) is claimed only when the regen publishes it and nx_page_verify reads GREEN
2026-09-15 land SHIPPED AND PUBLISHED: nx_swcompare_matrix rebuilt on the laptop lane in the NAS flavour (772208 B sha 5b333bcf, 594 subprograms, cdp_splom present), staged through the sovereign content door, nx_contentdiff live vs staged lost 1 of 2901 runs (the source path runtime/_hdl_build/nx_brand_tokens.nx, which the laptop lane resolves at runtime/ instead; every gained run is the splom section) so promoted with allow_capability_loss=yes naming that one path, offc-installed and copied byte-identical to buildroot/_offc (nx_filehash cmp identical=1); nx_cdmap_gate 71024 B sha 04d1c545 ONE-WAY-GAIN promoted and offc-installed, 93/93 GREEN on the laptop (the day spine written twice and read back); nx_chartlay_gate 48/48 GREEN. Scoped regen (nx_job_run nx_compare_regen buildroot ../sites/nishifamily/compare/ --domain-file knowledge/compare/regen.scope, since the launcher refuses the pinned row) published search index.html 695426 B (prev 661575) and api.json 144533 B with forkchecked=4 forkfresh=4 verdict=GREEN; the page reads 10 panels over 5 registered axes and api.json carries splom panels=10 axes=5 mark_overlaps_total=15 spread_min_permil=312 spread_mean_permil=549; nx_page_verify /compare/search VERDICT=GREEN a11y-issues=0. DV4 done-rule MET on the search page (browser rendering unverified; the pixel referee DV2 judges the cut, not the panels, so the panels are self-graded only). The scope file is read one domain per run, so datavis is regenerated in a second run.
2026-09-15 lesson A SCOPE FILE THAT READS ITS FIRST LINE ONLY IS A ONE-DOMAIN SWITCH WEARING A LIST'S NAME: two domains in the file published one, and the receipt named the one it took without naming the one it dropped. Read every line or announce the lines ignored; until the reader does, one domain per run.
DV5 Annotation layer · cell LANDED · gate NO-GATE-DECLARED
Contractcdp_annotate · executor Organ · 1 u · stands on DV1
Definition of doneA board-authored note pinned to a mark or a region (knowledge/compare/<dom>.cdnotes) rendered by the emitter with the same placer so it never collides
Matrix cellAnnotation layer (callouts on marks) · runtime/nx_swcompare_lib.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_swcompare_lib; declare nx_swcompare_lib TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-15 land SHIPPED AND PUBLISHED, from the first byte: the annotation layer is DATA (knowledge/compare/<dom>.cdnotes rows note
2026-09-15 lesson A NOTE IS A LABEL WITH A LONGER TEXT AND NO PLAYER OF ITS OWN: seating it through the same placer and counting it in the same critic is what makes it an annotation rather than a sticker; a second placer or an uncounted box is the junk verdict returning through a new door. The build refused twice before it ran, both times on a loop variable the render scope already owned as a let, so an emitter this large needs a distinct name per block, never a shared q.
2026-09-15 measure THE PIXEL REFEREE READ UNPROVEN ON THE FIRST ANNOTATED PAGE (scan labels=13 marks=5: the eight note lines carry the label fill), an honest refusal that would have read UNPROVEN on every daily beat; FIXED IN THE RULERS THE SAME HOUR: nx_cdmap_referee_lib cr_scan now skips text inside a cdnote group (cr_in_note over cr_rfind) and cr_scan_notes reads the groups as note lines with their note index; nx_cdmap_pixjudge_lib draws ONE mask per note over all its lines (ink box unioned) and counts a note in LL (against labels and other notes), LM (over ANY mark, a note owns none) and OFF, never in MM; the program names note offenders and prints notes= note_lines= and per-note ink. nx_cdmap_pixjudge_gate 34 to 49 teeth (T9: pairing kept, one note of two lines scanned, ink drawn, a clear note adds nothing, a note on the Mojeek label reads LL=1 while the players-only box ruler reads 0 as its named neg-control, a note over the Nishi mark reads LM=1, no notes reads 0 groups) GREEN on the laptop and on the NAS with the live page AGREE; nx_cdmap_referee_gate 44/44 on the NAS. All four binaries contentdiff ONE-WAY-GAIN lost 0, promoted and offc-installed (pixjudge 100432 B b16834c4, its gate 106736 B 9bcdaae8, referee 66544 B 2b3f2567, its gate 85200 B a0b446d4); sources landed in both trees. LIVE /compare/search re-judged: labels=5 marks=5 notes=2 note_lines=8, note ink 1342 and 1451 px, pixel LL=0 LM=0 OFF=0 MM=1 DEFECTS=0 = published 0, verdict AGREE; the DV10 referee AGREE (the heuristic reproduces the published grade, the metric critic agrees).
2026-09-15 lesson A NEW FIGURE ELEMENT IS A NEW CLASS FOR EVERY REFEREE: the emitter grew a layer and both rulers went blind or unproven in the same instant, so an emitter feature ships with its referees or the daily agreement journal decays into UNPROVEN and nobody is alarmed. The fixture that proved the note-on-mark tooth first read LL=1 because the planted note also crossed the Nishi label: read the second defect before blaming the ruler.
DV6 Export SVG and PNG · cell LANDED · gate NO-GATE-DECLARED
Contractcdp_export · executor Organ · 1 u · stands on DV1
Definition of doneA download of any figure as standalone SVG and as PNG rasterised by the estate's own rasteriser, never a foreign renderer
Matrix cellExport SVG and PNG · runtime/nx_swcompare_lib.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_swcompare_lib; declare nx_swcompare_lib TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-15 queue INCUMBENTS named by the ranker: nx_render_svg (standalone SVG emitter), nx_figures_page + nx_figure_gate (figure export and its referee) and nx_eco_graph_png (SVG rasterised to PNG by the estate's own renderer) -- DV6 wires the position-map figures through those, never a new rasteriser.
2026-09-15 land EXPORT SHIPPED: nx_cdmap_raster_lib (the sovereign SVG-subset rasteriser: rect, circle, dashed line, polyline with the momentum arrow, polygon, text incl. the -90 rotation, halo and opacity, cdnote groups; :root tokens resolved; every glyph through nx_ttf_fontlib; PNG through nx_png) + nx_cdmap_export program (PROMOTED f607033b, registered) + nx_cdmap_export_gate 56/56 GREEN on the laptop (PROMOTED 14947d00, registered, rostered) + cdp_export in nx_swcompare_lib (the DV6 contract symbol) run as nx_swcompare_matrix <dom> export <dir> (PROMOTED b926c35b, allow_capability_loss on its own source-path run) which nx_compare_regen forks after every matrix page it publishes (PROMOTED ae4b1983, ONE-WAY-GAIN; exports= exports_absent= export_fails= on the summary, a failed twin never fails the page); the figcaption links cdmap.svg, cdmap.png and cdmap.export.json and api.json carries export_svg, export_png, export_receipt. The standalone SVG is the figure with xmlns declared and every var(--nx-color-*) resolved to the page's rgb; the PNG is twice the viewBox. Sources on both trees.
2026-09-15 lesson A SUBSET RASTERISER IS HONEST ONLY IF IT COUNTS WHAT IT SKIPS: the receipt carries rect, circle, line, polyline, polygon, text, notes, arrows, rotated, rotated_skipped, skipped and unresolved_colors, so a partial render reads as partial instead of as a picture of the renderer's blind spots. And three of the first gate's 56 teeth failed on the seat's arithmetic, not the renderer's: a dash phase computed in canvas px against a scaled pattern, and two ink bands that crossed the gridline and the momentum path -- a pixel tooth must be placed where nothing else paints, and its expected value derived in the units the renderer uses.
2026-09-15 land TWO DEFECTS THE FIRST EXPORT SHOWED, FIXED IN THE EMITTER AND THE RASTERISER (2026-09-15): (1) the standalone SVG carried the page's NAMED HTML entities (– in both axis titles, · and → in the mark titles) which are parse errors in XML, so nx_cdmap_raster_lib now holds ONE entity table read by both the twin writer (named -> numeric character reference, – -> –) and the rasteriser (nearest ASCII: dashes to a hyphen, the middle dot to a period, the arrow to ->); nx_cdmap_export_gate 60/60 with T19g/T19h/T19i/T15b. (2) the HBR quadrant words were painted first and covered by whatever came later (a note box over CONVENTIONAL, a player label over MAINSTREAM on the live search map): nx_chartlay_lib gained cl_place_from(n, nfixed, ...) -- the same placer with the first nfixed boxes FIXED -- and cdmap_pass now seats the four words after every player label and note with those as obstacles (cdp_quad_at at the seat; quad_unseated printed beside the grade, 0 on datavis and search). nx_chartlay_gate 54/54 (T9..T9e incl. the unfixed neg-control). Promoted: nx_swcompare_matrix 391939d5, nx_swcompare_sota 6ef16d25, nx_cdmap_export e377bad5, nx_cdmap_export_gate 8f8cd3d6, nx_chartlay_gate 194fcf46; buildroot/_offc twins refreshed; datavis republished (exports=1, 0 unseated).
DV7 Print stylesheet for boards · cell LANDED · gate NO-GATE-DECLARED
Contractsc_print_css · executor Organ · 0.5 u · stands on nothing
Definition of doneA print media block in the emitted CSS so a board prints as pages: figures unbroken, tables paginated, chips and filters hidden
Matrix cellPrint stylesheet for boards · runtime/nx_swcompare_lib.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_swcompare_lib; declare nx_swcompare_lib TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-16 land PRINT SHEET SHIPPED (2026-09-15): sc_print_css in nx_swcompare_lib, the sc_theme_pass shape -- written once, called LAST by all five generators (matrix, sota, hub, compute, office) immediately before the style close, so order is the specificity and no importance hack is needed. The SSOT's light rows are re-selected under html,html[data-theme],:root:not([data-theme]) and the five grounds (bg, panel, soft, tint, codebg) made white; figures and cards break-inside:avoid; thead as table-header-group, rows unsplit, tables paginate; the sticky filter bar, filter and theme chips, skip link, header nav, map tooltip and selection line hidden; links print their target once, never inside the refs list. Gate nx_print_css_gate 36/36 laptop and 37/37 NAS with the live search page witnessed (promoted 03773c0b, registered, offc-installed, rostered, evidence row in datavis.gates beside new rows for the export and interact gates). Generators promoted: matrix 0c90dcc3 (ruler GREEN), sota 43687f6e (GREEN), hub 45f8d782 / compute c0255917 / office b2f8aa22 with allow_capability_loss -- their 12/16/16 lost runs are the plan section headings and table-open literals that moved into sc_heading_open and sc_plan_table_open weeks ago, every name still in the lib, the same re-encode the matrix and sota already carried; buildroot/_offc twins refreshed (regen forkfresh=4); search republished with the block. The DV7 board row was repointed from nx_swcompare_matrix.nx to nx_swcompare_lib.nx (it read DARK-CONTRACT until then).
2026-09-16 lesson A PRINT SHEET NEEDS NO IMPORTANCE WHEN IT IS EMITTED LAST: order is a specificity axis the lexer cannot forbid. The nx_cc string lexer refuses the bang byte, so the print block every generator writes immediately before its style close wins every equal-specificity tie by position, and the one selector that would have out-weighed it (the OS-dark block's :root:not([data-theme])) is matched at its own weight rather than beaten. The paper palette is the SSOT's light register re-selected, not a fourth hand palette, and its grounds are white because a background the printer will not paint is a surface the DV3 contrast measure would have lied about. Three generators had sat BEHIND the base lib for weeks (hub 164,872 vs 204,016 B, compute 59,823 vs 127,512 B) and read as CAPLOSS on rebuild for headings that had merely moved into helpers: a lib change is a fleet ship, and its stragglers are the census's BEHIND rows, never litter.
DV8 Interaction as a JS door over the zero-JS floor · cell LANDED · gate NO-GATE-DECLARED
Contractcdp_interact · executor Organ · 1 u · stands on DV1
Definition of doneHover reveals the values, legend toggles hide a player, brushing selects a region; the zero-JS render stays complete without it and the interaction trace is itself evidence a claim can be checked against [insight26]
Matrix cellInteractive hover and filter · runtime/nx_swcompare_lib.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_swcompare_lib; declare nx_swcompare_lib TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-15 land SHIPPED AND PUBLISHED: the interaction door is ONE inline script the compare base emits after the 2D cut (cdp_interact in nx_swcompare_lib; the matrix row repointed from nx_swcompare_matrix.nx to the lib so the contract names the file that declares it). Every mark, label and momentum path carries data-p; the legend swatches became buttons (aria-pressed) that toggle a player's mark, label and path; hover or keyboard focus on a mark reveals the values the emitter already wrote into its title, in a tooltip; dragging on the plot brushes a region whose players are listed in an output element with the bounds converted to permil on the cut axes through the SAME fit domains the page drew with, and the region is written into the URL hash as cdsel=xlo,xhi,ylo,yhi so the trace is shareable and re-applied on load; api.json announces interact_door. The zero-JS floor is intact: the figure, legend, notes and grade render without the script, the buttons are inert and the output empty. The lexer forbids a hash mark or a bang inside a literal, so the hash is built from its character code and every negation is a comparison. nx_cdmap_interact_gate (21 teeth: the fit domains and the frame inside the script, the hash-free trace key with a byte-count neg-control, the three interactions, the re-applied trace, the optional-door style, and on the NAS the live page: buttons 5 equal marks 5, one output, the door announced) GREEN on the laptop and on the NAS, promoted cccf02cd, registered, offc-installed; emitter 798944 B sha 17a05b80 contentdiff ONE-WAY-GAIN lost 0, promoted, offc-installed, buildroot/_offc byte-identical; scoped regen GREEN, page 702696 B, nx_page_verify GREEN a11y 0. The edge serves the page with NO Content-Security-Policy header (Content-Type, Content-Length, Connection, Cache-Control only, read through nx_https_get with headers), so the inline door is not blocked. SCOPE STATED: the estate proves the door's structure and numbers; a browser executing it is the oracle outside the path, and that witness (a real hover, click and drag) is owed before the rung is complete under the three-party law.
2026-09-15 lesson A DOOR OVER A FLOOR IS HONEST ONLY IF THE FLOOR IS SEEN WITHOUT IT: the buttons render and the output exists with the script off, and the gate reads the door's numbers back from the emitted bytes rather than trusting the emitter that wrote them. The header read was the cheap experiment that decided whether an inline script could run at all; ship no door before reading the policy the edge actually sends.
DV9 Every emitted chart composes the one layout ruler · cell LANDED · gate NO-GATE-DECLARED
Contractcl_adoption_gate · executor Organ · 1 u · stands on DV1
Definition of doneA fleet gate that names every SVG-emitting function in the compare generators and refuses a chart that scales, places or colours by hand; a second ruler is the defect this board exists to prevent
Matrix cellOne layout ruler across the fleet · runtime/_hdl_build/nx_chartlay_adoption_gate.nx · LANDED decl
GateNO-GATE-DECLARED — knowledge/organ_gate.conf carries no row for nx_chartlay_adoption_gate; declare nx_chartlay_adoption_gate TAB <gate> and the ship loop proves it and the verdict lands here.
Work log2026-09-15 queue THE FLEET POPULATION for the adoption ratchet, named by the ranker: nx_render_svg, nx_chart, nx_viz_chart, nx_batt_chart, _genealogy_chart, nx_mindmap, nx_figures_page -- every one an SVG emitter that scales, places or colours on its own today; DV9's gate censuses them and ratchets the count that compose nx_chartlay_lib upward, naming each offender.
2026-09-15 measure FLEET BASELINE for the adoption ratchet, nx_absent over buildroot/runtime: pattern <svg matches=149 coverage_complete=1 corpus_complete=1 (occurrences, not distinct files -- the organ lists 12 of 149, so the distinct-file count is UNMEASURED and the ratchet's first job is that partition). Every one of those sites scales, places or colours on its own today; nx_chartlay_lib has exactly one adopter (cdmap_pass in nx_swcompare_lib). The ratchet counts adopters up and names each remaining hand-drawn emitter; wiki graph (nx_wiki_graph), the ad banner logos (nx_ad_banner, nx_ad_emitter_grow) and the eco-graph renderers are the first population the census shows.
2026-09-16 land THE FLEET RATCHET SHIPPED (2026-09-15): nx_chartlay_adoption_gate (symbol cl_adoption_gate) censuses every function in the compare generators that writes an svg start tag and judges it by the ONE layout ruler: ADOPTER when it or its prefix family (the helpers sharing its name up to the first underscore) calls a ruler verb, HAND when none does, HAND-COLOUR when the family paints a fill or stroke with a literal rgb(); a decorative icon (aria-hidden) is counted never judged, an svg named in a comment is nothing, and a URL before the tag cannot hide it (comments are stripped outside string literals). Sources, ruler verbs and named exemptions are DATA in buildroot/knowledge/compare/cl_adoption.conf; an allow row exempts one function WITH a reason and reads STALE (RED) the moment that function stops being an offender, so the ratchet only tightens. Planted fixtures prove every class both ways (F0-F10d), then the live fleet: 11 sources, 441 functions, 2 chart emitters -- cdp_fig_open ADOPTER (family 49, 8 ruler calls), rs_svg_standalone HAND but ALLOWED as the twin writer whose geometry is judged at cdp_fig_open -- 1 icon (the gap map's nav glyph), 0 unallowed hand charts, 0 stale rows. 34/34 GREEN laptop; promoted dc593c93, registered, offc-installed, rostered, evidence row in datavis.gates. Named residual: the gap map's momentum bars are HTML divs sized by a percentage width, a chart by CSS the svg census cannot see -- the next widening of this ruler is a bar-width verb in nx_chartlay_lib and a conf row for HTML charts.
2026-09-16 lesson A FLEET RATCHET NAMES ITS OFFENDERS OR IT IS A NUMBER: the first measure of this rung (149 svg sites, one adopter) was a fleet COUNT, and a count cannot say which function to fix, cannot tell a chart from a nav icon, and cannot tell a re-emitter of an already-laid figure from a hand layout. The gate that closes the rung prints one line per emitter with its verdict and its remedy, exempts by a NAMED row that carries its reason and goes stale by itself, and derives its scope from a conf so widening it is a data edit. Also: a comment stripper that does not track string literals eats the tag after a URL on the same line and reports a real chart as nothing -- the planted adopter fixture carries exactly that line so the stripper cannot regress silently.
2026-09-16 land THE POSITION MAP DRAWS EVERY DAY, NOT THREE POINTS: each player's movement line on the four-quadrant map used to join first spine day, previous spine day and today, so from the fourth day on every day in between vanished and where a player is moving day by day could not be read off the picture; nx_cdmap_lib gained cd_spine_trail (every spine day before today, oldest first, one record per day with that day's values in the first-day slots, so the one axis rule cd_hist_axis_plot places a past day on any registered axis), and nx_swcompare_lib's cdmap pass computes the trail once per player and uses it for the fitted axes (every drawn day stays on the canvas), the cut polyline and the cube polyline (each tagged data-days) and api.json, where every position now carries trail:[[day, centrality, distinctiveness, breadth points, held, matrix rows], ...]; nx_cdmap_gate S9-S9k plus neg-control-trail-excludes-today, 127/127 GREEN, cross-identity: the trail's day two plots exactly where the history's previous day plots; promoted nx_cdmap_gate 61cc6430 and nx_swcompare_matrix 0fed31a9 (debug flavour matched to the incumbent, content ruler lost one run -- the cube polyline opening, now carrying data-days) into the serving root, nishihost _offc and buildroot _offc; qualified on the live search board before promote: every player's api.json position carries its 2026-09-15 spine row as its trail
2026-09-16 measure LIVE WITNESS OF THE DAILY TRAIL: full regen job 1789572844 with nx_swcompare_matrix 0fed31a9 finished REGEN published=249 fails=0 verdict=GREEN; https://nishifamily.com/compare/search/cdmap.svg serves every movement polyline tagged data-days='2' with one point per spine day plus today (Nishi 180,216 -> 235,212; the old three-point form repeated the first day as the previous day), and https://nishifamily.com/compare/search/api.json (200, 153,839 B) carries trail:[[20711,750,199,97,46,67]] for Nishi and the matching spine row for Mojeek, Brave, Google and Marginalia; the trail grows by one point per day on all 115 boards from here
DV10 Second ruler: the self-grade re-derived from the SVG and re-measured with real glyph advances · cell PRESENT · gate UNRECORDED
Contractcr_critic · executor Organ · 1 u · stands on DV1
Definition of donenx_cdmap_referee_lib parses the published cdmap figure back out of the page (marks, labels, the plot frame), runs the same critic over the emitter's own widths (the heuristic must REPRODUCE the published readability_cut or the page and its api.json disagree) and again over real TrueType advances from a real sans face (Liberation Sans, SIL-OFL data, nx_ttf_fontlib) so the 560-permil-em estimate is checked against measured glyphs. DONE-RULE: the gate's planted label-on-label and label-on-mark defects fire under both rulers, the live page's self-grade is reproduced from its SVG, and the program's verdict on the live page is journaled. It is an ARM, not the pixel referee: a stand-in face, no kerning, no pixels -- DV2 stays the contender
Matrix cellSecond ruler over the self-grade (SVG re-derivation plus real-font re-measurement) · runtime/nx_cdmap_referee_lib.nx · PRESENT decl
Gatenx_cdmap_referee_gate · UNRECORDED — no recorded verdict for this gate (it is declared for the organ but the evidence referee's last run did not record it: it is not on this board's gates map, or the referee has not run since the per-gate record shipped)
Work log2026-09-15 land SHIPPED, both trees: nx_cdmap_referee_lib.nx (10380 B), nx_cdmap_referee.nx (7209 B), _hdl_build/nx_cdmap_referee_gate.nx (15981 B). NAS: gate BUILT 83864 B sha 6b5e31a5 PROMOTED and registered; program BUILT 65632 B sha e9ac2a7d PROMOTED and registered. The gate's first run read 42/43: its own control T5 refused a plant I had placed over the label's OWN mark, which the critic skips by design -- the plant now sits on another player's mark and the own-mark semantics is pinned as T5b.
2026-09-15 measure LIVE, sites/nishifamily/compare/search: labels=5 marks=5 frame 70,30 to 730,460; real Liberation Sans advances vs the emitter's reserve -- Nishi (bold) 29 vs 36 px, Mojeek 39 vs 43, Brave 32 vs 36, Google 40 vs 43, Marginalia 55 vs 72 (delta -69 to -236 permil); heuristic LL=0 LM=0 OFF=0 MM=1 SPREAD=690 reproduces the published readability_cut exactly; metric DEFECTS=0 equals the published 0; verdict=AGREE. The estimate over-reserves on this face, so it cannot hide an overlap here; a narrower reserve or a wider face is the case the pixel referee owes.
2026-09-15 measure nx_gate_bite nx_cdmap_referee_gate over runtime/nx_cdmap_referee_lib.nx (2 sites): baseline GREEN 84280 B, cmp site 0 KILLED on a compiling mutant, valid_mutants=1 killed=1 not_reached=0 void_build_lane=0, restore byte-identical 10380 B, twin RESTORED, verdict=GREEN gate BITES; nx_page_verify /compare/datavis VERDICT=GREEN static 128566 B a11y-issues=0 (browser rendering unverified, that is DV2); nx_eco_graph_build re-run nodes=20914 edges=58945 files_scanned=20943 saved knowledge/store/ecograph_full so the DV1 and DV10 lib rows can leave LIB-UNCENSUSED on the next emit
2026-09-15 measure after nx_importcensus (asof=1789493461 rows=20914 has_nonval=3934 val_only=2748 orphan=14232 sum=20914 edges=58945) the scoped re-emit published datavis at 123597 B with LIB-UNCENSUSED states 0 and every library row LIB-WIRED: nx_chartlay_lib importers=3 nonval=2, nx_cdmap_lib importers=2 nonval=1, nx_cdmap_referee_lib importers=2 nonval=1 (first importer nx_cdmap_referee.nx), nx_leaderboard_lib importers=2 nonval=1; DV1 and DV10 cleared
2026-09-15 lesson rebuilding the eco graph does NOT flip a LIB-UNCENSUSED cell: the emitter reads knowledge/status/importers.tsv (nx_catalog_lib clb_load), a flat census nx_importcensus derives from the store, and that file was a day stale (asof 1789411173, nodes 20880) while the store already held 20914 nodes; the CWD hypothesis was refuted first by a positive control (search and ecosystem pages read LIB-WIRED from the same emitter); the scoped cap did not name nx_importcensus and the session cap was denied, so a cap was minted (nonce 1789493450) and banked at ~/.nishi/importcensus0915.cap
2026-09-15 queue MECHANISM OWED IN THE EMITTER: when knowledge/store/ecograph_full is newer than the asof of knowledge/status/importers.tsv the regen should refresh the census (fork nx_importcensus) or announce IMPORTERS-STALE beside every LIB state, so a new library never reads UNCENSUSED for a day because two beats disagree; today the recipe is nx_eco_graph_build then nx_importcensus then the scoped regen
DV11 Substrate rows stay off the position map: a matrix row whose plan rung carries the role substrate is the estate's scaffolding, not a category feature · cell PRESENT · gate UNRECORDED
Contractcd_substrate_mask · executor Organ · 1 u · stands on DV1
Definition of doneThe centrality and distinctiveness map plots what customers perceive (Dawar and Bagga 2015). A kernel, a bound or an instrument the board itself marks substrate on its ladder is not a feature a rival could hold, so counting it inflated Nishi's distinctiveness and carried inherited rival cells onto the picture (measured 2026-09-17 on the search board: the engine's kernel rows sat on the customer map). nx_cdmap_lib.cd_substrate_mask joins each matrix row's symbol to its rung row and that rung's rungrole row, both DATA the board already declares; cdmap_pass drops the substrate rows before computing the points, announces rows_substrate_excluded beside rows in api.json and states it in the page prose. Done-rule: nx_cdmap_gate T14 proves the join on a planted plan (bare and _ABSENT_-prefixed symbols excluded, contender and role-less rungs mapped, an empty plan excludes nothing, a symbol prefix is not a join) and the live search api.json reports rows_substrate_excluded above zero with the map re-derived from the feature rows only
Matrix cellSubstrate rows stay off the position map (the board's own rungrole rows decide) · runtime/nx_cdmap_lib.nx · PRESENT decl
Gatenx_cdmap_gate · UNRECORDED — no recorded verdict for this gate (it is declared for the organ but the evidence referee's last run did not record it: it is not on this board's gates map, or the referee has not run since the per-gate record shipped)
Work log2026-09-17 land SUBSTRATE ROWS OFF THE MAP (2026-09-17): cd_sym_is_substrate and cd_substrate_mask in nx_cdmap_lib (plan join by rung symbol and rungrole, _ABSENT_ prefix stripped), the mask applied in nx_swcompare_lib cdmap_pass_heading with rows_matrix and rows_substrate_excluded in api.json and a Rows sentence in the page, nx_cdmap_gate T14 to T14g (135 of 135 GREEN on the laptop, planted plan excluded=2); sources on the NAS, generators building; the day spine's rows column records the denominator change, so the momentum across the change is read beside it, never as movement
2026-09-17 measure FIRST LIVE CUT ON THE SEARCH BOARD (2026-09-17): 35 of 93 matrix rows read substrate through the plan join and left the map, 58 feature rows remain; category means moved from centrality 832 and distinctiveness 178 to 799 and 209; Nishi 760 and 248 became 768 and 317 (the scaffolding rows had carried inherited rival cells that credited the rivals), Google 972 and 430 became 957 and 506; every quadrant assignment held. nx_cdmap_gate 135 of 135 GREEN on the laptop and the NAS with T14 to T14g; generators promoted (matrix 386052e8, sota 66c78395) with the one lost run named as the build-metadata path runtime/nx_brand_tokens.nx, fork copies in buildroot/_offc hash-identical to the promoted files

dossiers=11 cells_joined=11 no_matrix_row=0 (sum 11) gates_recorded=0 gates_unrecorded=5 no_gate_declared=6 (sum 11 of cells_joined) evgates=UNSTAMPED

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.

Rows. 19 feature rows mapped of 23 matrix rows; 4 substrate rows (kernels, bounds and instruments the plan's rungrole marks substrate) are the estate's scaffolding, not category features, and stay off the map
Views. 2D cut: centrality, distinctiveness · 3D cube: centrality, distinctiveness, breadth · axes registered: centrality, distinctiveness, breadth, depth, momentum · a board picks its own in knowledge/compare/datavis.cdmap (cut|x|y, cube|x|y|z); absent = the HBR defaults
Position map, two-dimensional cutOne bubble per player. Bubble area is breadth, the ring colour is momentum, the dashed lines are the category means, and both axes are fitted to the field of play with their tick numerals shown. Every value is repeated in the table that follows. 650 700 750 800 850 900 950 1000 0 100 200 300 400 500 600 centrality (permil, fitted 650–1000) distinctiveness (permil, fitted 0–600) mean 888 mean 107 Unconventional Aspirational Peripheral Mainstream Nishi, centrality 1000, distinctiveness 407, breadth 771, depth 771, momentum 0 Datawrapper, centrality 876, distinctiveness 83, breadth 403, depth 638, momentum 0 Observable Plot, centrality 846, distinctiveness 15, breadth 350, depth 606, momentum 0 Vega-Lite, centrality 846, distinctiveness 0, breadth 333, depth 575, momentum 0 D3, centrality 876, distinctiveness 34, breadth 368, depth 583, momentum 0 Nishi Datawrapper Observable Plot Vega-Lite D3

bubble area = breadth · ring = momentum (green rising, red falling, grey until day two) · dashed = category means · axes fitted to the field of play: centrality 650–1000, distinctiveness 0–600 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 1 (a fact of the data: two players that close are that close) · data spread 558 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)
Position map, three-dimensional cubeThe same players in an isometric cube. Each axis is fitted to its own field of play and carries numerals on the floor grid and the vertical axis; each bubble drops a dotted line to its floor shadow so height reads as height. Values are in the table that follows. 650 700 750 800 850 900 950 1000 0 100 200 300 400 500 600 200 300 400 500 600 700 800 900 centrality distinctiveness breadth Vega-Lite: centrality 846, distinctiveness 0, breadth 333 Observable Plot: centrality 846, distinctiveness 15, breadth 350 D3: centrality 876, distinctiveness 34, breadth 368 Datawrapper: centrality 876, distinctiveness 83, breadth 403 Nishi: centrality 1000, distinctiveness 407, breadth 771 Nishi Datawrapper Observable Plot Vega-Lite D3
axes fitted: centrality 650–1000 · distinctiveness 0–600 · breadth 200–900 permil · farther bubbles are painted first, nearer ones over them · the floor shadow is each bubble's (x, y) at height 0
readability of the 3D cube, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 1 · unresolved labels 0 · mark overlaps 6 (a fact of the data: two players that close are that close) · data spread 88 permil of the plot
Position map, small multiplesEvery pair of registered axes as one small cut. Each panel fits both axes to the field of play, the dashed lines are the category means, bubble area is breadth and the ring colour is momentum; the legend below names the colours. 825 1000 0 500 distinctiveness vs centrality Nishi: centrality 1000, distinctiveness 407 Datawrapper: centrality 876, distinctiveness 83 Observable Plot: centrality 846, distinctiveness 15 Vega-Lite: centrality 846, distinctiveness 0 D3: centrality 876, distinctiveness 34 825 1000 200 900 breadth vs centrality Nishi: centrality 1000, breadth 771 Datawrapper: centrality 876, breadth 403 Observable Plot: centrality 846, breadth 350 Vega-Lite: centrality 846, breadth 333 D3: centrality 876, breadth 368 825 1000 550 800 depth vs centrality Nishi: centrality 1000, depth 771 Datawrapper: centrality 876, depth 638 Observable Plot: centrality 846, depth 606 Vega-Lite: centrality 846, depth 575 D3: centrality 876, depth 583 825 1000 480 520 momentum vs centrality Nishi: centrality 1000, momentum 500 Datawrapper: centrality 876, momentum 500 Observable Plot: centrality 846, momentum 500 Vega-Lite: centrality 846, momentum 500 D3: centrality 876, momentum 500 0 500 200 900 breadth vs distinctiveness Nishi: distinctiveness 407, breadth 771 Datawrapper: distinctiveness 83, breadth 403 Observable Plot: distinctiveness 15, breadth 350 Vega-Lite: distinctiveness 0, breadth 333 D3: distinctiveness 34, breadth 368 0 500 550 800 depth vs distinctiveness Nishi: distinctiveness 407, depth 771 Datawrapper: distinctiveness 83, depth 638 Observable Plot: distinctiveness 15, depth 606 Vega-Lite: distinctiveness 0, depth 575 D3: distinctiveness 34, depth 583 0 500 480 520 momentum vs distinctiveness Nishi: distinctiveness 407, momentum 500 Datawrapper: distinctiveness 83, momentum 500 Observable Plot: distinctiveness 15, momentum 500 Vega-Lite: distinctiveness 0, momentum 500 D3: distinctiveness 34, momentum 500 200 900 550 800 depth vs breadth Nishi: breadth 771, depth 771 Datawrapper: breadth 403, depth 638 Observable Plot: breadth 350, depth 606 Vega-Lite: breadth 333, depth 575 D3: breadth 368, depth 583 200 900 480 520 momentum vs breadth Nishi: breadth 771, momentum 500 Datawrapper: breadth 403, momentum 500 Observable Plot: breadth 350, momentum 500 Vega-Lite: breadth 333, momentum 500 D3: breadth 368, momentum 500 550 800 480 520 momentum vs depth Nishi: depth 771, momentum 500 Datawrapper: depth 638, momentum 500 Observable Plot: depth 606, momentum 500 Vega-Lite: depth 575, momentum 500 D3: depth 583, momentum 500
Nishi Datawrapper Observable Plot Vega-Lite D3
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 12 (a fact of the data: two players that close are that close) · data spread 619 permil of the plot
PlayerQuadrantcentralitydistinctivenessbreadthdepthmomentumRows heldDays on spineFirst seen
NishiAspirational10004077717710 since 2026-09-2319102026-09-15
DatawrapperPeripheral876834036380 since 2026-09-2312102026-09-15
Observable PlotPeripheral846153506060 since 2026-09-2311102026-09-15
Vega-LitePeripheral84603335750 since 2026-09-2311102026-09-15
D3Peripheral876343685830 since 2026-09-2312102026-09-15
DayMatrix rows reviewedPlayers recorded
2026-09-15215
2026-09-16225
2026-09-17225
2026-09-18195
2026-09-19195
2026-09-20195
2026-09-21195
2026-09-22195
2026-09-23195
2026-10-08195

players 5|matrix rows 19|feature mass 65|centrality mean 888|distinctiveness mean 107|axes 5|spine days 10 (shown 10)|rows written today 0|readability defects 2D 0 cube 1|spine knowledge/status/cdmap/datavis.spine

How to read this evidence. A Nishi source mark records whether the named symbol is declared in the selected source file. It does not establish working behavior or accepted delivery. A watching tag names an expected source entry; discovering it updates source coverage only. A dark tag means the file exists but the named symbol was not found: inspect the source and contract before assuming the capability is missing or renaming code. Peer codes are authored assessments; unassessed means no comparison is established, not absence. Qualification, deployment identity, runtime observations and acceptance must carry their own evidence. Adoption records the catalog's observed path through source, build, promotion, registration and invocation; libraries use importer evidence and gates use declared execution surfaces. A full catalog path does not establish quality, freshness or a successful user outcome. Partial and unknown states retain their stated next action. Census stamps: importers asof 1790637268, gate census asof 1790104131 (unix seconds; -1 = census absent).

Capability matrix — measured against source

◉ authored stronger claim; source present● present◐ partial○ absent? unassessed; excluded from relative comparison · click any capability for its evidence

Peer cell coverage: authored assessed 92, unassessed 0. Authored assessments are not verified outcomes.

CapabilityNishiDatawrapperObservable PlotVega-LiteD3
Domain-fit axes with nice ticksMeasured: cl_domain exists in runtime/nx_chartlay_lib.nx, verified at emit. Axes fit the data with a breathing pad and snap outward to a nice step (4 to 7 ticks); the default in every tool named [datawrapper] [plot] [vegalite] [d3] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Integer linear scale both waysSource present; authored stronger claim: cl_scale in runtime/nx_chartlay_lib.nx, verified at emit. Pure integer arithmetic, bit-identical on every host from a sensor to a supercomputer; the rivals scale in IEEE floats [d3] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉●●●●
Collision-free direct labelsMeasured: cl_place exists in runtime/nx_chartlay_lib.nx, verified at emit. Greedy seat search with leader lines and an UNRESOLVED count; Plot and D3 ship occlusion handling, Datawrapper and Vega-Lite hide or nudge [plot] [vegalite] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Vega-Lite; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●◐●◐●
Readability critic self-gradeSource present; authored stronger claim: cl_critic in runtime/nx_chartlay_lib.nx, verified at emit. Every render counts its own label overlaps, labels over marks, off-canvas labels, mark overlaps and data spread and publishes them with the picture and in api.json; no rival grades its own output [fidelity26] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
dossier
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Colour-blind-safe categorical paletteMeasured: cl_palette exists in runtime/nx_chartlay_lib.nx, verified at emit. Okabe-Ito for rivals plus the house accent token; every rival ships a CVD-safe scheme [datawrapper] [plot] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Theme tokens light and darkMeasured: cdp_label exists in runtime/nx_swcompare_lib.nx, verified at emit. Marks, halos and text read the page's design tokens so one render is legible on both themes; Datawrapper themes, the libraries leave it to the host page [datawrapper] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; ahead of Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●◐◐◐
Responsive SVG with viewBoxMeasured: cdp_fig_open exists in runtime/nx_swcompare_lib.nx, verified at emit. Width 100 percent, viewBox scaling, no horizontal scroll [plot] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Accessible title, description and data twinMeasured: cdp_fig_open exists in runtime/nx_swcompare_lib.nx, verified at emit. Every figure carries an SVG title and desc, aria-labelledby, and the SAME numbers in a table; Datawrapper adds alt text, the libraries leave it to the author [wcag3] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; ahead of Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●◐◐◐
Four-quadrant position mapSource present; authored stronger claim: cd_quadrant in runtime/nx_cdmap_lib.nx, verified at emit. The centrality-distinctiveness map re-derived from the matrix cells on every publish [hbr2015] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Isometric cube with fitted axesMeasured: cdp_iso_fit exists in runtime/nx_swcompare_lib.nx, verified at emit. A 3D view with per-axis fit, floor-grid numerals, drop lines and far-to-near paint order; D3 has community 3D, the rest none [d3] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●○○○◐
Day spine and momentum trajectorySource present; authored stronger claim: cd_spine_append in runtime/nx_cdmap_lib.nx, verified at emit. One row per player per day and the first-to-previous-to-today path drawn from it: time as a first-class axis of every board Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Leaderboard with computed rankSource present; authored stronger claim: lb_rank_of in runtime/nx_leaderboard_lib.nx, verified at emit. Public boards as data, the estate's rank recomputed from the scores, never copied from the file [bright] Adoption: LIB-WIRED importers=6 nonval=4 — fully adopted (top of its ladder).
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Chart quality regression gateSource present; authored stronger claim: main in runtime/_hdl_build/nx_chartlay_gate.nx, verified at emit. The layout ruler is gate-proven on the live junk cluster: the junk layout grades as junk, the fitted layout places every label clear; rivals test their libraries, not each render Adoption: GATE:LIVE trial=GREEN — fully adopted (top of its ladder).
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Outside referee: browser render judged on pixelsMeasured: crg_judge exists in runtime/nx_cdmap_pixjudge_lib.nx, verified at emit. The liar-killer for the self-grade: a real browser renders the page and an in-estate judge counts overlaps and clipping on the pixels, the way BRIGHT referees search from outside [insight26] Adoption: LIB-WIRED importers=2 nonval=1 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●○○○○
Text contrast measured (WCAG 3 draft)Measured: cl_contrast exists in runtime/nx_chartlay_lib.nx, verified at emit. The 10 September 2026 WCAG 3 draft makes text contrast a Core requirement with a size-and-weight-aware measure still to be determined; the emitter owes a measured contrast of every label against its rendered background [wcag3] Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●◐○○○
Small multiples (scatterplot matrix)Measured: cdp_splom exists in runtime/nx_swcompare_lib.nx, verified at emit. Every pair of registered axes as one small cut sharing the fitted domains; every rival composes facets [plot] [vegalite] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Annotation layer (callouts on marks)Measured: cdp_annotate exists in runtime/nx_swcompare_lib.nx, verified at emit. A board-authored note pinned to a mark or a region, rendered by the emitter with the same placer [datawrapper] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Interactive hover and filterMeasured: cdp_interact exists in runtime/nx_swcompare_lib.nx, verified at emit. Hover reveals, brushing, legend toggles; every rival has it, the estate's zero-JS floor renders without it and a JS door may add 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=34 nonval=28 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Export SVG and PNGMeasured: cdp_export exists in runtime/nx_swcompare_lib.nx, verified at emit. A download of the figure as standalone SVG and as PNG rasterised by the estate's own rasteriser 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=34 nonval=28 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●●●●
Print stylesheet for boardsMeasured: sc_print_css exists in runtime/nx_swcompare_lib.nx, verified at emit. A print media block so a board prints as pages, not a screen dump [css2025] Adoption: LIB-WIRED importers=34 nonval=28 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; ahead of Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●●○○○
One layout ruler across the fleetMeasured: cl_adoption_gate exists in runtime/_hdl_build/nx_chartlay_adoption_gate.nx, verified at emit. A fleet gate that names every SVG-emitting function in the compare generators and refuses a chart that scales, places or colours by hand Adoption: GATE:LIVE trial=GREEN — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●○○○○
Second ruler over the self-grade (SVG re-derivation plus real-font re-measurement)Source present; authored stronger claim: cr_critic in runtime/nx_cdmap_referee_lib.nx, verified at emit. The emitter's readability grade is a claim; nx_cdmap_referee re-derives it from the published SVG alone and re-measures every label with real TrueType advances (Liberation Sans, SIL-OFL data) through nx_ttf_fontlib, then runs the one critic over both. Landed 2026-09-15: on the live search cut the heuristic reproduces the published grade and the metric ruler finds the same zero defects (bold Nishi 29 px real vs 36 reserved, Marginalia 55 vs 72); nx_cdmap_referee_gate plants a label on a label and a label on another player's mark and both rulers fire. None of the four rivals grades its own render, so none can be refereed this way. Not the browser-pixel referee: that is DV2 and stays open Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
dossier
Pros Source symbol found; stronger capability claim is authored; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
◉○○○○
Substrate rows stay off the position map (the board's own rungrole rows decide)Measured: cd_substrate_mask exists in runtime/nx_cdmap_lib.nx, verified at emit. DV11 (2026-09-17): a matrix row whose plan rung is substrate (a kernel, a bound, an instrument) is scaffolding, not a category feature; the map joins each row's symbol to its rung and role and drops substrate rows before computing centrality, distinctiveness, breadth and depth, announcing rows_substrate_excluded beside rows in api.json. No rival charting tool classifies its input rows by a ladder of declared roles, so the rival cells read No as not applicable rather than as a measured lack Adoption: LIB-WIRED importers=4 nonval=3 — fully adopted (top of its ladder).
dossier
Pros Implementing source symbol found; runtime acceptance separate; ahead of Datawrapper, Observable Plot, Vega-Lite, D3; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
●○○○○
Rival-claim provenance. Every Yes, Best or Part mark in a rival column is a claim about someone else's product. A cited row carries a reference mark that resolves to a pinned mirror (the refs gate measures that); an uncited row is an observation read and is badged in its evidence until a reference lands. The badge is the receipt, never the proof: a mark proves a mirror exists, not that the mirror supports the code. The rows are counted below.
Rival claims, counted
ClassCountNote
rows with rival marks14rows carrying a Yes, Best or Part in a rival column
cited12a reference mark resolves to a pinned mirror
uncited2an observation read, badged until a reference lands
rows, summed14RECONCILED: the parts sum to the total 14

Delivery and evidence

Inspect risks, technical debt, rendered observations, experiments and references. Read scope and limitations alongside every result.

Release history and work log

The worked plan, on the board. Every leg appends what it measured, landed, retracted, learned and left queued, per rung, so a crash leaves the next seat a ledger here rather than a transcript to mine. Kinds: measure, land, retract, lesson, queue. Newest last.
WhenRungKindEntry
2026-09-15DV1landSource-landed and laptop-proven: buildroot/runtime/nx_chartlay_lib.nx (12947 B, both trees), _hdl_build/nx_chartlay_gate.nx 48/48 GREEN on the laptop lane (junk_label_overlaps=9, junk_spread_permil=223, fit_spread_permil=690, fit_unresolved=0, fit_mark_overlaps=1 which is Mojeek and Marginalia genuinely 11 permil apart), cdmap_pass_heading rewritten in nx_swcompare_lib.nx (both views fitted, placed, graded; readability_cut, readability_cube and the fitted domains in api.json). NAS build, promote, restage and regen follow in this leg.
2026-09-15DV1lessonA fixed full-range canvas is a chart of the scale, not of the data: five players inside 21 percent of the width read as one blob. Fit the axes, print the numerals, and let a critic count what the eye cannot read -- then publish the count, because a grade nobody can see is a grade nobody can refute.
2026-09-15DV1landSHIPPED through the mgmt lane: nx_chartlay_gate NAS qualify 48/48 GREEN (jobs 1789487254 and 1789487425, the second after the chl_slen rename), /api/build nx_chartlay_gate 52360 B sha 56b9e0a3 PROMOTED + offc + registered + rostered; nx_leaderboard_gate NAS 34/34 GREEN, 52392 B sha eb45e31a PROMOTED + offc + registered + rostered; organ_gate.conf rows nx_chartlay_lib and nx_leaderboard_lib; the emitter nx_swcompare_matrix /api/build 758768 B sha 29c369e9 (src_path verified, src_stable 1), contentdiff BIDIRECTIONAL lost 38 of 2714 runs (14 permil: the old fixed-canvas renderer's two hard-coded fills, its lead paragraph, the overflow wrapper, aria-label, the grey marker, the currentColor frame, the retired cdp_fill symbol, one source path -- every one superseded by the fitted renderer) gained 185, PROMOTED with allow_capability_loss=yes naming that list, offc-installed, nx_restage RESTAGED buildroot/_offc 758768 B; nishi_compare_regen launched (job 1789487604). ⚠The first emitter build FAILED: cl_slen was defined twice in the closure (nx_catalog_lib owns cl_slen) -- a new lib's prefix must be checked against every lib in its consumers' closures, not only the registry; renamed chl_slen, both trees, both gates re-proven.
2026-09-15DV3queueINCUMBENTS named by the ranker (ES28) before any build: nx_uiq_contrast (measured text contrast against the rendered background with a floor) and nx_a11y_check (per-label WCAG contrast with a size-aware rule) already exist -- DV3 COMPOSES one of them inside the layout ruler and binds the algorithm as data; a second contrast ruler is refused.
2026-09-15DV6queueINCUMBENTS named by the ranker: nx_render_svg (standalone SVG emitter), nx_figures_page + nx_figure_gate (figure export and its referee) and nx_eco_graph_png (SVG rasterised to PNG by the estate's own renderer) -- DV6 wires the position-map figures through those, never a new rasteriser.
2026-09-15DV9queueTHE FLEET POPULATION for the adoption ratchet, named by the ranker: nx_render_svg, nx_chart, nx_viz_chart, nx_batt_chart, _genealogy_chart, nx_mindmap, nx_figures_page -- every one an SVG emitter that scales, places or colours on its own today; DV9's gate censuses them and ratchets the count that compose nx_chartlay_lib upward, naming each offender.
2026-09-15DV1measurenx_compare_rank datavis: BARFRESH bars=1 fresh=1 verdict=FRESH; LADDER targets=2 rungs=9 placed=9 verdict=LADDERED; rungs=9 done=1 open=8; critical path #1 DV2 (the outside referee), then DV4 DV5 DV6 DV8 DV3 DV7 DV9; DV1 reads LIB-UNCENSUSED (a library younger than the last eco-graph build), which clears on the next graph build. The DARK-CONTRACT labels on the open rungs are the ruler's known reading of an honest _ABSENT_ row on an existing organ file (nx_swcompare_lib, nx_swcompare_matrix, nx_chartlay_lib), not builds lost to darkness.
2026-09-15DV1measureFIRST PUBLISH READ BACK from sites/nishifamily/compare/search/index.html (659575 B) while the regen was still walking: the 2D cut renders axes fitted 700-1000 x 0-350 with seven and eight numerals, the means labelled 882 and 136, quadrant names centred, five seated labels (Marginalia to the left of its mark), grade line label overlaps 0, labels over marks 0, off-canvas 0, unresolved 0, mark overlaps 1, spread 690 permil; api.json carries readability_cut. The cube graded 0 label defects but mark overlaps 3 and spread 171 permil -- the critic was handed the whole 760x560 canvas while the cube occupies its own rhombus, and the 220 px unit left a third of the canvas empty. REFINED at once, both trees (nx_swcompare_lib 260820 B, hash 13b26574): the critic judges spread against the cube's own extent (left corner, z top, right corner, bottom corner) and the unit is 250 px with the origin raised to 290; rebuilt 758984 B sha 8dd44362, promote and restage follow the running regen so its fork copy is not swapped under it.
2026-09-15DV9measureFLEET BASELINE for the adoption ratchet, nx_absent over buildroot/runtime: pattern <svg matches=149 coverage_complete=1 corpus_complete=1 (occurrences, not distinct files -- the organ lists 12 of 149, so the distinct-file count is UNMEASURED and the ratchet's first job is that partition). Every one of those sites scales, places or colours on its own today; nx_chartlay_lib has exactly one adopter (cdmap_pass in nx_swcompare_lib). The ratchet counts adopters up and names each remaining hand-drawn emitter; wiki graph (nx_wiki_graph), the ad banner logos (nx_ad_banner, nx_ad_emitter_grow) and the eco-graph renderers are the first population the census shows.
2026-09-15DV10landSHIPPED, both trees: nx_cdmap_referee_lib.nx (10380 B), nx_cdmap_referee.nx (7209 B), _hdl_build/nx_cdmap_referee_gate.nx (15981 B). NAS: gate BUILT 83864 B sha 6b5e31a5 PROMOTED and registered; program BUILT 65632 B sha e9ac2a7d PROMOTED and registered. The gate's first run read 42/43: its own control T5 refused a plant I had placed over the label's OWN mark, which the critic skips by design -- the plant now sits on another player's mark and the own-mark semantics is pinned as T5b.
2026-09-15DV10measureLIVE, sites/nishifamily/compare/search: labels=5 marks=5 frame 70,30 to 730,460; real Liberation Sans advances vs the emitter's reserve -- Nishi (bold) 29 vs 36 px, Mojeek 39 vs 43, Brave 32 vs 36, Google 40 vs 43, Marginalia 55 vs 72 (delta -69 to -236 permil); heuristic LL=0 LM=0 OFF=0 MM=1 SPREAD=690 reproduces the published readability_cut exactly; metric DEFECTS=0 equals the published 0; verdict=AGREE. The estimate over-reserves on this face, so it cannot hide an overlap here; a narrower reserve or a wider face is the case the pixel referee owes.
2026-09-15DV2lessonA REFEREE THAT SHARES THE EMITTER'S NUMBERS PROVES ONLY CONSISTENCY. DV10 re-derives the grade from the published bytes and swaps one input (glyph width) for a measured one, so it can refute a self-grade that the page itself contradicts or that real glyphs overturn -- and it cannot see what a browser draws. That is why DV10 is an arm and DV2 (crg_judge, a render judged on pixels) is still the critical path.
2026-09-15DV10measurenx_gate_bite nx_cdmap_referee_gate over runtime/nx_cdmap_referee_lib.nx (2 sites): baseline GREEN 84280 B, cmp site 0 KILLED on a compiling mutant, valid_mutants=1 killed=1 not_reached=0 void_build_lane=0, restore byte-identical 10380 B, twin RESTORED, verdict=GREEN gate BITES; nx_page_verify /compare/datavis VERDICT=GREEN static 128566 B a11y-issues=0 (browser rendering unverified, that is DV2); nx_eco_graph_build re-run nodes=20914 edges=58945 files_scanned=20943 saved knowledge/store/ecograph_full so the DV1 and DV10 lib rows can leave LIB-UNCENSUSED on the next emit
2026-09-15DV10measureafter nx_importcensus (asof=1789493461 rows=20914 has_nonval=3934 val_only=2748 orphan=14232 sum=20914 edges=58945) the scoped re-emit published datavis at 123597 B with LIB-UNCENSUSED states 0 and every library row LIB-WIRED: nx_chartlay_lib importers=3 nonval=2, nx_cdmap_lib importers=2 nonval=1, nx_cdmap_referee_lib importers=2 nonval=1 (first importer nx_cdmap_referee.nx), nx_leaderboard_lib importers=2 nonval=1; DV1 and DV10 cleared
2026-09-15DV10lessonrebuilding the eco graph does NOT flip a LIB-UNCENSUSED cell: the emitter reads knowledge/status/importers.tsv (nx_catalog_lib clb_load), a flat census nx_importcensus derives from the store, and that file was a day stale (asof 1789411173, nodes 20880) while the store already held 20914 nodes; the CWD hypothesis was refuted first by a positive control (search and ecosystem pages read LIB-WIRED from the same emitter); the scoped cap did not name nx_importcensus and the session cap was denied, so a cap was minted (nonce 1789493450) and banked at ~/.nishi/importcensus0915.cap
2026-09-15DV10queueMECHANISM OWED IN THE EMITTER: when knowledge/store/ecograph_full is newer than the asof of knowledge/status/importers.tsv the regen should refresh the census (fork nx_importcensus) or announce IMPORTERS-STALE beside every LIB state, so a new library never reads UNCENSUSED for a day because two beats disagree; today the recipe is nx_eco_graph_build then nx_importcensus then the scoped regen
2026-09-15DV2landSHIPPED THE PIXEL REFEREE from the first byte: nx_cdmap_pixjudge_lib (crg_judge: every player label rasterised through the sovereign TrueType engine nx_ttf_fontlib, glyph coverage at or above 128 of 255 is ink, marks as disks, LL LM OFF MM counted on the pixels, DEFECTS = LL+LM+OFF slot for slot with the self-grade, a label's own mark skipped as cl_critic skips it), program nx_cdmap_pixjudge (page + api.json + two faces, optional journal row per run, verdict AGREE/DISAGREE/UNPROVEN exit 0/1/3, every offender named) and gate nx_cdmap_pixjudge_gate (34 teeth, runtime fixtures, the drift plant derived from the ruler's own reserve); NAS /api/build gate 95176 B sha d65ec2d7 PROMOTED + REGISTERED + offc, program 90184 B sha 94d42ec7 built and promoted by hash; sources byte-identical in both trees (lib ae69ed9c 14935 B, program 17d70b4f 8520 B, gate b68e4765 15155 B); the matrix row repointed from runtime/_hdl_build/nx_cdmap_render_gate.nx to runtime/nx_cdmap_pixjudge_lib.nx so the crg_judge watch can flip on the next emit
2026-09-15DV2measureGATE 34/34 GREEN FIRST RUN ON THE NAS with Liberation Sans: the planted font-metric drift is CAUGHT and named (six W at 13 px: heuristic reserve 43 px, real ink 72 px, label B placed at x=145 just past the reserve; the box ruler reads LL=0 on those bytes and the pixel ruler LL=1 with 43 shared ink pixels); a label on another player's mark reads LM=1 (11 ink pixels inside the disk) while 135 own-mark ink pixels are not a defect; ink past the frame reads OFF=1 (ink x1 754 against frame x1 730); no face, no figure and unpaired labels are named refusals never zero vectors; LIVE /compare/search: pixel defects 0 = published 0, AGREE. The done-rule's first clause is met by the plant; the second clause (agreement journaled per beat) is the clock row queued below
2026-09-15DV2queuePER-BEAT JOURNAL: a clock row running nx_cdmap_pixjudge over the served search page and api.json with the Liberation faces and the journal path knowledge/status/cdmap_pixjudge.jrnl, one pj row per day beside the compare beat; the foreign-browser oracle (a real browser screenshot read outside the build path) remains the cross-check of the sovereign rasteriser itself and is never a dependency
2026-09-15DV2measureBITE-PROVEN: nx_gate_bite nx_cdmap_pixjudge_gate over runtime/nx_cdmap_pixjudge_lib.nx (2 comparison sites): baseline GREEN 95176 B, site 0 SURVIVED (a measurement, not yet adjudicated: one of the two bounds on a guarded comparison, mutate the whole invariant before calling the tooth vacuous), site 1 KILLED on a compiling mutant, valid_mutants=2 not_reached=0 void_build_lane=0 killed=1, restore byte-identical 14935 B, both twins RESTORED, verdict GREEN. LIVE RUN of the program on /compare/search (nx_job_run nx_cdmap_pixjudge with the Liberation faces and the journal path): 5 labels 5 marks, ink 164/197/146/189/292 px, pixel LL=0 LM=0 OFF=0 MM=1 DEFECTS=0 = published 0, AGREE, the first pj row appended to knowledge/status/cdmap_pixjudge.jrnl (78 B). Registered nx_cdmap_pixjudge + nx_cdmap_pixjudge_gate, offc installed, cap ~/.nishi/pixjudge0915.cap, organ_gate.conf pairs, gateroster and datavis.gates rows, importers.tsv re-censused (nx_cdmap_pixjudge_lib importers=2 nonval=1)
2026-09-15DV2landPER-BEAT JOURNAL WIRED: clock row cdmappixjudge 86400 = nx_cdmap_pixjudge.elf over the served search page and api.json with the Liberation faces and knowledge/status/cdmap_pixjudge.jrnl (CLOCKJOB-PUT ok rows=187, desired state; the scheduler folds it at its next window init, verify on the live plane with nx_clockjob get cdmappixjudge and by the journal growing one pj row per day). The DV2 done-rule is met on both clauses once the live plane carries the row: the drift plant is caught and named, and agreement on the live page is journaled per beat. Still an ARM beside the self-grade, not the operator's acceptance: a foreign-browser screenshot read outside the build path remains the oracle that cross-checks the sovereign rasteriser itself
2026-09-15DV4landSOURCE-LANDED (both trees byte-identical, nx_swcompare_lib.nx 273524 B sha 0842d11b, replayed onto the NAS under a four-hunk size ladder 260820 to 272936 to 273303 to 273455 to 273524): cdp_splom draws every pair of the five registered axes as one small cut (ten panels, three per row, 246 x 190 cells), each panel fitted to its own field of play through the one layout ruler (cl_domain and cl_scale_dom), first and last tick numerals, category means dashed, the same momentum-ringed marks as the cut at half radius (floor 3 px), no labels (the legend names the colours), the critic called with zero-size boxes and only its MARK terms read (MM per panel, spread per panel), a grade line summing MM and averaging spread, and cdp_splom_json emitting a splom block (panels, axes, mark_overlaps_total, spread_min_permil, spread_mean_permil, panels_list with x, y, mark_overlaps, spread_permil, fit_x_lo/hi, fit_y_lo/hi) into api.json; computed once before the branches so page and JSON carry the same numbers. NOT YET BUILT: the emitters compile after the R0 cross-encoder run frees the box (load 7.9 on 8 cores while it runs); the DV4 done-rule (ten small pictures from a five-axis registry, sharing the fitted domains) is claimed only when the regen publishes it and nx_page_verify reads GREEN
2026-09-15DV4landSHIPPED AND PUBLISHED: nx_swcompare_matrix rebuilt on the laptop lane in the NAS flavour (772208 B sha 5b333bcf, 594 subprograms, cdp_splom present), staged through the sovereign content door, nx_contentdiff live vs staged lost 1 of 2901 runs (the source path runtime/_hdl_build/nx_brand_tokens.nx, which the laptop lane resolves at runtime/ instead; every gained run is the splom section) so promoted with allow_capability_loss=yes naming that one path, offc-installed and copied byte-identical to buildroot/_offc (nx_filehash cmp identical=1); nx_cdmap_gate 71024 B sha 04d1c545 ONE-WAY-GAIN promoted and offc-installed, 93/93 GREEN on the laptop (the day spine written twice and read back); nx_chartlay_gate 48/48 GREEN. Scoped regen (nx_job_run nx_compare_regen buildroot ../sites/nishifamily/compare/ --domain-file knowledge/compare/regen.scope, since the launcher refuses the pinned row) published search index.html 695426 B (prev 661575) and api.json 144533 B with forkchecked=4 forkfresh=4 verdict=GREEN; the page reads 10 panels over 5 registered axes and api.json carries splom panels=10 axes=5 mark_overlaps_total=15 spread_min_permil=312 spread_mean_permil=549; nx_page_verify /compare/search VERDICT=GREEN a11y-issues=0. DV4 done-rule MET on the search page (browser rendering unverified; the pixel referee DV2 judges the cut, not the panels, so the panels are self-graded only). The scope file is read one domain per run, so datavis is regenerated in a second run.
2026-09-15DV4lessonA SCOPE FILE THAT READS ITS FIRST LINE ONLY IS A ONE-DOMAIN SWITCH WEARING A LIST'S NAME: two domains in the file published one, and the receipt named the one it took without naming the one it dropped. Read every line or announce the lines ignored; until the reader does, one domain per run.
2026-09-15DV5landSHIPPED AND PUBLISHED, from the first byte: the annotation layer is DATA (knowledge/compare/<dom>.cdnotes rows note
2026-09-15DV5lessonA NOTE IS A LABEL WITH A LONGER TEXT AND NO PLAYER OF ITS OWN: seating it through the same placer and counting it in the same critic is what makes it an annotation rather than a sticker; a second placer or an uncounted box is the junk verdict returning through a new door. The build refused twice before it ran, both times on a loop variable the render scope already owned as a let, so an emitter this large needs a distinct name per block, never a shared q.
2026-09-15DV5measureTHE PIXEL REFEREE READ UNPROVEN ON THE FIRST ANNOTATED PAGE (scan labels=13 marks=5: the eight note lines carry the label fill), an honest refusal that would have read UNPROVEN on every daily beat; FIXED IN THE RULERS THE SAME HOUR: nx_cdmap_referee_lib cr_scan now skips text inside a cdnote group (cr_in_note over cr_rfind) and cr_scan_notes reads the groups as note lines with their note index; nx_cdmap_pixjudge_lib draws ONE mask per note over all its lines (ink box unioned) and counts a note in LL (against labels and other notes), LM (over ANY mark, a note owns none) and OFF, never in MM; the program names note offenders and prints notes= note_lines= and per-note ink. nx_cdmap_pixjudge_gate 34 to 49 teeth (T9: pairing kept, one note of two lines scanned, ink drawn, a clear note adds nothing, a note on the Mojeek label reads LL=1 while the players-only box ruler reads 0 as its named neg-control, a note over the Nishi mark reads LM=1, no notes reads 0 groups) GREEN on the laptop and on the NAS with the live page AGREE; nx_cdmap_referee_gate 44/44 on the NAS. All four binaries contentdiff ONE-WAY-GAIN lost 0, promoted and offc-installed (pixjudge 100432 B b16834c4, its gate 106736 B 9bcdaae8, referee 66544 B 2b3f2567, its gate 85200 B a0b446d4); sources landed in both trees. LIVE /compare/search re-judged: labels=5 marks=5 notes=2 note_lines=8, note ink 1342 and 1451 px, pixel LL=0 LM=0 OFF=0 MM=1 DEFECTS=0 = published 0, verdict AGREE; the DV10 referee AGREE (the heuristic reproduces the published grade, the metric critic agrees).
2026-09-15DV5lessonA NEW FIGURE ELEMENT IS A NEW CLASS FOR EVERY REFEREE: the emitter grew a layer and both rulers went blind or unproven in the same instant, so an emitter feature ships with its referees or the daily agreement journal decays into UNPROVEN and nobody is alarmed. The fixture that proved the note-on-mark tooth first read LL=1 because the planted note also crossed the Nishi label: read the second defect before blaming the ruler.
2026-09-15DV8landSHIPPED AND PUBLISHED: the interaction door is ONE inline script the compare base emits after the 2D cut (cdp_interact in nx_swcompare_lib; the matrix row repointed from nx_swcompare_matrix.nx to the lib so the contract names the file that declares it). Every mark, label and momentum path carries data-p; the legend swatches became buttons (aria-pressed) that toggle a player's mark, label and path; hover or keyboard focus on a mark reveals the values the emitter already wrote into its title, in a tooltip; dragging on the plot brushes a region whose players are listed in an output element with the bounds converted to permil on the cut axes through the SAME fit domains the page drew with, and the region is written into the URL hash as cdsel=xlo,xhi,ylo,yhi so the trace is shareable and re-applied on load; api.json announces interact_door. The zero-JS floor is intact: the figure, legend, notes and grade render without the script, the buttons are inert and the output empty. The lexer forbids a hash mark or a bang inside a literal, so the hash is built from its character code and every negation is a comparison. nx_cdmap_interact_gate (21 teeth: the fit domains and the frame inside the script, the hash-free trace key with a byte-count neg-control, the three interactions, the re-applied trace, the optional-door style, and on the NAS the live page: buttons 5 equal marks 5, one output, the door announced) GREEN on the laptop and on the NAS, promoted cccf02cd, registered, offc-installed; emitter 798944 B sha 17a05b80 contentdiff ONE-WAY-GAIN lost 0, promoted, offc-installed, buildroot/_offc byte-identical; scoped regen GREEN, page 702696 B, nx_page_verify GREEN a11y 0. The edge serves the page with NO Content-Security-Policy header (Content-Type, Content-Length, Connection, Cache-Control only, read through nx_https_get with headers), so the inline door is not blocked. SCOPE STATED: the estate proves the door's structure and numbers; a browser executing it is the oracle outside the path, and that witness (a real hover, click and drag) is owed before the rung is complete under the three-party law.
2026-09-15DV8lessonA DOOR OVER A FLOOR IS HONEST ONLY IF THE FLOOR IS SEEN WITHOUT IT: the buttons render and the output exists with the script off, and the gate reads the door's numbers back from the emitted bytes rather than trusting the emitter that wrote them. The header read was the cheap experiment that decided whether an inline script could run at all; ship no door before reading the policy the edge actually sends.
2026-09-15DV6landEXPORT SHIPPED: nx_cdmap_raster_lib (the sovereign SVG-subset rasteriser: rect, circle, dashed line, polyline with the momentum arrow, polygon, text incl. the -90 rotation, halo and opacity, cdnote groups; :root tokens resolved; every glyph through nx_ttf_fontlib; PNG through nx_png) + nx_cdmap_export program (PROMOTED f607033b, registered) + nx_cdmap_export_gate 56/56 GREEN on the laptop (PROMOTED 14947d00, registered, rostered) + cdp_export in nx_swcompare_lib (the DV6 contract symbol) run as nx_swcompare_matrix <dom> export <dir> (PROMOTED b926c35b, allow_capability_loss on its own source-path run) which nx_compare_regen forks after every matrix page it publishes (PROMOTED ae4b1983, ONE-WAY-GAIN; exports= exports_absent= export_fails= on the summary, a failed twin never fails the page); the figcaption links cdmap.svg, cdmap.png and cdmap.export.json and api.json carries export_svg, export_png, export_receipt. The standalone SVG is the figure with xmlns declared and every var(--nx-color-*) resolved to the page's rgb; the PNG is twice the viewBox. Sources on both trees.
2026-09-15DV6lessonA SUBSET RASTERISER IS HONEST ONLY IF IT COUNTS WHAT IT SKIPS: the receipt carries rect, circle, line, polyline, polygon, text, notes, arrows, rotated, rotated_skipped, skipped and unresolved_colors, so a partial render reads as partial instead of as a picture of the renderer's blind spots. And three of the first gate's 56 teeth failed on the seat's arithmetic, not the renderer's: a dash phase computed in canvas px against a scaled pattern, and two ink bands that crossed the gridline and the momentum path -- a pixel tooth must be placed where nothing else paints, and its expected value derived in the units the renderer uses.
2026-09-15DV6landTWO DEFECTS THE FIRST EXPORT SHOWED, FIXED IN THE EMITTER AND THE RASTERISER (2026-09-15): (1) the standalone SVG carried the page's NAMED HTML entities (– in both axis titles, · and → in the mark titles) which are parse errors in XML, so nx_cdmap_raster_lib now holds ONE entity table read by both the twin writer (named -> numeric character reference, – -> –) and the rasteriser (nearest ASCII: dashes to a hyphen, the middle dot to a period, the arrow to ->); nx_cdmap_export_gate 60/60 with T19g/T19h/T19i/T15b. (2) the HBR quadrant words were painted first and covered by whatever came later (a note box over CONVENTIONAL, a player label over MAINSTREAM on the live search map): nx_chartlay_lib gained cl_place_from(n, nfixed, ...) -- the same placer with the first nfixed boxes FIXED -- and cdmap_pass now seats the four words after every player label and note with those as obstacles (cdp_quad_at at the seat; quad_unseated printed beside the grade, 0 on datavis and search). nx_chartlay_gate 54/54 (T9..T9e incl. the unfixed neg-control). Promoted: nx_swcompare_matrix 391939d5, nx_swcompare_sota 6ef16d25, nx_cdmap_export e377bad5, nx_cdmap_export_gate 8f8cd3d6, nx_chartlay_gate 194fcf46; buildroot/_offc twins refreshed; datavis republished (exports=1, 0 unseated).
2026-09-15DV3landCONTRAST MEASURED, FLOORS AS DATA, REFUSAL WIRED (2026-09-15): nx_chartlay_lib gained cl_contrast (composes the estate's ONE WCAG 2.x kernel nx_uiq_color.uiq_ratio100, KAT black/white 21.00 and 767676/white 4.54), cl_blend, cl_contrast_floor (size-and-weight tiers), cl_contrast_ok and cl_contrast_conf, which reads knowledge/compare/contrast.conf -- algorithm
2026-09-15DV3lessonA COLOUR TOKEN AT PARTIAL OPACITY IS A DIFFERENT COLOUR, AND THE ONLY WAY TO KNOW ITS CONTRAST IS TO BLEND IT OVER THE SURFACE IT SITS ON AND MEASURE THE RESULT: the quadrant words had been drawn at 0.75 opacity for weeks and read as muted on purpose; the first measurement (cl_blend then uiq_ratio100) put them at 3.67 against a 4.50 floor, under AA by a margin no eye can judge. A floor that lives in a conf row is a bar a machine can read (contrast.conf: algorithm, floors, size tiers), and an algorithm the ruler does not implement falls to the defaults ANNOUNCED rather than silently, so the WCAG 3 draft can be adopted by editing one row when its measure is named. Refuse the classes a placer seats (labels, notes, quadrant words) and print the classes that are structure (ticks, axis titles): hiding a scale to pass a contrast bar is the blank-chart defect wearing an accessibility badge. Also: a word whose eight leader seats all collide needs a seat inside its OWN region (cl_reseat_in), not a ninth candidate on the same ring.
2026-09-16DV7landPRINT SHEET SHIPPED (2026-09-15): sc_print_css in nx_swcompare_lib, the sc_theme_pass shape -- written once, called LAST by all five generators (matrix, sota, hub, compute, office) immediately before the style close, so order is the specificity and no importance hack is needed. The SSOT's light rows are re-selected under html,html[data-theme],:root:not([data-theme]) and the five grounds (bg, panel, soft, tint, codebg) made white; figures and cards break-inside:avoid; thead as table-header-group, rows unsplit, tables paginate; the sticky filter bar, filter and theme chips, skip link, header nav, map tooltip and selection line hidden; links print their target once, never inside the refs list. Gate nx_print_css_gate 36/36 laptop and 37/37 NAS with the live search page witnessed (promoted 03773c0b, registered, offc-installed, rostered, evidence row in datavis.gates beside new rows for the export and interact gates). Generators promoted: matrix 0c90dcc3 (ruler GREEN), sota 43687f6e (GREEN), hub 45f8d782 / compute c0255917 / office b2f8aa22 with allow_capability_loss -- their 12/16/16 lost runs are the plan section headings and table-open literals that moved into sc_heading_open and sc_plan_table_open weeks ago, every name still in the lib, the same re-encode the matrix and sota already carried; buildroot/_offc twins refreshed (regen forkfresh=4); search republished with the block. The DV7 board row was repointed from nx_swcompare_matrix.nx to nx_swcompare_lib.nx (it read DARK-CONTRACT until then).
2026-09-16DV7lessonA PRINT SHEET NEEDS NO IMPORTANCE WHEN IT IS EMITTED LAST: order is a specificity axis the lexer cannot forbid. The nx_cc string lexer refuses the bang byte, so the print block every generator writes immediately before its style close wins every equal-specificity tie by position, and the one selector that would have out-weighed it (the OS-dark block's :root:not([data-theme])) is matched at its own weight rather than beaten. The paper palette is the SSOT's light register re-selected, not a fourth hand palette, and its grounds are white because a background the printer will not paint is a surface the DV3 contrast measure would have lied about. Three generators had sat BEHIND the base lib for weeks (hub 164,872 vs 204,016 B, compute 59,823 vs 127,512 B) and read as CAPLOSS on rebuild for headings that had merely moved into helpers: a lib change is a fleet ship, and its stragglers are the census's BEHIND rows, never litter.
2026-09-16DV9landTHE FLEET RATCHET SHIPPED (2026-09-15): nx_chartlay_adoption_gate (symbol cl_adoption_gate) censuses every function in the compare generators that writes an svg start tag and judges it by the ONE layout ruler: ADOPTER when it or its prefix family (the helpers sharing its name up to the first underscore) calls a ruler verb, HAND when none does, HAND-COLOUR when the family paints a fill or stroke with a literal rgb(); a decorative icon (aria-hidden) is counted never judged, an svg named in a comment is nothing, and a URL before the tag cannot hide it (comments are stripped outside string literals). Sources, ruler verbs and named exemptions are DATA in buildroot/knowledge/compare/cl_adoption.conf; an allow row exempts one function WITH a reason and reads STALE (RED) the moment that function stops being an offender, so the ratchet only tightens. Planted fixtures prove every class both ways (F0-F10d), then the live fleet: 11 sources, 441 functions, 2 chart emitters -- cdp_fig_open ADOPTER (family 49, 8 ruler calls), rs_svg_standalone HAND but ALLOWED as the twin writer whose geometry is judged at cdp_fig_open -- 1 icon (the gap map's nav glyph), 0 unallowed hand charts, 0 stale rows. 34/34 GREEN laptop; promoted dc593c93, registered, offc-installed, rostered, evidence row in datavis.gates. Named residual: the gap map's momentum bars are HTML divs sized by a percentage width, a chart by CSS the svg census cannot see -- the next widening of this ruler is a bar-width verb in nx_chartlay_lib and a conf row for HTML charts.
2026-09-16DV9lessonA FLEET RATCHET NAMES ITS OFFENDERS OR IT IS A NUMBER: the first measure of this rung (149 svg sites, one adopter) was a fleet COUNT, and a count cannot say which function to fix, cannot tell a chart from a nav icon, and cannot tell a re-emitter of an already-laid figure from a hand layout. The gate that closes the rung prints one line per emitter with its verdict and its remedy, exempts by a NAMED row that carries its reason and goes stale by itself, and derives its scope from a conf so widening it is a data edit. Also: a comment stripper that does not track string literals eats the tag after a URL on the same line and reports a real chart as nothing -- the planted adopter fixture carries exactly that line so the stripper cannot regress silently.
2026-09-16DV3landDARK REGISTER MEASURED (2026-09-15, the extension the DV3 land row queued): cdp_contrast now measures the same classes against the brand SSOT's DARK rows (bt_emit_dark_root_buf -> rs_theme_load -> the dark fg/mut/panel/bg) beside the light ones -- labels, quadrant words and axis titles as x100 ratios, the count of dark classes under their floors, and the dark tokens read -- printed in the figcaption ("dark theme: ...") and in api.json (contrast_dark_labels_x100, contrast_dark_quadrant_x100, contrast_dark_axes_x100, contrast_dark_under_floor, contrast_dark_tokens_read). ONE figure serves both themes through var() tokens, so a dark shortfall is printed and counted, never hidden: the refusal flags stay the light register's, and the remedy for a dark shortfall is a token in the brand SSOT. Promoted matrix d426dbd7 and sota 06f7a94a (rulers GREEN, no loss); the buildroot/_offc twins refresh once the running compare beat releases them, then search and datavis republish with the dark line.
2026-09-16DV9landTHE POSITION MAP DRAWS EVERY DAY, NOT THREE POINTS: each player's movement line on the four-quadrant map used to join first spine day, previous spine day and today, so from the fourth day on every day in between vanished and where a player is moving day by day could not be read off the picture; nx_cdmap_lib gained cd_spine_trail (every spine day before today, oldest first, one record per day with that day's values in the first-day slots, so the one axis rule cd_hist_axis_plot places a past day on any registered axis), and nx_swcompare_lib's cdmap pass computes the trail once per player and uses it for the fitted axes (every drawn day stays on the canvas), the cut polyline and the cube polyline (each tagged data-days) and api.json, where every position now carries trail:[[day, centrality, distinctiveness, breadth points, held, matrix rows], ...]; nx_cdmap_gate S9-S9k plus neg-control-trail-excludes-today, 127/127 GREEN, cross-identity: the trail's day two plots exactly where the history's previous day plots; promoted nx_cdmap_gate 61cc6430 and nx_swcompare_matrix 0fed31a9 (debug flavour matched to the incumbent, content ruler lost one run -- the cube polyline opening, now carrying data-days) into the serving root, nishihost _offc and buildroot _offc; qualified on the live search board before promote: every player's api.json position carries its 2026-09-15 spine row as its trail
2026-09-16DV9measureLIVE WITNESS OF THE DAILY TRAIL: full regen job 1789572844 with nx_swcompare_matrix 0fed31a9 finished REGEN published=249 fails=0 verdict=GREEN; https://nishifamily.com/compare/search/cdmap.svg serves every movement polyline tagged data-days='2' with one point per spine day plus today (Nishi 180,216 -> 235,212; the old three-point form repeated the first day as the previous day), and https://nishifamily.com/compare/search/api.json (200, 153,839 B) carries trail:[[20711,750,199,97,46,67]] for Nishi and the matching spine row for Mojeek, Brave, Google and Marginalia; the trail grows by one point per day on all 115 boards from here
2026-09-17DV11landSUBSTRATE ROWS OFF THE MAP (2026-09-17): cd_sym_is_substrate and cd_substrate_mask in nx_cdmap_lib (plan join by rung symbol and rungrole, _ABSENT_ prefix stripped), the mask applied in nx_swcompare_lib cdmap_pass_heading with rows_matrix and rows_substrate_excluded in api.json and a Rows sentence in the page, nx_cdmap_gate T14 to T14g (135 of 135 GREEN on the laptop, planted plan excluded=2); sources on the NAS, generators building; the day spine's rows column records the denominator change, so the momentum across the change is read beside it, never as movement
2026-09-17DV11measureFIRST LIVE CUT ON THE SEARCH BOARD (2026-09-17): 35 of 93 matrix rows read substrate through the plan join and left the map, 58 feature rows remain; category means moved from centrality 832 and distinctiveness 178 to 799 and 209; Nishi 760 and 248 became 768 and 317 (the scaffolding rows had carried inherited rival cells that credited the rivals), Google 972 and 430 became 957 and 506; every quadrant assignment held. nx_cdmap_gate 135 of 135 GREEN on the laptop and the NAS with T14 to T14g; generators promoted (matrix 386052e8, sota 66c78395) with the one lost run named as the build-metadata path runtime/nx_brand_tokens.nx, fork copies in buildroot/_offc hash-identical to the promoted files
On these two registers. Rows are declared in the domain's plan file and carry the debt id, which is the join key back to the sovereign debt plane — that plane, not this page, is the authority on state. Reconciling them automatically (the regen reading the plane and refreshing these rows) is a named, owed rung; until it lands, treat an id here as a pointer to look up, not a status to trust.
Honest verdict. The coverage above records source-symbol presence. Stronger comparisons are authored claims, not measured runtime superiority or accepted outcomes. A watch contract names an expected source symbol; finding it changes source discovery only. Qualification, deployment and runtime acceptance require their own evidence.

Person · product · place — not yet measured for this domain

Every compare carries this layer. Declare knowledge/compare/datavis.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 datavis, 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).

Exclusive and shared capabilities

One capability is graded on one board; every other board references it. The fleet duplicate census (nx_rivalcensus dupes, on the fleetdupes clock row) reads every board's matrix and names each capability graded as a row on two or more boards, with a home derived from evidence: rung when exactly one board's plan contracts the symbol (that board is starred), gates when no plan contracts it and exactly one board's executed gate map runs the organ's gate (that board is plussed), ambiguous when several boards carry the deciding evidence (a decision for their seats), and none when no evidence decides it, with the reason beside it: unmapped (no board of the duplicate declares a gates map; declare the maps) or unproven (a map exists and runs none of the organ's gates; gate the organ on its proving board, or declare it a shared library by policy). A home elsewhere means this board should carry an @xrow reference to the home board's row rather than a graded row of its own; a home here means the other boards should. The table is this board's slice of one estate-wide census: the shape is shared, the rows are the board's.

This board grades 22 capabilities: 22 exclusive to it and 0 shared with other boards. Shared rows on this page: 0 = home here 0 + home elsewhere 0 + ambiguous 0 + undecided 0 + refused 0 (partition 0); undecided = unmapped 0 + unproven 0 + unevidenced 0; homonyms 1; since the previous census: new 0, resolved 0. Census FRESH age_s=7220.

CapabilityOrganBoards grading itHomeRuleEvidenceStanding on this board
main-browser:runtime/_hdl_build/nx_uiq_perf.nx, graphviz:runtime/_hdl_build/nx_eco_graph_forest.nx, graphviz:runtime/_hdl_build/nx_eco_graph_png.nx, graphviz:runtime/_hdl_build/nx_eco_graph_forest.nx, graphviz:runtime/_hdl_build/nx_eco_graph_wiki.nx, familyatlas:runtime/_hdl_build/nx_eco_graph_png.nx, familyatlas:runtime/_hdl_build/nx_eco_graph_card.nx, ecosysdesign:runtime/_hdl_build/nx_eco_graph_arch.nx, typography:runtime/nx_font_ttf_emit.nx, koikatsu:runtime/_hdl_build/nx_retarget_emit.nx, pmdash:runtime/nx_dr_ocm_cli.nx, failmodes:runtime/nx_compare_refs_gate.nx, ecosystem:runtime/nx_compare_rank_fleet.nx, gen:runtime/_hdl_build/nx_gen_orchestrator_daemon.nx, capregistry:runtime/nx_catalog.nx, capregistry:runtime/_hdl_build/nx_coe_intoto.nx, capregistry:runtime/nx_toolreg_reconcile.nx, capregistry:runtime/nx_capsweep.nx, datavis:runtime/_hdl_build/nx_chartlay_gate.nx, speech:runtime/nx_voice_eval.nx—homonym-homonym

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 STALE (age 1396325 s), sources read 4 of 7 declared — a BLIND census is a FLOOR: unread sources can only add rows.

kindnameboardsourceevidence
directivenx_a11y_checkdatavisplan-queuerung=DV3
directivenx_render_svgdatavisplan-queuerung=DV6
directivenx_figures_pagedatavisplan-queuerung=DV6
directivenx_figure_gatedatavisplan-queuerung=DV6
directivenx_viz_chartdatavisplan-queuerung=DV9
directivenx_batt_chartdatavisplan-queuerung=DV9
directivenx_mindmapdatavisplan-queuerung=DV9

rows shown 7|this board's directives 7|estate-wide un-boarded organs 452 (listed in full on /compare/ecosystem)|census rows 639|malformed 0 (counted, never rendered)

References

Beyond a link list. Every reference below resolves twice — the publisher's copy and, where banked, the estate's own non-rottable library mirror with a content pin — and carries its evidence class plus the exact claim on this page it grounds. Keyed marks like [key] in the matrix notes jump here. A dash means honestly absent, never assumed.
  1. [datawrapper] Datawrapper (2026). Product home: charts, maps and tables for newsrooms, the field's reference for responsive, accessible, themed charts. publisher · read in our library knowledge/fetched/rf_67ebdc04.raw · pin h3771e332d48163b41d138665d5957a5127225505eeb2b001fa22f71ba67c96c9 · accessed 2026-09-15 · vendor-docGrounds: Domain-fit axes with nice ticks
  2. [plot] Observable (2026). Plot documentation, Plots: marks, scales, axes, facets and the plot frame of a grammar-of-graphics library. publisher · read in our library knowledge/fetched/rf_d8bbbc78.raw · pin h73761a1e2723717d8d62ce1975c0afdad58738422c0d910c8c26bf7f1f5151b9 · accessed 2026-09-15 · vendor-docGrounds: Collision-free direct labels
  3. [vegalite] Vega-Lite (2026). Documentation index: a high-level grammar of interactive graphics with scales, axes, legends and view composition. publisher · read in our library knowledge/fetched/rf_60eaa53e.raw · pin haba275e3390d0dedec1578463ff40e19f10f1cb2ecdc2fb0781ad8edd1ffdd32 · accessed 2026-09-15 · vendor-docGrounds: Small multiples (scatterplot matrix)
  4. [d3] D3 (2026). What is D3: the low-level toolbox of scales, shapes, axes and selections the visualization field builds on. publisher · read in our library knowledge/fetched/rf_ccf7a5ea.raw · pin h67fa111c6e3e847ed5663cdb96bff3c405bf20d76118de49d3502253d643a9bd · accessed 2026-09-15 · vendor-docGrounds: Integer linear scale both ways
  5. [wcag3] W3C Accessibility Guidelines Working Group (2026-09-10). W3C Accessibility Guidelines (WCAG) 3.0, W3C Working Draft 10 September 2026: Text contrast sufficient (minimum) is a Core requirement at Developing status whose contrast measure is still to be determined and is assumed to carry a size and weight factor. publisher · read in our library knowledge/fetched/rf_09a7e0d6.raw · pin hd8653102cc537e909b6d4a68785e24bd9c1872c567bcc02c890e34ba1b9f456b · accessed 2026-09-15 · published-standardGrounds: Text contrast measured (WCAG 3 draft)
  6. [css2025] W3C CSS Working Group (2025-09-18). CSS Snapshot 2025, W3C Group Note: the modules that make up the current state of CSS. publisher · read in our library knowledge/fetched/rf_96b252f5.raw · pin hcb69f0c0754b80c438521def32cf2a6851fa8ac3cc612d2b7bfaaf49afb35f59 · accessed 2026-09-15 · published-standardGrounds: Print stylesheet for boards
  7. [fidelity26] Saharan S., Oliver M., Gordon K., McGill G., Jenkinson J. (2026-09). Representational Fidelity in Didactic Visualization: Toward a Multidimensional Design Space. arXiv 2609.08037, to appear in IEEE TVCG (IEEE VIS 2026): five fidelity dimensions (Morphological, Dynamic, Cueing, Contextual, Interactive) derived from a 175-item corpus. publisher · read in our library knowledge/fetched/rf_f901b785.raw · pin h65c0be833cfffa573ce19c5783602f13db2e25574fc7813bef9d44d6443a9d5d · accessed 2026-09-15 · published-paperGrounds: Readability critic self-grade
  8. [insight26] Hutchinson M., Huq S.M., Albinhassan M., Jianu R., Slingsby A., Madhyastha P. (2026-09). InSight: A Benchmark for Agentic Claim Verification in Interactive Visualizations. arXiv 2609.01383, EMNLP 2026: 21,349 claims over fully interactive web visualizations, interaction traces as the proxy for reasoning. publisher · read in our library knowledge/fetched/rf_f8fdee42.raw · pin hed2daf083904c540b0c22d52bd9d650790091c4b72191278865f1efc34c20090 · accessed 2026-09-15 · published-paperGrounds: Outside referee: browser render judged on pixels
  9. [arxivcshc202609] arXiv cs.HC listing, September 2026 (Human-Computer Interaction): 294 entries, fetched and read for the month's newest visualization work. publisher · read in our library knowledge/fetched/rf_bec44911.raw · pin h660676368e927c8bb1f1f00a97906ddaec13c996c1d3ef58258617f3f3b2e0f4 · accessed 2026-09-15 · mirrored-indexGrounds: SB-DATAVIS
  10. [awwwards] Awwwards (2026). Sites of the Month: the juried monthly award for web design; the listing read on 2026-09-15 runs January to August 2026. publisher · read in our library knowledge/fetched/rf_76a26fd4.raw · pin hb73486e1368c4dace6ad490cab1359d37fe6113c411b1fc2822a454dad443216 · accessed 2026-09-15 · mirrored-indexGrounds: SB-DATAVIS
  11. [iib] Information is Beautiful Awards (2026). The awards celebrate excellence and beauty in data visualizations and infographics. publisher · read in our library knowledge/fetched/rf_bf258644.raw · pin h6069b630cdb1b6e3ece16758352f3a3bb4a0c13a423ff820355eb5248eccb89a · accessed 2026-09-15 · vendor-docGrounds: SB-DATAVIS
  12. [bright] BRIGHT: a reasoning-intensive retrieval benchmark, live leaderboard; the estate's outside referee for search and the template for the outside referee this board owes. publisher · read in our library knowledge/fetched/cmp_search_brightbenchmarkbrightbenchmarkgit.html · pin hbc96adc8a1f8ca5030b1b3677fde24ce58cb92e23f127f443ef0b3a420f926f1 · accessed 2026-09-04 · datasetGrounds: Leaderboard with computed rank
  13. [hbr2015] Dawar N., Bagga C.K. (2015-06). A Better Way to Map Brand Strategy. Harvard Business Review, June 2015: the centrality-distinctiveness map and its four quadrants. publisher · read in our library knowledge/fetched/rf_a5ae141e.raw · pin ha770ad8e1c8f1045f63e25cdd43ea1bf8eac80dca7dd1050e75e0f1bb8a6b5ea · accessed 2026-09-15 · published-paperGrounds: Four-quadrant position map

generated by nx_swcompare_matrix (sovereign NishiLang organ) from knowledge/compare/datavis.matrix · source checks show implementation presence; runtime and user-outcome evidence are reported separately · JavaScript supports page controls