Built is not the same as usable
The first version of this ruler scored capabilities on whether the code exists. That flattered us. This tree contains roughly five thousand organs that are compiled, correct, and reachable by nobody — and the ruler had no way to say so.
It now scores two dimensions. Built asks whether the implementation exists and survives its evidence probe. Usable additionally requires the implementation to be deployed on the live host. A capability the product cannot reach scores GAP no matter how good its code is, so the headline is the usable number.
The gap between the two bars — 613 built vs 547 usable — is the migration backlog: capability already designed, written, and paid for, that no user can currently touch. Closing it costs a deploy, not a rewrite. 2 capabilities remain in that state today.
Declared floor, stated rather than implied: this probes deployed, not called. A deployed binary that no running daemon invokes still scores usable, so the real number can only be lower than 547 — never higher.
Why you can believe the number
A capability may only be scored HAVE if it names an evidence artifact that exists on disk at the moment of measurement. The ruler opens every one of those paths when it runs.
- Name a file that isn’t there → the claim is destroyed, not footnoted. It drops to GAP and the headline falls with it.
- Claim a win with no artifact at all → capped at PARTIAL. You cannot assert an unproven win.
- Evidence can only ever demote. A present file never promotes a GAP into a HAVE, so no gap can be laundered into a win.
- Axes no reference product ships are excluded from the denominator — coverage cannot be inflated by inventing categories we happen to be good at. Three such capabilities were found and excluded (listed below).
This run reported liar_killed=0. A broken audit would report the same
zero, so the mechanism is separately proven by nx_mmbench_gate, which passes 24/24
GREEN including a negative control: a HAVE pointed at a deliberately absent artifact must come back
GAP, and the headline must fall (1000‰ → 666‰ on a planted three-cell
set). The zero is a measured zero, not an untested one.
Fourteen further teeth guard the second dimension, including the ones that matter most: a fully-built HAVE with no deployment must collapse to GAP; a deployment must never promote something we never built; and a deployed artifact the serving binary never references is still DARK — so the wiring axis can lower the score but can never invent capability.
How “wired” is proven. Checking that a file exists is weak — a
binary can sit on disk that nothing ever calls. The stronger test, borrowed from an organ this
ecosystem already had rather than invented here, is to read the live serving binary and
confirm it actually references the organ. That organ (nx_reader_liveness) exists because
mobi/azw decoders once shipped built, gated, and green while the serving path never routed to them, and
roughly 390 books dead-ended. Where a serving binary is named, nx_mmbench now applies that
test. Verified on our own stack: nx_gallery_serve.elf genuinely contains
/volume1/ai/galx/nx_galx_thumb.elf 384, …/nx_galx_upscale.elf one 2 and
…/nx_ts_index.elf — six capabilities re-checked under the stricter rule and all
six held. An unreadable or oversized binary returns unknown and falls back, never a false dark.
The build order
Gaps ranked by demand — how many of the twelve reference products ship that capability. A gap six products consider table stakes outranks one that a single product has. This ordering is arithmetic, so the roadmap is not a matter of taste.
Closed this round: metadata-scrape (was #1, demand 6). It turned out not to need
writing at all. nx_media_extract — a layered, self-healing extractor that learns URL
patterns from its own past failures — already existed, gate-proven 6/6, imported by eight
callers, and deployed nowhere. Building a new scraper would have duplicated it. It is now deployed and
registered as the MCP tool nx_media_probe, and proven against a live page: archive.org
fetched over our own TLS (200, 192,734 B) returning a media URL at confidence 90 and the title
“Big Buck Bunny : Free Download, Borrow, and Streaming : Internet Archive”.
- library-fulltext-search — demand 5, now GAP.
- collections-series — demand 5, now GAP. Grouping loose files into series/collections.
- multi-user-profiles — demand 5, now GAP.
- responsive-mobile-ui — demand 5, now GAP.
- faceted-browse — demand 5, now PARTIAL.
- watch-history — demand 4, now GAP.
- subtitle-tracks, audio-track-select, hevc-h265-index, resume-watch-state, adaptive-bitrate-ladder, memory-consolidation-dream, download-queue-manager — demand 3 each.
Thirteen further gaps at demand 2 and below complete the queue of 27. Two of them
(rss-auto-acquire, site-scraper-adapters) are dark rather than missing
— nx_feed_extract and nx_archive_capture already exist in the tree. Like
metadata-scrape, they are deploy work, not build work.
Standing in for each reference product
Of the capability vector each product actually ships, how much of it we could serve today. A low score against a broad product is not a failure — it is the honest distance.
| Reference product | Readiness ‰ | Caps it ships | Plane |
|---|---|---|---|
| ChatGPT (with memory) | 800 | 5 | companion |
| Immich | 708 | 12 | media |
| qBittorrent | 687 | 8 | media |
| SillyTavern | 650 | 10 | companion |
| Sonarr / Radarr | 625 | 8 | media |
| Replika | 566 | 15 | companion |
| Character.AI | 550 | 10 | companion |
| Emby | 541 | 24 | media |
| Jellyfin | 538 | 26 | media |
| Plex | 538 | 26 | media |
| Kavita / Komga | 500 | 13 | media |
| yt-dlp | 500 | 4 | media |
The pattern is legible: we are strongest where the product is narrow and infrastructural (torrent, dedup, storage), and weakest where it is broad and library-shaped (Jellyfin and Plex both at 538‰ across 26 capabilities). The companion plane scores well on the substrate — persona, memory, emotional state — and loses points on voice and multi-character.
Ownership
Who is responsible, accountable, consulted and informed for each function of this lane. Roles, not individuals — a lane owned by a session is a lane that dies with the session.
| Function | R | A | C | I |
|---|---|---|---|---|
| Measure the media + companion planes (this ruler) | engineer-media | pm | critic / adversary | all |
| Keep the ruler honest (gate, negative controls, floors) | referee | pm | adversary | operator |
| Rank the gap queue (demand arithmetic) | pm | pm | architect | operator |
| Close media gaps (library, seek, acquisition) | engineer-media | pm | architect | referee |
| Close companion gaps (memory, voice, arcs) | engineer-companion | pm | architect | referee |
| Deploy dark capability (wiring, not writing) | engineer-media | pm | supervisor | all |
| Publish evidence + keep this page true | librarian + sites | pm | — | all |
| Adult-content boundaries on the private planes | warden | operator | pm | — |
These rows are published here and filed as lane rows; folding them into the ecosystem-wide RACI seg-store is deliberately left to the organ that owns that plane rather than hand-written into a shared store from this lane.
Every capability, with the artifact that proves it
Metrics beside the evidence, never instead of it. The evidence column is the exact path the ruler opened at measurement time. If a path in this column ever stops existing, the next run downgrades that row automatically and the headline drops — the page cannot quietly go stale into a lie.
Media plane
| Capability | Verdict | Demand | Evidence artifact probed |
|---|---|---|---|
| library-scan-catalog | HAVE | 6 | /volume1/ai/galx/nx_media_ingest_pipeline.elf |
| metadata-scrape | PARTIAL | 6 | none named — un-migrated Python surface |
| cover-art-poster | HAVE | 6 | /volume1/logging/uwunikaa |
| client-api | HAVE | 8 | /volume1/ai/galx/nx_gallery_gateway.elf |
| auth-gated-access | HAVE | 7 | /volume1/ai/galx/nx_gallery_gateway.elf |
| thumbnail-generate | HAVE | 5 | /volume1/ai/galx/nx_galx_thumb.elf |
| faceted-browse | PARTIAL | 5 | /volume1/ai/galx/nx_gallery_gateway.elf |
| library-fulltext-search | PARTIAL | 5 | none named |
| collections-series | GAP | 5 | — |
| multi-user-profiles | GAP | 5 | — |
| responsive-mobile-ui | PARTIAL | 5 | none named |
| watch-history | GAP | 4 | — |
| trickplay-scrub-sprites | HAVE | 3 | /volume1/logging/uwunikaa |
| keyframe-seek-index | PARTIAL | 3 | /volume1/ai/galx/nx_ts_index.elf |
| duration-index | HAVE | 3 | /volume1/ai/galx/galx_durindex.log |
| remux-fmp4-cmaf | HAVE | 3 | /volume1/ai/galx/nx_ts2fmp4.elf |
| matroska-remux | HAVE | 3 | /volume1/ai/galx/nx_mkv2fmp4.elf |
| range-request-serve | HAVE | 3 | /volume1/ai/galx/nx_gallery_serve.elf |
| live-dvr-record | HAVE | 3 | /volume1/logging/uwunikaa |
| hevc-h265-index | GAP | 3 | — |
| adaptive-bitrate-ladder | GAP | 3 | — |
| resume-watch-state | GAP | 3 | — |
| subtitle-tracks | GAP | 3 | — |
| audio-track-select | GAP | 3 | — |
| download-queue-manager | PARTIAL | 3 | none named |
| thumbnail-prewarm-at-scale | PARTIAL | 2 | /volume1/ai/galx/galx_pipeline.log |
| seek-index-backfill-at-scale | PARTIAL | 2 | /volume1/ai/galx/nx_galx_idx_backfill.elf |
| rss-auto-acquire | GAP | 2 | — |
| content-dedup-cid | HAVE | 1 | knowledge/store/mvault-manifest.txt |
| incremental-rescan-resume | HAVE | 1 | knowledge/store/mvaultpath-manifest.txt |
| dup-reclaim-report | HAVE | 1 | knowledge/store/mvault-manifest.txt |
| torrent-seed | HAVE | 1 | nx_torrent_seed.elf |
| dht-magnet | HAVE | 1 | nx_torrent_mkinfo.elf |
| tracker-multi | HAVE | 1 | buildroot/runtime/torrent_trackers.txt |
| torrent-leech | PARTIAL | 1 | nx_torrent_leech_probe.elf |
| site-scraper-adapters | GAP | 1 | — |
| manga-multipage-reader | GAP | 1 | — |
Companion plane
| Capability | Verdict | Demand | Evidence artifact probed |
|---|---|---|---|
| persistent-memory | HAVE | 4 | /volume1/ai/gen/elara_mem.log |
| in-chat-photo-gen | HAVE | 4 | /volume1/ai/gen/nx_gen_live_probe.elf |
| cross-device-continuity | HAVE | 4 | /volume1/ai/gen/elara_mem.log |
| companion-ui-surface | HAVE | 4 | /volume1/ai/gen/elara_ui.html |
| persona-data-driven | HAVE | 3 | /volume1/ai/gen/elara_appearance.txt |
| identity-locked-gen | PARTIAL | 3 | /volume1/ai/gen/elara_loras.txt |
| memory-consolidation-dream | GAP | 3 | — |
| state-drives-visuals | HAVE | 2 | /volume1/ai/gen/elara_shots.txt |
| day-arc-life-sim | PARTIAL | 2 | none named |
| relationship-progression | PARTIAL | 2 | none named |
| proactive-initiation | GAP | 2 | — |
| voice-tts | GAP | 2 | — |
| multi-character | GAP | 2 | — |
| emotion-state-model | HAVE | 1 | /volume1/ai/gen/elara_state.txt |
| state-drives-voice | HAVE | 1 | /volume1/ai/gen/elara_state.txt |
| voice-input-stt | GAP | 1 | — |
Excluded from the denominator
Three capabilities we ship that no reference product does. They are reported but deliberately kept out of the score, because counting them would let us raise our own grade by being unusual rather than by being good.
image-upscale HAVE
self-heal-keeper HAVE
async-batch-gen PARTIAL
The corpus this is measured over
| Quantity | Value | Provenance |
|---|---|---|
| Vault records (content-addressed, deduped) | 20,674 | live read of the seg-store at measurement time |
| Recordings catalog lines | 76,004 | stored census, generated 2026-07-17 — 8 days stale |
| Recordings on disk | 53,567 | same stored census, same staleness |
| Movies / titles | 2,391 / 205 | same stored census |
| Books | 2,822 | same stored census |
Stated plainly: the vault migration is in flight, not finished. 20,674 content-addressed records is a real and growing number — it was 114 three days ago — but it is not yet the whole corpus. The two figures also come from different clocks: the vault count is live, the catalog census is eight days old and is labelled as such rather than presented as current. Ratios between a live number and a stale one are not published here, because they would be arithmetic on mismatched clocks.
Reproduce this
The ruler is a live sovereign tool, not a document. Anyone holding a capability for it can re-run the measurement and get today’s numbers rather than this snapshot’s:
nx_mmbench → full report
nx_mmbench json → machine-readable, all 28 gaps
nx_mmbench gapq → the build order only
nx_mmbench_gate → the 10 teeth, including the negative control
Both organs are sovereign NishiLang, compiled and served on our own hardware, reachable over our own TLS and our own capability tokens. No third-party runtime is in the path of the measurement.
What this page is not
It is a snapshot, hand-published. The ruler is live; this rendering of it is not yet self-emitting, so it can drift from the tool. Making it regenerate itself from the organ on a schedule is filed as the next rung on this lane rather than quietly assumed. Until then, the tool is the truth and this page is a dated report of it.