Clean up orphaned composer drafts and harden draft checks

- Remove stale `draftsByThreadId` entries when project-thread mappings are replaced or cleared
- Preserve drafts when a thread is still mapped to another project
- Parse persisted image `dataUrl` payloads more defensively and use `Object.hasOwn` for draft-thread existence checks
d9cce6402aJulius Marminge committed on 3/2/2026, 6:36:35 AM· committed by Julius Marmingeparent508872e
3 files changedLine totals unavailable