A smoke replay printed a named snapshot diff

Replay becomes useful when it keeps the snapshot path, bundle context, and a readable diff instead of collapsing everything into a flat suite failure.

A smoke replay printed a named snapshot diff

A replay failure becomes useful when it names the exact snapshot path and prints a readable diff. A generic suite failure does not give the same next move.

The current replay harness already does that for a smoke mismatch. In the repository, the replay layer happens to be called Sinji. The role matters more than the name.

What the replay kept

The mismatch bundle preserves the surrounding chain instead of flattening the incident into "suite failed."

YAML
source_walkthrough: .tsqoba/sinji/walkthroughs/musha/repl_smoke/walkthrough.yaml
source_cassette: .tsqoba/sinji/walkthroughs/musha/repl_smoke/cassette.yaml
source_expected_snapshot: .tsqoba/sinji/walkthroughs/musha/repl_smoke/snapshots/03_after_assistant_turn.yaml
actual_snapshot: .tsqoba/artifacts/sinji/.../actual_snapshots/03_after_assistant_turn.yaml
mismatch_result: snapshot mismatch at termwright.snapshot.save step 16

One detail matters here. The mismatch run compares the in-memory actual snapshot against the bundle-local expected snapshot. The persisted actual_snapshot file comes from the paired --update-snapshots materialization run whose job was to leave the concrete actual artifact behind.

Why the terminal diff matters

The failing output from that replay was useful because it did not hide the mismatch behind a generic red line. It printed the changed text directly.

DIFF
--- original
+++ modified
@@ -5,7 +5,7 @@
│ directory: /workspace/repo/.tsqoba/musha/…/workspace │
› Hello
-• Hello from Sinji
+• Hi from Sinji
› <PLACEHOLDER>
<FOOTER_LINE>

That is enough to show what drifted, where it drifted, and why the next move is to inspect the named snapshot instead of staring at an opaque suite failure.

Why bundle-local copies matter

The replay family is tracked in the repository: suite, walkthrough, cassette, and expected snapshots all exist as versioned materials. The dated replay bundle then carries local copies of the same chain so the red case can be inspected without mutating tracked fixtures.

That separation matters. It lets the repository keep its tracked replay family stable while still publishing one concrete mismatch package with local artifacts attached.

What changes after a named diff

A flat failure says that something drifted. A named diff says which snapshot drifted, which step produced the mismatch, which expected file was involved, and what text actually changed.

Replay still needs judgment. But once the exact snapshot and diff are named, the next move becomes clear: open the pair, inspect the drift, and decide whether the change is intended.

Contents
  1. What the replay kept
  2. Why the terminal diff matters
  3. Why bundle-local copies matter
  4. What changes after a named diff