Commit 857bbbe
feat(queue-viewer): approve-with-where-and-when picker + full edit on pending cards
Ryan's per-simmons#1 and per-simmons#2 asks for the social front-end. Both write the fields the drain
already honors (platform fan-out + scheduled_time); no drain changes needed.
- Approve now opens a picker instead of firing immediately: WHERE (connected
accounts as checkboxes, pre-checked to the note's platforms, crosspostable ones
tagged "suggested") and WHEN ("Next free slot" default, or a datetime-local).
Confirm writes approved:true + platform:"a + b" + scheduled_time (omitted for
next-slot). Multi-select fans out to one Blotato post per platform via ship.ts.
- Edit mode on pending cards: rewrite the copy, change platform(s), change/clear
the time, swap/re-upload the photo. New /api/edit endpoint. Refuses a note the
machine already owns (scheduling/scheduled) so a booked post can't be edited into
false confidence.
- queue.ts gains two pure, tested helpers: replaceCopySection (byte-surgical body
rewrite of `## Final copy (verbatim)`, preserves a trailing **Platform version:**
annotation, never a YAML round-trip — the 4f17f3f lesson) and parseCrosspostable.
extractCopy now shares the annotation regex so the two can't drift.
Verified live: approve endpoint writes the fan-out + time then reverts clean; edit
rewrites copy + platform and reads back through extractCopy; picker + edit modals
render and toggle correctly in the viewer; 0 notes left armed, Blotato 0 schedules.
119 tests pass (+8), typecheck clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ELZqqQumx2ZVpV2R84ZRjb1 parent 04b124c commit 857bbbe
3 files changed
Lines changed: 489 additions & 18 deletions
0 commit comments