# ENLYZEAM production capture — v0.39.4 field bug 3 (DAEMON-LIFECYCLE W3)

The byte-exact production capture behind ADR-0047 Amendment 1 (+ its addendum),
KNOWN-HAZARDS 7.54 and 7.55. Captured by **hertz** on the ENLYZEAM box against a
debug build at `f31849c` (v0.40.0), 2026-07-22; couriered and staged by **doyle**
the same day. This directory is the DURABLE home — the scratchpad copy was a
courier, not a source.

Committed as the fixture for the primary oracle (ADR-0047 Amendment 1: *"the
regression replays the captured shape … into an INDEPENDENT VT emulator"*). A
synthetic fixture is a judgement call about what the bug looks like; these bytes
are what it actually was.

## Format

One record per line, no transcoding after `scp`:

```
t=<unix_ms> n=<byte_len> <lowercase_hex>
```

## Files

| file | size | sha256 | records | what it is |
|---|---|---|---|---|
| `tap-1-raw.log` | 146835 B | `8fe744cc301067d12cafbbe5fdcaa960d9f43970f48695b5c5e9160d6c0da000` | 73 | the RAW ConPTY drain (child → broker) |
| `tap-1-frame.log` | 142891 B | `9a230dc0ffcbc960872ba821d9090781c043c61097e159645e751f3db4af41e2` | 72 | the BROKER frames (broker → client) |
| `tap-1-repaint.log` | 7712 B | `295c8d16e4c4a27f613ecf2deb63d0b6977078322245404541a10f3a863f31c1` | — | the repaint tap frozen immediately after the controller-attach repro; ENDS with the two pre-resize synthesized 1856-byte repaint records |
| `tap-1-repaint-after.log` | 26776 B | `2be60db2324404100b5955c9b6452ad1629ca87406b329cb72cc3cbcaf956886` | — | the later cumulative repaint tap, after the fresh-viewer triangulation; ADDS the clean 131x60 broker repaint records |

Sizes and hashes are the fixture's integrity record, and `.gitattributes`
(`*.log -text`) is what keeps them true: without it, autocrlf rewrites these
bytes on checkout — one direction on Windows, the other on the Linux CI leg —
and every test stays green while the "byte-exact production capture" claim
quietly becomes false. Verify on any box with:

```sh
sha256sum crates/spt-daemon/tests/fixtures/enlyzeam/*.log
```

`raw` and `frame` being byte-identical across the windows below is what
exonerates transport and the parser: whatever went wrong is presentation
bookkeeping, not bytes in flight.

## Segmentation (hertz, verbatim substance; anchors re-verified in these copies)

**Mechanism 1 — controller attach, 80x24 → 131x60** (REQ-ATTACH-RESIZE-REPAINT):

- raw `t=1784714142257 .. 1784714153024`; broker frame `t=1784714142291 .. 1784714153025`
- the raw-only FIRST record at `42257` is the DUPLICATED pre-frame tap — use the
  second, 1960-byte raw record at `t=1784714142289` for a `raw == frame` replay
- the pre-resize synthesized repaint is the pair `t=1784714142194` / `1784714142208`
  (last two records of `tap-1-repaint.log`; also the 3rd/4th records of
  `tap-1-repaint-after.log`)
- the clean 131x60 broker repaint records `t=1784714376763` / `1784714376773`
  appear ONLY in `tap-1-repaint-after.log` — the before/after contrast between
  the two repaint logs IS the fresh-viewer-clean proof leg

### The pre-attach anchor (hertz, 2026-07-22) — and why the tempting ones are wrong

The primary oracle replays the screen as it stood BEFORE the controller attached,
so it needs a SELF-CONTAINED starting record — one that does not owe any cell to
earlier state.

**Use `t=1784713547401 .. 1784713561651`.** The first record opens
`ESC[2J ESC[m ESC[H` (clear + reset + home), so it depends on nothing before it.
Hertz verified in an independent `pyte` that this range reproduces the captured
synthesized repaint at `t=1784714142208` at 80x24 with ZERO differences across
all 1920 cells — data, fg, bg, bold, italics, underscore, reverse.

Rejected candidates, recorded so a future refactor cannot re-pick them:

| candidate | why NOT |
|---|---|
| `t=1784713552872` | owes row 24 to earlier state; replayed alone it differs on rows 19 and 24 |
| `t=1784713561651` | only clears and positions row 19 — not a screen |
| `t=1784713551571` / `…574` | clear line-by-line from an INHERITED cursor position |

No later self-contained anchor exists in this capture.

**Anchor completeness is not oracle soundness.** Hertz's verification is that the
range reproduces the 80x24 screen. The separate question — whether those bytes
render the SAME at 131 columns, i.e. whether they lean on terminal auto-wrap —
is the rig's own `the_pre_window_renders_identically_at_both_widths` leg. It
passes for this capture, which is what makes replaying the pre-window into a
131-wide authority sound rather than the reflow trap in a third costume.

**Mechanism 2 — live-viewport resize + input echo** (REQ-RESIZE-INPUT-MODE-INTEGRITY):

- raw `t=1784714816155 .. 1784714822893`; broker frame `t=1784714816158 .. 1784714822893`
- the `/config` corruption/key sequence begins at frame `t=1784714822159`
- the isolated ECHOED key outputs are the one-byte records
  `c=…822394`, `o=…822449`, `n=…822530`, `f=…822670`, `i=…822765` — a no-echo TUI
  whose nested ConPTY is echoing keystrokes as OUTPUT after the resize

## Oracle rules that ride this fixture

1. **Never compare ScreenGrid to itself** (REQ-SCREENGRID-WIDTH precedent) — the
   authority is `avt`, an emulator we did not write.
2. **Geometry-sensitive without being reflow-sensitive** — no emulator resize in
   the comparison; both sides built at one geometry from absolutely-addressed
   bytes. A narrow, unwrapped fixture cannot see this class at all (measured).
3. **Capability-probed** — a rig's green counts only after it is shown to RED on
   a deliberately injected instance of the defect class. The probe is a permanent
   leg, never scaffolding, and it is re-run at EVERY oracle-shape revision.
   "Probe green" is necessary and not sufficient: a probe asserts its OWN
   precondition (the candidate actually received and rendered a screen) before
   its divergence verdict counts — one here passed vacuously against an empty
   candidate screen.
4. **Fixture byte-integrity pinned against tooling rewrites** (`-text` or
   equivalent), verified by the recorded sizes and hashes above. Tooling that
   silently rewrites evidence while the suite stays green is the same class of
   failure as an oracle that cannot see its own defect.

## Capture sanity check (a documented procedure, deliberately NOT a test)

To confirm hertz's own two replays by hand — old-geometry repaint + post-resize
frames reproduces the corruption at 131x60, replay from the first post-resize
full frame is clean — feed the selected records into any independent emulator.
This is a one-shot procedure and stays out of the suite on purpose: it executes
no spt-core code, so as a test it would be red forever regardless of what we
fix, and a permanently-red test excluded from the gate is drift bait.
