T-K3PN-vendor-pumice-into-apps-pumice
Status: closed/done · Impact: high · Complexity: large
Land the standalone pumice repository under apps/pumice as a self-contained
co-tenant and wire a thin apps/pumice/moon.yml so moon run pumice:build
drives pumice’s existing build. This is the first, load-bearing step of
D-0016-pumice-app-integration: pumice shares the monorepo’s tooling only —
no application-code coupling to the substrate yet.
apps/dashboard is the only app; its moon.yml shells to bunx vite /
sdlc under the system toolchain. Pumice lives in sksizer/pumice as a
Tauri v2 + Nuxt 4 app with three Rust crates, a codegen pipeline, and its own
justfile.
| Location | Role today |
|---|---|
apps/ | Holds dashboard only; no apps/pumice |
apps/dashboard/moon.yml | The thin-task pattern to mirror (system toolchain, runFromWorkspaceRoot) |
.moon/workspace.yml | apps/* glob auto-registers a new app project |
.moon/toolchain.yml | Declares bun and rust — no Rust project consumes rust yet |
Proposed
Section titled “Proposed”Vendor pumice’s working tree (excluding node_modules, target, .git, and
build output) into apps/pumice, preserving its internal relative-path layout
so its own justfile, Tauri config, and codegen keep working unchanged.
apps/pumice/ src-tauri/ Tauri crate `pumice-app` + tauri.conf.json + build.rs crates/ pumice, pumice-config, pumice-desktop (path deps) src-nuxt/ Nuxt 4 frontend + Storybook packages/ admin-types, nuxt_admin_layer (file: deps) justfile pumice's own command catalog (kept intact) moon.yml NEW — thin moon project, system toolchain- Pumice’s internal relative paths (
../src-nuxt,../crates,file:../packages/*) survive because the whole tree moves as one unit. apps/pumice/moon.ymldeclares tasks (build,dev,check,test,storybook) that shell to pumice’s existingjust/tauricommands under thesystemtoolchain, exactly likeapps/dashboard.
Approach
Section titled “Approach”- Copy the tree. Vendor pumice into
apps/pumice, excludingnode_modules,target,.git,.output,dist, and Storybook build output. The code-move mechanism (clean copy vs git subtree) is the open question in D-0016-pumice-app-integration — resolve it before this step. - Add
apps/pumice/moon.yml. Mirrorapps/dashboard/moon.yml:type: application,language: rust(ortypescriptwith rust tasks),systemtoolchain, thin tasks shelling to pumice’s commands. Markdev/storybookaspersistent,cache: false,runInCI: false. - Keep pnpm interim. This task does NOT migrate to Bun — that is
T-M7QX. The frontend still installs with pnpm here so the vendored app builds before the migration lands. The Bun migration and codegen/CI tasks stack on top. - Verify the app registers. Confirm
moon project pumiceresolves andmoon run pumice:buildinvokes pumice’s build (a full Tauri build may need the Rust toolchain fromT-P4LZand system deps fromT-T2HB).
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
apps/pumice/** | new | Vendored pumice tree (minus ignored build/deps dirs) |
apps/pumice/moon.yml | new | Thin moon project; system toolchain; tasks shell to pumice commands |
apps/pumice/.gitignore | new/kept | Ignore target, node_modules, .output, dist |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
apps/pumicecontains pumice’s source tree with internal relative paths intact; nonode_modules/target/build output committed. - AC-2:
apps/pumice/moon.ymlregisters via theapps/*glob;moon project pumiceresolves. - AC-3:
moon run pumice:check(or an equivalent thin task) invokes pumice’s existing check command from the correct CWD. - AC-4: The root workspace still builds (
moon run dashboard:buildand the root tasks are unaffected).
Out of scope
Section titled “Out of scope”- Bun migration —
T-M7QX. - Rust toolchain reconciliation —
T-P4LZ. - Codegen-as-moon-task and CI wiring —
T-R9WT,T-T2HB. - Sharing any code with the substrate — Phase 2 (
T-X8CF,T-Z5MK).
Dependencies
Section titled “Dependencies”- None (root of the arc). Downstream tasks stack on this vendored tree.