Repository navigation
Description
Question from Drew (2026-10-27): the dashboard stores are JSON files (actions.json, comments.json in ~/pm-stack/aggregator) — should they be a database? Evaluate migrating the actions/comments stores to SQLite (bun:sqlite, built into the runtime — no new service) preserving today's semantics exactly: full append-only history, supersedes-never-delete undo, outcome/byRun write-backs, atomicity. Include: current file sizes + growth rate, the in-memory load-once behavior of ActionsStore (loads the file once per process; external changes invisible until restart — the API is the only writer today, so this is latent), corruption/recovery story, and a migration path that keeps the JSON files as an export. Deliverable: a short evaluation + recommendation on this issue; implement only on Drew's go.
Acceptance criteria
- A short evaluation is posted on this issue comparing the JSON-file stores vs SQLite (bun:sqlite) on: current file sizes + growth rate, the load-once in-memory behavior and its external-change blindness, corruption/recovery story, and atomicity/history semantics (append-only history, supersedes-never-delete undo, outcome/byRun write-backs).
- The evaluation ends with a clear recommendation; the JSON files remain exportable in any migration path.
- No implementation is started without Drew's go (this issue is the evaluation only).
Activity
developing-today commentedon Oct 27, 2026
CODE-533
dezren39 commentedon Oct 27, 2026
Intake review
Fleet monitor intake pass (protocol §5) — this issue was filed today (2026-10-27) from Drew's dashboard/orchestration requests via the orchestration pass and had no
priority/*label (and, where noted, no acceptance-criteria section).Live check: filed within the last hour; no merged PR or commit can have resolved it yet, and it is part of a deliberately filed set — not a duplicate. Cross-checked against the sibling filings from the same pass.
Related: Related: #1450/#1451/#1446/#1456 all build on the same actions/comments stores — this evaluation's outcome affects their storage assumptions.
Notes: Evaluation only; Drew asked the question, implementation is explicitly gated on his go.
Risks: Risk: the load-once behavior means external edits are invisible until restart — latent today because the API is the only writer; any migration must preserve append-only history and supersedes-never-delete undo exactly.
Suggested approach: Suggested approach: measure current sizes/growth from the live stores, write the comparison against the listed criteria, end with one recommendation.
Labels normalized this pass: kind/question, priority/low, effort/s, status/needs-triage, source/human + meta/enriched.
dezren39 commentedon Oct 28, 2026
🤖 Agent note · picked up
6 remaining items
dezren39 commentedon Oct 29, 2026
🤖 Agent note · done
queue/2668-1452-store-corrupt-quarantine· laptop worktree~/git/fleet/queue-2668-1452What shipped:
ActionsStore.doLoad/CommentsStore.doLoadnow treat a missing file as the only silent empty start; an unparseable or wrongly-shaped store is quarantined to<file>.corrupt-<timestamp>(original bytes preserved, loud log naming the path), the store starts empty, and the next persist writes a fresh validversion:1file without touching the quarantine. Newtest/store-corrupt.test.tscovers missing/corrupt/wrong-shape/valid for both stores.Verification: laptop
bun testover store-corrupt + actions + slice3 + store-concurrency: 43 pass, 1 fail — the failure (actions.test.tssnooze-strip) is pre-existing on clean main (verified against an untouched main checkout) and already tracked as #1682; unrelated to this change. PR CI was queued/pending at handoff.user/reviewreviewed here first: the SQLite migration stays Drew's call and is explicitly out of scope in the PR.