Skip to content

The reverse direction for §6.3: katie verifying proofs this implementation built - #23

Merged
OR13 merged 1 commit into
mainfrom
reverse-direction-search
Jul 29, 2026
Merged

The reverse direction for §6.3: katie verifying proofs this implementation built#23
OR13 merged 1 commit into
mainfrom
reverse-direction-search

Conversation

@OR13

@OR13 OR13 commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Every §6–§8 check so far runs one way: katie serves a response, this side replays it and consumes the proof exactly. That establishes this side reads katie's ordering correctly. It cannot establish the converse — that a proof this side accepts is one katie would accept — and that's the failure that matters for a verifier, because a verifier's bug is accepting too much.

It's also the failure the reverse direction caught the one time this project had a real bug: §12.1's balanced-subtree rule, which self-consistent proofs satisfied and katie rejected.

What this adds

from-kt.json now carries CombinedTreeProofs built here, fed to katie's own GreatestVersionSearch through its ReceivedProofHandle. No signing is involved and none is needed — katie's algorithm layer verifies a proof without a tree head, so this side stays a verifier rather than having to become a log to be checked as one.

handle.Finish() is katie's version of §12.3's exact-count rule, which makes this the mirror image of the replay check: where the replay asks whether we read katie's ordering, this asks whether katie reads ours.

Four of the five cases are deliberately wrong, since those are the ones with something to prove:

Case katie
honest proof accepts
a timestamp too many rejects
a prefix proof too few rejects
proofs reordered rejects
timestamps descending rejects

One fixture decision

The configuration these are checked against sets the clock bounds enormous. §4.2 has a verifier compare the rightmost timestamp against its own clock — deployment policy, not a property of a proof — and these fixtures carry fixed timestamps so from-kt.json regenerates to identical bytes. Making the fixture track the wall clock would trade a reproducible artifact for a check that belongs elsewhere; tree-head.json already pins the clock bounds themselves.

214 reverse-direction artifacts: 110 accepted, 104 rejected, 0 disagreements. 6706 checks / 789 cases / 18 suites forward. cargo fmt, clippy -D warnings, tests green.

🤖 Generated with Claude Code

…d that is the direction that cannot catch over-acceptance

Every §6–§8 check so far runs the same way: katie serves a response and this side replays it,
consuming the proof exactly. That establishes this side reads katie's ordering correctly. It cannot
establish the converse — that a proof this side accepts is one katie would accept too — and that is
the failure that matters for a verifier, because a verifier's bug is accepting too much rather than
too little. It is also the failure the reverse direction caught the one time this project had a real
bug: §12.1's balanced-subtree rule, which self-consistent proofs satisfied and katie rejected.

So from-kt.json now carries CombinedTreeProofs built here for katie's own GreatestVersionSearch to
consume, through its own ReceivedProofHandle. No signing is involved and none is needed: katie's
algorithm layer verifies a proof without a tree head, so this side stays a verifier rather than
having to become a log to be checked as one. handle.Finish() is katie's version of §12.3's
exact-count rule, which makes this the mirror image of the replay check.

Four of the five cases are deliberately wrong, since those are the ones with something to prove: a
timestamp too many, a prefix proof too few, the proofs reordered, the timestamps descending. katie
refuses all four and accepts the honest one.

One fixture decision worth stating. The configuration those proofs are checked against sets the
clock bounds enormous, because §4.2 has a verifier compare the rightmost timestamp against its own
clock — deployment policy rather than a property of a proof — and these fixtures carry fixed
timestamps so that from-kt.json regenerates to identical bytes. Making the fixture track the wall
clock would trade a reproducible artifact for a check that belongs elsewhere, and tree-head.json
already pins the clock bounds themselves.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@OR13
OR13 marked this pull request as ready for review July 29, 2026 17:03
@OR13
OR13 merged commit 31c5cc2 into main Jul 29, 2026
3 checks passed
@OR13
OR13 deleted the reverse-direction-search branch July 29, 2026 17:03
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