Skip to content

feat(app): Episteme.app native shell + unsigned .pkg installer (Event 176)#160

Merged
junjslee merged 2 commits into
masterfrom
feat/event176-app-pkg
Jul 21, 2026
Merged

feat(app): Episteme.app native shell + unsigned .pkg installer (Event 176)#160
junjslee merged 2 commits into
masterfrom
feat/event176-app-pkg

Conversation

@junjslee

Copy link
Copy Markdown
Owner

What

The ratified packaging lane: a real window over the E174/E175 dashboard, installable as dist/Episteme.pkg.

  • Thin by design: Rust shell (wry + tao — no Tauri CLI, no Node build pipeline) whose only jobs are ensure-the-viewer-runs and show-it-in-a-window. All product logic stays in the Python viewer — no second implementation to drift.
  • Attach-or-spawn lifecycle; spawned viewers die with the window.
  • Orphan defense — this event's own smoke found the leak (abrupt shell termination bypassed window-close cleanup and left the server running): the viewer gains --exit-with-parent (reparenting watch, ~2s; boot race covered by the ppid==1 rule). Verified live and regression-tested with a middleman-orphaning test.
  • GUI-context CLI resolution (EPISTEME_BIN → which → known prefixes) with a reasoned error page, never a blank window.
  • scripts/build_app_pkg.shdist/Episteme.app + unsigned dist/Episteme.pkg (593KB → /Applications). Unsigned is a conscious tier: installs cleanly for personal use; signing/notarization stays operator-gated with the distribution/GTM decision.

Conscious scope

  • app/ is NOT built in CI (Python suite unaffected; Rust build verified locally) — adding a Rust CI lane is a follow-up decision, noted in the handoff.
  • No new docs/*.md (ceiling stays 32/32); app/README.md carries the shell's contract.

Verification

Suite 1824 + 91 (+1 orphaning test) · docs lint clean · cargo build --release clean · live smokes: app spawns viewer (project panel renders real branch), window-close kills spawned viewer, abrupt termination → viewer self-closes within ~4s.

… 176)

A deliberately thin Rust window (wry+tao — no Tauri CLI, no Node build) over
episteme viewer: the shell ensures the server runs and shows it in a real
window; all product logic stays in the Python viewer, so there is no second
implementation to drift from the kernel.

- Attach-or-spawn: an already-running viewer is respected, not duplicated;
  spawned viewers die with the window.
- Orphan defense (found live by this event's own smoke: SIGTERM on the shell
  bypassed window-close cleanup and leaked the server): the viewer gains
  --exit-with-parent — it watches for reparenting and shuts down within ~2s,
  with the boot race (parent dead before first ppid sample) covered via the
  ppid==1 rule. Verified live: app terminated abruptly → viewer self-closed.
  Regression-tested via a middleman-process orphaning test.
- CLI resolution ladder for GUI context (no login-shell PATH): EPISTEME_BIN →
  which → well-known prefixes; failures render a reasoned error page, never
  a blank window.
- scripts/build_app_pkg.sh → dist/Episteme.app + UNSIGNED dist/Episteme.pkg
  (593KB, installs to /Applications). Unsigned is a conscious tier: personal
  use now; signing/notarization stays operator-gated with the GTM decision.

Suite 1824+91; docs lint clean; no new docs (ceiling 32/32).
@vercel

vercel Bot commented Jul 21, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
episteme Ready Ready Preview, Comment Jul 21, 2026 3:08pm

…toolchain gate named

Scoped lifecycle review applied: the parent-watch prints why it is shutting
down (a silent self-kill reads as a crash) and the --exit-with-parent help
warns against launchd/init parents (ppid==1 triggers shutdown — the macOS
reparent rule; Linux subreapers documented as out of scope for the shell).
Blank-launch worst case bounded 15s→6s with the window-first refactor named
as the deferred fix; error-page message HTML-escaped; orphan test gains CI
headroom; app/README states Rust ≥1.85 since app/ has no CI gate.
Suite 1824+91; pkg rebuilt.
@junjslee
junjslee merged commit 06b5ed4 into master Jul 21, 2026
1 check was pending
@junjslee
junjslee deleted the feat/event176-app-pkg branch July 21, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant