T-B98V-adopt-vimit
Status: closed/done · Impact: medium · Complexity: medium
vimit — a Tauri 2 + Astro app with 306 commits of history — was the one
augmented_books app the owner initially held back. Decision reversed
2026-07-19: the owner wants it working and migrated. Bring it in as
solutions/augmented/apps/vimit/, joining the rest of the adopted
augmented family under the D-0001 solutions staging tier.
Source: https://github.com/sksizer/augmented_books at pinned rev
acedcf77652e2e7c481e95123c486c2befe2c423, path apps/vimit/. The
upstream repo was archived 2026-07-30 — read-only but still clonable;
the pinned rev remains fetchable.
| Location | Role today |
|---|---|
apps/zoo/MIGRATION.md | The adoption recipe: clean vendored copy, pnpm→Bun, crate rename precedent (tauri_nuxt → zoo) |
docs/planning/decisions/D-0001-project-structure.md | Defines the solutions/ staging tier; the augmented family lives at solutions/augmented/ |
Cargo.toml | Root workspace members already globs solutions/*/apps/*/src-tauri — vimit’s crate auto-joins, no member edit needed |
.moon/workspace.yml | projects.globs includes solutions/*/apps/* — the app registers via its own moon.yml |
solutions/augmented/apps/augmented-books/moon.yml | The sibling Tauri adoption that already shipped (#931) and rode the restructure — mirror its landed shape where the recipe leaves latitude |
Source app facts at the pinned rev:
apps/vimit/src-tauri/: crateexample-tauri-astro, libexample_tauri_astro_lib— untouched template names; MUST be renamedvimit/vimit_libbefore joining the shared workspace (zoo set the precedent: template crate names collide with the next scaffold).- Rust deps are minimal and all already workspace-pinned:
tauri,tauri-build,tauri-plugin-opener,serde,serde_json. No links crates (T-JV2A’s meta-task friction about transitivelinksenumeration does not bite here). - App-root
package.jsonis also namedexample-tauri-astro(rename tovimit); its scriptscd src-astro && pnpm run …. src-astro/carries BOTHpnpm-lock.yamlandpackage-lock.json— drop both. App root has its ownpnpm-lock.yaml— drop.- Also present:
content/(training content),docs/,scripts/generate-anki-decks.mjs,vite.config.ts,moon.yml,src-astro/vite.test.config.
Proposed
Section titled “Proposed”solutions/augmented/apps/vimit/ package.json name `vimit`, Bun workspace root (workspaces: ["src-astro"]), own bun.lock moon.yml registers `vimit` (application/rust, tags: [tauri]) src-astro/ Astro frontend, converted pnpm/npm→Bun src-tauri/ crate `vimit` (lib `vimit_lib`) — member of the ROOT cargo workspace content/ docs/ scripts/ carried as-isThe crate auto-joins the root cargo workspace via the existing
solutions/*/apps/*/src-tauri members glob — no Cargo.toml edit. No
per-app Cargo.lock; the root lock absorbs additively (expected
near-zero: every dep is already pinned).
Approach
Section titled “Approach”- Clone the pinned rev; copy
apps/vimit/→solutions/augmented/apps/vimit/(excludenode_modulesand all lockfiles). - Crate rename
example-tauri-astro→vimit, libexample_tauri_astro_lib→vimit_lib:Cargo.toml,main.rs’s lib call, and anytauri.conf.jsonreferences. Rename the app-root and src-astropackage.jsonnames tovimit/vimit-astro. - Bun conversion per zoo recipe: rewrite
cd src-astro && pnpm run …scripts tobun run …; switchtauri.conf.jsonbefore{Dev,Build}Commandto Bun; generatesolutions/augmented/apps/vimit/bun.lock. - Workspace deps: flip deps already in
[workspace.dependencies]to{ workspace = true }(tauri,tauri-build,serde,serde_json); keeptauri-plugin-openeras-is. No members edit — the glob covers the crate path. - Keep/adjust
moon.ymlso the project id isvimitand tasks run Bun, mirroring the shippedsolutions/augmented/apps/augmented-books/moon.yml. - Verify working state:
cargo check -p vimit+ clippy from root;bun install+bun run build(astro build) in the app; bootbun run tauri devlong enough to see the window process launch (or document the headless blocker). - Product name / bundle identifier stay as shipped in
tauri.conf.json— renames beyond the crate are owner-gated (zoo precedent).
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
solutions/augmented/apps/vimit/ | new | The vendored app (src-astro, src-tauri, content, docs, scripts) with crate + package renames |
Cargo.lock | modify | Additive absorption (minimal — deps already pinned) |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1:
cargo check -p vimitandcargo clippy -p vimit -- -D warningspass from the repo root; no crate namedexample-tauri-astroexists in the workspace. - AC-2:
bun install+bun run buildsucceed insolutions/augmented/apps/vimit/. - AC-3:
bun run tauri devlaunches (window process observed), or the blocker is documented in the PR body. - AC-4: No
Cargo.lock,pnpm-lock.yaml, orpackage-lock.jsonexists anywhere undersolutions/augmented/apps/vimit/. - AC-5:
moon query projectslistsvimit. - AC-6: Root
Cargo.lockdiff is additive-only.
Out of scope
Section titled “Out of scope”- Product/bundle-identifier renames beyond the crate (owner-gated).
vimit_prototype(already adopted byT-UPV1, now atsolutions/augmented/apps/vimit_prototype/) — no consolidation between the two in this task.- Correcting
T-B1VB’s completion note (owner directed a note-only fix after this task lands).
Dependencies
Section titled “Dependencies”- none — vimit has no internal package deps; everything it needs is already in the workspace pins.
Discovery context
Section titled “Discovery context”- Owner decision 2026-07-19 reversing the 2026-07-18 hold: “I want vimit working and migrated.” Was the explicit exclusion in M-W6P0.
- Retargeted 2026-07-30: originally specced for
apps/vimit+ a rootCargo.tomlmembers edit; the D-0001 solutions/ restructure moved the augmented family tosolutions/augmented/and added the covering cargo/moon globs, so the destination and touchpoints were rewritten to match. The upstream repo’s archival (2026-07-30) does not block the vendor — archived repos remain clonable.
Post-mortem
Section titled “Post-mortem”Captured by /sdlc:task-work on 2026-07-31. PR: pending.
Acceptance criteria coverage
Section titled “Acceptance criteria coverage”- AC-1: auto —
cargo check -p vimit+cargo clippy -p vimit -- -D warningsexit 0;cargo metadata --no-depslistsvimit, noexample-tauri-astro; grep for both old names → zero hits - AC-2: auto —
bun install(996 packages) +bun run build(48 pages) insolutions/augmented/apps/vimit - AC-3: agent-manual —
bun run tauri devlaunched;target/debug/vimitwindow process observed via pgrep, astro dev served 200s to the WebView, killed cleanly - AC-4: auto —
findfor the three lockfile names under the app → zero hits - AC-5: auto —
moon query projectslistsvimitwith full task surface - AC-6: auto — committed root
Cargo.lockdiff is 11 insertions, 0 deletions (only the newvimitpackage entry)
What worked
Section titled “What worked”- The pickup-time retarget (apps/ → solutions/) landed on origin/main before the readiness gate, so the implementer worked from an accurate spec end-to-end
- The
solutions/*/apps/*/src-tauricargo glob andsolutions/*/apps/*moon glob absorbed the new app with zero root-config edits, as the restructure intended - Sibling mirror (
solutions/augmented/apps/augmented-books/) answered every layout-latitude question without user input
Friction and automation gaps
Section titled “Friction and automation gaps”- Step 7’s
--diff-against-baselinegate resolved the baseline dir from the WORKTREE (.sdlc/worktrees/<t>/.sdlc/quality-baselines/) while Step 3a captured into the main checkout — needed a manual copy; exactly the gap T-OLTA-task-work-step7-worktree-baseline-dir already tracks → T-OLTA-task-work-step7-worktree-baseline-dir augmented-books:frontend-lintfails on main: itscommand: 'noop'override does not displace the tauri aspect’s inherited script, soaugmented-books:checkis broken — vimit’s fix pattern (script: 'true', commit a10eea4f2) applies but the sibling was out of scope → T-X8NO-augmented-books-frontend-lint-script-override- moon’s first
InstallDependencies(rust)action regenerated the entire root Cargo.lock to newest-compatible (306-line churn, discarded); every NEW rust project’s first moon run will reproduce this — the adoption recipe should warn to discard that churn → T-ZYBI-recipe-warn-moon-cargo-lock-churn src-astro/public/anki/*.apkgis a committed build artifact the anki prebuild regenerates with nondeterministic zip bytes — perpetually dirty file; needs an owner call to gitignore/degit it → T-3AUP-vimit-gitignore-anki-apkg-artifacts- Dropping upstream lockfiles floated
ts-fsrs5.2.3 → 5.4.1, whose FSRS state changes broke 3/77 tests — exact-pinning restored upstream resolution; the recipe’s “drop all lockfiles” step should call out re-pinning floated majors/minors when tests break → T-08HW-recipe-note-repin-floated-deps
Spawned follow-up tasks
Section titled “Spawned follow-up tasks”- T-OLTA-task-work-step7-worktree-baseline-dir — Step 7 resolves the baseline dir from the worktree while capture writes to the main checkout; third independent observation, linked
- T-X8NO-augmented-books-frontend-lint-script-override (https://github.com/sksizer/dev/pull/1103) [open/ready] — fix augmented-books:frontend-lint so its noop override displaces the inherited tauri lint script, spawned
- T-ZYBI-recipe-warn-moon-cargo-lock-churn (https://github.com/sksizer/dev/pull/1105) [open/ready] — adoption recipe warns that moon’s first rust InstallDependencies churns the root Cargo.lock, spawned
- T-3AUP-vimit-gitignore-anki-apkg-artifacts (https://github.com/sksizer/dev/pull/1106) [planning/draft] — owner call to gitignore/degit vimit’s committed anki .apkg build artifacts, spawned
- T-08HW-recipe-note-repin-floated-deps (https://github.com/sksizer/dev/pull/1108) [open/ready] — adoption recipe calls out re-pinning floated deps when dropping lockfiles breaks tests, spawned