Skip to content

Remove two accidentally committed AGPL-linked binaries; correct three understated coverage rows - #25

Merged
OR13 merged 1 commit into
mainfrom
coverage-honesty
Jul 29, 2026
Merged

Remove two accidentally committed AGPL-linked binaries; correct three understated coverage rows#25
OR13 merged 1 commit into
mainfrom
coverage-honesty

Conversation

@OR13

@OR13 OR13 commented Jul 29, 2026

Copy link
Copy Markdown
Owner

The licensing fix

interop/go/gen and interop/go/verify were committed by accident — go build ./cmd/gen writes its binary into the working directory, so they're easy to pick up in a git add -A, and I did, in the §8.3 and reverse-direction commits.

They aren't merely untidy. Both link katie, so a repository carrying them distributes an AGPL derivative work — precisely what keeping upstream/ as submodules exists to avoid: this repo records a URL and a SHA and ships none of that code. Removed from tracking, added to .gitignore with the reason attached rather than filed under tidiness, and written into docs/licensing.md so the next person to run go build from that directory knows why the paths are listed.

Three coverage rows were understating

§11.1's cipher suite registry, §11.1's hash function and §11.2's DeploymentMode were all marked implemented-but-unverified, on the reasoning that no vector targets them directly. That reasoning was wrong:

  • Every Configuration katie encodes begins with the suite code, so tree-head.json pins 0x0002 as bytes — and the mode byte right after it, across all three modes with three distinct encodings.
  • Selecting the wrong hash would change every commitment and every tree root, so the files pinning those pin it too.

A report that understates is worth less than one that doesn't, in both directions. That leaves §10.1's walk as the only implemented-unverified row, and it's genuinely one — katie's client asks only for the rightmost distinguished entry, so there's no walk to compare against.

DRAFT-09 is resolved

The draft's editor answered #48: the prose explaining left_inclusion for monitoring ladders was removed deliberately — it "became finicky and a security risk" — and Appendix B's parameter is a leftover. So the empty-set reading this implementation uses is the intended one, not merely the one that interoperates. Fix sent as draft-protocol#49.

Worth recording how it was settled: not by more measurement. katie implements the parameter-free version either way, so no amount of testing could have answered it — only the specification's author could say what the specification meant. That's the distinction the register's filing rule was drawing, and this is the case that shows it earning its keep.

Coverage now: 32 verified against katie, 1 implemented without an oracle, 1 out of scope, 4 not implemented.

🤖 Generated with Claude Code

…module arrangement exists to prevent

Two build outputs were committed by accident: interop/go/gen and interop/go/verify. `go build
./cmd/gen` writes its binary into the working directory, so they are easy to pick up in a `git add
-A`, and I did — in the §8.3 and reverse-direction commits.

They are not merely untidy. Both link katie, so a repository carrying them distributes an AGPL
derivative work, which is precisely what keeping upstream/ as submodules is meant to avoid: this
repository records a URL and a SHA and ships none of that code. Removed from tracking, added to
.gitignore with the reason attached rather than filed under tidiness, and written into
docs/licensing.md so the next person to run `go build` from that directory knows why the paths are
listed.

Also corrects three coverage rows that were understating. §11.1's cipher suite registry, §11.1's
hash function and §11.2's DeploymentMode were all marked implemented-but-unverified, on the
reasoning that no vector targets them directly. That reasoning was wrong: every Configuration katie
encodes begins with the suite code, so tree-head.json pins 0x0002 as bytes and the mode byte after
it, across all three modes with three distinct encodings; and selecting the wrong hash would change
every commitment and every tree root, so the files pinning those pin it too. A report that
understates is worth less than one that does not, in both directions.

That leaves §10.1's walk as the only implemented-unverified row, and it is genuinely one: katie's
client asks only for the rightmost distinguished entry, so there is no walk to compare against.

And DRAFT-09 is resolved. The draft's editor answered #48: the prose explaining left_inclusion for
monitoring ladders was removed deliberately, and Appendix B's parameter is a leftover — so the
empty-set reading this implementation uses is the intended one, not merely the one that
interoperates. Fix sent as draft-protocol#49. Worth recording how it was settled: not by more
measurement, since katie implements the parameter-free version either way. Only the specification's
author could say what the specification meant, which is the distinction the register's filing rule
was drawing.

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:22
@OR13
OR13 merged commit 8976e74 into main Jul 29, 2026
3 checks passed
@OR13
OR13 deleted the coverage-honesty branch July 29, 2026 17:22
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