argand-site-registry/docs/FORMATS.md
nicweyand 557ba7cd69
All checks were successful
Standalone registry checks / check (push) Successful in 5m58s
release: implement site registry v0.5
2026-09-13 14:42:39 -04:00

5.6 KiB

Versioned formats

Version 0.5 uses writer schema 5 and argand.site-rules/v4. Schema identifiers are independent from the crate version. Unknown schemas and rules fail closed.

Artifact Current schema Purpose
Source manifest argand.site-source/v3 Exact source object, integrity proof, lineage, parser bound and typed coverage
Generation receipt argand.site-registry/v3 Compact runtime plus content-addressed audit references
Active/audit JSONL argand.site-export/v2 Source-bearing assertions with selection state
Compact audit JSONL argand.site-export/v3 Verified external history with bundle references and tombstones
Cold audit bundle argand.site-audit-bundle/v2 Source manifest and ordered record/fact history
Audit verification argand.site-audit-verification/v1 Streaming bundle verification totals
Audit retention checkpoint argand.site-audit-retention/v1 Signed no-delete retention set
Benchmark report argand.site-benchmark/v1 Source-pinned operation and resource evidence
Evaluation report argand.site-evaluation/v2 Resolver judgments, latency, and active source lineage
Evidence bundle argand.site-evidence-bundle/v1 Exact evidence signed by reviewer votes
Vote argand.site-vote/v1 Authenticated approve/revoke decision
Review policy argand.site-policy/v1 Threshold, groups, revocation, and separation rules
Observation batch argand.site-observation-source/v1 Pinned JSONL object and rights
Observation argand.site-observation/v1 Normalized subject-bound observation
Observer capture argand.site-observer-capture/v1 Cache-only replay input
Emergency revocations argand.site-revocations/v1 Cumulative publisher-signed offline block overlay
Active pointer argand.site-current/v2 Signed generation pin plus revocation continuity
Diff argand.site-diff/v4 Typed change stream across generations

Source manifest v3 adds explicit integrity, lineage, and an optional maximum_record_bytes parser ceiling to v2 typed coverage. Integrity always contains the locally computed SHA-256 and may also carry a source-bound provider checksum. Lineage names the direct provider, upstream datasets, transformations, and a conservative independence group. A missing legacy lineage serializes as unknown and never becomes evidence of independence.

Coverage is one of full, partition, or delta. A delta names its exact base, positive consecutive sequence, and superseded source IDs. A full source cannot compose with active partitions. Overlap, gaps, cycles, missing bases, cross-provider supersession, and mixed legacy/typed frontiers fail the build.

Generation v3 uses runtime_layout: "compact-v1". Its local SQLite database keeps the selected source manifests, active facts and projections, review/policy state, and the evidence needed by runtime queries. Each complete source history is first written to an external JSONL object. The receipt binds its SHA-256, length, source, record/fact counts, selected state, attribution digest and coverage digest. verify-audit re-hashes and parses every object before an audit export or retention checkpoint. The separate retention signature namespace is argand-site-registry-audit-retention; every checkpoint contains deletion_authorized: false. Generation v2 remains supported with embedded history for compatibility.

The normal export emits selected active facts only and excludes rejected facts. Every assertion has selection_state: "active". Audit export includes active, superseded, and rejected facts; rejected assertions include their reason. Both modes redact Curlie descriptions by default and neither represents approved navigation routes. Use resolve for admission.

Votes bind the subject kind and fingerprint, evidence-bundle digest, policy digest, reviewer, decision, reason, asserted review time, optional expiry, exact role/locale/country scope, and revocation supersession IDs. Exact JSON bytes are signed with OpenSSH namespace argand-site-registry-vote. Writer accepted_at is separate and cannot be supplied by the reviewer.

Policy fields define base thresholds for names, edges, and equivalences; maximum approval and observation ages; reviewer groups; publisher separation; source and drift holds; and optional stricter risk_thresholds for source_conflict and dangerous_drift. Unknown fields and risk classes fail closed.

Emergency feeds retain every authenticated revocation ID across policy epochs, active state, any explicit superseding quorum, and a refresh deadline no more than seven days after the effective time. Exact JSON bytes use OpenSSH namespace argand-site-registry-revocations. A feed can overlay a cached generation only when rules, policy, and reviewer trust-root digests match. Feed continuity rejects dropped subjects or vote IDs. A feed from another compatible generation may only add blocks. Removing a block requires the exact full generation so the consumer can recompute the signed superseding quorum; expired feeds fail closed.

Legacy source manifests remain readable as isolated (source, scope) streams. Legacy 0.3 reviews remain available only through the explicit compatibility policy. New strict builds use votes and a receipt-bound reviewer trust root.

The contract decisions are recorded in ADR 0001, ADR 0002, ADR 0003, ADR 0004, and ADR 0005.