Skip to content

The second axis: derivation confidence × domain relevance, with the derivation that makes a rejected group a query - #51

Merged
Hafeok merged 6 commits into
mainfrom
claude/two-axis-derivation-relevance
Aug 20, 2026
Merged

The second axis: derivation confidence × domain relevance, with the derivation that makes a rejected group a query#51
Hafeok merged 6 commits into
mainfrom
claude/two-axis-derivation-relevance

Conversation

@Hafeok

@Hafeok Hafeok commented Aug 20, 2026

Copy link
Copy Markdown
Owner

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-backend read read-only at 3b0a56b3, full solution, on a
machine with private-feed access.

The two-axis model

§5.2's assurance column measured one property while being read as two, and G0 proved them
independent: 31 assertions at the top grade, every mechanical check passing, all 31 wrong to
ratify.
It splits:

  • Derivation confidencehigh · 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.
  • Domain relevancehigh · low · unknown, with a basis (computed · defaulted · not-computed · not-applicable). Not ordinal: unknown is the absence of a verdict, not a value
    between the other two.

Every row is unknown / not-computed at G0, and says so. The column is declared-empty, not
undeclared
— 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, leaving graphs/ pure
ratified assertion.

Template 0.3.0 — backward compatible, verified

Shapes target the class reg:GradedAssertion, stamped by the writer and entailed by nothing. A
shape keyed on predicate presence would pass in the authority repo and fail at the projection, where
owl:equivalentProperty manufactures reg:derivationConfidence on the older cohort; a fixture
validates the projection, not just the repo.

product registry check over an instance holding all 561 pre-0.3.0 assertions plus the new run
evidence: 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-transitive still fires zero over
172 edges; supertypes-outside-subset drops to 0. Three findings the subset could not produce:

  1. A probe verdict is itself a Reading. workspace/symbol did not answer on one run and
    answered 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:Reading so the existing Reading shape demands the four-tuple. Two runs
    that 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).
  2. The modules row does not stand on workspaceSymbol. On the run where the operation was
    unavailable the row still fired 1 514. Table corrected to documentSymbol — a correction that
    could only come from a failure.
  3. §7.5's collision prediction held. 21 cross-module simple-name collisions where the subset had
    0, so range resolution is now unsafe on this corpus. definition is wired, answers, and is
    consumed by nothing. Filed as PRD §12 item 16, scoped to the definition route.

The fixpoint ratio inverted (0.84 → 1.69) at 509 ms: g-dec-02's condition not met, so the
decision does not flip; direction now measured.

The two groups, recovered from the graph

Query Full solution In the 561 ratified G0 reported
Group B reg:memberKind = reg:field 195 31 31
Group A any reg:sourcePath under a generated-migration folder 18 18 18

Both 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 (every recovers 14 of 18, any recovers 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's
identity 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 t 1 495 / 0 (baseline 1 454) · clippy 0 · cargo xtask check 0 errors · ddd validate
conformant (277) · contract surface 88 events, 0 undischarged · product registry check
conformant · file/function length and single-responsibility clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AdDM2VGG3qyDAN5vGrphS2

Hafeok and others added 6 commits August 20, 2026 09:32
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
@Hafeok
Hafeok merged commit 0f3a539 into main Aug 20, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant