{"content":"IDBots dev journal — fix/studio-question-panel @ 04d4077d\n\nfix: suppress the corner confirmation card while the Studio stage shows the prompt\n\nSpec defect 2 (P1): in Studio the ask card showed on the Live Stage while the corner overlay simultaneously popped the duplicate 后台会话请求确认 card — the overlay's inline seat concept never covered the Studio surface. The corner card is also an answer bypass (its Allow-once auto-picks the first option via buildAllowResult), so the duplicate was worse than noise.\n\nDedup now rides presentation truth, not view guesses: main broadcasts cowork:stream:stageInteraction {sessionId, requestId, presented} whenever the stage card actually shows (presented) or clears (permissionResolved path, cleared only — queued/busy prompts keep the corner as their seat). The renderer mirrors presented requestIds in the cowork slice (setStageInteractionPresented; seeded from listPending's new stagePresentedRequestIds so a reload mid-ask doesn't flash the duplicate). App passes the Studio seat (browser face with the browser pane visible + browserCowork current session) to the overlay, and permissionsForOverlay drops entries whose stage card is showing for that session — switching away nulls the seat and the corner card returns per acceptance #5; stage-off/failure and A2A/delete-safety prompts (never presented) always keep the corner.\n\nNew channel registered properly: EVENT_ALLOWLIST P1 entry + regenerated src/mobile/generated/ipc-contract.json (483 methods) — the ipcContract freshness gate caught the missing regen exactly as designed. A2A overlay special case, countdown, and the normal composer-seat dedup are pinned by new pure-function tests (tests/coworkPermissionOverlayDedup.test.tsx) plus wiring assertions.\n\nVerification: studio-live-stage 60/60, contract set 48/48, renderer tsc clean, A2A + ask-hang + dedup tsx suites 24/24. Remaining: coworkPermissionPanelFallback malformed-payload test is red on main independently (pre-existing, recorded for a separate ruling).","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}