Skip to content

Runs read the store; YAML retired (#109) - #124

Merged
CryptoJones merged 1 commit into
mainfrom
feat/sqlite-store-run-from-store
Oct 6, 2026
Merged

CryptoJones merged 1 commit into
mainfrom
feat/sqlite-store-run-from-store

Conversation

@CryptoJones

Copy link
Copy Markdown
Owner

Closes #109
Part of #105

What

load_config() reads the roster from the store and fetch_keys() decrypts secrets from it. --config names one store for both halves of a run and is forwarded to --each children as before. pass is now needed only for the DB key, one pass show per process.

  • A .yaml/.yml --config dies with the import-yaml command that moves it in.
  • PyYAML is imported only inside import-yaml. The run path and install.sh no longer need it.
  • import-yaml --pull-secrets keeps its own sequential pass reader with the first-line rule.
  • open_db() sets the busy timeout at connect, so journal_mode=WAL cannot race under --each -j N.
  • DEFAULT_CONFIG is the store path, so skill/toolpanel.py runs unchanged.
  • FlatlineRoundtable.yaml.example moves to tests/fixtures/legacy-example.yaml. It is the import-yaml fixture and still the annotated reference for every option. examples/full-roster.yaml becomes full-roster.json, and ci-config.yaml is replaced by ci-roster.json.
  • Tests build stores with make_db(). New tests cover a store secret reaching the Authorization header end to end with no pass on PATH, a wrong DB key, a missing secret, and a refused YAML --config.
  • CI installs cryptography only, reruns the suite with PyYAML on 3.14 for import-yaml, builds the --list store from ci-roster.json, and checks the YAML refusal and the single lazy import yaml.
  • install.sh enforces Python 3.11+ and cryptography. README, CLAUDE.md, SKILL.md and .gitignore describe the store, the DB key, and that a store failure never fails a paid run.

Lane dicts do not yet carry lane_id/version, which the issue sketched. Nothing reads them yet; the consumers (#80 follow-ups, #89) can add them.

Manual gate (makemake, store imported in #123)

$ roundtable --list                       # 11 active lanes, from the store
$ roundtable --lanes SELMA --no-transcript --max-spend 0.02 "Reply with exactly the word OK..."
SELMA (nvidia/nemotron-3-super-120b-a12b:free) via Nvidia 0.7s
OK
1/1 lanes answered in 0.7s                # exit 0
$ roundtable --each -j 3 --lanes SELMA,Neuromancer,Proteus --no-transcript --max-spend 0.05 "..."
Neuromancer OK 1.6s / SELMA OK 0.4s / Proteus OK 5.8s, spend $0.0001   # exit 0
$ python3 skill/toolpanel.py SELMA brief.txt out.txt
# SELMA (nvidia/nemotron-3-super-120b-a12b:free, http) status=ok tool_calls=0 finish=stop   # exit 0
$ grep -c ".config/flatline-roundtable" roundtable
0

Verified

233 tests pass on Python 3.11 without PyYAML (9 import-yaml tests skip) and on 3.14 with it.

Proudly Made in Nebraska. Go Big Red! 🌽 https://xkcd.com/2347/

🤖 Generated with Claude Code

https://claude.ai/code/session_01UFaYYNp3Pb6CnndLuW1sj1

load_config() reads the roster from the store and fetch_keys() decrypts the
secrets from it. `--config` names one store for both halves of a run and is
forwarded to --each children as before. `pass` is now needed only for the DB
key: one `pass show` per process instead of one per lane secret.

- A .yaml/.yml --config dies with the import-yaml command that moves it in.
- PyYAML is imported only inside import-yaml (read_yaml_config); the run
  path no longer needs it, and install.sh no longer asks for it.
- import-yaml --pull-secrets keeps its own sequential pass reader, with the
  first-line rule, since fetch_keys() no longer reads pass.
- open_db() sets the busy timeout at connect, so journal_mode=WAL cannot race
  when --each -j N children open the store together.
- DEFAULT_CONFIG is the store path, so skill/toolpanel.py runs unchanged.
- FlatlineRoundtable.yaml.example moves to tests/fixtures/legacy-example.yaml
  (the import-yaml fixture, and still the annotated reference for every
  option); examples/full-roster.yaml becomes full-roster.json; ci-config.yaml
  is gone, replaced by ci-roster.json.
- Tests build stores with make_db() instead of writing c.yaml, under a
  throwaway key file. New: store secret reaches the Authorization header end
  to end with no pass on PATH; wrong DB key; missing secret; a YAML --config
  is refused. The import-yaml tests skip without PyYAML.
- CI installs cryptography only, runs the suite once more with PyYAML on 3.14
  for import-yaml, builds the --list store from ci-roster.json, and checks
  that the YAML refusal and the single lazy `import yaml` hold.
- install.sh enforces Python 3.11+ and cryptography and prints the db init /
  import-yaml next steps. README, CLAUDE.md, SKILL.md and .gitignore describe
  the store, the DB key, and that a store failure never fails a paid run.

Part of #105

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UFaYYNp3Pb6CnndLuW1sj1
@coderabbitai

coderabbitai Bot commented Oct 6, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 34 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: d78bbc17-9775-43a2-9c69-152915549b19
📥 Commits

Reviewing files that changed from the base of the PR and between f72028a and 0c5bbe6.

📒 Files selected for processing (13)
  • .github/workflows/ci.yml
  • .gitignore
  • BACKLOG.md
  • CLAUDE.md
  • README.md
  • examples/full-roster.json
  • examples/full-roster.yaml
  • install.sh
  • roundtable
  • skill/SKILL.md
  • tests/fixtures/ci-config.yaml
  • tests/fixtures/legacy-example.yaml
  • tests/test_roundtable.py
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Run from the store: load_config reads the DB, fetch_keys reads secrets, YAML retired

1 participant