Repository navigation
Three receipts for instrument_output_read_as_subject_content, and the order-statistics form of the class - #9939
Conversation
… order-statistics form
The class already says a report can be complete for the REPORTER's purpose and be read as
complete for the CONSUMER's. Three specimens from one session, all of which presented as a
green or a zero rather than as an error:
1. `ctrl-build --remote -- cargo check ... | tail -8` -- the pipeline exits with TAIL's
status, so it is zero whatever the compiler said, and the kept window is executor
cleanup chatter with no line capable of holding an error.
2. A regeneration wrapped in `/usr/bin/time -v` where that binary does not exist: bash
died at the wrapper, exited ZERO, the program never ran, and the empty `git diff` read
as "no drift" -- the answer that would have retracted a correct finding.
3. The floor's `[over-cost]` listing, from which order statistics were computed and
reported as a distribution. It prints the 25 most expensive of 285 and SAYS SO in its
own last line.
The third is why this is an append to the standing row rather than a new one. The first two
are filters the CONSUMER wrote, and the existing guard -- select on the result pattern,
never on position -- catches both. The third is truncation the PRODUCER performed for its
own readability and DECLARED IN BAND, so there is no consumer-authored `head -N` to notice
and diligence along the guard returns green. Provenance intact, subject substituted: this
class exactly.
The general form extends the recognition rule from completeness to ORDER: a ranked list is
a VIEW, and a view's order statistics are not the population's. A median over a top-K has
the same shape and units as the real thing and carries no trace of the truncation, which
makes it more dangerous than a wrong count -- a count at least invites "out of how many".
The harm is recorded because it was not to the author's own conclusions: the wrong
distribution had already been relayed to a lane authoring a declared rung drop whose
population is a function of headroom against observed inflation, and it would have moved
that population in the direction that makes a class look larger -- the direction nobody
audits.
`evidence` stays `[]` per this file's header: nothing resolves it, the projection renders
`.authored` alone, and populating it is the §4b decoration case.
DESIGN.md regenerated and byte-identical -- the index carries identities, not prose, and
this adds no class.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJAqfo1UK4zkzcM7cQ8oj6
main landed #9935 and #9868 into docs/design-ledgers.md while this branch held a receipt append to gunbc.recurring_failure_mode. The split-into-rows shape did its job exactly as that file's header promises: `Auto-merging dag/gunbc/recurring_failure_mode.dag` with no conflict, because two lanes touching two different rows is not disagreement about one fact. Only the derived file conflicted, and the driver refused it rather than answering -- GeneratedArtifactConcurrentDivergence, no markers, path unmerged, ours side in the worktree. Regenerated from the merged authority through `tools.generated_artifact_gate` `main_wet_one`; against origin/main the result is one line in the authority and one line in the projection, which is this row and nothing else. The interpreter was rebuilt against the MERGED tree, with the prior binary deleted first. A binary built before #9868/#9935 renders the pre-merge shape and would re-drift the file it is converging while exiting zero -- the same trap this branch's own receipts are about. DESIGN.md is not regenerated and does not need to be: it carries class identities, not authored prose (verified by execution on this branch -- regenerating it after the receipt append produced a byte-identical file), and this change adds no class. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WJAqfo1UK4zkzcM7cQ8oj6
…urvived at row grain
GitHub reported MERGEABLE/CLEAN on the previous head and that was the WRONG answer:
GitHub does not run this repository's merge driver, so it answers with its own text merge
and cannot see the class the driver exists to catch. `git merge-tree --write-tree` returns
rc=1 with GeneratedArtifactConcurrentDivergence on docs/design-ledgers.md. Both sides had
changed the projection since the merge base -- main through eleven merges today -- so
neither side's bytes are the projection of the merged authorities.
The authorities merged themselves again: recurring_failure_mode.dag and rung_drop.dag both
auto-merged with no conflict, because two lanes editing two different rows is not
disagreement about one fact. Only the derived file conflicted, and it was regenerated from
the merged authority rather than resolved by hand or by picking a side.
VERIFIED BY CONTENT AT ROW GRAIN, not by key set. Every `data <identity>` row in both
authorities, compared against origin/main on identity AND authored-cell length:
recurring_failure_mode 33 rows both sides LOST 0 SHRUNK 0 ADDED 0
GREW 1: instrument_output_read_as_subject_content 4168 -> 7634
rung_drop 11 rows both sides LOST 0 SHRUNK 0 ADDED 0 GREW 0
The +3466 on that one cell equals the projection's growth exactly, so the rendering carried
the append and nothing else. Key-set comparison would have missed within-row truncation --
every row still PRESENT, and presence is not content -- which is how a loss got through
elsewhere today.
Recording the weaker check too: a first pass split the projection on markdown headings and
reported PASS over 14 section-level keys. That verdict was true and at the wrong grain; the
33-row authority comparison above is the one that answers the question.
Regenerated with main_wet_one on the single conflicted path rather than main_wet. The
whole-roster fold rewrites all 35 artifacts whatever you came for and the gate's own note
records it resurrecting a deleted file and sweeping in unrelated drift; main's other
projections arrive correct through the merge. Same cost, smaller blast radius.
Interpreter rebuilt against the merged tree, prior binary deleted first.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WJAqfo1UK4zkzcM7cQ8oj6
…ment that answers wrongly TWO ROWS, NOT ONE, because they have different triggers and different owners and bundling them would mean neither can retire independently. (i) FOURTH RECEIPT on `instrument_output_read_as_subject_content`. The carrier-realization census prints `subjects=1320` over 1320 files, and 1320 is the count of files INGESTED, not modules CENSUSED: only 845 produce rows and 475 -- 36% -- are silently omitted. `v2.compiler.parse` is absent; `v2.std.compilers.lexing` is absent while four of its siblings are present, so it is neither a test filter nor obvious unreachability. The selection rule is deliberately NOT stated in the row, because it was not determined and a guessed mechanism in a ledger is worse than an incomplete one. What it cost is recorded rather than imagined: a fixture authored to settle an unrelated question landed in the omitted 475 and produced zero rows INCLUDING ITS OWN POSITIVE CONTROL. Its emptiness was exactly what the hypothesis under test predicted, so without the control it would have shipped as confirmation on evidence containing none. (ii) NEW CLASS `alias_resolution_collides_with_kernel_spelling`, named for the mechanism rather than the symptom: a reader resolves a qualified reference through a type alias, lands on the alias declaration's own name, and that name COLLIDES with a kernel spelling -- so the row is attributed to the kernel, naming the exact carrier the qualification was written to move away from. It does not fail to answer; it answers confidently and wrongly, which is the whole severity, because a missing answer is visible to its consumer and an inverted one is not. Specimen executed on covered ground: two functions appended to `v2.compiler.tokenize` on adjacent lines, identical position kind, differing only in alias-versus-concrete. The `std.determinism.Determinism` param keeps its dotted name; the `v2.std.text.String` param returns as bare `String` attributed to `<kernel:String>`. Both produced rows (17661 -> 17663), which is what makes the negative half evidence rather than absence. Bounded against its two nearest neighbours in the same file: against (i), where the report is complete for the reporter and the defect is in the READING, while here the report is wrong on a row it does examine and no careful reading recovers it; and against `hollow_alias`, where a second name is minted for one concept, while here the alias is legitimate modelling and what fails is a reader of it. Rung stated honestly: mechanically preventable at best today and CURRENTLY UNENROLLED. The next-rung trigger is that two-line probe enrolled as a discriminating RED in any covered module, and the row says the trigger is cheap on purpose -- a class whose RED is two lines and still does not execute has no excuse. Both projections regenerated from the merged authority; DESIGN.md moves this time because a new class adds an identity to its index. Verified at row grain against origin/main: recurring_failure_mode 34 -> 35 rows, LOST 0, SHRUNK 0, ADDED the new class, GREW only instrument_output_read_as_subject_content; rung_drop 11 rows unchanged. Recorded because it is the reason this commit exists twice: the first insertion put the new declaration INSIDE the roster list literal, since the last `data` line in the file is the roster itself rather than the last class row. The compiler refused with a located error and the generator wrote NOTHING -- while the row-grain verifier reported PASS, because it reads declarations by regex and does not see nesting. A verifier is sound only for the question it asks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WJAqfo1UK4zkzcM7cQ8oj6
…splay-read-as-content # Conflicts: # DESIGN.md # dag/gunbc/recurring_failure_mode.dag # docs/design-ledgers.md
|
CI red at The failure, verbatim from One file, and it is a stage0 mirror — not one of the two generated projections this PR touches. The positive control, from the same run: Every one of the 35 generated artifacts matches, including the two this PR regenerates. So the class of drift I am responsible for is measured at zero on this head, and the red is a different class in a different tree location. That distinction is what makes this an inherited red rather than a claim that my work is fine — a bare "not mine" with no nonzero beside it would be worth nothing. Why I am not pushing a fix. Repairing it here would mean regenerating another session's stage0 mirror on my branch, which lands the same bytes from two directions and is how a second drift gets created.
— sent from vivid-deer-102 |
…blishes the false-subject claim #9949 withdrew (#9998) required-witnesses-build is red on main from a generated-surface drift in gunbc_rust_source_type_bindings.rs. #9949 corrected the String row's proof to retract a subject that was never run, but its stage0 mirror was not regenerated, so the committed Rust still asserts the census ran 'over A FIXTURE MODULE importing both v2.std.text String and v2.std.node Node'. There were no fixture rows; the subjects were live corpus modules. The stale mirror is therefore still publishing, as generated Rust, the exact citation defect that PR existed to withdraw -- which is why this is a repair and not a formality. Exactly one line changes (line 65, the proof: string). Installed from the regen candidate, not hand-edited. BOTH PASSES RUN, and the second is not ceremony here even though the change is one line: the first pass runs a binary that predates the change it emits, so it can self-verify at divergence 0 for the wrong reason. Pass 1 at d11d66b reproduced the drift (first_generation_equal=false, planned=150 executed=150 adjudicated=150). After installing and rebuilding, pass 2 reports first_generation_equal=true, 150/150/150. main.rs remains declared_divergent=1 and was deliberately NOT installed. SCOPE, stated so it is deliberate rather than accidental: this is the FIRST of #9949's two obligations. The second -- the alias_resolution_collides_with_kernel_spelling citation that resolves nowhere on main -- belongs to #9939 and is untouched here. Claude-Session: https://claude.ai/code/session_01FdxzwWekWhHR2FCTTf8a1b Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…splay-read-as-content # Conflicts: # DESIGN.md # dag/gunbc/recurring_failure_mode.dag # docs/design-ledgers.md
…splay-read-as-content # Conflicts: # DESIGN.md # docs/design-ledgers.md
Appends three receipts to the standing
instrument_output_read_as_subject_contentrow ingunbc.recurring_failure_mode, and extends its recognition rule from completeness to order. Ledger-only: the.dagauthority and its regenerated projection, nothing else.Why an append and not a fourth row
The class already says a report can be complete for the reporter's purpose and be read as complete for the consumer's. All three specimens are that shape, so a new row would fork one fact (§3).
Three from one session, each of which presented as a green or a zero rather than an error:
ctrl-build --remote -- cargo check ... | tail -8— the pipeline exits withtail's status, so it is zero whatever the compiler said, and the kept window is executor cleanup chatter containing no line capable of holding an error./usr/bin/time -v, which does not exist in these containers. Bash died at the wrapper, exited 0, the program never ran, and the resulting emptygit diffread as "no drift" — the answer that would have retracted a correct finding already registered as a prediction.[over-cost]listing, from which order statistics were computed and reported as a distribution. It prints the 25 most expensive of 285 and says so in its own last line.What the third one adds, and why the standing guard could not catch it
The first two are filters the consumer wrote, and the existing guard — select on the result pattern, never on position — catches both. The third is truncation the producer performed for its own readability and declared in band. There is no consumer-authored
head -Nto notice, so diligence along the guard returns green.Hence the general form now in the row: a ranked list is a VIEW, and a view's order statistics are not the population's. A median over a top-K has the same shape and units as the real thing and carries no trace of the truncation, which makes it more dangerous than a wrong count — a count at least invites "out of how many".
The harm is recorded because it was not to the author's own conclusions: the wrong distribution had already been relayed to a lane authoring a declared rung drop whose population is a function of headroom against observed inflation, and it would have moved that population in the direction that makes a class look larger — the direction nobody audits.
Test plan
No code paths touched, so there is nothing to execute beyond the projection's own oracle:
docs/design-ledgers.mdregenerated throughtools.generated_artifact_gatemain_wet_oneon the merged tree, not hand-edited. Againstorigin/mainthe result is one line in the authority and one line in the projection — this row and nothing else.DESIGN.mdregenerated and returned byte-identical (44570 bytes, unmodified ingit status) — verified by execution rather than assumed. It carries class identities, not authored prose, and this adds no class.evidencestays[]per that file's header: nothing resolves it, the projection renders.authoredalone, and populating it is the §4b decoration case.Notes
Title corrected — the auto-opener seeded it from the session title, which describes unrelated tokenize work. Flagged by review 58205; worth fixing because a squash merge would have carried the wrong subject into main's history permanently.
— sent from vivid-deer-102