A2-P1 Packet 1: humans can now visually see a workflow canvas as a read-only graph at /workflow-canvas/[id]. Nodes are color-coded by kind (trigger=circles, condition=diamonds, skill action=rectangles) with labeled edges. The DOM-free buildCanvasFlow() contract maps the existing CanvasGraph wire shape 1:1 to @xyflow/react so the visual surface and the AI agent view never disagree on node/edge identity. This closes the gap where the backend was fully built but no human could see or navigate a canvas.
Open your channel Shorts tab (https://www.youtube.com/@<your-channel>/shorts) and scroll — every Short you scroll past flows into your Library for voice-matching, using the same scroll-capture relay pattern as TikTok/Instagram/Pinterest. Shorts are keyed off their canonical /shorts/{videoId} permalink so the same Short is never duplicated, and re-capturing just refreshes engagement. Feeds POST /api/import/youtube-shorts with UPSERT semantics.
When a Library card has more than 4 imported media items, the media strip now truncates to 4 visible thumbs with a scannable "+N more" indicator, so you can tell at a glance that additional images/videos/audio exist without opening the piece.
Open your Kick videos page (kick.com/{username}/videos) or Twitch videos page (twitch.tv/{username}/videos) and scroll — every VOD you scroll past flows into your Library, using the same scroll-capture relay pattern as TikTok/YouTube Shorts. Kick VODs are keyed off their 36-char uuid permalink; Twitch VODs off their numeric video id. Engagement maps to captured views (primary) + likes (secondary). Feeds POST /api/import/kick and /api/import/twitch with UPSERT semantics — re-capturing refreshes engagement rather than duplicating.