Originally created by: Akarsh-Hegde
What
Stage 5 of the Next-fold: now that the dashboard ships embedded in the tray binary (tauri build → generate_context! bundles ui/out), retire the entire standalone-dashboard-as-Node-server release path.
Commits
0f134e6 — drop Node-server-only ui/ deps (better-sqlite3, pino, 3× @opentelemetry/*) + delete observability.ts, instrumentation.ts, db-write.ts (no importers; verified npm install clean + export builds).
272c59c — retire the machinery (atomic): install-from-bundle.sh gains retire_legacy_ui_server() (boots out + removes any leftover com.meridiona.ui agent + drops the orphaned Node cache — idempotent, non-fatal, logged); removed install_ui_standalone/resolve_node_runtime, the ui.tar.gz packing + pinned-Node + better-sqlite3 ABI dance, node-runtime.meta, the 4 UI scripts/plist; meridian-cli.sh drops UI from managed services + inlines the legacy bootout in uninstall; meridian-npm-setup.sh drops the ui.tar.gz staging; verify-release-bundle.sh swaps the ABI check for a daemon+tray binaries-present check.
9ecd81a — docs (README/SETUP/CLAUDE.md): dashboard is in the tray, not localhost:3939.
Untouched: daemon / MLX / screenpipe / a11y-helper / tray / openobserve agents.
Not affected (verified)
- screenpipe — the dashboard never talked to it; the daemon reads screenpipe's SQLite directly (unchanged). Its npm install + plist + capture path in
install-from-bundle.sh are intact.
- Python services (MLX + Jira updater) — never called by the dashboard; classification/summarisation runs in the daemon → MLX HTTP. The Python venv build (
uv sync) and services/ OTel are untouched (the OTel deps removed were ui/-only).
- MCP server (
packages/meridian-mcp) — its own better-sqlite3; separate from ui/.
⚠️ Acceptance test (NOT headless-verifiable — please run)
Clean install and update from a pre-Stage-5 version, then:
launchctl list | grep meridiona.ui → nothing (no zombie Node server), and
- the dashboard opens from the tray icon and renders.
Known / flagged
- Release-pipeline ordering (verifying):
.releaserc.json prepareCmd runs cargo build --release (which compiles the tray workspace member) before ui/out exists, and frontendDist now points at ../../ui/out. If tauri-build hard-fails on a missing frontendDist, the release build breaks — fix is to build ui first or scope step 1 to -p meridian. (Introduced by the cutover's frontendDist change, surfaced here.) Also: release.yml has a now-orphaned "Cache Node.js 22 arm64" step + stale _NODE22_VERSION comment.
- Dead tray menu items: "Open Dashboard" / "Review Drafts" still open
localhost:3939 (no server now); the native window is the live dashboard. One-liner in tray.rs to repoint or drop.
- Backlog:
tauri-plugin-single-instance (the real fix for the stale-tray blank).
🤖 Generated with Claude Code
Ticket changed by: Akarsh-Hegde