# Development workflow The local loop uses Bun for scripts, Cargo for Rust, Vite for the renderer, and Tauri for the desktop shell. Commands are declared in `package.json`. ## Common loop ```bash bun install --cwd frontend bun run dev bun run verify:fast ``` `bun run dev` enters `src-tauri` and runs `cargo tauri dev`. `bun run verify:fast` runs the checks most useful before a small commit: frontend typecheck, frontend lint, frontend tests, frontend dist guard, `cargo fmt --all --check`, and `cargo clippy --workspace --all-targets -- -D warnings`. ## Data model changes For a change to Session, Entry, Draft, Finding, Attachment, AI Run, or settings data: 1. Update the relevant file under `crates/qa-scribe-core/src/domain`. 2. Update persistence in `crates/qa-scribe-core/src/storage/mod.rs` or `crates/qa-scribe-core/src/services/session_service`. 3. Update command registration or DTO exports in `src-tauri/src/specta_bindings.rs` if the bridge changes. 4. Regenerate or check `frontend/src/bindings.ts` with `bun run bindings:generate` or `bun run bindings:check`. 5. Update frontend wrappers in `frontend/src/tauri.ts` and `frontend/src/tauriCommands.ts` when command signatures change. ## UI changes Most UI changes start in `frontend/src/app/AppShell.tsx`, a view under `frontend/src/views`, or an action factory under `frontend/src/app`. Shared rich-record behavior lives in `frontend/src/views/RichRecordView.tsx` and `frontend/src/views/RecordCollectionView.tsx`. See [Patterns and conventions](how-to-contribute--patterns-and-conventions.md) for naming, validation, and bridge patterns.