Rust workspace (resolver = "3", edition 2024), three crates:
| Crate | Type | Purpose |
|---|---|---|
crates/engine |
lib | SQLite-backed data store (rusqlite bundled, chrono). Schema migration on open, CRUD for projects & tasks. Defines Engine, StoreError, models. |
crates/tui |
lib | Placeholder — no real UI code yet. |
crates/tdo |
bin | Binary entrypoint — currently a stub. Depends on engine. |
The workspace root Cargo.toml lists all members; Cargo.lock is committed.
cargo build # whole workspace
cargo test # all crates (only tui has a stub test currently)
cargo test -p <crate> # single crate
cargo test <name> # filter by test name
cargo fmt # no config — uses rustfmt defaults
cargo clippy # no config — uses clippy defaultsNo CI, pre-commit hooks, or codegen scripts exist yet.
- Never commit work directly on the
mainbranch. - New features: create and work on a
feature/<featurename>branch before merging. - Fixes/bug fixes: create and work on a
fix/<fixname>branch before merging.
- SQLite schema is created via
PRAGMA foreign_keys = ON; PRAGMA journal_mode = WAL;thenCREATE TABLE IF NOT EXISTS ...on everyEngine::open(). There are no standalone migration files. rusqliteuses thebundledfeature — no system libsqlite3 needed.chronouses default feature set (no serde).DateTime<Utc>throughout.tdobinary currently does nothing — real CLI entrypoint and TUI crate are unwritten.StoreErroris the domain error type acrossengine; callers match it forNameTaken,TaskNameTaken,NotFound,Db.- Edition 2024 requires Rust 1.85+.
- No
rust-toolchain.tomlpins a version yet.