Skip to content

round four: all nine findings, one shared rule per door - #344

Merged
pdbethke merged 3 commits into
mainfrom
fix/round-four
Sep 15, 2026
Merged

pdbethke merged 3 commits into
mainfrom
fix/round-four

Conversation

@pdbethke

Copy link
Copy Markdown
Owner

Round four of the cold review (2026-09-13: codex on internal/gate, antigravity on internal/transparency, seats fully rotated) produced nine findings, four pre-existing and five introduced by the previous fix batch. All nine are closed here, one finding per commit, each with a test that was run as a negative control against main's tree and failed there.

transparency (six)

  • R1 (high): signature-set binding for entries without an envelope hash was a subset test. Now equality in both directions, plus payloadType when the log recorded one.
  • R2: toEntry refuses an entry with no SET, matching VerifyInclusion.
  • R3, R4: three envelope parsers replaced by one parseEnvelope; a missing payload or a signature with no sig is malformed at every door.
  • R5: index mismatch reported before entry kind.
  • R6: the map-order pick that round three fixed in rekor.go and left in logger.go; one soleEntry now, both doors call it.

gate (three)

docs: round four's row in the churn-vs-drain table, with the treadmill result stated.

Not in this PR: round four's ledger entries. They were written to a worktree under /tmp that was pruned before they were pushed, so they are gone; the findings survive in the commit messages and code comments only.

🤖 Generated with Claude Code

pdbethke and others added 3 commits September 15, 2026 07:40
…p pick, and set equality

Round four (2026-09-13, reviewer antigravity, verifier codex): six findings,
all standing. Three were defects in round three's fix.

- R1 (high): for an entry that records signatures but no envelope hash
  (intoto v0.0.2), the binding was a SUBSET test — an envelope with
  signatures stripped, or its payloadType rewritten, passed as the logged
  one. Now signature-set equality in both directions, and payloadType when
  the log recorded one.
- R2: toEntry built an Entry with no SET that VerifyInclusion would refuse.
  The constructor now refuses it too.
- R3, R4: three envelope parsers held three ideas of "valid" — one hashed a
  MISSING payload to sha256(""), one counted a signature with no `sig` as an
  empty signature and so reported "tampered" for "unreadable". There is one
  parseEnvelope now and every door calls it.
- R5: Get reported an index mismatch as "not a dsse entry" because the kind
  check was placed before the index check. Reordered.
- R6: Get ranged the response map and broke — the exact pick fixed in
  fetchEntryByUUID in round three, twelve lines from code edited the same
  day. One soleEntry now, and both doors call it.

Every new test fails against the pre-fix tree (negative control run on
main's source with the test file dropped in). Round three's intoto fixture
gained a payload, since an envelope without one is now malformed by rule.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The poller looked the dedupe row up under the policy's Context as written;
the runner normalized whitespace to the default before saving; the store
defaulted only the empty string. A programmatic Policy with Context "   "
was saved under corral/gate, looked up under "   ", and re-run and
re-certified on every tick. normalizeContext is the one rule now, and
Policy.normalized, Save, GetByHead, MarkPosted and the poller all call it.

Round four's R1 and R2 (the `;` guard's third defeat and the newline-eating
strings.Fields split) were retired in #342 by changing the format; the new
test file says where their tests live.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@pdbethke
pdbethke merged commit 6951ca4 into main Sep 15, 2026
5 checks passed
@pdbethke
pdbethke deleted the fix/round-four branch September 15, 2026 12:57
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant