Everything below runs in a scratch store and touches nothing else. By the end you will have minted a deed, superseded it, packed it with its receipt for another machine, and checked it there without the sender’s store.
1. Point at a store#
A store is a directory. It is created on first write.
$ export DEEDAR_URL=file:///tmp/deeds
$ deedar list
2. Mint a deed#
$ echo 'fn main() {}' > /tmp/note.rs
$ deedar create file --name "the parser patch" --path /tmp/note.rs --agent you
id=deed-file-the-parser-patch kind=file name=the parser patch
paths=sha256:536e506b...
producedBy=you -
The accession deed-file-the-parser-patch is what everything else cites.
The bytes are stored once under their hash; the deed names them.
3. Check it#
$ deedar evidence deed-file-the-parser-patch
id=deed-file-the-parser-patch ok
$ deedar current deed-file-the-parser-patch
id=deed-file-the-parser-patch
evidence says the bytes are intact. current says the deed is still the
tip: nothing has superseded it.
4. Supersede it#
A deed is never edited. A better take is a new deed that names the old one.
$ echo 'fn main() { println!("parsed"); }' > /tmp/note.rs
$ deedar create file --name "the parser patch" --path /tmp/note.rs --agent you \
--supersedes deed-file-the-parser-patch
id=deed-file-the-parser-patch-2 ...
$ deedar current deed-file-the-parser-patch
id=deed-file-the-parser-patch -> deed-file-the-parser-patch-2
A citation of the first deed still resolves, and current tells the
citer it has moved on. That is the whole reason the tracker cites an
accession and not a path.
5. Hand it over with its receipt#
$ deedar export --into /tmp/bag/data/deeds deed-file-the-parser-patch-2
exported 1 deeds, 4 files
The bag carries the deed, its bytes, its evidence, and a receipt: the inclusion path from the deed to the log head at export time, plus the signed head when the store has a key.
6. Check it on another machine#
The receiver needs no store and no network.
$ deedar check /tmp/bag
1 deeds proven against a log of 2 entries, root 3d8e0155...
the head is unsigned, so every proof above is against a head this bag asserted about itself
Set DEEDAR_HOST_SIGNING_KEY on the sender to a 32-byte seed and the head
and the manifest come signed; add the verifying key to the receiver’s
layout and the last line reads (accepted). On the next handover from the
same sender, deedar check /tmp/bag2 --since head.txt also shows the log
grew from the head you kept, and was not rewritten.
Where next#
How-to: sign a satchel, audit a store, backfill a log, demand attestation.
Reference: kinds, verbs, the log, the store layout.
Explanation: why signatures alone do not bind a set, and what the log adds.