Wire KV sync through iroh-docs

This commit is contained in:
Eric Wendland 2026-05-22 16:24:11 +02:00
commit 59c463eb40
9 changed files with 406 additions and 47 deletions

View file

@ -153,8 +153,9 @@ The bootstrap implementation provides:
`geth db sync <node-id> <name>`
- local SQLite-backed KV commands: `geth kv create/set/get`; `kv set` accepts
`--subject <principal>` to exercise local capability checks for non-local
callers; `geth kv sync <node-id> <name> [--bearer-secret <secret>]` pulls
authorized remote updates
callers. The daemon mirrors named KV stores into Iroh Documents and
`geth kv sync <node-id> <name> [--bearer-secret <secret>]` pulls authorized
remote updates after receiving a read-only docs ticket through geth control.
- local Automerge document commands: `geth document create/status/set/get`;
CLI input and output are JSON views, while the store keeps durable Automerge
save bytes. `geth document sync <node-id> <name> [--bearer-secret <secret>]`
@ -201,8 +202,10 @@ Iroh endpoint, verifies the BLAKE3 hash, stores it in local CAS, and records the
serving peer as a provider visible with `geth cas providers <hash>`.
`geth-iroh` is pinned to `iroh 0.95.1` and compiles the native backend
libraries `iroh-blobs 0.97.0`, `iroh-docs 0.95.0`, and `iroh-gossip 0.95.0`
against the same daemon-owned endpoint generation. KV and pubsub still use their
documented bootstrap equivalents until their native protocol migrations land.
against the same daemon-owned endpoint generation. KV stores are mirrored into
native `iroh-docs` namespaces and peers receive read-only document tickets only
after geth authorization succeeds. Pubsub still uses its documented bootstrap
equivalent until the native gossip migration lands.
Remote resource commands that accept `--bearer-secret` can also authorize with a
resource-scoped bearer proof generated from the private bearer token returned at
creation time. The persisted auth log stores a public bearer id and token
@ -239,8 +242,9 @@ can safely apply non-conflicting remote creates, updates, deletes, and renames
only where local state still matches the recorded base.
Named KV stores participate in the same live-sync loop once they exist locally:
manual `geth kv sync <node-id> <name>` and background ticks require `kv.read`
on the remote `resource:kv:<name>` and import only remote entries that are not
older than the local value.
on the remote `resource:kv:<name>`. Authorized sync imports from the remote
Iroh Documents namespace where available, keeps SQLite as the durable local
index, and imports only remote entries that are not older than the local value.
Remote pubsub publish uses the protected Iroh control path too. The remote peer
requires `pubsub.publish` on `resource:pubsub:<topic>` before recording the
message in its local daemon-lifetime ring buffer. Pubsub remains lossy and is