Repository navigation
Migrate Hypatia GUI from AffineScript to Gossamer + Burble + PanLL #177
Copy link
Copy link
Closed
Labels
enhancementNew capability or improvement to existing behaviourNew capability or improvement to existing behaviourgossamerui
Description
Scaffold landed on branch claude/gossamer-ephapax-gui (commit 30da482). This is explicitly a scaffold, not a working migration — the Ephapax toolchain isn't available in CI or the authoring environment, so none of the .eph code has been compiled. A developer with eph locally needs to finish it.
What's in the branch
| File | Purpose |
|---|---|
src/ui/gossamer/hypatia_gui.eph |
TEA core (Model/Msg/init/update/view/subs). 92 LOC direct port of the AffineScript. Department + Msg ADTs via data; Model via type; @linear param annotations moved to caller's let! binding per ADR-002. |
src/ui/gossamer/bridge.eph |
Gossamer host integration skeleton. Declares window + IPC handle types, @tail_recursive TEA driver with let! on every handle rebind. Burble hooks + Msg wire-decoder are explicit TODO stubs. |
src/ui/gossamer/panel.manifest.toml |
PanLL manifest skeleton. Field names placeholder pending real schema. |
src/ui/gossamer/loader.js |
JS-side wasm loader. Same export surface as the old hypatia_tea.js. wasi_snapshot_preview1 stub flagged for replacement with Gossamer host imports. |
src/ui/gossamer/README.adoc |
Full migration status, what's not done, local build instructions. |
.github/workflows/build-gossamer-gui.yml |
Scaffold workflow. Dry-run mode until setup-eph exists; real eph build invocation is ready in a TODO comment block. |
src/ui/public/index.html:88 |
Import path updated from ../tea/hypatia_tea.js to ../gossamer/loader.js. |
Removed: src/ui/tea/hypatia_gui.affine + src/ui/tea/hypatia_tea.js. Content preserved in git history (git show main:src/ui/tea/hypatia_gui.affine).
What still blocks merging
Copied from the commit message so it's discoverable here too:
- Nothing has been compiled. Every
.ephfile in this branch is syntactically untested. Someone withephinstalled must runeph build src/ui/gossamer/bridge.eph --target wasm32and fix any errors. - Ephapax CI step depends on a
setup-ephaction that doesn't exist yet. Workflow runs in dry-run until it does. - Burble session integration is a stub — real
burblemodule imports need to land inbridge.eph. - Wire format for Msg decode is unchosen (JSON / Cap'n Proto / FlatBuffers).
decode_msginbridge.ephis a placeholder that always returnsPopState. - PanLL manifest schema unverified — field names are plausible guesses; need to be aligned against the real panll repo once visible.
Acceptance checklist (from the original issue)
-
src/ui/tea/hypatia_gui.affine→ Gossamer equivalent undersrc/ui/gossamer/ - CI builds the wasm artifact as part of the UI job (blocked on
setup-eph) - Burble integration for session state (stub only — blocked on burble API visibility)
- PanLL panel manifest published so Hypatia shows up in the unified dashboard (skeleton only — blocked on schema)
- Standalone use path also works (will work once the toolchain is in)
- IPC channel handles use
let!(linear); model/message types uselet(affine) — inbridge.eph
Rollback
git revert 30da482 restores the AffineScript tree exactly.
Suggested next steps
- Merge this branch as-is so the directory structure + intent is on main.
- Open sub-issues for each of the 5 blockers above.
- When
setup-ephlands, flip the dry-run workflow to real build in a one-line PR.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew capability or improvement to existing behaviourNew capability or improvement to existing behaviourgossamerui
Activity
chore(policy): retire ReScript; fix SNIF + echidnabot doc drift
feat(ui): migrate GUI from AffineScript to Ephapax/Gossamer (#177 sca… (
ci(gossamer): build Ephapax toolchain from source at v1.0.0 (#181)
hyperpolymath commentedon Apr 30, 2026
Status update — closing as substantially landed.
The scaffold from PR #179 plus follow-ups #181 and
90192b3have addressed the original five blockers. The acceptance checklist below is updated to match the current state ofmain. Two genuinely-open items remain and are tracked in focused follow-ups, plus one architectural-clarification follow-up.Updated acceptance checklist
src/ui/tea/hypatia_gui.affine→ Gossamer equivalent undersrc/ui/gossamer/(landed in feat(ui): migrate GUI from AffineScript to Ephapax/Gossamer (#177 sca… #179)90192b3;panll.harness.tomlvalidates againstpanll-harness/v2in CI)let!(linear); model/message types uselet(affine) (bridge.eph:121-126)src/ui/gossamer/BURBLE-DEFERRAL.md. Three explicit re-trigger conditions are documented; not tracked as a separate issue until one fires.c14c3e92, cached per-SHA), but.eph→.wasmcompile is currently skipped with a warning because Ephapax v1.0.0 shipscompile-sexpr(stage 2) and an Idris2 stage-1 parser, but no chained CLI subcommand. Tracked in Enable end-to-end .eph -> .wasm compile in build-gossamer-gui #196, blocked on Expose a stage-1 .eph -> .wasm CLI subcommand ephapax#36.loader.jsTODOs (wasi_snapshot_preview1stub, leading-i32 string ABI) folded into Enable end-to-end .eph -> .wasm compile in build-gossamer-gui #196.Carved-off follow-ups
.eph→.wasmCLI subcommand. Upstream linchpin..eph→.wasmcompile inbuild-gossamer-gui(and resolveloader.jshost-import TODOs). Blocked onephapax#36.panll.harness.toml. PanLL panels relate to the Binary Star architecture (Pane-A / L / N / W) by flow + viewing perspective, not by single-pane membership. Hypatia's harness does not yet declare this; the right mechanism (top-level harness fields,panel.jsonviapanels = [...], orclade-portal/) is an open architectural question.Wire-format decision (closed)
JSON chosen over Cap'n Proto / FlatBuffers.
decode_msginbridge.eph:143-150parses{"tag": <i32>, "value": <i32>}; the three JSON helpers will collapse into one call once Ephapax publishes a JSON stdlib module.Doc refresh
Doc-only PR landing the bridge.eph header refresh and the Gossamer lifecycle artefact section rewrite: #198.
Adjacent (panll docs drift)
While verifying this issue's blockers, several panll docs and rule files were found to still describe a three-pane layout (no Pane-A). Tracked + draft PR opened in panll: hyperpolymath/panll#20, hyperpolymath/panll#21.
Closing.
docs(ui): refresh bridge.eph header and rewrite Gossamer lifecycle ar…