T-WDXJ-sdf-scaffold-tauri-nuxt-app
Status: closed/done · Impact: high · Complexity: large
Stand up apps/sdf — the SDF operator app decided in
D-0018-sdf-control-plane-app — as a first-class monorepo citizen by
replaying the proven pumice conversion recipe over template-tauri-nuxt.
Unblocks every later SDF phase.
| Location | Role today |
|---|---|
apps/ | dashboard, family, polish, pumice, sdlc — no sdf |
Cargo.toml | root workspace: packages/rust/*, family products, pumice crates/src-tauri |
.moon/tasks/tauri.yml | inherited task surface for tags: ['tauri'] projects |
apps/pumice/moon.yml | the documented conversion precedent (mergeArgs, noop test aggregate, server preset) |
The template lives outside the repo at
/Users/sksizer/Developer/templates/template-tauri-nuxt (github
sksizer/template-tauri-nuxt); scaffold from a fresh checkout of its
origin/main (local clone was behind at review time).
Proposed
Section titled “Proposed”apps/sdf/ exists with peer src-tauri/ (Rust crate sdf, member of the
root cargo workspace, workspace-pinned deps) and src-nuxt/ (Nuxt 4, Bun,
own apps/sdf/bun.lock), a thin moon.yml (tags: ['tauri'],
language: 'rust'), lefthook/justfile hooks rewritten pnpm→bun, a
workflow_dispatch CI workflow, and all inherited moon gates green. No
pnpm lockfiles anywhere under apps/sdf.
Approach
Section titled “Approach”- Copy template checkout into
apps/sdf(drop.git,Makefile, template-fleet scripts not applicable in-monorepo); runrename.shwithPROJECT_NAME=sdf,BUNDLE_ID=com.sksizer.sdf. - Bun-ify per pumice (T-M7QX precedent): app-level workspaces
(
src-nuxt), delete pnpm lockfiles,bun install→apps/sdf/bun.lock, rewritepnpm run→bun runin package.json/justfile/lefthook.yml,trustedDependenciesas pumice. moon.ymlper pumice:layer: application,stack: frontend,language: rust,tags: ['tauri']; declaredev(server preset) andbuild; overridefmt/fmt-check/lint/backend-testwith--manifest-path src-tauri/Cargo.toml+mergeArgs: 'replace'.- Add
apps/sdf/src-taurito rootCargo.tomlmembers; consume{ workspace = true }pins (tauri 2); remove per-appCargo.lockandrust-toolchain.tomlin favor of workspace stable. - CI:
.github/workflows/sdf-ci.ymlmodeled on pumice-ci.yml (ubuntu-22.04, webkit apt deps,workflow_dispatch). - Verify:
moon run sdf:check,cargo check -p sdf,cd apps/sdf/src-nuxt && bun run generate,bun run tauri build --debuglocally.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
apps/sdf/ | new | full app tree from template (src-tauri, src-nuxt, justfile, lefthook.yml, mise.toml, sdlc.yaml, moon.yml) |
Cargo.toml | modify | add apps/sdf/src-tauri to workspace members |
.github/workflows/sdf-ci.yml | new | workflow_dispatch CI per pumice-ci.yml |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
moon run sdf:checkexits 0 (inherited tauri aspect: frontend lint/typecheck/test/format-check + rust fmt-check/lint). - AC-2:
cargo check -p sdfbuilds under the root workspace (single rootCargo.lock; noapps/sdf/**/Cargo.lock). - AC-3:
bun run generateinsrc-nuxtemits the static SPA to.output/public(browser mode artifact);bun run tauri build --debugproduces a launchable desktop binary locally. - AC-4: no pnpm/npm lockfiles under
apps/sdf;git grep -l pnpm -- apps/sdfreturns only doc mentions, no executable hooks/scripts. - AC-5: moon auto-registers project id
sdf(moon query projectslists it) with zero.moon/workspace.ymledits.
Out of scope
Section titled “Out of scope”- Any dashboard views or data fetching (
T-6S37). - ontogen codegen pipeline (
T-UBPG). - Deleting
apps/dashboard(T-QT7X). - Re-enabling always-on Tauri CI (repo-wide stance, PRs #759/#763).
Dependencies
Section titled “Dependencies”- none (first code phase of M-5EEX; lands stacked on the D-0018 docs PR)
Discovery context
Section titled “Discovery context”- Phase 1 of D-0018-sdf-control-plane-app; recipe from
D-0016-pumice-app-integration / T-K3PN / T-M7QX / T-X8CF as documented
in
apps/pumice/moon.ymlcomments.