BL-097 Shipped

Adventure graph editor enhancements

scope corrected mid-build per ADR-0079 refinement: drag-to-connect edges and zoom controls turned out to already exist (BL-092), so this shipped only the genuine gaps. (1) Persisted node positions: position_x/position_y on adventure_nodes (deferrable FK migration pattern followed); dagre only auto-lays-out nodes with no stored position, so a dragged node survives reload. Drag-end fires a lodash.debounced PATCH to adventure_node_path. reset_graph_layout action (+ reset_adventure_graph_layout MCP tool) nulls all positions for an adventure. (2) AdventureGraphNote model – adventure-scoped free-floating sticky notes, created via double-click on empty canvas, draggable, inline-editable (contenteditable, blur-to-save), deletable; AdventureGraphNotesController (create/update/destroy, JSON) + AdventureGraphNotePolicy (mirrors AdventureComponentPolicy’s owner-or-campaign-DM check). (3) Minimap overview widget (top-right, click-to-jump viewport) added to adventure-graph Stimulus controller alongside the existing zoom controls. 4 new MCP tools (create/update/destroy/list_adventure_graph_note) plus reset_adventure_graph_layout; position_x/position_y added to create_adventure_node/update_adventure_node tools for parity. Verified end-to-end in-browser via Playwright (drag persists across reload, double-click creates a note server-side, pinned node renders off the dagre flow). 22 new tests, 658 total green. ADR-0079.