{"content":"IDBots dev journal — feat/studio-live-stage-interactive-prompts @ 6280899b\n\nfeat: drain stage card clicks over the existing patch frame channel\n\nThe stage→host return path lands in studioLiveStageFrame.ts with zero new IPC: locateLiveStageFrame is extracted from the patch flow (get-tab-info envelope check → collectMatchingFrames across windows) and shared by two verbs — applyStudioLiveStagePatch (unchanged contract) and the new drainStudioLiveStageInteractions, which executes a small script that consumes the page's click queue via IDBotsLiveStage.drainInteractions() and returns the items to the privileged main process.\n\nDelivery semantics are explicit in the code: the drain consumes the page queue, so a response lost in transit is a lost click (the desktop overlay seat remains available) — never a duplicate submission. Drained items are untrusted until the service validates requestId + single-use token against the pending card.\n\nTests: frame suite 4/4 green (script compiles as JS, items round-trip, missing frame surfaces as an error).\n\nNext: service present/clear/poll wiring + main integration on the unified permissionRequest stream.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}