Changes touching this path
- TS SDK slice 1: in-memory public read against a real relay (#423)
Completes the slice-1 tracer bullet on top of the landed WASM core: an
in-memory agent connects to a relay and reads a public file byte-for-byte
with no .loot/ on disk. The single passing read() exercises the whole
stack — WASM codec + fetch transport + client-side path-scoping + AES
decrypt + host-side zstd inflate.
- loot-wasm: add encode_fetch_request so the /fetch wire framing (version
marker + have/wants) stays single-sourced with the binary; frozen-vector
parity added (native + wasm-pack test --node).
- sdk/ (@millerbyte/loot-sdk, ESM): connectRelay(url, identity) -> LootRepo
with list() and streaming read()/.bytes(). Transport speaks the relay HTTP
wire via fetch(); loot-net never crosses. Client-side path-scoping (#380):
a metadata fetch resolves path->oid, a scoped fetch pulls just that object's
bytes (both have=[], since the relay gathers objects+keys from the changes
not in `have`). zstd inflate is host-side (fzstd) — the wasm core has no zstd.
Typed errors (LootError/TransportError/NotFoundError/AuthError, #382).
- Seam 1: a vitest suite drives the real `loot serve` relay, seeded via the
real `loot` CLI (init -> author -> new -> push); 4 tests green (list, byte-
for-byte read, streaming, NotFound). The wasm pkg is built by
`npm run build:wasm` (gitignored, regenerated from crates/loot-wasm).
Deferred to later slices: write path, private/grant read, physical backend.
Refs #423, #421.
db75b0b7 · dbf3dbe6…
Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.