p = r'C:/Users/decid/Documents/projects/spt-core/.spt/preserved/346/w5-lane-notes.md'
b = open(p, 'rb').read()
add = """
## Gate rounds after 8afc1553 (one new commit each, none amended after doyle saw it)
Chain: 8afc1553 -> 9b55c5f2 (round 1) -> 8f899da3 (round 2) -> **3d4b9d9bca312a24f0e95ecb3443b68b76d288c4** (round 2b, tree f15694ba).
- **Round 1 (H1/M1/M2/M3/L2/L4).**
  - H1: `WarningRecord::new` derives the reference: a minted-shape msg-id, else `op-<base32 digest of op_id>`. A proven sender failing `validate_endpoint_id` is warned about as `UnnamedOn(origin)`.
  - M1: `cap_for`/`bound_for`.
  - M2: a peer-scoped seen key.
  - M3: a whole-file read, plus rendered-first eviction.
  - L2: a lone CR is folded.
  - L4: HINTS partial-budget unit.
- **Round 2 (R2-1..R2-4).**
  - R2-1: when full, per-peer eviction takes the oldest record of the peer holding the most.
  - R2-2: `is_well_formed` is checked at read.
  - R2-3: `claim_ref` is unique per message; the claim key and the seen key use it.
  - R2-4: `poll_blocks`, with a wiring unit.
  - Also: unique temp names (#359 one-liner).
- **Round 2b.**
  - 2b-1: M2 across-polls unit. My 8f899da3 mutations.txt logged M2 NOT-KILLED and I had not yet fixed it when my session died; that line was a STOP, and it is now KILLED.
  - 2b-2: malformed lines are rewritten away before the fullness test.
  - 2b-3: receipt_session shape check (`..` survives `sanitize_session_id`).
  - 2b-4: temp file removed on failure.
  - 2b-5: the WAN origin is `PublicKey::to_hex` (64 lowercase hex). The node arm fits and was NOT widened; a unit uses a real `Identity::generate().public_key().to_hex()`.
- **Void evidence (named so it is not cited):**
  - w5r1-logs is at 259872fa, a pre-amend sibling with nextest rc 100.
  - w5r1b-logs is a stopped run.
  - The first mutation run of round 1 was a harness fault: cmd.exe quoting gave rc 94 for all six mutants.

### Evidence @ 3d4b9d9b (logs: .spt/preserved/346/w5r2b-logs/, sha.txt pinned, dirty=0 at start and end)
- **Mutations** (mutate3.py, sha and tree in the header, dirty 0 at start and end): **14/14 KILLED**. The mutants are H1, H1-peer, M2, M3-read, M3-write, M1, L2, R2-1, R2-2, R2-3, R2-4, R2-4b, 2b-2 and 2b-3.
- clippy on 5 crates with -D warnings: rc 0.
- fixture: rc 0.
- nextest (5 crates --lib --bins + --test trust_warning_now_signal_e2e + --test shell_outbound_local): **2861/2861**, rc 0, 1 LEAKY (the known broker handle-held-corpse test).
- Leak census after nextest: 0.
- xtask check: OK.
- treqs on `git archive HEAD`: rc 0.
"""
nl = b'\r\n' if b'\r\n' in b else b'\n'
b = b.rstrip(b'\r\n') + nl + add.replace('\n', nl.decode()).encode('utf-8')
open(p, 'wb').write(b)
print('ok')
