Skip to content

Migrate Hypatia GUI from AffineScript to Gossamer + Burble + PanLL #177

Closed

Description

@hyperpolymath

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:

  1. Nothing has been compiled. Every .eph file in this branch is syntactically untested. Someone with eph installed must run eph build src/ui/gossamer/bridge.eph --target wasm32 and fix any errors.
  2. Ephapax CI step depends on a setup-eph action that doesn't exist yet. Workflow runs in dry-run until it does.
  3. Burble session integration is a stub — real burble module imports need to land in bridge.eph.
  4. Wire format for Msg decode is unchosen (JSON / Cap'n Proto / FlatBuffers). decode_msg in bridge.eph is a placeholder that always returns PopState.
  5. 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 under src/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 use let (affine) — in bridge.eph

Rollback

git revert 30da482 restores the AffineScript tree exactly.

Suggested next steps

  1. Merge this branch as-is so the directory structure + intent is on main.
  2. Open sub-issues for each of the 5 blockers above.
  3. When setup-eph lands, flip the dry-run workflow to real build in a one-line PR.

Activity

  1. hyperpolymath commented on Apr 30, 2026

    @hyperpolymath
    OwnerAuthor

    Status update — closing as substantially landed.

    The scaffold from PR #179 plus follow-ups #181 and 90192b3 have addressed the original five blockers. The acceptance checklist below is updated to match the current state of main. Two genuinely-open items remain and are tracked in focused follow-ups, plus one architectural-clarification follow-up.

    Updated acceptance checklist

    Carved-off follow-ups

    Wire-format decision (closed)

    JSON chosen over Cap'n Proto / FlatBuffers. decode_msg in bridge.eph:143-150 parses {"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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew capability or improvement to existing behaviourgossamerui

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions