23da6d6fe2
Address rewinds/edits via SQLite messages.id (truncate_before_row_id) instead of shifting user ordinals. Resolve against in-memory stamps, then durable session history when live turns drop _row_id; refuse unknown durable targets with 4018 (no ordinal fallback) and 4030 on ordinal/row_id mismatch. Stamp _row_id on insert, load row ids on resume paths, send rowId from Desktop, filter renderer-synthetic ids, and stop silently resending failed targeted edits without truncation. Add production-shaped SessionDB tests for resolve and fail-closed paths. Fixes #82959