Eliah M0 — single tiled GTK3 window
- Type: feature (app / demo)
- Status: done
- Closed 2026-06-29 (board cleanup):
apps/ide/eliahbuilds+runs ingui_suite(eliah_smoke); M0 window milestone delivered and the splitter gap was superseded bydone/feature-eliah-layout-tree. - Track: B (built with
$(PXX_STABLE)) - Owner: Track B agent
- Parent: feature-eliah-ide
- Opened: 2026-06-22
Goal
Prove the dogfood path + window shell. One GTK3 window, fixed tiled layout, no modal/subwindows. Editor pane live; other panes stubbed. Compile with the pinned stable compiler, run, screenshot.
Scope
apps/ide/garin/— first render-agnostic stubs only as needed (editor buffer interface, project model placeholder). Keep faces out.apps/ide/eliah/main.pas— singleTForm/window vialib/pcl:- tiled 4-pane layout: proj tree | editor | designer | output/props.
- resizable splitters, NO floating/modal/subwindows.
- editor pane: live text view backed by garin buffer (open/edit one file).
- other panes: visible stubs (labels/placeholder boxes).
apps/ide/README.md— naming decoder (garin/eliah/ilja).- Build wiring: invokable with
$(PXX_STABLE)(Makefile target or script).
Non-goals (later milestones)
- Form designer painting (M1). Builder integration (M2). Ilja/TUI.
Acceptance
apps/ide/eliahcompiles with$(PXX_STABLE)— zero workarounds.- Running opens ONE window with the tiled layout; editor pane loads + edits a file; splitters resize; no extra windows pop.
- Screenshot captured.
- Any compiler gap hit → Track A ticket filed, referenced here. No workaround.
Log
- 2026-06-22 — opened + taken. First code slice of the IDE.
- 2026-06-22 — M0 built + ran.
apps/ide/{README.md,build.sh,.gitignore},garin/buffer.pas(TIdeBuffer, render-agnostic, textfile-backed),eliah/main.pas(single GTK3 window, 4 panes via gtk_fixed SetBounds: tree | editor | designer-stub | output-stub | props-stub). Editor live — loads its own source through the garin buffer (dogfood). Compiles clean with$(PXX_STABLE), zero workarounds, no compiler ticket needed. Screenshot captured (window titled "Eliah - IDE", tree + source visible).- Caveat (honest): panes use absolute bounds; window is resizable but panes do NOT reflow yet, and there are no drag-splitters. The ticket's "resizable splitters" is therefore NOT met — deferred to a follow-up (needs a layout pass on window size-allocate, or real GtkPaned in PCL). Fixed tiled layout only for now.
- 2026-06-23 — M0 advanced toward a working IDE (still single tiled window):
garin/runner.pas— render-agnostic process runner (RunCapture: launch + capture stdout + exit code; pxx writes diagnostics to stdout so compiler errors are captured).eliah/main.pasrewritten: live project tree from GetDirectoryContents (click a folder to descend, "../" up, a file opens in the editor via the garin buffer); Compile button runs the pinned compiler on the open .pas and shows output; Run executes the built binary; build-output pane. Designer + object-inspector right column still stubs (M1).- Headless
--smokewired intotools/gui_suite.sh(eliah_ide): tree populates, opens a file, compiles it -> SMOKE OK. gui-suite green. - Bugs filed, NO workarounds bending app logic:
feature-open-array-constructor-arg(RunCapture call had to pre-build a temp args array), and theLength(memo.Text)smoke check trippedbug-length-rejects-non-variable(folded the codegen manifestation in) — the smoke uses a string variable, which is idiomatic test code, not a hack.