Repository navigation
feat(format): 1.1.0 — manifest specURL, coverage, scopes, bundleDigest - #10
Merged
Merged
Conversation
Four optional manifest fields (spec §3.1) so a bundle answers 'what does this archive
cover, in which scopes, and is it whole?' without opening a stream — the questions a
procurement or erasure audit asks first (and the fields Stan Tyan's portability
checklist expects in a manifest):
- specURL — URL of the specification the bundle follows.
- coverage — {from, to}: earliest/latest episode eventTime IN THIS BUNDLE.
- scopes — sorted (code point), de-duplicated context ids the records reference
(episode contextID ∪ exported context record ids).
- bundleDigest — sha256 of the exact CHECKSUMS bytes: one hash for the whole archive.
The validator recomputes it when present.
Minor bump 1.0.0 → 1.1.0: readers MUST accept absence, so every 1.0 bundle stays valid;
the shipped 1.0 fixtures now double as backward-compatibility tests. MemCoverage is
exported. Schema + spec updated (byte-identical in the Swift repo). Tests: 80 passed.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
MaximKotliar
approved these changes
Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Item 1 of the checklist from Stan Tyan's portability article: his manifest template asks for a spec URL, coverage dates, a scope enumeration and an archive-level checksum. We had none of the first three.
Format 1.1.0 (spec §3.1) — four optional manifest fields
specURLcoverage{from, to}— earliest/latest episodeeventTimein this bundle (incremental exports describe their own contents)scopescontextID∪ exportedcontextrecord idsbundleDigestCHECKSUMSbytes — one hash for the whole archive; the validator recomputes it when presentMinor bump 1.0.0 → 1.1.0. Readers MUST accept the fields' absence, so every 1.0 bundle stays valid — the shipped 1.0 fixtures (
sample.mem,signed.mem) now double as backward-compatibility tests. Absent optional fields are omitted, nevernull(canonical rules).Changes
format.py:MemFormat.VERSION = "1.1.0",MemFormat.SPEC_URL, newMemCoveragedataclass, optionalMemManifestfields (exported from the package).exporter.py: emits all four (_write_checksumsnow returns the bytes it wrote; coverage/scopes computed from the episodes actually in the bundle). Evidence Pack manifests carrybundleDigesttoo.validator.py: verifiesbundleDigestagainst the on-diskCHECKSUMS(size-bounded); reports missingCHECKSUMSwhen a digest is declared.Schemas/manifest.schema.json+ spec §3 example, new §3.1, §9 format history — byte-identical in the Swift repo.Tests (+7 → 80 passed)
Field values and on-disk JSON · scopes sorted/unique/empty-skipped · incremental coverage · empty bundle · validator catches a smuggled CHECKSUMS line, a lying digest, and a missing CHECKSUMS · 1.0 fixture validates + imports · manifest validates against the JSON Schema. The transfer-fixture bundle's
bundleDigest(1f7f0cdc…) is pinned as a literal in both SDK suites — cross-SDK parity for the new field.Pairs with the Swift PR.
🤖 Generated with Claude Code