tar.gz of a FactBlock bundle in the JSONL profile: a manifest with the declarations, plus nodes.jsonl, edges.jsonl, and resolutions.jsonl. The factblock library converts it to the Parquet profile. Every row carries known_at and the backfill batch that attests it, so the file answers as-of reads without this server.
Unlike the other reads, export does not select on validity. A bundle is the ledger, not a view of it; the reader applies valid_at itself.
Query parameters
timestamp or date
required
Only rows learned at or before this instant are exported. Rows learned later are absent from the file, so a bundle exported as of T never leaks what was learned after T.
string
Scope to one space: its nodes, the edges between them, and the resolutions on them. Omit for the whole tenant.
string
Scope to one topic label: those nodes, the edges between them, and the resolutions on them. Combines with
space.Response
200 application/gzip, Content-Disposition: attachment; filename="factblock.tar.gz". The archive unpacks to one directory, factblock/.
Embeddings are not exported. The bundle declares no embedding model, so the vectors would not be usable (
declarations.embedding is null).
Both ways: factblock sync
Export is one direction. The factblock library’s sync moves rows between a folder and this ledger in both directions, by identity: nodes by id, edges by (source, target, type, asserted_at), resolutions by (target, decided_at). What only the folder has is written here under the folder’s own backfill batches, so a 2024 transcript you extracted locally is known here as of 2024, not today. What only the ledger has (verdicts, rows other writers added to the space) is appended to the folder with the ledger’s known_at. Nothing is changed in place, and running it again is a no-op.
GET /v1/export?as_of= for the pull, and one POST /v1/memories per batch for the push, each carrying that batch as its backfill declaration. Rows that carry a space keep it; the rest take --space. Resolutions are never pushed: verdicts are the ledger’s to make. The folder stays a valid bundle after every sync, so factblock validate and scan keep working on it offline.
The validator checks the five FactBlock invariants (three clocks, attested knowledge time, append-only, typed edges, declared facts). An export from tckg passes all of them; the smoke suite proves the round trip on every commit.