a6d9a8cbd4a734b44b3256d278c14ed1aafd33d9
Add a read-only-but-selectable "locked" mode to the A9 ContextInput so share-critical values (full node ID, full room ticket) can be drag-selected and copied with the mouse/keyboard, in addition to the existing one-click Copy buttons (which are kept). - context_input.rs: add `locked` flag + builder + `locked_value(value, noop)` constructor. A controlled text_input with a no-op on_input stays focusable and selection-capable while never mutating (iced treats on_input==None as Disabled, verified against iced_widget-0.14.2 source). - Extract overlay gating into a pure `menu_action_enabled` seam: when locked, Cut/Paste are disabled, Copy is enabled with a (non-secure) selection, and Select All is enabled when there's a value. +1 unit test. - app/mod.rs: add AppMessage::Noop; render the full node ID and full ticket in width-capped locked fields beside their existing Copy buttons. Phase 2 (cross-message selectable chat transcript) intentionally deferred: it requires a transcript-level custom widget that owns selection/layout/hit- testing while preserving A13 links and attachment rows — out of scope for a bounded edit. Design path recorded in the Codex task report. Tests-green only (460 lib, clippy clean, release build green); wants a quick field check of mouse drag-select + right-click Copy + Ctrl+A/C. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>