Skip to content

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.

LocationRole today
apps/zoo/MIGRATION.mdThe adoption recipe: clean vendored copy, pnpm→Bun, crate rename precedent (tauri_nuxtzoo)
docs/planning/decisions/D-0001-project-structure.mdDefines the solutions/ staging tier; the augmented family lives at solutions/augmented/
Cargo.tomlRoot workspace members already globs solutions/*/apps/*/src-tauri — vimit’s crate auto-joins, no member edit needed
.moon/workspace.ymlprojects.globs includes solutions/*/apps/* — the app registers via its own moon.yml
solutions/augmented/apps/augmented-books/moon.ymlThe 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/: crate example-tauri-astro, lib example_tauri_astro_lib — untouched template names; MUST be renamed vimit / vimit_lib before 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 transitive links enumeration does not bite here).
  • App-root package.json is also named example-tauri-astro (rename to vimit); its scripts cd src-astro && pnpm run ….
  • src-astro/ carries BOTH pnpm-lock.yaml and package-lock.json — drop both. App root has its own pnpm-lock.yaml — drop.
  • Also present: content/ (training content), docs/, scripts/generate-anki-decks.mjs, vite.config.ts, moon.yml, src-astro/vite.test.config.
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-is

The 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).

  1. Clone the pinned rev; copy apps/vimit/solutions/augmented/apps/vimit/ (exclude node_modules and all lockfiles).
  2. Crate rename example-tauri-astrovimit, lib example_tauri_astro_libvimit_lib: Cargo.toml, main.rs’s lib call, and any tauri.conf.json references. Rename the app-root and src-astro package.json names to vimit / vimit-astro.
  3. Bun conversion per zoo recipe: rewrite cd src-astro && pnpm run … scripts to bun run …; switch tauri.conf.json before{Dev,Build}Command to Bun; generate solutions/augmented/apps/vimit/bun.lock.
  4. Workspace deps: flip deps already in [workspace.dependencies] to { workspace = true } (tauri, tauri-build, serde, serde_json); keep tauri-plugin-opener as-is. No members edit — the glob covers the crate path.
  5. Keep/adjust moon.yml so the project id is vimit and tasks run Bun, mirroring the shipped solutions/augmented/apps/augmented-books/moon.yml.
  6. Verify working state: cargo check -p vimit + clippy from root; bun install + bun run build (astro build) in the app; boot bun run tauri dev long enough to see the window process launch (or document the headless blocker).
  7. Product name / bundle identifier stay as shipped in tauri.conf.json — renames beyond the crate are owner-gated (zoo precedent).
LocationKindChange
solutions/augmented/apps/vimit/newThe vendored app (src-astro, src-tauri, content, docs, scripts) with crate + package renames
Cargo.lockmodifyAdditive absorption (minimal — deps already pinned)
  • AC-1: cargo check -p vimit and cargo clippy -p vimit -- -D warnings pass from the repo root; no crate named example-tauri-astro exists in the workspace.
  • AC-2: bun install + bun run build succeed in solutions/augmented/apps/vimit/.
  • AC-3: bun run tauri dev launches (window process observed), or the blocker is documented in the PR body.
  • AC-4: No Cargo.lock, pnpm-lock.yaml, or package-lock.json exists anywhere under solutions/augmented/apps/vimit/.
  • AC-5: moon query projects lists vimit.
  • AC-6: Root Cargo.lock diff is additive-only.
  • Product/bundle-identifier renames beyond the crate (owner-gated).
  • vimit_prototype (already adopted by T-UPV1, now at solutions/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).
  • none — vimit has no internal package deps; everything it needs is already in the workspace pins.
  • 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 root Cargo.toml members edit; the D-0001 solutions/ restructure moved the augmented family to solutions/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.

Captured by /sdlc:task-work on 2026-07-31. PR: pending.

  • AC-1: auto — cargo check -p vimit + cargo clippy -p vimit -- -D warnings exit 0; cargo metadata --no-deps lists vimit, no example-tauri-astro; grep for both old names → zero hits
  • AC-2: auto — bun install (996 packages) + bun run build (48 pages) in solutions/augmented/apps/vimit
  • AC-3: agent-manual — bun run tauri dev launched; target/debug/vimit window process observed via pgrep, astro dev served 200s to the WebView, killed cleanly
  • AC-4: auto — find for the three lockfile names under the app → zero hits
  • AC-5: auto — moon query projects lists vimit with full task surface
  • AC-6: auto — committed root Cargo.lock diff is 11 insertions, 0 deletions (only the new vimit package entry)
  • 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-tauri cargo glob and solutions/*/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
  • Step 7’s --diff-against-baseline gate 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-lint fails on main: its command: 'noop' override does not displace the tauri aspect’s inherited script, so augmented-books:check is 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/*.apkg is 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-fsrs 5.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

← Back to Tasks