A capability-KIND axis for atlas recombination: built, measured, demoted, and shipped dormant on purpose.
Unmeasured is unproven. That is the rule the whole program runs on, so the most valuable thing the atlas could tell us is “this thing makes something, that thing grades things, and they have never been introduced.” The scorer had no way to express it. Maximum possible score was 2 for shared data plus 1 for a cross-lane pair — three points, neither of them about capability.
A new axis is only real if the old code demonstrably could not produce the result. The old maximum is 3, so anything above 3 must return nothing. It does:
| minscore | before (live binary) | after (KIND axis) |
|---|---|---|
| 2 | 40 proposals | 40 proposals |
| 4 | nothing — saturated | 36 proposals |
| 5 | nothing — saturated | 5 proposals |
| 6 | nothing — saturated | 3 proposals |
| 7 | nothing | nothing — new ceiling is 2+1+3=6 |
The saturation point landing exactly on the predicted arithmetic is worth more than the proposal counts: it says the axis is doing the thing it was designed to do, not merely changing the output.
Coverage came back 2 makers, 20 rulers, 4 unclassified. Seventy-seven percent of the estate classified as a measuring instrument. That is not obviously wrong for a governance-heavy catalog, and it is exactly the kind of number a person accepts because it is not impossible.
So instead of accepting it, I made the tool report which column decided each answer. That is when it fell apart.
| Deciding evidence | Organs | Quality |
|---|---|---|
Organ name (bench, judge, check) | 4 | all defensible |
| Task verb | 2 | defensible |
| Free-text note | 16 | proven wrong |
| Nothing matched | 4 | honestly unknown |
The disproof was sitting in my own work. nx_recolor is an organ I wrote. It recolours garments; it is a MAKER and there is no ambiguity about it. The note channel classified it RULER — because its note mentions grading.
The root cause generalises, which is what makes it fatal rather than a one-off: in this program every note describes how the thing is gated. Notes talk about verdicts and checks and grades because everything here is gated. So a keyword search over notes returns “ruler” for nearly any organ, and the 20-out-of-26 result was measuring our documentation habits, not our capabilities.
A channel demonstrably wrong on an organ I have ground truth for cannot be trusted on the twenty I do not.
Kinds now carry a confidence tier, and only trusted evidence earns the new score. A note-derived guess still appears in the diagnostic dump — it is a hint worth seeing — but it cannot move a proposal up the ranking.
minscore=2 -> DISCOVERED proposals=40 organs=26 makers=2 rulers=20 unclassified=4
declared=0 trusted=6 guessed=20
NOTE: no row declares a kind (catalog has no column 7), so the
measure-gap axis is DORMANT by design rather than guessing from free text
minscore=4 -> no novel proposals above minscore (atlas saturated at this threshold)
Read that carefully, because it is the honest outcome: the feature I just built currently produces nothing. The 36 proposals were real output from a signal I then disproved. Shipping them would have meant handing over three dozen confident recommendations derived from what our notes happen to say. The tool now declines, and explains why in its own output rather than in a comment only I would read.
Dormant code is unproven code, so the declared-kind route was exercised end to end against a private two-row catalog. The fixture is built to prove precedence rather than mere presence: each organ is named as the opposite of what it declares.
nx_alpha_bench declares MAKER (name says "bench" -> RULER)
nx_beta_gen declares RULER (name says "gen" -> MAKER)
kinds -> nx_alpha_bench MAKER by=DECLARED (column 7, strongest)
nx_beta_gen RULER by=DECLARED (column 7, strongest)
minscore=2 -> proposals=2 declared=2 trusted=2 guessed=0
minscore=6 -> proposals=1 declared=2 trusted=2 guessed=0
The catalog schema is task | organ | owner | expo | state | count | note. There is nowhere to say what an organ is, which is the whole defect — the heuristic was only ever a workaround for a missing field. The fix is an additive column 7 carrying MAKER or RULER; existing readers index 0–6 and are unaffected. The scorer already reads it, with precedence, proven above.
I did not apply it. commontask is a shared, contended plane owned by another lane, and quietly rewriting someone else's registry to light up my own feature is how you corrupt a registry. It is filed as debt with the exact change and the evidence behind it.
Returning later to add a single row for a different organ, I checked what a plane write actually does — on a throwaway plane, not on production. Seeding the same two-row fixture twice left two rows, not four.
sts_seed replaces a plane. It does not append.
So there is no safe way to add a row to a shared catalog. Adding one means read-modify-write of the entire plane, and on a contended plane that is a textbook lost update: a sibling writing between my read and my write is silently erased, and a partial write destroys the registry outright. Had I “just added my row” to commontask, the 42 rows already there would have become one.
This blocks two unrelated pieces of work at once — the KIND column this page is about, and registering a newer organ so recombination can see it at all. Both were stuck on the same missing primitive, which is the useful part: it is not a catalog problem, it is a write-API problem.
The fix needs no new syscall. sys_flock and LOCK_EX already exist, so an additive nx_plane_append that locks per prefix, loads, appends, re-seeds and releases would close it. I have not built it: that is core data-plane surgery, the blast radius of getting it wrong is a wiped registry, and it belongs to the lane that owns the store. Filed with the proposed design.
The general rule this leaves behind: until an append primitive exists, treat every shared plane as read-only from any lane that does not own it — and establish what a write verb does on a throwaway before pointing it at production.
nx_plane_append now exists — and rather than promising to be safe, it is built so that losing rows requires every one of four independent checks to fail at once.| Guard | What it refuses |
|---|---|
| Originals held in memory | A restore is possible at every point, so no failure path ends with a shorter plane. |
| Absent plane is refused | A mistyped prefix cannot conjure a plane that later reads as authoritative. |
| Pre-commit preservation check | The assembled buffer must be strictly longer and still start with the original bytes. An append that does not preserve its input is not an append. |
| Post-commit re-read | A commit returning success is not evidence the plane is correct. The row count is verified by reading it back; any mismatch restores the original and reports RED. |
Two of the six teeth carry the weight. The first is a negative control: it seeds a two-row plane, calls the raw seeder with one new row, and asserts the plane is left with one row. The danger this organ exists for is demonstrated on every run, not asserted in a comment — and if the seeder ever gains append semantics, that test fails and tells us this organ is obsolete. The second checks that the original bytes survive byte-for-byte, because a row count alone would pass even if the codec rewrote every original row.
[PASS] T1 NEGATIVE CONTROL: a raw sts_seed DESTROYS the plane (2 rows -> 1, want 1) [PASS] T2 APPEND ADDS ONE: 2 rows + append -> 3 rows [PASS] T3 ORIGINALS INTACT: post-append body still starts with the exact original bytes [PASS] T4 FAIL-CLOSED: appending to an absent plane is REFUSED, not created [PASS] T5 GUARD IS NOT DECORATIVE: a shorter/divergent buffer is rejected [PASS] T6 APPENDS ACCUMULATE: a second append -> 4 rows === nx_plane_append 6/6 verdict=GREEN
Then it was used on production. The catalog went from 45 rows to 46; every one of the 25 pre-existing atlas-visible organs was still present and exactly one was gained. And because that row declares its kind in column 7, the axis this page is about finally fires on real data:
before: declared=0 trusted=6 guessed=20 ... measure-gap axis is DORMANT by design
after : declared=1 trusted=7 guessed=20
nx_sweepcheck RULER by=DECLARED (column 7, strongest)
Still open, and worth being precise about: this unblocks adding a row with a declared kind. Backfilling column 7 onto the 45 existing rows is a modify, not an append, and no safe modify primitive exists — it would need the same lock plus a per-row invariant that only the target row changed. So the axis is live for organs declared through this path and still dormant for the rest. And the lock serialises appends made through this organ; a writer calling the seeder directly still bypasses it. That is the one correct path, not a guarantee about every path.
Eleven pinned cases, GREEN. Six classify known organs. Three pin the confidence tiers so the demotion cannot be silently undone. Two are negatives that would catch over-eager keywords:
| Case | Why it is there |
|---|---|
gen_bench → RULER | Pins precedence. Something that both generates and measures is a ruler for recombination, because grading the other side is what makes it worth pairing. |
nx_recolor → UNKNOWN by name | The organ this whole page turns on. It is a maker that is not named like one, so name-level classification must honestly return nothing rather than reach for the note. |
nx_qqq → UNKNOWN | A nonsense name must not match anything. |
| note-derived is never trusted | Stops a later edit from restoring the disproved channel to scoring weight. |
Five build-and-promote cycles produced a feature that currently emits zero proposals. That is a fair description and also the wrong way to read it. What was actually bought: a measurement showing our capability catalog does not record capability, a disproof with a named counterexample rather than a hunch, a proven-correct path waiting on one additive column, and eleven tests that will fail loudly if anyone re-enables the channel that lied.
The alternative was 36 confident proposals and a green headline.