docs/SYNC_CONCEPTS.md
Beads issue data lives in Dolt. The local Dolt database is the source of truth
for bd list, bd show, bd ready, and every write command.
Cross-machine sync uses Dolt remotes:
bd dolt push
bd dolt pull
For normal git-hosted projects, the Dolt remote can be the same origin URL
used for source code. Dolt stores issue history under refs/dolt/data, separate
from source branches such as refs/heads/main.
On new projects, bd init auto-detects git remote get-url origin and
configures a Dolt remote named origin. The first bd dolt push publishes
refs/dolt/data. Fresh clones should run bd bootstrap to clone that Dolt
history. When bootstrap finds refs/dolt/data on git origin, it also wires
that origin as the Dolt remote for future bd dolt push and bd dolt pull.
.beads/issues.jsonl is an export. It exists for viewers, interchange,
migration, and backup. It is not the canonical cross-machine sync channel.
Do not use routine bd import .beads/issues.jsonl as a replacement for
bd dolt pull. JSONL import is upsert-only; it cannot infer that records absent
from an export were deleted, pruned, or simply never exported.
The pre-commit hook refreshes .beads/issues.jsonl when export.auto=true.
That keeps the export current for tools, but it does not push Dolt history.
The post-merge and post-checkout hooks skip JSONL import when sync.remote is
configured. For old projects with no Dolt remote, they may import JSONL as a
compatibility fallback and print a warning that this is not durable sync.
For projects initialized before automatic git-origin remote wiring, pick the machine with the authoritative local Dolt database first. Then run:
bd dolt remote list
bd export -o .beads/issues.pre-remote.jsonl # optional issue audit export
bd dolt remote add origin <git-origin-url>
bd dolt push
Use the Dolt-compatible git URL form when needed. For example,
git+ssh://[email protected]/org/repo.git or
git+https://github.com/org/repo.git. bd dolt remote add origin ...
persists sync.remote into .beads/config.yaml; commit and push that config
change so fresh clones can run bd bootstrap.
Other machines should then run:
bd dolt pull
# or, if the local database is stale or missing:
bd bootstrap