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.
Success criteria
Section titled “Success criteria”- moon drives the workspace (Bun + Rust toolchains);
justfileandlefthookstay intact;apps/+packages/ts/+packages/rust/exist. - The Astro site builds under Bun; one package manager, no stray lockfiles.
-
apps/dashboardis 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 excisedapps/dashboardand overrode D-0013’s Vite+Vue pick, so SDF (Tauri 2 + Nuxt 4) renders the same/api/statethrough the same generatedpackages/ts/dashboard-client;just devis the one command. - The built SPA ships inside the plugin as a committed, drift-gated
web-dist;INDEX_HTMLis retired; a symlink consumer gets a working dashboard with no build step. Closed unmet and retired, not deferred: noweb-distexists andINDEX_HTMLsurvives 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/activewith an enforced apps-import-discipline validator.
Deliverables
Section titled “Deliverables”Member tasks, sequenced by wave (dependency order). Each links its full implementation-ready spec.
Wave 1 — workspace foundation
Section titled “Wave 1 — workspace foundation”- T-RVMG-adopt-moon-workspace-runner — moon runner +
apps//packages/trees - T-F31Q-migrate-site-to-bun — Astro site onto Bun
Wave 2 — dashboard application
Section titled “Wave 2 — dashboard application”- T-CW4K-scaffold-dashboard-vite-vue — Vite+Vue shell + one-command dev
- T-JZL4-generate-dashboard-api-client — generated typed client (shared zod contract)
Wave 3 — ship and view
Section titled “Wave 3 — ship and view”- T-JDEV-dashboard-build-into-plugin — committed drift-gated
web-dist; retireINDEX_HTML— closed superseded: the SPA it would have bundled was excised, so no static bundle ships in the plugin - T-UUMK-port-dashboard-four-source-view — four-source view + API extension
- T-LX04-activate-s0008-apps-adapter-validator — S-0008 validator + activate
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-0014and M-5EEX as the body anticipated
Out of scope
Section titled “Out of scope”- The substrate lift (
plugin/lib/→ top-levelsrc/) and the harness-surface move intoharnesses/— 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.
Risks / open questions
Section titled “Risks / open questions”- 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/statereturns an untyped shape; T-JZL4 introduces a shared zod contract both server and client derive from, gated so they cannot drift. - Committed
web-distchurn. Minified-bundle diffs are noisy; mitigated bylinguist-generated+ the--checkdrift 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.