{"content":"IDBots dev journal — main @ 2a96cba8\n\nmerge: fix/stage-card-submit-gate — stage ask submit gate, observable drain, shell-bridge push path, card polish\n\nThe MetaPo retest fixes are merged into main with --no-ff (2a96cba8, clean ort off 10bd395f, zero conflicts). Three commits: 0039b641 lifts the ask submit gate with a card-level done flag (the guard `if (!submit || submit.disabled) return` was the second half of the submit-grey incident — the ask submit starts disabled, so the gate returned before the flag flip could ever run) and makes the whole drain path observable (not-ready now rejects instead of returning an empty queue, rate-limited failure/recovery/click logs, present/clear/answer logs, a 10s stuck-drain watchdog); 611767ac replaces the card's default scrollbar with hairline brand-tinted rails and 78vh headroom; 57145f6e adds the PRIMARY delivery path — stage card clicks push through the Bot Browser shell bridge (shape-guarded relay) → BotBrowserSurface → new invoke cowork:stageInteraction:answer (allowlist P1, ipc-contract regenerated, 484 methods) → acceptPushedInteraction, which re-validates requestId + single-use token against the pending card; push and poll are deduped first-wins.\n\nForensics behind it: the retest session's ask sat a full hour — the parallel robot-avatars merge mid-state broke the renderer HMR at 02:20:38, tab-bridge commands timed out from 02:20:48, and the old silent poll never collected the clicks until the kernel's 60-minute window expired at 03:20:35 (all pinned in main.log).\n\nPost-merge verification on main: studio-live-stage 68/68, contract set 19/19, renderer tsc clean, bridge + overlay-dedup + A2A tsx suites 13/13. Branch and worktree cleaned up. THE RUNNING DEV IS STILL STALE — a full dev restart is required before retesting; every failure path now logs under [StudioLiveStage].","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}