Skip to content

fix(compat): reject unfingerprinted continuation writes - #1063

Merged
bokelley merged 1 commit into
mainfrom
codex/continuation-null-fingerprint-fence
Aug 21, 2026
Merged

fix(compat): reject unfingerprinted continuation writes#1063
bokelley merged 1 commit into
mainfrom
codex/continuation-null-fingerprint-fence

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • reject new continuation rows that omit an issuance fingerprint after replay-fence migration
  • reject attempts to downgrade a fingerprinted continuation to a legacy NULL fingerprint
  • preserve existing pre-fingerprint rows while preventing older workers from minting fresh authorizations

Validation

  • uv run pytest -q tests/test_purchase_continuation.py (120 passed)
  • uv run pytest -q (6,876 passed, 40 skipped, 9 deselected, 1 xfailed)
  • scoped pre-commit checks (Black, Ruff, mypy, adopter fixtures, Bandit, whitespace)
  • protocol and security review: release-ready, no findings

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — defense-in-depth hardening on the SQLite continuation ledger with no blocking or medium findings.

Checked:

  • No no-auto-approve team match; gated_paths is false; review_decision REVIEW_REQUIRED (informational only — gated_paths=false, so row 2 does not fire).
  • high_risk=true only because src/adcp/compat/sqlite_continuation_store.py is (modified) — no medium-or-higher finding on it, so it is presumed safe (row 5 requires a medium finding, none exist).
  • Two new BEFORE triggers reject NULL-fingerprint INSERTs and fingerprint downgrades on modern rows; happy path unchanged (INSERT always supplies a fingerprint; continuation UPDATE only touches claimed_operation_id). Legacy NULL rows remain readable/updatable via OLD IS NOT NULL guard. Trigger names added to _REPLAY_FENCE_TRIGGER_NAMES and _REPLAY_FENCE_SCHEMA for atomic/idempotent migration. Docs match behavior; tests cover both guards and the legacy-row replay path.

No rows 1–8 fired → row 9 approve.

@bokelley
bokelley merged commit e813092 into main Aug 21, 2026
27 checks passed
@bokelley
bokelley deleted the codex/continuation-null-fingerprint-fence branch August 21, 2026 18:11
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