← board

feature: Eliah shared selection model — designer ↔ editor link (+ AI rail)

Goal

One shared, bidirectional selection/command model wired across the designer and the editor. Selecting a component anywhere highlights it everywhere; commands (rename, wire event, and future AI actions) operate on this model, never on layout state.

Why

The thing Delphi/Lazarus did adequately and is the real IDE value. Make it first-class and explicit so it stays clean and so AI tooling has a rail to ride.

Scope

Acceptance

Designer selection moves the editor caret to the matching code and vice-versa; at least one command (wire OnClick stub) works end-to-end through the selection model; the command surface is documented so AI/menus/shortcuts are interchangeable sources. gui_suite + garin green (selection model unit-tested headless via bochan); screenshot of linked selection.

Notes

Log

Foundation (commit a74c646, garin, bochan-tested):

Wiring (commit 1ce2032, eliah + lib/pcl):

Gates: garin 157/157, eliah --smoke OK (both directions, deterministic via SelectFromEditorLine), gui_suite OK, screenshot shows the Link button.

Remaining (keeps this ticket open)

DONE 2026-06-24

Wire-OnClick command landed (commit after 1bff46b): selecting a component + 'OnClick' assigns OnClick = <Name>Click (round-trips in the .lfm, shows in the inspector) and generates an undoable handler stub in the editor (idempotent). Command surface documented (devdocs/developer/eliah-command-surface.md). AI rail split to a suggestion ticket (backlog/feature-eliah-ai-command-rail) per the decision that it mainly adds networking, little local-test value.

M5 acceptance met: designer<->editor selection link both directions; one command (wire OnClick) end-to-end through the shared model; command surface documented (menu/shortcut/AI interchangeable). Gates: garin 162/162, eliah --smoke OK, gui_suite OK, screenshots of Link + OnClick.

Deferred (own tickets / minor):