Skip to content

Monorepo restructure & dashboard migration

Status: closed/partial

Implement D-0012-monorepo-tooling and D-0013-dashboard-app: stand up the apps/ + packages/<ecosystem>/ monorepo on moon, and migrate the SDLC status dashboard from its inline-HTML server UI to a maintainable Vite + Vue 3 SPA — served by the existing Bun/Hono server and shipped inside the plugin as a committed, drift-gated web-dist. The visible outcome is a v1 dashboard of what is actively being worked on, locally and on Git/GitHub, delivered through a clean apps-consume-via-adapter seam (S-0008-apps-consume-substrate-through-published-surfaces) that leaves the workspace polyglot-ready.

  • moon drives the workspace (Bun + Rust toolchains); justfile and lefthook stay intact; apps/ + packages/ts/ + packages/rust/ exist.
  • The Astro site builds under Bun; one package manager, no stray lockfiles.
  • apps/dashboard is a Vite + Vue 3 SPA; one command brings up the backend and frontend; it reaches the substrate through a generated typed client, not hand-written request plumbing. Met in substance by a different app: D-0018-sdf-control-plane-app excised apps/dashboard and overrode D-0013’s Vite+Vue pick, so SDF (Tauri 2 + Nuxt 4) renders the same /api/state through the same generated packages/ts/dashboard-client; just dev is the one command.
  • The built SPA ships inside the plugin as a committed, drift-gated web-dist; INDEX_HTML is retired; a symlink consumer gets a working dashboard with no build step. Closed unmet and retired, not deferred: no web-dist exists and INDEX_HTML survives as the legacy fallback. Whether the plugin ships any consumer web UI is now an open question in D-0018-sdf-control-plane-app.
  • The v1 view renders all four active-work sources — lease refs, task/milestone entities, local working state, and GitHub PR status.
  • S-0008-apps-consume-substrate-through-published-surfaces is open/active with an enforced apps-import-discipline validator.

Member tasks, sequenced by wave (dependency order). Each links its full implementation-ready spec.

Wave 4 — polyglot validation (candidate for its own later milestone)

Section titled “Wave 4 — polyglot validation (candidate for its own later milestone)”
  • T-CKC1-tauri-desktop-wrapper — Rust Tauri desktop app embedding the SPA — closed superseded: SDF absorbed the thin-wrapper role; polyglot validation was promoted out to M-0014 and M-5EEX as the body anticipated
  • The substrate lift (plugin/lib/ → top-level src/) and the harness-surface move into harnesses/D-0001-project-structure sequences both separately, after the current in-flight changesets land.
  • New dashboard capabilities beyond the four v1 sources.
  • The Tauri desktop app (T-CKC1) may be promoted to its own later milestone rather than shipped in this push.
  • moon + Bun is off the main trail. moon v2’s most-trodden path is Node/pnpm; pin versions and expect explicit Bun-toolchain declarations per project (D-0012-monorepo-tooling caveat).
  • No machine-readable API schema today. /api/state returns an untyped shape; T-JZL4 introduces a shared zod contract both server and client derive from, gated so they cannot drift.
  • Committed web-dist churn. Minified-bundle diffs are noisy; mitigated by linguist-generated + the --check drift gate (T-JDEV).
  • Local-server exposure. The dashboard serves full task/lease/project-root state plus a network-mutating POST /api/refresh (D-0013-dashboard-app open question) — confirm localhost-only bind / a guard during T-UUMK.
  • Ergonomics are success criteria, not nice-to-haves. The one-command dev startup and one-command binding generation (T-CW4K / T-JZL4) must stay genuinely frictionless.

← Back to Milestones