# Direct scenario editing — bounded implementation plan Status: implementation in the isolated `codex/scenario-direct` checkout, based on ab661f2. Native acceptance is pending the root's Windows/Linux trials. This does not complete the release or the separate process/chain gesture work. ## Decisions Extend the existing `behavior::Scene`; retain its derived lifeline columns and ordered occurrence rows. No model/schema/layout records are added. Lifeline and occurrence UUIDs remain distinct from represented work and global exchanges. Select mode selects headers, stems, messages and occurrence boxes. A selected occurrence has a reorder handle; dragging it chooses a visible slot in its same parent sequence. It never reparents or changes lifeline columns. A Message tool uses the existing MessageStyle, with Call + correlated reply initially selected. Click-click or drag between represented lifelines captures a highlighted explicit insertion slot `(parent, before occurrence or append)` and opens the existing typed draft with those endpoints. Existing exchanges/calls are filtered against the complete candidate at that slot and shown through search plus 24-item pages. No compatible exchange produces an actionable retained draft, not a new global exchange or a silently changed endpoint. Timer remains available as a local tool. The canvas remains rendered while a bounded, independently scrollable form is open. Values keep the existing qualified-path editor and lifecycle. Final creation uses ordinary CreateElement plus SetSteps in one Batch; paired call/reply are inserted together and undo together. Reordering uses SetSteps within the captured parent. Existing core validation decides reply order, branch dominance, lifetime, phase and endpoint compatibility. Failed preparation/source writes retain drafts. Transient events capture document/scenario/revision/epoch, and the App validates the current Behavior owner before handling them. Selection does not invalidate a gesture within the same scenario. Escape, unfocus, context/tool change and pending drafts cancel gestures. Ordered pointer events and captured window positions avoid coalesced-click and changed-scroll-origin commits. No geometry is persisted. Execution bars derive their ends from actual correlated reply positions; separate conditional reply branches render their corresponding spans. Calls without a visible reply use a short explicitly open activation, not a fabricated reply. ## Acceptance checks Production-event tests cover hit priority, click-click/drag, scroll-origin changes, Escape/unfocus/stale contexts and exactly one result per gesture. Planner/App tests cover middle/operand insertion, paired identities, complete SetSteps ordering, same-parent reorder, rejected reply-before-call, unchanged global exchanges, exact source/model Undo, draft retention and bounded exchange/call controls. Run focused and full desktop tests, strict all-target desktop Clippy and optimized build with the dedicated `D:/CodexBuilds/Capella2-scenario-target` target. Root native tasks (not yet performed): 1. Draw an existing exchange again into the middle of a scenario as Call+Reply; enter a qualified value, select both occurrences, Undo/Redo, save/reopen. 2. Insert inside an ALT/LOOP operand, reorder within it, reject a reply before its call, and inspect correlated execution bars and preserved occurrence identities. 3. Cancel drawing after scrolling/layout change, retry, retain typed values while navigation is blocked, and open/return from a referenced scenario. Verify at 1440x900 and 1100x700 on Windows and Linux before scoped acceptance.