The official source does not contain the reported auto-continue text.A persisted source.kind: plugin says a plugin supplied the message; it does not prove Agent Loop authored it. Search the exact plugin, summary, text, and installed bytes.

One type contract, one runtime gap.

Correct producercreateUserMessage()

Adds a UUID, role: user, and freezes the message before delivery.

Bypassed producerplain object / cast

Can cross JavaScript or patched-package boundaries without a runtime identity.

rc.2 live append snapshots JSON and validates the surface, but cold restore additionally runs assertMessageEventShape(). An id-less notice can therefore appear healthy until restart. The durable fix is producer construction plus receiver-side fail-fast validation—not lenient replay.

Do not collapse two failures.

Logical identity failure

One Session fails full load at a later event sequence.

Physical frame failure

Header-only listing fails when the first Zstandard frame contains more than one line.

Repair-induced blast radius

Generic whole-file recompression can turn the first failure into the second.

Attribution

The exact producer package and bytes outrank the generic source kind.

Preserve the correlation set.

Manual frame surgery is expert-only.

Quarantine the affected Session and continue in a new one unless a version-pinned tool validates every logical and physical invariant on a copy.

Primary evidence.

Keep the complete Session corruption router.

The canonical runbook separates framing, sequence, projection identity, message construction, quarantine, repair, and regression ownership.

Read and star on GitHub