# ASM #241 gate record — emission single-write assembly (doyle, 2026-08-29)

## Composition

- Base: main = origin/main = `57a0d27c` (#229, W4) — rev-parse-verified at session start.
- Source lane: `feat/emit-single-write` parked at `d0fdd58d` (todlando; includes hertz's
  `0ebe0fbd` autostart fix). Chain vs merge-base `4d6007ac` (v0.65.0): 6 linear commits,
  no merges → **pick-shaped**. Composed by `git cherry-pick 4d6007ac..d0fdd58d` onto
  `57a0d27c` in fresh worktree `.worktrees/asm-241`, branch `asm/241-emission`.
- Assembled head: **`1f97b73d`** (pushed to origin).
- Pool: warm rig pool `.worktrees/gate-w1-786d2381/target` (44G), sequential takeover of
  finished lane gate-w4-229 via `pool-claim --foreign-pool` from inside asm-241 —
  loud takeover recorded, claim identity = asm/241-emission.

## Conflict resolutions (1 pick of 6 conflicted: `10f12e4c` → `cfb9d9f8`)

1. `crates/spt/src/api/delivery.rs` (busy arm): main's W2/W3 mid-turn work added `mid`
   param to `state_io_kind`/`publish_state_io`; lane converted `eprintln!` →
   `spt_proto::emit_line_err!`. Resolution composes BOTH: emission macro + `mid` arity.
   Confirmed semantically by full-workspace clippy (below), the #182-v2 E0425 class check.
2. `docs/INFRA-REGISTER.md` (IR-69 region): lane carried the interim IR-69 census
   correction (phantom row, 7-row macro column, no-final-newline); main's landed IR-69 is
   the CONSOLIDATED entry already carrying all three corrections plus the both-delimiter
   generator clause, followed by IR-70/71/72. Resolution: took main's region whole;
   lane's 30-line interim block deliberately dropped as superseded.

## pick-audit FIRST REAL USE (IR-57 instrument, exit file `PICKAUDIT_241.exit` = 1)

`xtask pick-audit --range 57a0d27c..HEAD --lane 4d6007ac..d0fdd58d`:

- 6 picks — **5 MATCH** (digest-identical pick vs lane patch), **1 LOSS**, 0 drift,
  0 unclassified. The LOSS is exactly the conflicted pick (`cfb9d9f8 <- 10f12e4c`,
  count 432/402).
- Delta reconciled to the resolution, not assumed: lane commit stat 15 files /
  235 insertions / 197 deletions; pick stat 14 files / 205 / 197. Difference =
  `docs/INFRA-REGISTER.md +30` — byte-for-byte the deliberately dropped interim IR-69
  block. No unexplained residue.
- Reading: the instrument did its job on first contact — digest-matched every clean pick,
  flagged only the human-resolved one, and its exit 1 forced the accounting above.
  No false positives, no silent pass over a changed pick.

## Head verification legs (exit FILES read in-transcript)

- `ASM241_clippy.exit` = **0** — `cargo clippy --workspace --all-targets -- -D warnings`
  at 1f97b73d, warm pool, 1m01s tail clean.
- Windows battery: driver `asm241_gate_win.sh` in asm-241 rig (leg-0 reap-by-path,
  env-scrubbed legs, per-leg exit files) — legs: fixtures, treqs, units(workspace --lib),
  store, live, net, proto, runtime, daemon, endpoint_autostart_e2e (serial), xtask check.
  RUNNING.
- Linux battery: driver `asm241_gate_linux.sh` in kitsubito `~/gate-242-w1` at 1f97b73d
  (own pool, same-tree claim asm-241-linux), same legs + clippy. RUNNING.

Verdict: PENDING both arms.
