# 0.8.3 — Hotfix: DuplicateIds crash when scrolling workflows in the new-run picker

`NewRunScreen._render_workflow_detail` fires on every workflow-row highlight. The previous swap pattern called `container.remove_children()` (returns an `AwaitRemove` that flushes on the next message-loop tick) and then scheduled the new toggles via `call_after_refresh`. Those two calls were not serialized — fast scrolling across workflows, or selecting `tdd-design` then `tdd-decompose`, could land the new mount before the old removal flushed. Any meeting id shared between the two workflows (both define a `decomposition` meeting) then collided as `DuplicateIds` and crashed the run-config screen.

Operator-surfaced when triggering "decompose tickets for a feature": the tdd-design toggles were still attached when tdd-decompose's mount began; Textual's `NodeList._ensure_unique_id` raised on insert.

Fix: do the swap inside a worker that `await`s `remove_children()` before mounting. Marked `exclusive=True` in the `meeting-toggles-swap` group so a new swap cancels any in-flight one — handles fast scrolling cleanly without leaking workers. Snapshot the meetings list before going async so a subsequent selection mid-swap can't mutate the iteration. Single `box.mount(*[...])` instead of looping per checkbox — more idiomatic Textual.

No substrate / pricing changes vs 0.8.2. Pure TUI hotfix.
