Iteration 1: file-backed projects with auto-named temps, lock file, and L1 CLI

Replaces the in-memory database with an on-disk project. Startup either
opens a project at the positional CLI path (L1) or creates an auto-named
temp project (<YYYYMMDD>-<word>-<word>-<word>) under the OS-standard
data directory or a --data-dir override. The new project::Project type
owns the directory skeleton and a PID+hostname lock file with
stale-lock takeover via sysinfo. The status bar now shows
"Project: <Display Name>", derived by a small kebab/snake/camel
prettifier. Per-command persistence to YAML/CSV/history.log is NOT
yet wired -- that's Iteration 2; for now playground.db carries the
state across quits.

Tests: 257 passing (231 lib + 9 new integration + 17 existing),
0 failing, 0 skipped. Clippy clean with nursery lints.
This commit is contained in:
claude@clouddev1
2026-05-07 20:21:52 +00:00
parent 4fca862c6c
commit 601d3b6c51
20 changed files with 1883 additions and 18 deletions
+4
View File
@@ -12,10 +12,13 @@ publish = false
anyhow = "1.0.102"
chumsky = "0.13.0"
crossterm = { version = "0.29.0", features = ["event-stream"] }
directories = "6.0.0"
futures-util = "0.3.32"
gethostname = "1.1.0"
rand = "0.10.1"
ratatui = "0.30.0"
rusqlite = { version = "0.39.0", features = ["bundled"] }
sysinfo = { version = "0.39.0", default-features = false, features = ["system"] }
thiserror = "2.0.18"
tokio = { version = "1.52.2", features = ["full"] }
tracing = "0.1.44"
@@ -24,6 +27,7 @@ tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
[dev-dependencies]
insta = { version = "1.47.2", features = ["yaml"] }
pretty_assertions = "1.4.1"
tempfile = "3.27.0"
[lints.rust]
unsafe_code = "forbid"