The second axis: derivation confidence × domain relevance, with the derivation that makes a rejected group a query - #51
Merged
Conversation
Splits §5.2's assurance column into derivation confidence × domain relevance, proposes the derivation record that makes G0's two rejected groups queryable, and states the template bump and the backfill disposition as rulings for Emil. Relevance is unknown on every row at G0 and the design says so rather than defaulting to a plausible mark; the derivation record is the half that discharges the recoverability argument. Environment recorded: the full solution restores against the private feed (16/16 projects), so G0's provisional qualifier is cleared at Gate 2. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
… a query Splits §5.2's single assurance mark into derivation confidence × domain relevance. Axis 1 keeps the old value set — that column was already measuring derivation and nothing else — so the split renames it rather than re-marking it, and no ratified assertion changes. Axis 2 is unknown on every row with basis not-computed: declared-empty, not undeclared, because everything that would compute it sits outside the declaration subset. The half that discharges the recoverability argument is the derivation record: rule, probed operations, member kind, container kind, source paths. It lives in a per-run evidence layer under runs/, keyed by the assertion's own content-addressed id, so the canonical graph stays pure ratified assertion and a cohort ratified before the split can be given its derivation by re-running the deterministic extractor — no byte of ratified content changes. Identity is verified untouched: two assertions differing in everything the split added still mint one id. Template 0.3.0. Shapes target reg:GradedAssertion, a class the writer stamps and nothing entails — a shape keyed on predicate presence would pass in the authority repo and fail at the projection, where the equivalence entailment manufactures the predicate on the older cohort. A fixture validates the projection, not just the repo, so that interaction cannot recur silently. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
… showed PRD §5.2 replaces the single assurance column with derivation confidence × domain relevance, states the relevance column as declared-empty rather than undeclared, and records the derivation record with the evidence layer it lives in. §4.1's Reading tuple gains the three fields. §5.5.1 states review batching. §12 opens the subset-widening decision with its closure trade. Three corrections, all measured rather than argued: - the under-advertising bullet cited a server that advertises the provider under both handshakes; the case is the one that does not advertise it at all; - the modules row's LSP cell named an operation the row does not stand on — the row fired 1514 assertions on a run where that operation was unavailable; - the properties row's range resolution matches on simple name, safe at zero collisions on the subset and unsafe at 21 across the full solution; the already-wired exact-resolution route is named as the fix. The mapping verdicts lose their provisional qualifier: every row's behaviour is confirmed at ~16.7x the corpus, and the capability probe earned itself again — one operation over-advertises at full-solution scale while answering on the subset, so capability is a property of server x workspace size. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
…at varies The second full-solution run at the same ref proposes nothing, writes nothing, and leaves no tracked file changed — so the two marks and the derivation record stay outside the assertion hash at scale, not only in a fixture. It also corrects this session's own first reading. workspace/symbol did not answer on run one and answered on run two, same corpus, same ref, minutes apart: the operation is intermittently unavailable under load rather than absent at scale. The honest statement is that a probe verdict is itself a reading scoped to its run — a row gated on that operation would yield different results on two runs differing in nothing a reviewer can see. The modules-row correction stands on its own: on the run where the operation was unavailable the row still fired 1514 assertions, so it reads containment from documentSymbol whatever the table says. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
…ds it The same operation answered on one full-solution run and timed out on the next, same corpus, same ref. So availability is not a fact about the server; it is a reading taken at an instant, and it carries the §4.1 tuple like every other reading — value, as-of, provenance observed (a live call, never a flag), assurance naming the probe. Each verdict is now its own node in the run evidence, typed reg:ProbeVerdict , reg:Reading, with the advertisement it agreed or disagreed with beside it. The Reading typing is load-bearing: the instance's existing shape then demands the four-tuple, so a verdict written as a bare boolean fails CI. Two runs that disagree about one operation share a verdict IRI and differ in value, so they are comparable rather than merely different — which is what lets a reviewer tell a row that found nothing from a row that was gated off that day. Retry-then-record is proposed as PRD §12 item 17 rather than built: an operation recorded unavailable after one timeout is a low-assurance reading being treated as a verdict. PRD §5.5.2 files the general clause behind the instance defect: a ratification act must be checkable against the ruling it discharges — a stated accept/reject set by id before the merge, the merged tree diffed against it, and removal by retraction rather than deletion. Also records both readings of the generated-code path predicate, and opens the simple-name collision defect as item 16. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
…corpus Six probe verdicts written into the run evidence on a full-solution run; registry check conformant at 48 constraints, six more than before, which is the probe-verdict shape being read rather than skipped. Third data point on the varying operation: one non-answer, two answers. Enough to say the verdict varies, nowhere near enough to characterise the distribution — which is why the remedy is to record verdicts rather than to reason about them. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements the top-ranked finding of the G0 session report (§7.1), with §7.4 arriving at the same
change from the review side.
corpus-backendread read-only at3b0a56b3, full solution, on amachine with private-feed access.
The two-axis model
§5.2's
assurancecolumn measured one property while being read as two, and G0 proved themindependent: 31 assertions at the top grade, every mechanical check passing, all 31 wrong to
ratify. It splits:
high · mid · low · not-derivable. The value set is unchanged,deliberately: the old column was already measuring derivation and nothing else, so this renames it
rather than re-marking it, and no ratified assertion changes.
high · low · unknown, with a basis (computed · defaulted · not-computed · not-applicable). Not ordinal:unknownis the absence of a verdict, not a valuebetween the other two.
Every row is
unknown/not-computedat G0, and says so. The column is declared-empty, notundeclared — a different and better state than the one it replaces, where relevance was undeclared
and silently read as high.
The derivation record, and where it lives
Two marks say what a class of assertion is, not how a reviewer finds it again. Each assertion
gains
reg:derivedByRule,reg:standsOn,reg:memberKind,reg:containerKind,reg:sourcePath—recorded facts, with the classification left to the reviewer's query. They live in a per-run
evidence graph under
runs/, keyed by the assertion's content-addressed id, leavinggraphs/pureratified assertion.
Template 0.3.0 — backward compatible, verified
Shapes target the class
reg:GradedAssertion, stamped by the writer and entailed by nothing. Ashape keyed on predicate presence would pass in the authority repo and fail at the projection, where
owl:equivalentPropertymanufacturesreg:derivationConfidenceon the older cohort; a fixturevalidates the projection, not just the repo.
product registry checkover an instance holding all 561 pre-0.3.0 assertions plus the new runevidence: conformant, 9 667 data files, 48 constraints, file rule clean, no file changed.
Full-solution re-run
16/16 projects restored, 951 source files, 967 declarations, 9 662 assertions read, 18 review
batches, 0 orphaned evidence entries.
Every row's behaviour confirmed; no row behaved differently at full scale. §5.2's provisional
pending a full-solution run qualifier is discharged.
subclass-transitivestill fires zero over172 edges; supertypes-outside-subset drops to 0. Three findings the subset could not produce:
workspace/symboldid not answer on one run andanswered on two others, same corpus, same ref. Not "over-advertises at scale" — intermittently
unavailable under load. Verdicts are now recorded in the run evidence with their as-of, typed
reg:ProbeVerdict , reg:Readingso the existing Reading shape demands the four-tuple. Two runsthat disagree differ visibly, and a reviewer can tell "this row found nothing" from "this row was
gated off that day". Retry-then-record is proposed, not built (PRD §12 item 17).
modulesrow does not stand onworkspaceSymbol. On the run where the operation wasunavailable the row still fired 1 514. Table corrected to
documentSymbol— a correction thatcould only come from a failure.
0, so range resolution is now unsafe on this corpus.
definitionis wired, answers, and isconsumed by nothing. Filed as PRD §12 item 16, scoped to the
definitionroute.The fixpoint ratio inverted (0.84 → 1.69) at 509 ms:
g-dec-02's condition not met, so thedecision does not flip; direction now measured.
The two groups, recovered from the graph
reg:memberKind = reg:fieldreg:sourcePathunder a generated-migration folderBoth reproduce G0's counts exactly, by query where G0 needed a hand count that was wrong twice.
All 561 ratified assertions now have derivation; 0 without — the backfill ruling confirmed on
the real cohort, with no ratified byte changed. Both readings of the path predicate are recorded in
the PRD (
everyrecovers 14 of 18,anyrecovers all 18) so the next reviewer inherits the choice.Idempotence
Second full run at the same ref: 0 proposed, nothing written, 0 tracked files changed. The new
fields stay outside the assertion hash at 9 662 assertions, not only in a fixture —
g-dec-04'sidentity is intact.
The instance defect, and the clause behind it
G0 ruled 512 accepted / 49 rejected; the instance holds all 561. The ruling was prose, the act
was a merge button, and nothing checked that the second carried the first — presumed discharge at
the ratifier's seat. Disposition ruled: retraction, not deletion, and not this session — a
retraction decision naming the 49 by id, basis the Gate 4 ruling, files removed in the same act.
Emil drafts it.
PRD §5.5.2 files the general clause: a ratification act must be checkable against the ruling it
discharges — a stated accept/reject set by id before the merge, the merged tree diffed against it.
Per-triple review that ends in one undifferentiated merge is per-triple review in name only.
The 49 were unfindable until this change and are now two queries: the recoverability argument, made
in the abstract at G0, paid out on a real defect in the ratified set.
What this does not do
It does not filter Group A. It does not filter Group B. It does not widen the declaration subset.
It makes both groups visible and batchable.
Still open
The subset-widening decision (§12.15) · the simple-name collision defect (§12.16) · retry-then-record
for probe verdicts (§12.17) · the retraction decision Emil drafts · Kotlin's workspace import · G0.5
and the comparison instrument.
Gates
cargo t1 495 / 0 (baseline 1 454) · clippy 0 ·cargo xtask check0 errors ·ddd validateconformant (277) · contract surface 88 events, 0 undischarged ·
product registry checkconformant · file/function length and single-responsibility clean.
🤖 Generated with Claude Code
https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2