Twinned from https://github.com/cfsh/ninefold/issues/1145 by tools/beads/import_github.py's reconcile pass.
Session: TBD
Carved out from design 011 T9 (#1043) — the parts that don't need Aedan's
R2 token or T8's restore-drill script, which T9's full scope depends on
(design_docs/011-task-tracking-on-beads.md's T9 card: "Restore: download
→ the T8 drill script passes against it" — T8 isn't built yet either).
- tools/beads/backup.py, built on the release.py pattern
(tools/release/release.py:161-178: env-var-only rclone remote, nothing
on disk, --dry-run default, sync hard-scoped to a prefix) — the upload
path targeting r2:ninefold/tracker/issues.jsonl, and the public-URL
404-check logic (must verify the tracker prefix is NOT served by the
public dev URL before ever calling this safe to ship).
- Tests: fake rclone, argv-level assertions, same style as
test_release.py. No live R2 calls — credentials aren't available yet.
- Research half (timeboxed ~half a day): can Dolt speak R2 directly as
an S3-style remote? §2.4's measurement says the manifest CAS is the crux
and §7.1's default is *don't* — post a finding either way as a comment on
this issue, never new machinery.
- Checklist half: native-Windows bd install notes (npm-pinned; MinGW
build + timeout.exe hook-conflict gotchas documented upstream) — this
is desk research, not a live Windows test.
- The real upload/restore cycle against live R2 — blocked on Aedan minting
a Cloudflare token (three env vars, same pattern as release.py's
creds) and Linux-box credential distribution.
- Wiring against T8's restore-drill script — T8 isn't built yet.
- Closing #1043 itself — that happens once the live cycle passes for real.
Real dependency: none — orthogonal to T5/T6/T7/T8, doesn't touch files any other design-011 chunk is using.
None.
No comments.