Project storage runtime: ADR-0015 + ADR-0004/0007 amendments

Designs track-2 lifecycle and persistence end-to-end: per-command
write-through to db+yaml+csv+history.log gated by the combined db
persistence logic with commit-db-last ordering; existence-only load
with explicit rebuild command; --resume CLI flag backed by
<data-root>/last_project; in-TUI list-with-browse picker; lock file
for single-instance enforcement; fatal-banner-then-quit failure
model (with --resume making restart cheap); fatal CSV row-load
errors with full diagnosis; YYYYMMDD-word-word-word temp naming
with display-name prettifier; collision-checked names for both
temp and user-supplied projects. Project name lives only on the
filesystem (not duplicated in YAML). ADR-0004 and ADR-0007 amended
in place. requirements.md and CLAUDE.md updated; OOS-6 (global
rolling history) tracked as deferred.
This commit is contained in:
claude@clouddev1
2026-05-07 19:53:47 +00:00
parent bfdf350ac8
commit 4fca862c6c
6 changed files with 663 additions and 17 deletions
+31 -6
View File
@@ -100,11 +100,12 @@ against it.
- [ ] **A1** All canonical app-level commands implemented and
available in both modes: `save`, `save as`, `load`, `new`,
`export`, `import`, `seed`, `replay`, `undo`, `redo`, `mode`,
`help`, `hint`, `quit`.
`rebuild`, `export`, `import`, `seed`, `replay`, `undo`,
`redo`, `mode`, `help`, `hint`, `quit`.
*(Progress: `quit`/`q` and `mode simple|advanced` implemented;
the rest land alongside the features they belong to — `save`
and friends in track 2, `seed` in the seeding iteration, etc.)*
the rest land alongside the features they belong to — `save`,
`load`, `new`, `rebuild`, `export`, `import` in track 2
(ADR-0015), `seed` in the seeding iteration, etc.)*
## DSL data commands
@@ -242,8 +243,23 @@ against it.
- [ ] **P4** `load` opens a picker listing temp projects with
timestamps, with the option to browse to an arbitrary location.
- [ ] **P5** `playground.db` is a derived artifact: rebuilt
silently when missing, rebuilt with confirmation and a change
summary when present (per ADR-0004).
silently when missing; rebuilt explicitly via the new
`rebuild` app-level command, which prompts with a change
summary before reconstructing from `project.yaml` + `data/`
(per ADR-0004 amendment 2 and ADR-0015 §7).
- [ ] **P-NAME-1** Temp project directory naming pattern:
`<YYYYMMDD>-<word>-<word>-<word>` from a built-in wordlist
(ADR-0015 §2). Date-sortable; collisions checked against
existing folders and the slug is regenerated on the rare
collision. User-supplied save names that already exist as
folders are refused with a friendly error.
- [ ] **P-NAME-2** Display-name prettifier converts a project
directory name to a human-readable display name: strip a
leading `YYYYMMDD-` for temp projects; split kebab / snake /
camel; title-case each word (ADR-0015 §2).
- [ ] **P-NAME-3** The current project's display name is shown
in the UI status bar at all times, prefixed with `Project:`
(ADR-0015 §2).
## Project file format (per ADR-0004)
@@ -318,6 +334,11 @@ against it.
## CLI
- [ ] **L1** Load a project via a positional CLI argument.
- [ ] **L1a** `--resume` CLI flag opens the most recently used
project (path tracked in `<data-root>/last_project`). Errors
cleanly if no previous project exists or the recorded path is
gone; mutually exclusive with a positional path argument
(ADR-0015 §7).
- [~] **L2** Submit a command alongside project load — deferred,
not v1.
@@ -408,6 +429,10 @@ necessarily qualitative, the criterion is named and the bar is
- [-] **N3** Cross-emulator visual regression coverage — per
ADR-0008. Crossterm abstracts terminals adequately; we revisit
only if a real regression surfaces.
- [~] **N4** Global rolling input history (cross-session,
cross-project). Mentioned in I2's wording; deferred per
ADR-0015 §12 — project-scoped history (via `history.log`) is
the v1 surface. Revisit if real demand emerges.
---