Skip to content

v1.108.165 — claim-scoped evidence in the handoff contract (#377 phase 1)

Choose a tag to compare

@jgravelle jgravelle released this 24 Jul 02:50

Added

A handoff section may now carry caller-authored claims, each with its own evidence_refs (#377 phase 1, design by @mightydanp).

v1 proved every cited ref was retrieved this session, but it could not say
which retrieval backs which sentence: refs landed in one global block at the
end of the body. A reader could not tell which proof supported which claim.

Each claim is {id, statement, evidence_refs, classification?}. Ids are
unique across the whole handoff rather than per section, since the id is the
machine-readable anchor a caller cites and two sections owning the same id
would make that citation ambiguous. Statements and classifications are
preserved verbatim; the server never rewrites one. Each claim's refs are
attested separately, so an unknown ref returns invalid_claims: [{claim_id, unknown_refs}] and names the claim that cited it instead of
vanishing into one global failure list. Evidence renders beside the claim it
supports.

Three decisions the proposal left open:

  • The input picks the contract. No claims anywhere means the schema string
    stays jcodemunch.handoff/v1 and the body is byte-identical to what v1
    rendered; claims_attested is omitted from the receipt rather than reported
    as 0. Any claim promotes the handoff to jcodemunch.handoff/v2.
  • Claims can satisfy evidence_refs. A caller who scoped everything to
    claims should not have to restate it globally. Strictly more permissive, so
    no existing call changes.
  • Claim refs join the canonical evidence index, caller order first, so a v1
    consumer reading a v2 handoff still sees every reference where it expects.

core_compact unchanged at 3996. New tests/test_v1_108_165.py (18,
including the byte-identical v1 guard). No schema, tool-count, or
INDEX_VERSION change. Suite 5595.

Known limit, disclosed on #377 before anyone builds against it: phase 1 does
not narrow what counts as a match. Attestation still accepts the file
component of a served id, so citing a whole file attests even when one
unrelated symbol from it was served. Narrowing that is phase 2 (evidence
receipts), which is deferred.

Suite parity same day: jdocmunch-mcp v1.116.0 and jdatamunch-mcp v1.25.0.
#377 stays open as the tracker for the rest of the arc.