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
bd43372053Julius Marminge committed on 3/2/2026, 4:21:28 AMparent123eb96
3 files changedLine totals unavailable