§8.3's first algorithm: owner initialization - #21
Merged
Merged
Conversation
…ation that walks left §8.3's first algorithm is unlike every other operation here in direction. A searcher descends toward a version; contact monitoring follows its versions up and to the right as new nodes are built over them; an auditor moves forward an entry at a time. An owner claiming a label is accepting a history it never saw, so step 1's list is the starting position followed by the entries on its direct path and to its *left*, ending just before the first expired one. Two things follow from that direction, and both are unique to this algorithm. The ladders are full — step 5 says "without omitting redundant lookups" where §6.3 and §7.2 say the opposite — because a walk going backwards has no earlier entry for a later ladder to lean on. And the response carries a greatest version per inspected entry rather than one target, with step 2 requiring each to be no greater than the one before: a version count only grows, so a list running backwards through the log that rises means the log is lying about one of the two entries. Nothing else in the protocol has that check, and it is the only thing standing between an owner and a fabricated history. Recovering which version each ladder step belongs to took reproducing step 3's set — version zero plus every version a search ladder for any of the greatest versions would look up, ascending per §13.3 — because the wire carries the steps in that order and names no versions. The count is checked against the response before anything is verified, so a disagreement about the set is a refusal rather than a misreading. The recorded owner-init case replays and consumes its proof exactly. The version ordering, the expired-start refusal and the too-many-versions case are covered by Rust tests, since katie's recorded response is an honest one and none of them can be provoked from it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
OR13
marked this pull request as ready for review
July 29, 2026 15:50
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.
§8.3's first algorithm is unlike every other operation here in direction. A searcher descends toward a version; contact monitoring follows its versions up and to the right as new nodes are built over them; an auditor moves forward an entry at a time. An owner claiming a label is accepting a history it never saw — so step 1's list is the starting position followed by the entries on its direct path and to its left, ending just before the first expired one.
Two things follow from that direction, both unique to this algorithm:
Recovering which version each ladder step belongs to meant reproducing step 3's set — version zero plus every version a search ladder for any of the greatest versions would look up, ascending per §13.3 — because the wire carries the steps in that order and names no versions. The count is checked against the response before anything is verified, so a disagreement about the set is a refusal rather than a misreading.
Result
The recorded
owner-initcase replays and consumes its proof exactly. The version ordering, the expired-start refusal and the too-many-versions case are covered by Rust tests, since katie's recorded response is an honest one and none of them can be provoked from it.6697 checks / 787 cases / 18 suites, 0 disagreements.
cargo fmt,clippy -D warnings, 172 kt-tree tests green; line coverage 97.7%.🤖 Generated with Claude Code