diff --git a/BACKLOG.md b/BACKLOG.md index bafcb1b..42dd362 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -11,7 +11,7 @@ Bugs first — the cost-guard and answer-loss class this tool exists to prevent, then security, then features/optimisation, then tests. Each has a GitHub issue and vice versa. -### Epic: encrypted SQLite is the authoritative store for lanes, secrets and (next) metrics — YAML retired ([#105](https://github.com/CryptoJones/FlatlineRoundtable/issues/105)) +### Epic: encrypted SQLite is the authoritative store for lanes, secrets and (next) metrics — YAML retired ([#105](https://github.com/CryptoJones/FlatlineRoundtable/issues/105)) — DONE 2026-10-06 - [x] Split config validation from YAML parsing; route scripts through `rt.fetch_keys` ([#106](https://github.com/CryptoJones/FlatlineRoundtable/issues/106)) — shipped in PR #113 @@ -22,7 +22,7 @@ and vice versa. - [x] Run from the store: `load_config` reads the DB, `fetch_keys` reads secrets, YAML retired ([#109](https://github.com/CryptoJones/FlatlineRoundtable/issues/109)) — shipped in PR #124 - [x] `db backup|restore` and the telesto restic job ([#110](https://github.com/CryptoJones/FlatlineRoundtable/issues/110)) — shipped in PR #125 -- [ ] Fleet rollout notes and the Python 3.11 floor ([#111](https://github.com/CryptoJones/FlatlineRoundtable/issues/111)) — on docs/sqlite-store-fleet-rollout +- [x] Fleet rollout notes and the Python 3.11 floor ([#111](https://github.com/CryptoJones/FlatlineRoundtable/issues/111)) — shipped in PR #126 ### Epic: run the roundtable from inside Orca — local web UI, no fork ([#115](https://github.com/CryptoJones/FlatlineRoundtable/issues/115)) — DONE 2026-10-03 diff --git a/README.md b/README.md index 1323245..78484c1 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,10 @@ Optionally `./install.sh` to expose it as a Claude Code skill. - Keys never reach the transcript or `--json` output. - A missing secret fails the run loudly and names the fix. It never silently falls back to an unauthenticated call. +- A store failure never fails a paid run. The roster and secrets are read + before any lane is dispatched, so a broken store stops a run before it + spends; anything a run writes to the store later is best-effort, and an + answer already paid for is delivered regardless. **The store ([#105](https://github.com/CryptoJones/FlatlineRoundtable/issues/105)) is the only configuration.** `roundtable db init` creates `~/.local/share/flatline-roundtable/roundtable.db` diff --git a/install.sh b/install.sh index 7663873..0251bd7 100755 --- a/install.sh +++ b/install.sh @@ -47,6 +47,11 @@ command -v "${PYTHON}" >/dev/null || die "${PYTHON} not found" "${PYTHON}" -c 'import cryptography' 2>/dev/null || \ die "\`cryptography\` not installed — ${PYTHON} -m pip install --user cryptography (the store needs it)" +# The store (~/.local/share/flatline-roundtable/roundtable.db) is the only +# configuration: lanes, and lane secrets encrypted under a DB key kept in pass. +# It is read before any lane runs, so a broken store stops a run before it +# spends -- a store failure never fails a paid run. +# # `pass` holds the store's DB key, which unlocks every lane secret. This is a # warning rather than a hard failure because a roster of only `cli` / `acp` # lanes rides subscriptions and needs no secret at all. But a lane with any diff --git a/skill/SKILL.md b/skill/SKILL.md index 997db9d..071aafe 100644 --- a/skill/SKILL.md +++ b/skill/SKILL.md @@ -145,8 +145,11 @@ Rules: ### Lane settings (CJ, 2026-09-27) -The settings live in the store, `~/.local/share/flatline-roundtable/roundtable.db` -(`roundtable lanes show NAME`). Each lane's `notes` carry the reason, and `roundtable lanes +The settings live in the store, `~/.local/share/flatline-roundtable/roundtable.db`. +Secrets are encrypted in it; the DB key is the `pass` entry `flatline-roundtable/db-key`. +A store failure never fails a paid run: lanes and secrets are read before anything is +dispatched, so a broken store stops the run before it spends. +One lane's settings: `roundtable lanes show NAME`. Each lane's `notes` carry the reason, and `roundtable lanes history NAME` shows every change since the YAML import. | Lane | Model / route | Setting | Why | Status |