- `reconcilePersistedLiveTurn` called `reconcileAuthoritativeChatMessages`
back through a callback that was the caller itself; the projection-less
branch is now `reconcileDurableHistory` in utils and imported directly.
- The activation path retried the live-turn reconcile inside its fallback
with the same rows; `null` does not depend on `previous`, so the retry was
dead work. The fallback now runs the durable path only.
- `isLiveTailReplyId` (spoken-reply) replaces the third and fourth copies of
the `assistant-stream-`/`inflight-assistant-` prefix predicate; `normalizeWs`
is exported from chat-messages instead of re-declared in coverage.ts and
the journal; `isCommittedRow` names the "not a projection, not a recovery"
predicate the journal repeated three times.
- Loop-invariant `lastPreviousUser` hoisted; `renderedText(raw)` computed once
per row instead of per part; `snapshotIntervals` skips the code-point split
when there are no corrections; `persistInFlightTurnState` checks for a
recovered row before building the recoverable tail on every idle commit.