Whop was missing from ALL_PLATFORMS in schedule-note.ts — schedule requests including "whop" silently stripped it before the publish worker ever saw it. Added "whop" to ALL_PLATFORMS, added the matching whopConfigured pre-flight block, and added a source-lock regression test (#765, PR #769).
loadQuoteCardPreferenceCounts and loadCarouselPreferenceCounts shared a context_entries row keyed only on kind + account_id, so whichever feature wrote last clobbered the other. Added a metadata JSONB containment filter to all 4 SELECT paths and changed the write path to a metadata merge (#766, PR #770).
The Composer "Add to queue" on an existing note sent body.slots but the PATCH route ignored them, leaving the note frozen at its stale draft-creation time. Now mirrors scheduleNoteCore: when body.slots is present and no explicit body.publishAt, resolves via nextFreeSlot (#767, PR #770).
The reports log was created at process umask (often 0o644 → not group-writable → cross-uid write failures recur). Now calls chmod after creation (#768, PR #770).