From 88656fe8fdb678c8629c7b617cf02aef9b5cc357 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 31 Jul 2026 09:32:54 -0700 Subject: [PATCH 1/3] Define canonical Cyd archive v2 contract (#675) --- docs/archive/v2/README.md | 154 ++++++++++++ docs/archive/v2/fixtures/complete.cyd | Bin 0 -> 6991 bytes docs/archive/v2/fixtures/incomplete.cyd | Bin 0 -> 6584 bytes .../v2/fixtures/semantic-expectations.json | 38 +++ docs/archive/v2/schema.sql | 143 +++++++++++ docs/archive/v2/scripts/generate.py | 236 ++++++++++++++++++ .../__tests__/canonicalFixtures.test.ts | 141 +++++++++++ 7 files changed, 712 insertions(+) create mode 100644 docs/archive/v2/README.md create mode 100644 docs/archive/v2/fixtures/complete.cyd create mode 100644 docs/archive/v2/fixtures/incomplete.cyd create mode 100644 docs/archive/v2/fixtures/semantic-expectations.json create mode 100644 docs/archive/v2/schema.sql create mode 100755 docs/archive/v2/scripts/generate.py create mode 100644 src/archive_v2/__tests__/canonicalFixtures.test.ts diff --git a/docs/archive/v2/README.md b/docs/archive/v2/README.md new file mode 100644 index 00000000..6df21a6b --- /dev/null +++ b/docs/archive/v2/README.md @@ -0,0 +1,154 @@ +# Cyd archive format version 2 + +This directory is the normative contract for the first cross-client Cyd +archive. “Must”, “must not”, “required”, “should”, and “may” are used in their +RFC 2119 sense. + +## Package + +A v2 archive is a plaintext, self-contained ZIP file. Its filename and file +extension are not authoritative. Readers identify it from `metadata.json`. +All ZIP entry names are UTF-8, `/`-separated, normalized relative paths. An +archive has exactly this layout: + +```text +metadata.json +manifest.json +data.db +media/sha256//<64-lowercase-hex-digest> +``` + +Directories may be explicit or implicit. Every other entry is forbidden. +Entries must be regular files or directories: symlinks, hard links, devices, +absolute paths, drive-qualified paths, `.`/`..` segments, backslashes, +duplicate normalized names, and encrypted ZIP entries are forbidden. + +`metadata.json` is UTF-8 JSON with this exact shape (unknown fields are +reserved and must be ignored): + +```json +{ + "format": "cyd-archive", + "version": 2, + "createdAt": "2026-01-15T12:00:00.000Z", + "accountDid": "did:plc:examplealice", + "accountUuid": "018d5f7a-9b3c-7d10-8a2e-1f4c6b8d0e12", + "completeness": "complete" +} +``` + +Times use RFC 3339 UTC with milliseconds. `completeness` is `complete` only +when every expected asset is available; otherwise it is `incomplete`. The +metadata identity, UUID, creation time, and completeness must equal the single +row in `data.db.archive`. + +## Integrity manifest + +`manifest.json` is UTF-8 JSON: + +```json +{ + "algorithm": "sha256", + "payloads": [ + { "path": "data.db", "bytes": 1234, "sha256": "…64 lowercase hex…" } + ] +} +``` + +It lists every regular payload except itself exactly once, sorted by path. +Each entry contains its normalized path, uncompressed byte length, and SHA-256 +of its bytes. Readers must validate the complete manifest before exposing an +import preview or mutating live data. `metadata.json` and `data.db` are payloads. +Media paths must end in their digest and their bytes must match that digest. + +Readers extract into an isolated staging directory while validating entry +type, path, declared and expanded sizes, entry counts, free space, and digest. +They must not follow links or write outside staging. There is no small fixed +archive-size limit; clients may require explicit confirmation at documented +resource thresholds. Failure or cancellation leaves the live account unchanged. + +## Interchange database + +`data.db` is SQLite 3 and must implement [schema.sql](schema.sql) exactly for +v2. It is an interchange model, never a copy of a client's runtime database. +Text is UTF-8. Booleans are integers constrained to `0` or `1`. JSON columns +contain canonical JSON values rather than client-specific serialized objects. + +The model has these semantic groups: + +- `archive`, `identity`, and `profiles`: local UUID, durable DID, current + profile, and captured historical author profiles. +- `records`, `selections`, `record_subjects`, and `record_context`: the latest + observed form of posts/reposts/likes/bookmarks, the selected relationship's + target record, plus direct reply-parent, quote, external, and author context. + Context is bounded; it does not recursively capture threads. +- `conversations`, `conversation_members`, and `messages`: direct-message + context, membership, and messages. +- `relationships`: follows, blocks, and mutes with source-deletion state. +- `assets` and `record_assets`: every expected image, preview, thumbnail, and + full video, including unavailable assets and their reason. +- `portable_settings`: portable save defaults and source-delete defaults. + +Stable AT URIs identify records; DIDs identify Bluesky identities. `cid` is +the latest observed CID, not revision history. `observed_at`, +`source_deleted_at`, and captured profiles preserve observation and deletion +state. An unavailable asset has no digest or archive path, remains referenced, +and makes the archive incomplete. Every available asset has a unique digest, +byte count, media type, and content-addressed payload. + +All five selection categories—`posts`, `reposts`, `likes`, `bookmarks`, and +`chats`—must be representable. Category selection pulls its required direct +context and media with it. Import merges records by stable identifiers, +retains local data absent from the archive, prefers newer non-empty +observations, and is idempotent. It may restore locally deleted data. + +## Completeness and consistency + +Export is a point-in-time-consistent snapshot of the selected account data and +media. Each archive stands alone; v2 has no delta or predecessor mechanism. +A structurally valid archive may be incomplete. Missing expected media must be +represented as `unavailable` or `missing`, never silently omitted. The archive +and metadata completeness is `complete` if and only if all asset rows are +`available` and every referenced payload validates. + +## Privacy boundary + +Only portable account data belongs in v2. Archives must not contain OAuth or +other credentials, private keys, sessions, schedules, pending/running/history +jobs, logs, analytics, diagnostics, error reports, caches, temporary data, +filesystem paths, or UI state. Portable settings are defaults, not authority +to schedule or execute work, and do not overwrite an existing account unless +the user explicitly chooses to adopt them. + +## Version behavior + +Desktop imports and exports v2 only. It rejects the historical unversioned +mobile format explicitly as `unsupported legacy format`; it never guesses v1 +from a filename. It rejects a valid internal version greater than 2 explicitly +as `unsupported newer archive version`. It rejects invalid v2 content as an +invalid or corrupt archive, which is distinct from version rejection. Desktop +writers must emit only v2. Readers must ship and pass the canonical semantic +fixtures before v2 writing is release-enabled. + +## Canonical fixtures + +`fixtures/complete.cyd` and `fixtures/incomplete.cyd` are canonical semantic +examples generated by `scripts/generate.py`. They cover every category, +captured/current profiles, reply/quote/external context, relationships, +observations, deletion state, chats, settings, images, previews, video +thumbnails, and a full video payload. The incomplete fixture differs by one +expected unavailable full-video asset. Expectations are machine-readable in +`fixtures/semantic-expectations.json`. + +Consumers compare normalized database meaning, asset digests, completeness, +and rejection outcomes—not ZIP bytes, entry order, or SQLite page layout. + +## Version history + +| Version | Status | Meaning | +| ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------- | +| Unversioned (“v1”) | Unsupported | Historical Mobile-only archive format; never a cross-client contract. | +| 2 | Current | First Cyd archive contract supported for Desktop/Mobile interchange. Plaintext ZIP and canonical SQLite interchange database. | + +Future versions must append an entry here and define explicit reader behavior. +Version meaning must never be inferred from a filename. diff --git a/docs/archive/v2/fixtures/complete.cyd b/docs/archive/v2/fixtures/complete.cyd new file mode 100644 index 0000000000000000000000000000000000000000..2ab1041631eb7769c97c1b330e1803eb0f11f567 GIT binary patch literal 6991 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 literal 0 HcmV?d00001 diff --git a/docs/archive/v2/fixtures/incomplete.cyd b/docs/archive/v2/fixtures/incomplete.cyd new file mode 100644 index 0000000000000000000000000000000000000000..8f5e330c66bcfef761036f71eaf42f17bfe73cfa GIT binary patch literal 6584 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 0), + sha256 TEXT UNIQUE CHECK (sha256 IS NULL OR (length(sha256) = 64 AND sha256 = lower(sha256))), + archive_path TEXT UNIQUE, + availability TEXT NOT NULL CHECK (availability IN ('available', 'missing', 'unavailable')), + unavailable_reason TEXT, + source_url TEXT, + width INTEGER, + height INTEGER, + alt_text TEXT, + CHECK ( + (availability = 'available' AND byte_count IS NOT NULL AND sha256 IS NOT NULL AND archive_path IS NOT NULL AND unavailable_reason IS NULL) + OR + (availability != 'available' AND byte_count IS NULL AND sha256 IS NULL AND archive_path IS NULL AND unavailable_reason IS NOT NULL) + ) +); + +CREATE TABLE record_assets ( + owner_type TEXT NOT NULL CHECK (owner_type IN ('record', 'message', 'profile')), + owner_id TEXT NOT NULL, + asset_id TEXT NOT NULL REFERENCES assets(id), + role TEXT NOT NULL CHECK (role IN ('content', 'preview', 'thumbnail', 'avatar', 'banner')), + position INTEGER NOT NULL CHECK (position >= 0), + PRIMARY KEY (owner_type, owner_id, role, position) +); + +CREATE TABLE portable_settings ( + key TEXT PRIMARY KEY CHECK (key IN ( + 'save_posts', 'save_reposts', 'save_likes', 'save_bookmarks', 'save_chats', + 'delete_posts', 'delete_reposts', 'delete_likes', 'delete_bookmarks', + 'delete_chats', 'delete_follows' + )), + value_json TEXT NOT NULL +); + +CREATE INDEX records_author ON records(author_profile_id); +CREATE INDEX records_observed ON records(observed_at); +CREATE INDEX messages_conversation ON messages(conversation_id, sent_at); +CREATE INDEX assets_availability ON assets(availability); diff --git a/docs/archive/v2/scripts/generate.py b/docs/archive/v2/scripts/generate.py new file mode 100755 index 00000000..9976148f --- /dev/null +++ b/docs/archive/v2/scripts/generate.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python3 +"""Generate the semantic v2 fixtures. ZIP/SQLite bytes are not the contract.""" + +from __future__ import annotations + +import base64 +import hashlib +import json +import sqlite3 +import struct +import tempfile +import zipfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +SCHEMA = (ROOT / "schema.sql").read_text(encoding="utf-8") +FIXTURES = ROOT / "fixtures" +CREATED = "2026-01-15T12:00:00.000Z" +DID = "did:plc:canonicalalice" +UUID = "018d5f7a-9b3c-7d10-8a2e-1f4c6b8d0e12" + +# A real 1x1 PNG. Distinct suffixes are legal trailing ancillary bytes and make +# the canonical image, preview, and thumbnail independently addressable. +PNG = base64.b64decode( + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=" +) + + +def box(kind: bytes, payload: bytes) -> bytes: + return struct.pack(">I4s", len(payload) + 8, kind) + payload + + +# A small complete ISO-BMFF payload used to prove that video means the offline +# full-video object, not merely its preview or thumbnail. +VIDEO = box(b"ftyp", b"isom\x00\x00\x02\x00isomiso2mp41") + box( + b"free", b"canonical-cyd-v2-full-video" +) + box(b"mdat", b"\x00\x00\x00\x01\x65\x88\x84canonical-video-sample") + + +def add_asset( + db: sqlite3.Connection, + staging: Path, + asset_id: str, + kind: str, + media_type: str, + content: bytes | None, + reason: str | None = None, +) -> None: + if content is None: + db.execute( + "INSERT INTO assets (id, kind, media_type, availability, unavailable_reason, source_url) VALUES (?, ?, ?, 'unavailable', ?, ?)", + (asset_id, kind, media_type, reason, f"https://cdn.example/{asset_id}"), + ) + return + digest = hashlib.sha256(content).hexdigest() + archive_path = f"media/sha256/{digest[:2]}/{digest}" + output = staging / archive_path + output.parent.mkdir(parents=True, exist_ok=True) + output.write_bytes(content) + db.execute( + "INSERT INTO assets (id, kind, media_type, byte_count, sha256, archive_path, availability, source_url, width, height, alt_text) VALUES (?, ?, ?, ?, ?, ?, 'available', ?, ?, ?, ?)", + ( + asset_id, + kind, + media_type, + len(content), + digest, + archive_path, + f"https://cdn.example/{asset_id}", + 1 if kind != "video" else 320, + 1 if kind != "video" else 180, + f"canonical {kind}", + ), + ) + + +def populate(db: sqlite3.Connection, staging: Path, complete: bool) -> None: + completeness = "complete" if complete else "incomplete" + db.execute( + "INSERT INTO archive VALUES ('cyd-archive', 2, ?, ?, ?, ?)", + (CREATED, DID, UUID, completeness), + ) + profiles = [ + ("profile-alice-current", DID, "alice.example", "Alice Current", "current profile", CREATED), + ("profile-alice-captured", DID, "alice.test", "Alice Captured", "captured author", "2025-12-01T09:00:00.000Z"), + ("profile-bob", "did:plc:canonicalbob", "bob.example", "Bob", "direct context author", CREATED), + ] + db.executemany( + "INSERT INTO profiles (id, did, handle, display_name, description, captured_at) VALUES (?, ?, ?, ?, ?, ?)", + profiles, + ) + db.execute("INSERT INTO identity VALUES (?, ?)", (DID, "profile-alice-current")) + + add_asset(db, staging, "asset-image", "image", "image/png", PNG + b"image") + add_asset(db, staging, "asset-preview", "preview", "image/png", PNG + b"preview") + add_asset(db, staging, "asset-thumbnail", "thumbnail", "image/png", PNG + b"thumbnail") + add_asset( + db, + staging, + "asset-video-full", + "video", + "video/mp4", + VIDEO if complete else None, + "source video was unavailable at export", + ) + db.execute( + "UPDATE profiles SET avatar_asset_id = 'asset-image' WHERE id = 'profile-alice-current'" + ) + + record_rows = [ + ("at://did:plc:canonicalalice/app.bsky.feed.post/post", "bafy-post", "app.bsky.feed.post", "profile-alice-captured", "2026-01-01T10:00:00.000Z", None, "Own post with full video"), + ("at://did:plc:canonicalbob/app.bsky.feed.post/reply", "bafy-reply", "app.bsky.feed.post", "profile-bob", "2025-12-30T10:00:00.000Z", None, "Direct reply parent"), + ("at://did:plc:canonicalbob/app.bsky.feed.post/quote", "bafy-quote", "app.bsky.feed.post", "profile-bob", "2025-12-29T10:00:00.000Z", "2026-01-10T00:00:00.000Z", "Quoted record later deleted at source"), + ("at://did:plc:canonicalalice/app.bsky.feed.repost/repost", "bafy-repost", "app.bsky.feed.repost", "profile-alice-captured", "2026-01-02T10:00:00.000Z", None, None), + ("at://did:plc:canonicalalice/app.bsky.feed.like/like", "bafy-like", "app.bsky.feed.like", "profile-alice-captured", "2026-01-03T10:00:00.000Z", None, None), + ("at://did:plc:canonicalalice/app.bsky.graph.listitem/bookmark", "bafy-bookmark", "app.cyd.bookmark", "profile-alice-captured", "2026-01-04T10:00:00.000Z", None, None), + ] + db.executemany( + "INSERT INTO records (uri, cid, record_type, author_profile_id, created_at, first_observed_at, observed_at, source_deleted_at, text, facets_json, payload_json) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '[]', '{}')", + [(uri, cid, record_type, profile, created, created, CREATED, deleted, text) for uri, cid, record_type, profile, created, deleted, text in record_rows], + ) + post, reply, quote, repost, like, bookmark = [row[0] for row in record_rows] + selections = [ + ("posts", post), + ("reposts", repost), + ("likes", like), + ("bookmarks", bookmark), + ("chats", "convo-canonical"), + ] + db.executemany("INSERT INTO selections VALUES (?, ?, ?)", [(category, subject, CREATED) for category, subject in selections]) + db.executemany( + "INSERT INTO record_subjects VALUES (?, ?)", + [(repost, quote), (like, post), (bookmark, post)], + ) + db.executemany( + "INSERT INTO record_context VALUES (?, ?, ?, ?, ?)", + [ + (post, "reply_parent", reply, "profile-bob", None), + (post, "quote", quote, "profile-bob", None), + (post, "external", None, None, '{"title":"Canonical link","uri":"https://example.com/context"}'), + ], + ) + db.execute("INSERT INTO conversations VALUES ('convo-canonical', '1', ?, ?, NULL)", (CREATED, CREATED)) + db.executemany( + "INSERT INTO conversation_members VALUES ('convo-canonical', ?)", + [("profile-alice-captured",), ("profile-bob",)], + ) + db.execute( + "INSERT INTO messages VALUES ('message-canonical', 'convo-canonical', 'profile-bob', ?, ?, NULL, 'Portable direct message', '[]', '{}')", + ("2026-01-05T10:00:00.000Z", CREATED), + ) + db.executemany( + "INSERT INTO relationships VALUES (?, ?, ?, ?, ?, ?, ?)", + [ + ("at://did:plc:canonicalalice/app.bsky.graph.follow/bob", "follow", DID, "did:plc:canonicalbob", CREATED, CREATED, None), + ("mute:did:plc:canonicalbob", "mute", DID, "did:plc:canonicalbob", CREATED, CREATED, "2026-01-12T00:00:00.000Z"), + ], + ) + db.executemany( + "INSERT INTO record_assets VALUES (?, ?, ?, ?, ?)", + [ + ("profile", "profile-alice-current", "asset-image", "avatar", 0), + ("record", post, "asset-image", "content", 0), + ("record", post, "asset-preview", "preview", 0), + ("record", post, "asset-thumbnail", "thumbnail", 0), + ("record", post, "asset-video-full", "content", 1), + ], + ) + db.executemany( + "INSERT INTO portable_settings VALUES (?, ?)", + [ + ("save_posts", "true"), + ("save_reposts", "true"), + ("save_likes", "true"), + ("save_bookmarks", "true"), + ("save_chats", "true"), + ("delete_posts", '{"olderThanDays":30}'), + ("delete_follows", "false"), + ], + ) + + +def generate(name: str, complete: bool) -> None: + with tempfile.TemporaryDirectory(prefix=f"cyd-v2-{name}-") as temporary: + staging = Path(temporary) + metadata = { + "format": "cyd-archive", + "version": 2, + "createdAt": CREATED, + "accountDid": DID, + "accountUuid": UUID, + "completeness": "complete" if complete else "incomplete", + } + (staging / "metadata.json").write_text( + json.dumps(metadata, indent=2, ensure_ascii=False) + "\n", encoding="utf-8" + ) + db = sqlite3.connect(staging / "data.db") + db.executescript(SCHEMA) + populate(db, staging, complete) + db.commit() + result = db.execute("PRAGMA integrity_check").fetchone()[0] + assert result == "ok", result + db.close() + + payload_paths = sorted( + file.relative_to(staging).as_posix() + for file in staging.rglob("*") + if file.is_file() + ) + payloads = [] + for relative in payload_paths: + content = (staging / relative).read_bytes() + payloads.append( + { + "path": relative, + "bytes": len(content), + "sha256": hashlib.sha256(content).hexdigest(), + } + ) + (staging / "manifest.json").write_text( + json.dumps({"algorithm": "sha256", "payloads": payloads}, indent=2) + "\n", + encoding="utf-8", + ) + + with zipfile.ZipFile(FIXTURES / f"{name}.cyd", "w", zipfile.ZIP_DEFLATED, compresslevel=9) as archive: + for relative in sorted(payload_paths + ["manifest.json"]): + info = zipfile.ZipInfo(relative, (2026, 1, 15, 12, 0, 0)) + info.compress_type = zipfile.ZIP_DEFLATED + info.external_attr = 0o100644 << 16 + archive.writestr(info, (staging / relative).read_bytes(), compresslevel=9) + + +if __name__ == "__main__": + FIXTURES.mkdir(parents=True, exist_ok=True) + generate("complete", complete=True) + generate("incomplete", complete=False) diff --git a/src/archive_v2/__tests__/canonicalFixtures.test.ts b/src/archive_v2/__tests__/canonicalFixtures.test.ts new file mode 100644 index 00000000..bcd6df04 --- /dev/null +++ b/src/archive_v2/__tests__/canonicalFixtures.test.ts @@ -0,0 +1,141 @@ +import fs from "fs"; +import os from "os"; +import path from "path"; + +import Database from "better-sqlite3"; +import { afterEach, describe, expect, test } from "vitest"; +import unzipper from "unzipper"; + +const contractRoot = path.resolve("docs/archive/v2"); +const fixtureRoot = path.join(contractRoot, "fixtures"); +const temporaryDirectories: string[] = []; + +async function openFixture(name: "complete" | "incomplete") { + const archivePath = path.join(fixtureRoot, `${name}.cyd`); + const directory = await unzipper.Open.file(archivePath); + const outputPath = fs.mkdtempSync(path.join(os.tmpdir(), `cyd-v2-${name}-`)); + temporaryDirectories.push(outputPath); + await directory.extract({ path: outputPath }); + const database = new Database(path.join(outputPath, "data.db"), { + readonly: true, + }); + return { database, directory, outputPath }; +} + +afterEach(() => { + for (const directory of temporaryDirectories.splice(0)) { + fs.rmSync(directory, { recursive: true, force: true }); + } +}); + +describe("canonical Cyd archive v2 fixtures", () => { + test.each(["complete", "incomplete"] as const)( + "%s fixture represents every portable category and direct context", + async (fixtureName) => { + const { database } = await openFixture(fixtureName); + + expect( + database + .prepare("SELECT category FROM selections ORDER BY category") + .pluck() + .all(), + ).toEqual(["bookmarks", "chats", "likes", "posts", "reposts"]); + expect( + database + .prepare("SELECT kind FROM record_context ORDER BY kind") + .pluck() + .all(), + ).toEqual(["external", "quote", "reply_parent"]); + expect( + database.prepare("SELECT kind FROM assets ORDER BY kind").pluck().all(), + ).toEqual(["image", "preview", "thumbnail", "video"]); + expect( + database.prepare("SELECT COUNT(*) FROM relationships").pluck().get(), + ).toBeGreaterThan(0); + expect( + database.prepare("SELECT COUNT(*) FROM messages").pluck().get(), + ).toBeGreaterThan(0); + expect( + database.prepare("SELECT COUNT(*) FROM record_subjects").pluck().get(), + ).toBe(3); + expect( + database + .prepare( + "SELECT COUNT(*) FROM profiles WHERE avatar_asset_id IS NOT NULL", + ) + .pluck() + .get(), + ).toBeGreaterThan(0); + database.close(); + }, + ); + + test.each([ + ["complete", "complete", 0], + ["incomplete", "incomplete", 1], + ] as const)( + "%s fixture describes asset completeness honestly", + async (fixtureName, expectedState, unavailableCount) => { + const { database } = await openFixture(fixtureName); + expect( + database.prepare("SELECT completeness FROM archive").pluck().get(), + ).toBe(expectedState); + expect( + database + .prepare( + "SELECT COUNT(*) FROM assets WHERE availability != 'available'", + ) + .pluck() + .get(), + ).toBe(unavailableCount); + database.close(); + }, + ); + + test.each(["complete", "incomplete"] as const)( + "%s fixture manifest covers every payload with correct size and digest", + async (fixtureName) => { + const { directory } = await openFixture(fixtureName); + const entries = new Map( + directory.files.map((entry) => [entry.path, entry]), + ); + const manifest = JSON.parse( + (await entries.get("manifest.json")!.buffer()).toString("utf8"), + ) as { + payloads: Array<{ path: string; bytes: number; sha256: string }>; + }; + const crypto = await import("crypto"); + + expect( + manifest.payloads.map(({ path: payloadPath }) => payloadPath), + ).toEqual( + [...entries.keys()].filter((entry) => entry !== "manifest.json").sort(), + ); + for (const payload of manifest.payloads) { + const bytes = await entries.get(payload.path)!.buffer(); + expect(payload.bytes).toBe(bytes.byteLength); + expect(crypto.createHash("sha256").update(bytes).digest("hex")).toBe( + payload.sha256, + ); + } + }, + ); + + test("semantic expectations make Desktop version support explicit", () => { + const expectations = JSON.parse( + fs.readFileSync( + path.join(fixtureRoot, "semantic-expectations.json"), + "utf8", + ), + ) as { + desktopVersionBehavior: Record; + }; + + expect(expectations.desktopVersionBehavior).toEqual({ + unversionedV1: "reject_unsupported_legacy_format", + v2Import: "accept", + v2Export: "write_only_v2", + newerVersion: "reject_unsupported_newer_version", + }); + }); +}); From bab33f107ef27af38e5a143155c341de1b4e60ac Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 31 Jul 2026 10:02:05 -0700 Subject: [PATCH 2/3] Scope archive v2 contract to Bluesky (#675) --- CONTEXT.md | 86 +++++++++--------- ...bidirectional-cyd-archive-compatibility.md | 4 +- ...-canonical-archive-interchange-database.md | 2 +- ...0004-merge-archive-imports-idempotently.md | 2 +- .../0005-exclude-credentials-from-archives.md | 2 +- .../0008-own-the-archive-contract-in-cyd.md | 2 +- .../0010-make-each-archive-self-contained.md | 4 +- ...011-ship-v2-archives-without-encryption.md | 4 +- ...date-v2-archive-integrity-before-import.md | 4 +- .../0019-store-the-latest-observed-record.md | 2 +- ...use-the-archive-filename-for-validation.md | 2 +- ...4-deduplicate-media-within-each-account.md | 2 +- ...able-account-data-not-operational-state.md | 2 +- ...roll-out-archive-readers-before-writers.md | 2 +- docs/archive/{ => bluesky}/v2/README.md | 65 +++++++------ docs/archive/bluesky/v2/fixtures/complete.cyd | Bin 0 -> 7043 bytes .../bluesky/v2/fixtures/incomplete.cyd | Bin 0 -> 6620 bytes .../v2/fixtures/semantic-expectations.json | 12 ++- docs/archive/{ => bluesky}/v2/schema.sql | 3 +- .../{ => bluesky}/v2/scripts/generate.py | 9 +- docs/archive/v2/fixtures/complete.cyd | Bin 6991 -> 0 bytes docs/archive/v2/fixtures/incomplete.cyd | Bin 6584 -> 0 bytes .../__tests__/canonicalFixtures.test.ts | 48 ++++++++-- 23 files changed, 156 insertions(+), 101 deletions(-) rename docs/archive/{ => bluesky}/v2/README.md (68%) create mode 100644 docs/archive/bluesky/v2/fixtures/complete.cyd create mode 100644 docs/archive/bluesky/v2/fixtures/incomplete.cyd rename docs/archive/{ => bluesky}/v2/fixtures/semantic-expectations.json (77%) rename docs/archive/{ => bluesky}/v2/schema.sql (97%) rename docs/archive/{ => bluesky}/v2/scripts/generate.py (96%) delete mode 100644 docs/archive/v2/fixtures/complete.cyd delete mode 100644 docs/archive/v2/fixtures/incomplete.cyd rename src/{archive_v2 => bluesky_archive_v2}/__tests__/canonicalFixtures.test.ts (73%) diff --git a/CONTEXT.md b/CONTEXT.md index affd3259..b621b386 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -9,62 +9,66 @@ Mobile and desktop Cyd offer the same Bluesky account-management capabilities an _Avoid_: UI parity, identical clients **Cyd archive**: -A complete, self-contained, versioned snapshot of an account's saved data and media that supported Cyd clients can exchange without losing its meaning. Version 2 is the first supported Cyd archive format; the earlier unversioned mobile prototype is not a Cyd archive compatibility surface. -_Avoid_: HTML export, database backup +An export of one social-platform account's saved data. Each platform defines its own archive contents, behavior, compatibility guarantees, and version history, so references to a particular archive must name the platform. +_Avoid_: archive, platform-neutral archive -**Interchange database**: -The canonical representation of structured account data inside a Cyd archive. It is independent of each client's private runtime storage. -_Avoid_: runtime database, mobile database +**Cyd Bluesky archive**: +A Cyd archive governed by the Bluesky archive contract. Version 2 is the first supported Bluesky archive format; the earlier unversioned mobile prototype is not a compatibility surface. +_Avoid_: Cyd archive v2, platform-neutral v2 archive + +**Bluesky interchange database**: +The canonical representation of structured Bluesky account data inside a Cyd Bluesky archive. It is independent of each client's private runtime storage. +_Avoid_: interchange database, runtime database, mobile database **Bluesky identity**: A Bluesky account identified durably by its DID, even when its handle changes or separate Cyd installations know it by different local identifiers. _Avoid_: handle, Cyd UUID -**Local account**: -A client's local representation of a Bluesky identity, identified within Cyd by a UUID and containing that client's settings and saved data. -_Avoid_: Bluesky identity +**Bluesky local account**: +A client's local representation of a Bluesky identity, identified within Cyd by a UUID and containing that client's Bluesky account settings and Bluesky saved data. +_Avoid_: local account, Bluesky identity -**Archive import**: -An idempotent recovery merge of a Cyd archive into a matching local account, preserving the union of saved data while collapsing records that share stable Bluesky identifiers. It may restore data previously removed through local deletion. -_Avoid_: replace, synchronize +**Bluesky archive import**: +An idempotent recovery merge of a Cyd Bluesky archive into a matching Bluesky local account, preserving the union of Bluesky saved data while collapsing records that share stable Bluesky identifiers. It may restore data previously removed through Bluesky local deletion. +_Avoid_: archive import, replace, synchronize -**Account settings**: -Local preferences governing how Cyd saves and manages a Bluesky identity. An archive can supply defaults for a new local account, but does not silently override an existing local account's preferences or schedules. -_Avoid_: account data, archive state +**Bluesky account settings**: +Local preferences governing how Cyd saves and manages a Bluesky identity. A Cyd Bluesky archive can supply defaults for a new Bluesky local account, but does not silently override an existing Bluesky local account's preferences or schedules. +_Avoid_: account settings, account data, archive state -**Scheduled reminder**: -A prompt to review and start due account-management work. It does not authorize Cyd to perform deletion unattended; clients may use platform-appropriate delivery such as local notifications or server-scheduled push. -_Avoid_: scheduled job, automatic deletion +**Bluesky scheduled reminder**: +A prompt to review and start due Bluesky account-management work. It does not authorize Cyd to perform deletion unattended; clients may use platform-appropriate delivery such as local notifications or server-scheduled push. +_Avoid_: scheduled reminder, scheduled job, automatic deletion -**Connection**: -A local installation's authorization to act on a Bluesky identity. Connections are established separately on each client and are never part of a Cyd archive. -Disconnecting removes authorization without removing the local account or its saved data. -_Avoid_: account data, imported session, local account +**Bluesky connection**: +A local installation's authorization to act on a Bluesky identity. Bluesky connections are established separately on each client and are never part of a Cyd Bluesky archive. +Disconnecting removes authorization without removing the Bluesky local account or its Bluesky saved data. +_Avoid_: connection, account data, imported session, Bluesky local account -**Saved data**: -The account records and complete media Cyd has preserved locally, including material that may later disappear from Bluesky. When a record is selected for saving, its full media is part of the saved data regardless of the record category. -_Avoid_: live feed, HTML export +**Bluesky saved data**: +The Bluesky records and complete media Cyd has preserved locally, including material that may later disappear from Bluesky. When a record is selected for saving, its full media is part of the Bluesky saved data regardless of the record category. +_Avoid_: saved data, live feed, HTML export -**Saved record**: +**Bluesky saved record**: The latest representation of a Bluesky record observed by Cyd at a stable AT URI, together with its observation timestamps and deletion state. It is not a history of every CID revision. -_Avoid_: record revision, live record +_Avoid_: saved record, record revision, live record -**Browse**: -Inspect saved data inside Cyd without requiring a Bluesky connection or network access. -_Avoid_: view on Bluesky, live feed +**Bluesky browse**: +Inspection of Bluesky saved data inside Cyd without requiring a Bluesky connection or network access. +_Avoid_: browse, view on Bluesky, live feed -**Context snapshot**: -The directly referenced author, reply parent, quoted record, external embed, and other captured information required to render a saved record faithfully without recursively preserving the surrounding social graph. -_Avoid_: full thread, live lookup +**Bluesky context snapshot**: +The directly referenced author, reply parent, quoted record, external embed, and other captured information required to render a Bluesky saved record faithfully without recursively preserving the surrounding social graph. +_Avoid_: context snapshot, full thread, live lookup -**Complete backup**: -A saved dataset or Cyd archive containing every expected asset for its selected records. Missing assets are explicit and make the backup incomplete without invalidating the data that was successfully preserved. -_Avoid_: valid archive, successful export +**Complete Bluesky backup**: +Bluesky saved data or a Cyd Bluesky archive containing every expected asset for its selected records. Missing assets are explicit and make the backup incomplete without invalidating the data that was successfully preserved. +_Avoid_: complete backup, valid archive, successful export -**Source deletion**: -Removal of a record or relationship from Bluesky while retaining Cyd's saved copy and deletion state. -_Avoid_: local deletion +**Bluesky source deletion**: +Removal of a record or relationship from Bluesky while retaining its Bluesky saved record and deletion state in Cyd. +_Avoid_: source deletion, Bluesky local deletion -**Local deletion**: -An explicit removal of saved data from Cyd, independent of whether the source still exists on Bluesky. -_Avoid_: source deletion, stop saving +**Bluesky local deletion**: +An explicit removal of Bluesky saved data from Cyd, independent of whether the source still exists on Bluesky. +_Avoid_: local deletion, Bluesky source deletion, stop saving diff --git a/docs/adr/0001-bidirectional-cyd-archive-compatibility.md b/docs/adr/0001-bidirectional-cyd-archive-compatibility.md index ca1e7bd0..e19b4d96 100644 --- a/docs/adr/0001-bidirectional-cyd-archive-compatibility.md +++ b/docs/adr/0001-bidirectional-cyd-archive-compatibility.md @@ -1,3 +1,3 @@ -# Bidirectional Cyd archive compatibility begins with version 2 +# Bidirectional Cyd Bluesky archive compatibility begins with version 2 -Cyd mobile and desktop exchange Cyd archives beginning with the canonical version 2 format. The unversioned mobile prototype has no users and is unsupported by both clients; abandoning it avoids coupling the shared contract to Mobile's historical runtime schema. Each client clearly rejects archive versions it does not support so evolving one application does not silently break portability with the other. +Cyd mobile and desktop exchange Cyd Bluesky archives beginning with the canonical Bluesky version 2 format. Bluesky archive versions are independent of the archive contracts and version histories for Cyd's other social platforms. The unversioned mobile prototype has no users and is unsupported by both clients; abandoning it avoids coupling the shared contract to Mobile's historical runtime schema. Each client clearly rejects Bluesky archive versions it does not support so evolving one application does not silently break portability with the other. diff --git a/docs/adr/0002-canonical-archive-interchange-database.md b/docs/adr/0002-canonical-archive-interchange-database.md index f038760b..cec446b2 100644 --- a/docs/adr/0002-canonical-archive-interchange-database.md +++ b/docs/adr/0002-canonical-archive-interchange-database.md @@ -1,3 +1,3 @@ # Canonical archive interchange database -The `data.db` inside version 2 and later Cyd archives is a canonical interchange database rather than a copy of either client's runtime database. Mobile and desktop translate between private storage and this versioned schema, allowing their implementations and migrations to evolve independently; neither client maintains an adapter for the unused unversioned mobile prototype. +The `data.db` inside Bluesky version 2 and later Cyd Bluesky archives is a canonical interchange database rather than a copy of either client's runtime database. Mobile and desktop translate between private storage and this versioned schema, allowing their implementations and migrations to evolve independently; neither client maintains an adapter for the unused unversioned mobile prototype. diff --git a/docs/adr/0004-merge-archive-imports-idempotently.md b/docs/adr/0004-merge-archive-imports-idempotently.md index fabe17b9..c3d4a52c 100644 --- a/docs/adr/0004-merge-archive-imports-idempotently.md +++ b/docs/adr/0004-merge-archive-imports-idempotently.md @@ -1,3 +1,3 @@ # Merge archive imports idempotently -Importing a Cyd archive merges it with the matching local account rather than replacing local data. Records match on stable Bluesky identifiers such as AT URIs, richer or newer representations can update older ones, data absent from the archive is retained, and importing the same archive repeatedly has no further effect; this supports safe cross-device transfer without sacrificing data collected independently on either device. Because import is an explicit recovery action, it may restore locally deleted records, and its preview reports that restoration rather than relying on permanent deletion tombstones that would suppress older backups. +Importing a Cyd Bluesky archive merges it with the matching local account rather than replacing local data. Records match on stable Bluesky identifiers such as AT URIs, richer or newer representations can update older ones, data absent from the archive is retained, and importing the same archive repeatedly has no further effect; this supports safe cross-device transfer without sacrificing data collected independently on either device. Because import is an explicit recovery action, it may restore locally deleted records, and its preview reports that restoration rather than relying on permanent deletion tombstones that would suppress older backups. diff --git a/docs/adr/0005-exclude-credentials-from-archives.md b/docs/adr/0005-exclude-credentials-from-archives.md index 9085237d..d0a5a0bc 100644 --- a/docs/adr/0005-exclude-credentials-from-archives.md +++ b/docs/adr/0005-exclude-credentials-from-archives.md @@ -1,3 +1,3 @@ # Exclude credentials from Cyd archives -Cyd archives never contain OAuth tokens, private keys, session state, or other reusable credentials. Imported accounts are immediately available for offline browsing, but each installation must establish its own Bluesky connection before it can refresh data or perform account actions, preventing a portable archive from becoming an account-control credential. +Cyd Bluesky archives never contain OAuth tokens, private keys, session state, or other reusable credentials. Imported accounts are immediately available for offline browsing, but each installation must establish its own Bluesky connection before it can refresh data or perform account actions, preventing a portable archive from becoming an account-control credential. diff --git a/docs/adr/0008-own-the-archive-contract-in-cyd.md b/docs/adr/0008-own-the-archive-contract-in-cyd.md index 1ceda80c..75985b34 100644 --- a/docs/adr/0008-own-the-archive-contract-in-cyd.md +++ b/docs/adr/0008-own-the-archive-contract-in-cyd.md @@ -1,3 +1,3 @@ # Own the shared archive contract in cyd -The normative Cyd archive specification, format-version history, and canonical compatibility fixtures live in the `cyd` repository. Mobile and desktop may maintain implementation-specific types, but both must validate against this shared contract so compatibility is not inferred from either application's current runtime schema. +The normative Cyd Bluesky archive specification, Bluesky format-version history, and canonical compatibility fixtures live in the `cyd` repository. Other social platforms have independent archive contracts and version histories. Mobile and desktop may maintain implementation-specific types, but both must validate against this shared Bluesky contract so compatibility is not inferred from either application's current runtime schema. diff --git a/docs/adr/0010-make-each-archive-self-contained.md b/docs/adr/0010-make-each-archive-self-contained.md index 4551b450..a97da32f 100644 --- a/docs/adr/0010-make-each-archive-self-contained.md +++ b/docs/adr/0010-make-each-archive-self-contained.md @@ -1,3 +1,3 @@ -# Make each Cyd archive self-contained +# Make each Cyd Bluesky archive self-contained -Every Cyd archive is a complete snapshot of the local account's saved data and media at export time rather than an incremental delta that depends on earlier archives. Individual archives may be larger, but any one of them remains sufficient for recovery or cross-device transfer and can be merged idempotently on import. +Every Cyd Bluesky archive is a complete snapshot of the local account's saved data and media at export time rather than an incremental delta that depends on earlier archives. Individual archives may be larger, but any one of them remains sufficient for recovery or cross-device transfer and can be merged idempotently on import. diff --git a/docs/adr/0011-ship-v2-archives-without-encryption.md b/docs/adr/0011-ship-v2-archives-without-encryption.md index 66a85ecc..2d324cc3 100644 --- a/docs/adr/0011-ship-v2-archives-without-encryption.md +++ b/docs/adr/0011-ship-v2-archives-without-encryption.md @@ -1,3 +1,3 @@ -# Ship version 2 archives without encryption +# Ship Bluesky version 2 archives without encryption -Version 2 Cyd archives are plaintext ZIP packages while the initial cross-platform contract is established. Passphrase encryption is deferred to a later format version; clients must not imply that version 2 archives protect sensitive saved data such as chats, and exports should communicate that limitation clearly. +Cyd Bluesky archives at version 2 are plaintext ZIP packages while the initial cross-client Bluesky contract is established. Passphrase encryption is deferred to a later Bluesky format version; clients must not imply that Bluesky version 2 archives protect sensitive saved data such as chats, and exports should communicate that limitation clearly. diff --git a/docs/adr/0012-validate-v2-archive-integrity-before-import.md b/docs/adr/0012-validate-v2-archive-integrity-before-import.md index fab66651..a3331312 100644 --- a/docs/adr/0012-validate-v2-archive-integrity-before-import.md +++ b/docs/adr/0012-validate-v2-archive-integrity-before-import.md @@ -1,3 +1,3 @@ -# Validate version 2 archive integrity before import +# Validate Bluesky version 2 archive integrity before import -Version 2 archives include a manifest listing every payload file's path, byte size, and SHA-256 digest, and export captures a point-in-time-consistent database and media snapshot. Import validates the complete manifest before mutating local data and applies the merge transactionally, preventing corrupt or partial packages from producing partially imported accounts. +Bluesky version 2 archives include a manifest listing every payload file's path, byte size, and SHA-256 digest, and export captures a point-in-time-consistent database and media snapshot. Import validates the complete manifest before mutating local data and applies the merge transactionally, preventing corrupt or partial packages from producing partially imported accounts. diff --git a/docs/adr/0019-store-the-latest-observed-record.md b/docs/adr/0019-store-the-latest-observed-record.md index 375431b3..80893904 100644 --- a/docs/adr/0019-store-the-latest-observed-record.md +++ b/docs/adr/0019-store-the-latest-observed-record.md @@ -1,3 +1,3 @@ # Store the latest observed record -Version 2 represents the latest observation of each Bluesky record at its stable AT URI, including observation timestamps and deletion state, rather than retaining every historical CID revision. Import selects the newer observation and does not replace populated fields with absent data; complete revision history is outside the initial parity scope. +Bluesky version 2 represents the latest observation of each Bluesky record at its stable AT URI, including observation timestamps and deletion state, rather than retaining every historical CID revision. Import selects the newer observation and does not replace populated fields with absent data; complete revision history is outside the initial parity scope. diff --git a/docs/adr/0020-do-not-use-the-archive-filename-for-validation.md b/docs/adr/0020-do-not-use-the-archive-filename-for-validation.md index d035a808..1ddf26e0 100644 --- a/docs/adr/0020-do-not-use-the-archive-filename-for-validation.md +++ b/docs/adr/0020-do-not-use-the-archive-filename-for-validation.md @@ -1,3 +1,3 @@ # Do not use the archive filename for validation -Version 2 archive filenames are friendly suggestions and may be changed by users without affecting import. Clients determine identity, format support, and integrity from validated internal metadata, schema, and manifest content rather than a handle-bearing filename; the unused unversioned mobile prototype receives no filename-based compatibility exception. +Bluesky version 2 archive filenames are friendly suggestions and may be changed by users without affecting import. Clients determine platform, identity, format support, and integrity from validated internal metadata, schema, and manifest content rather than a handle-bearing filename; the unused unversioned mobile prototype receives no filename-based compatibility exception. diff --git a/docs/adr/0024-deduplicate-media-within-each-account.md b/docs/adr/0024-deduplicate-media-within-each-account.md index 3a0e8ab7..ac50f337 100644 --- a/docs/adr/0024-deduplicate-media-within-each-account.md +++ b/docs/adr/0024-deduplicate-media-within-each-account.md @@ -1,3 +1,3 @@ # Deduplicate media within each local account -Desktop stores media content-addressably within each UUID-keyed local account, and saved records reference those assets rather than owning duplicate files. Version 2 archives likewise package each unique asset once and map record references through the interchange database; cross-account deduplication is deferred so deleting or exporting one account does not depend on another account's storage. +Desktop stores media content-addressably within each UUID-keyed local account, and saved records reference those assets rather than owning duplicate files. Bluesky version 2 archives likewise package each unique asset once and map record references through the interchange database; cross-account deduplication is deferred so deleting or exporting one account does not depend on another account's storage. diff --git a/docs/adr/0026-export-portable-account-data-not-operational-state.md b/docs/adr/0026-export-portable-account-data-not-operational-state.md index 440686fa..53e3661e 100644 --- a/docs/adr/0026-export-portable-account-data-not-operational-state.md +++ b/docs/adr/0026-export-portable-account-data-not-operational-state.md @@ -1,3 +1,3 @@ # Export portable account data, not operational state -Version 2 archives include account identity and captured profile, saved records and media, source-deletion state, asset-completeness state, and portable save/delete rule defaults. They exclude credentials, schedules, pending or historical jobs, logs, analytics, error reports, temporary files, caches, and UI state because those are client-local operations whose transfer could duplicate work or trigger unintended behavior. +Bluesky version 2 archives include account identity and captured profile, saved records and media, source-deletion state, asset-completeness state, and portable save/delete rule defaults. They exclude credentials, schedules, pending or historical jobs, logs, analytics, error reports, temporary files, caches, and UI state because those are client-local operations whose transfer could duplicate work or trigger unintended behavior. diff --git a/docs/adr/0028-roll-out-archive-readers-before-writers.md b/docs/adr/0028-roll-out-archive-readers-before-writers.md index 12bb2120..33bb7421 100644 --- a/docs/adr/0028-roll-out-archive-readers-before-writers.md +++ b/docs/adr/0028-roll-out-archive-readers-before-writers.md @@ -1,3 +1,3 @@ # Roll out archive readers before writers -Archive format changes ship readers before writers: Mobile and Desktop first gain and verify version 2 import, and version 2 export is enabled only after compatible readers are released. Version 2 is the first supported archive format; neither client imports or exports the unused unversioned mobile prototype. +Bluesky archive format changes ship readers before writers: Mobile and Desktop first gain and verify Bluesky version 2 import, and Bluesky version 2 export is enabled only after compatible readers are released. Version 2 is the first supported Bluesky archive format; neither client imports or exports the unused unversioned mobile prototype. diff --git a/docs/archive/v2/README.md b/docs/archive/bluesky/v2/README.md similarity index 68% rename from docs/archive/v2/README.md rename to docs/archive/bluesky/v2/README.md index 6df21a6b..2bc51adb 100644 --- a/docs/archive/v2/README.md +++ b/docs/archive/bluesky/v2/README.md @@ -1,15 +1,17 @@ -# Cyd archive format version 2 +# Cyd Bluesky archive format version 2 -This directory is the normative contract for the first cross-client Cyd -archive. “Must”, “must not”, “required”, “should”, and “may” are used in their -RFC 2119 sense. +This directory is the normative contract for version 2 of the cross-client Cyd +Bluesky archive. It applies only to Bluesky data; other social platforms have +independent archive contracts and version histories. “Must”, “must not”, +“required”, “should”, and “may” are used in their RFC 2119 sense. ## Package -A v2 archive is a plaintext, self-contained ZIP file. Its filename and file -extension are not authoritative. Readers identify it from `metadata.json`. -All ZIP entry names are UTF-8, `/`-separated, normalized relative paths. An -archive has exactly this layout: +A Bluesky v2 archive is a plaintext, self-contained ZIP file. Its filename and +file extension are not authoritative. Readers identify its archive family, +platform, and platform-specific version from `metadata.json`. All ZIP entry +names are UTF-8, `/`-separated, normalized relative paths. An archive has +exactly this layout: ```text metadata.json @@ -29,6 +31,7 @@ reserved and must be ignored): ```json { "format": "cyd-archive", + "platform": "bluesky", "version": 2, "createdAt": "2026-01-15T12:00:00.000Z", "accountDid": "did:plc:examplealice", @@ -37,10 +40,15 @@ reserved and must be ignored): } ``` +`format`, `platform`, and `version` form the format discriminator. Version 2 +belongs to the Bluesky archive version namespace; it does not define version 2 +for X, Facebook, Mastodon, or any other platform. Readers must reject a +different platform rather than interpreting it with this schema. + Times use RFC 3339 UTC with milliseconds. `completeness` is `complete` only when every expected asset is available; otherwise it is `incomplete`. The -metadata identity, UUID, creation time, and completeness must equal the single -row in `data.db.archive`. +metadata format, platform, version, identity, UUID, creation time, and +completeness must equal the single row in `data.db.archive`. ## Integrity manifest @@ -70,7 +78,7 @@ resource thresholds. Failure or cancellation leaves the live account unchanged. ## Interchange database `data.db` is SQLite 3 and must implement [schema.sql](schema.sql) exactly for -v2. It is an interchange model, never a copy of a client's runtime database. +Bluesky v2. It is an interchange model, never a copy of a client's runtime database. Text is UTF-8. Booleans are integers constrained to `0` or `1`. JSON columns contain canonical JSON values rather than client-specific serialized objects. @@ -105,7 +113,7 @@ observations, and is idempotent. It may restore locally deleted data. ## Completeness and consistency Export is a point-in-time-consistent snapshot of the selected account data and -media. Each archive stands alone; v2 has no delta or predecessor mechanism. +media. Each archive stands alone; Bluesky v2 has no delta or predecessor mechanism. A structurally valid archive may be incomplete. Missing expected media must be represented as `unavailable` or `missing`, never silently omitted. The archive and metadata completeness is `complete` if and only if all asset rows are @@ -113,7 +121,7 @@ and metadata completeness is `complete` if and only if all asset rows are ## Privacy boundary -Only portable account data belongs in v2. Archives must not contain OAuth or +Only portable Bluesky account data belongs in Bluesky v2. Archives must not contain OAuth or other credentials, private keys, sessions, schedules, pending/running/history jobs, logs, analytics, diagnostics, error reports, caches, temporary data, filesystem paths, or UI state. Portable settings are defaults, not authority @@ -122,13 +130,15 @@ the user explicitly chooses to adopt them. ## Version behavior -Desktop imports and exports v2 only. It rejects the historical unversioned -mobile format explicitly as `unsupported legacy format`; it never guesses v1 -from a filename. It rejects a valid internal version greater than 2 explicitly -as `unsupported newer archive version`. It rejects invalid v2 content as an -invalid or corrupt archive, which is distinct from version rejection. Desktop -writers must emit only v2. Readers must ship and pass the canonical semantic -fixtures before v2 writing is release-enabled. +Desktop imports and exports Bluesky v2 only. It rejects the historical +unversioned Bluesky mobile format explicitly as `unsupported legacy format`; +it never guesses a version from a filename. It rejects another platform as +`unsupported archive platform` and a valid internal Bluesky version greater +than 2 as `unsupported newer archive version`. It rejects invalid Bluesky v2 +content as an invalid or corrupt archive, which is distinct from platform and +version rejection. Desktop Bluesky writers must emit only Bluesky v2. Readers +must ship and pass the canonical semantic fixtures before Bluesky v2 writing +is release-enabled. ## Canonical fixtures @@ -143,12 +153,13 @@ expected unavailable full-video asset. Expectations are machine-readable in Consumers compare normalized database meaning, asset digests, completeness, and rejection outcomes—not ZIP bytes, entry order, or SQLite page layout. -## Version history +## Bluesky version history -| Version | Status | Meaning | -| ------------------ | ----------- | ----------------------------------------------------------------------------------------------------------------------------- | -| Unversioned (“v1”) | Unsupported | Historical Mobile-only archive format; never a cross-client contract. | -| 2 | Current | First Cyd archive contract supported for Desktop/Mobile interchange. Plaintext ZIP and canonical SQLite interchange database. | +| Version | Status | Meaning | +| ------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| Unversioned (“v1”) | Unsupported | Historical Mobile-only Bluesky archive format; never a cross-client contract. | +| 2 | Current | First Cyd Bluesky archive contract supported for Desktop/Mobile interchange. Plaintext ZIP and canonical SQLite interchange database. | -Future versions must append an entry here and define explicit reader behavior. -Version meaning must never be inferred from a filename. +Future Bluesky versions must append an entry here and define explicit reader +behavior. Version meaning must never be inferred from a filename or applied to +another social platform. diff --git a/docs/archive/bluesky/v2/fixtures/complete.cyd b/docs/archive/bluesky/v2/fixtures/complete.cyd new file mode 100644 index 0000000000000000000000000000000000000000..b968898fdca8a98f2fb9e3006deebb9633eae9d9 GIT binary patch literal 7043 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 C>6VHB literal 0 HcmV?d00001 diff --git a/docs/archive/bluesky/v2/fixtures/incomplete.cyd b/docs/archive/bluesky/v2/fixtures/incomplete.cyd new file mode 100644 index 0000000000000000000000000000000000000000..bd3f143ad93249a3b4d381e6a450945b5a92a368 GIT binary patch literal 6620 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 literal 0 HcmV?d00001 diff --git a/docs/archive/v2/fixtures/semantic-expectations.json b/docs/archive/bluesky/v2/fixtures/semantic-expectations.json similarity index 77% rename from docs/archive/v2/fixtures/semantic-expectations.json rename to docs/archive/bluesky/v2/fixtures/semantic-expectations.json index b3d51658..4dcffe91 100644 --- a/docs/archive/v2/fixtures/semantic-expectations.json +++ b/docs/archive/bluesky/v2/fixtures/semantic-expectations.json @@ -1,8 +1,14 @@ { - "desktopVersionBehavior": { + "archiveFormat": { + "format": "cyd-archive", + "platform": "bluesky", + "version": 2 + }, + "desktopBlueskyVersionBehavior": { "unversionedV1": "reject_unsupported_legacy_format", - "v2Import": "accept", - "v2Export": "write_only_v2", + "blueskyV2Import": "accept", + "blueskyV2Export": "write_only_bluesky_v2", + "otherPlatform": "reject_unsupported_archive_platform", "newerVersion": "reject_unsupported_newer_version" }, "fixtures": { diff --git a/docs/archive/v2/schema.sql b/docs/archive/bluesky/v2/schema.sql similarity index 97% rename from docs/archive/v2/schema.sql rename to docs/archive/bluesky/v2/schema.sql index 8105309a..97dcd947 100644 --- a/docs/archive/v2/schema.sql +++ b/docs/archive/bluesky/v2/schema.sql @@ -1,9 +1,10 @@ -PRAGMA application_id = 0x43594432; +PRAGMA application_id = 0x43594232; PRAGMA user_version = 2; PRAGMA foreign_keys = ON; CREATE TABLE archive ( format TEXT NOT NULL CHECK (format = 'cyd-archive'), + platform TEXT NOT NULL CHECK (platform = 'bluesky'), version INTEGER NOT NULL CHECK (version = 2), created_at TEXT NOT NULL, account_did TEXT NOT NULL, diff --git a/docs/archive/v2/scripts/generate.py b/docs/archive/bluesky/v2/scripts/generate.py similarity index 96% rename from docs/archive/v2/scripts/generate.py rename to docs/archive/bluesky/v2/scripts/generate.py index 9976148f..ca9ba58b 100755 --- a/docs/archive/v2/scripts/generate.py +++ b/docs/archive/bluesky/v2/scripts/generate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Generate the semantic v2 fixtures. ZIP/SQLite bytes are not the contract.""" +"""Generate the semantic Bluesky v2 fixtures. ZIP/SQLite bytes are not the contract.""" from __future__ import annotations @@ -33,7 +33,7 @@ def box(kind: bytes, payload: bytes) -> bytes: # A small complete ISO-BMFF payload used to prove that video means the offline # full-video object, not merely its preview or thumbnail. VIDEO = box(b"ftyp", b"isom\x00\x00\x02\x00isomiso2mp41") + box( - b"free", b"canonical-cyd-v2-full-video" + b"free", b"canonical-cyd-bluesky-v2-full-video" ) + box(b"mdat", b"\x00\x00\x00\x01\x65\x88\x84canonical-video-sample") @@ -77,7 +77,7 @@ def add_asset( def populate(db: sqlite3.Connection, staging: Path, complete: bool) -> None: completeness = "complete" if complete else "incomplete" db.execute( - "INSERT INTO archive VALUES ('cyd-archive', 2, ?, ?, ?, ?)", + "INSERT INTO archive VALUES ('cyd-archive', 'bluesky', 2, ?, ?, ?, ?)", (CREATED, DID, UUID, completeness), ) profiles = [ @@ -181,10 +181,11 @@ def populate(db: sqlite3.Connection, staging: Path, complete: bool) -> None: def generate(name: str, complete: bool) -> None: - with tempfile.TemporaryDirectory(prefix=f"cyd-v2-{name}-") as temporary: + with tempfile.TemporaryDirectory(prefix=f"cyd-bluesky-v2-{name}-") as temporary: staging = Path(temporary) metadata = { "format": "cyd-archive", + "platform": "bluesky", "version": 2, "createdAt": CREATED, "accountDid": DID, diff --git a/docs/archive/v2/fixtures/complete.cyd b/docs/archive/v2/fixtures/complete.cyd deleted file mode 100644 index 2ab1041631eb7769c97c1b330e1803eb0f11f567..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6991 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 diff --git a/docs/archive/v2/fixtures/incomplete.cyd b/docs/archive/v2/fixtures/incomplete.cyd deleted file mode 100644 index 8f5e330c66bcfef761036f71eaf42f17bfe73cfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6584 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 { } }); -describe("canonical Cyd archive v2 fixtures", () => { +describe("canonical Cyd Bluesky archive v2 fixtures", () => { test.each(["complete", "incomplete"] as const)( "%s fixture represents every portable category and direct context", async (fixtureName) => { @@ -121,20 +123,50 @@ describe("canonical Cyd archive v2 fixtures", () => { }, ); - test("semantic expectations make Desktop version support explicit", () => { + test("metadata and database scope version 2 to Bluesky", async () => { + const { database, directory } = await openFixture("complete"); + const metadataEntry = directory.files.find( + (entry) => entry.path === "metadata.json", + ); + const metadata = JSON.parse( + (await metadataEntry!.buffer()).toString("utf8"), + ) as Record; + + expect(metadata).toMatchObject({ + format: "cyd-archive", + platform: "bluesky", + version: 2, + }); + expect( + database.prepare("SELECT format, platform, version FROM archive").get(), + ).toEqual({ format: "cyd-archive", platform: "bluesky", version: 2 }); + expect(database.pragma("application_id", { simple: true })).toBe( + 0x43594232, + ); + database.close(); + }); + + test("semantic expectations make Desktop Bluesky version support explicit", () => { const expectations = JSON.parse( fs.readFileSync( path.join(fixtureRoot, "semantic-expectations.json"), "utf8", ), ) as { - desktopVersionBehavior: Record; + archiveFormat: Record; + desktopBlueskyVersionBehavior: Record; }; - expect(expectations.desktopVersionBehavior).toEqual({ + expect(expectations.archiveFormat).toEqual({ + format: "cyd-archive", + platform: "bluesky", + version: 2, + }); + expect(expectations.desktopBlueskyVersionBehavior).toEqual({ unversionedV1: "reject_unsupported_legacy_format", - v2Import: "accept", - v2Export: "write_only_v2", + blueskyV2Import: "accept", + blueskyV2Export: "write_only_bluesky_v2", + otherPlatform: "reject_unsupported_archive_platform", newerVersion: "reject_unsupported_newer_version", }); }); From cbd261484d0f3cac4f1c997c423db7730d5d3009 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 31 Jul 2026 10:28:49 -0700 Subject: [PATCH 3/3] Complete Bluesky archive contract fixtures (#675) --- ...-canonical-archive-interchange-database.md | 4 +- ...0004-merge-archive-imports-idempotently.md | 2 +- .../0010-make-each-archive-self-contained.md | 2 +- ...011-ship-v2-archives-without-encryption.md | 2 +- ...date-v2-archive-integrity-before-import.md | 2 +- ...4-deduplicate-media-within-each-account.md | 4 +- ...able-account-data-not-operational-state.md | 4 +- docs/archive/bluesky/v2/README.md | 72 +-- docs/archive/bluesky/v2/assets/README.md | 12 + docs/archive/bluesky/v2/assets/full-video.mp4 | Bin 0 -> 149576 bytes docs/archive/bluesky/v2/fixtures/complete.cyd | Bin 7043 -> 146688 bytes .../bluesky/v2/fixtures/incomplete.cyd | Bin 6620 -> 6596 bytes .../v2/fixtures/semantic-expectations.json | 419 +++++++++++++++++- docs/archive/bluesky/v2/scripts/generate.py | 44 +- .../__tests__/canonicalFixtures.test.ts | 268 ++++++++++- 15 files changed, 756 insertions(+), 79 deletions(-) create mode 100644 docs/archive/bluesky/v2/assets/README.md create mode 100644 docs/archive/bluesky/v2/assets/full-video.mp4 diff --git a/docs/adr/0002-canonical-archive-interchange-database.md b/docs/adr/0002-canonical-archive-interchange-database.md index cec446b2..1802b8a5 100644 --- a/docs/adr/0002-canonical-archive-interchange-database.md +++ b/docs/adr/0002-canonical-archive-interchange-database.md @@ -1,3 +1,3 @@ -# Canonical archive interchange database +# Canonical Bluesky interchange database -The `data.db` inside Bluesky version 2 and later Cyd Bluesky archives is a canonical interchange database rather than a copy of either client's runtime database. Mobile and desktop translate between private storage and this versioned schema, allowing their implementations and migrations to evolve independently; neither client maintains an adapter for the unused unversioned mobile prototype. +The `data.db` inside Bluesky version 2 and later Cyd Bluesky archives is a canonical Bluesky interchange database rather than a copy of either client's runtime database. Mobile and desktop translate between private storage and this versioned schema, allowing their implementations and migrations to evolve independently; neither client maintains an adapter for the unused unversioned mobile prototype. diff --git a/docs/adr/0004-merge-archive-imports-idempotently.md b/docs/adr/0004-merge-archive-imports-idempotently.md index c3d4a52c..dd39cb5a 100644 --- a/docs/adr/0004-merge-archive-imports-idempotently.md +++ b/docs/adr/0004-merge-archive-imports-idempotently.md @@ -1,3 +1,3 @@ # Merge archive imports idempotently -Importing a Cyd Bluesky archive merges it with the matching local account rather than replacing local data. Records match on stable Bluesky identifiers such as AT URIs, richer or newer representations can update older ones, data absent from the archive is retained, and importing the same archive repeatedly has no further effect; this supports safe cross-device transfer without sacrificing data collected independently on either device. Because import is an explicit recovery action, it may restore locally deleted records, and its preview reports that restoration rather than relying on permanent deletion tombstones that would suppress older backups. +A Bluesky archive import merges a Cyd Bluesky archive with the matching Bluesky local account rather than replacing Bluesky saved data. Bluesky saved records match on stable identifiers such as AT URIs, richer or newer representations can update older ones, Bluesky saved data absent from the Cyd Bluesky archive is retained, and importing the same archive repeatedly has no further effect; this supports safe cross-device transfer without sacrificing data collected independently on either device. Because Bluesky archive import is an explicit recovery action, it may restore records removed through Bluesky local deletion, and its preview reports that restoration rather than relying on permanent deletion tombstones that would suppress older backups. diff --git a/docs/adr/0010-make-each-archive-self-contained.md b/docs/adr/0010-make-each-archive-self-contained.md index a97da32f..d8873e8e 100644 --- a/docs/adr/0010-make-each-archive-self-contained.md +++ b/docs/adr/0010-make-each-archive-self-contained.md @@ -1,3 +1,3 @@ # Make each Cyd Bluesky archive self-contained -Every Cyd Bluesky archive is a complete snapshot of the local account's saved data and media at export time rather than an incremental delta that depends on earlier archives. Individual archives may be larger, but any one of them remains sufficient for recovery or cross-device transfer and can be merged idempotently on import. +Every Cyd Bluesky archive is a complete snapshot of a Bluesky local account's Bluesky saved data at export time rather than an incremental delta that depends on earlier Cyd Bluesky archives. Individual archives may be larger, but any one of them remains sufficient for recovery or cross-device transfer through Bluesky archive import. diff --git a/docs/adr/0011-ship-v2-archives-without-encryption.md b/docs/adr/0011-ship-v2-archives-without-encryption.md index 2d324cc3..e96f325e 100644 --- a/docs/adr/0011-ship-v2-archives-without-encryption.md +++ b/docs/adr/0011-ship-v2-archives-without-encryption.md @@ -1,3 +1,3 @@ # Ship Bluesky version 2 archives without encryption -Cyd Bluesky archives at version 2 are plaintext ZIP packages while the initial cross-client Bluesky contract is established. Passphrase encryption is deferred to a later Bluesky format version; clients must not imply that Bluesky version 2 archives protect sensitive saved data such as chats, and exports should communicate that limitation clearly. +Cyd Bluesky archives at version 2 are plaintext ZIP packages while the initial cross-client Bluesky contract is established. Passphrase encryption is deferred to a later Bluesky format version; clients must not imply that Bluesky version 2 archives protect sensitive Bluesky saved data such as chats, and exports should communicate that limitation clearly. diff --git a/docs/adr/0012-validate-v2-archive-integrity-before-import.md b/docs/adr/0012-validate-v2-archive-integrity-before-import.md index a3331312..e70cf2a1 100644 --- a/docs/adr/0012-validate-v2-archive-integrity-before-import.md +++ b/docs/adr/0012-validate-v2-archive-integrity-before-import.md @@ -1,3 +1,3 @@ # Validate Bluesky version 2 archive integrity before import -Bluesky version 2 archives include a manifest listing every payload file's path, byte size, and SHA-256 digest, and export captures a point-in-time-consistent database and media snapshot. Import validates the complete manifest before mutating local data and applies the merge transactionally, preventing corrupt or partial packages from producing partially imported accounts. +Bluesky version 2 archives include a manifest listing every payload file's path, byte size, and SHA-256 digest, and export captures a point-in-time-consistent database and media snapshot. Bluesky archive import validates the complete manifest before mutating Bluesky saved data and applies the merge transactionally, preventing corrupt or partial packages from producing partially imported Bluesky local accounts. diff --git a/docs/adr/0024-deduplicate-media-within-each-account.md b/docs/adr/0024-deduplicate-media-within-each-account.md index ac50f337..8f7c2ebc 100644 --- a/docs/adr/0024-deduplicate-media-within-each-account.md +++ b/docs/adr/0024-deduplicate-media-within-each-account.md @@ -1,3 +1,3 @@ -# Deduplicate media within each local account +# Deduplicate media within each Bluesky local account -Desktop stores media content-addressably within each UUID-keyed local account, and saved records reference those assets rather than owning duplicate files. Bluesky version 2 archives likewise package each unique asset once and map record references through the interchange database; cross-account deduplication is deferred so deleting or exporting one account does not depend on another account's storage. +Desktop stores media content-addressably within each UUID-keyed Bluesky local account, and Bluesky saved records reference those assets rather than owning duplicate files. Bluesky version 2 archives likewise package each unique asset once and map record references through the Bluesky interchange database; cross-account deduplication is deferred so deleting or exporting one Bluesky local account does not depend on another Bluesky local account's storage. diff --git a/docs/adr/0026-export-portable-account-data-not-operational-state.md b/docs/adr/0026-export-portable-account-data-not-operational-state.md index 53e3661e..fe962f95 100644 --- a/docs/adr/0026-export-portable-account-data-not-operational-state.md +++ b/docs/adr/0026-export-portable-account-data-not-operational-state.md @@ -1,3 +1,3 @@ -# Export portable account data, not operational state +# Export portable Bluesky saved data, not operational state -Bluesky version 2 archives include account identity and captured profile, saved records and media, source-deletion state, asset-completeness state, and portable save/delete rule defaults. They exclude credentials, schedules, pending or historical jobs, logs, analytics, error reports, temporary files, caches, and UI state because those are client-local operations whose transfer could duplicate work or trigger unintended behavior. +Bluesky version 2 archives include the Bluesky identity and captured profile, Bluesky saved records and media, Bluesky source-deletion state, asset-completeness state, and portable Bluesky account settings. They exclude credentials, schedules, pending or historical jobs, logs, analytics, error reports, temporary files, caches, and UI state because those are client-local operations whose transfer could duplicate work or trigger unintended behavior. diff --git a/docs/archive/bluesky/v2/README.md b/docs/archive/bluesky/v2/README.md index 2bc51adb..342e21b2 100644 --- a/docs/archive/bluesky/v2/README.md +++ b/docs/archive/bluesky/v2/README.md @@ -65,37 +65,40 @@ completeness must equal the single row in `data.db.archive`. It lists every regular payload except itself exactly once, sorted by path. Each entry contains its normalized path, uncompressed byte length, and SHA-256 -of its bytes. Readers must validate the complete manifest before exposing an -import preview or mutating live data. `metadata.json` and `data.db` are payloads. +of its bytes. Readers must validate the complete manifest before exposing a +Bluesky archive import preview or mutating Bluesky saved data. `metadata.json` +and `data.db` are payloads. Media paths must end in their digest and their bytes must match that digest. Readers extract into an isolated staging directory while validating entry type, path, declared and expanded sizes, entry counts, free space, and digest. They must not follow links or write outside staging. There is no small fixed archive-size limit; clients may require explicit confirmation at documented -resource thresholds. Failure or cancellation leaves the live account unchanged. +resource thresholds. Failure or cancellation leaves the live Bluesky local +account unchanged. -## Interchange database +## Bluesky interchange database `data.db` is SQLite 3 and must implement [schema.sql](schema.sql) exactly for -Bluesky v2. It is an interchange model, never a copy of a client's runtime database. -Text is UTF-8. Booleans are integers constrained to `0` or `1`. JSON columns -contain canonical JSON values rather than client-specific serialized objects. +Bluesky v2. It is a Bluesky interchange model, never a copy of a client's +runtime database. Text is UTF-8. Booleans are integers constrained to `0` or +`1`. JSON columns contain canonical JSON values rather than client-specific +serialized objects. The model has these semantic groups: -- `archive`, `identity`, and `profiles`: local UUID, durable DID, current - profile, and captured historical author profiles. +- `archive`, `identity`, and `profiles`: Bluesky local account UUID, durable + DID, current profile, and captured historical author profiles. - `records`, `selections`, `record_subjects`, and `record_context`: the latest observed form of posts/reposts/likes/bookmarks, the selected relationship's target record, plus direct reply-parent, quote, external, and author context. Context is bounded; it does not recursively capture threads. - `conversations`, `conversation_members`, and `messages`: direct-message context, membership, and messages. -- `relationships`: follows, blocks, and mutes with source-deletion state. +- `relationships`: follows, blocks, and mutes with Bluesky source-deletion state. - `assets` and `record_assets`: every expected image, preview, thumbnail, and full video, including unavailable assets and their reason. -- `portable_settings`: portable save defaults and source-delete defaults. +- `portable_settings`: portable Bluesky account setting defaults. Stable AT URIs identify records; DIDs identify Bluesky identities. `cid` is the latest observed CID, not revision history. `observed_at`, @@ -106,14 +109,16 @@ byte count, media type, and content-addressed payload. All five selection categories—`posts`, `reposts`, `likes`, `bookmarks`, and `chats`—must be representable. Category selection pulls its required direct -context and media with it. Import merges records by stable identifiers, -retains local data absent from the archive, prefers newer non-empty -observations, and is idempotent. It may restore locally deleted data. +context and media with it. Bluesky archive import merges records by stable +identifiers, retains Bluesky saved data absent from the Cyd Bluesky archive, +prefers newer non-empty observations, and is idempotent. It may restore data +removed through Bluesky local deletion. ## Completeness and consistency -Export is a point-in-time-consistent snapshot of the selected account data and -media. Each archive stands alone; Bluesky v2 has no delta or predecessor mechanism. +Export is a point-in-time-consistent snapshot of the selected Bluesky saved +data. Each Cyd Bluesky archive stands alone; Bluesky v2 has no delta or +predecessor mechanism. A structurally valid archive may be incomplete. Missing expected media must be represented as `unavailable` or `missing`, never silently omitted. The archive and metadata completeness is `complete` if and only if all asset rows are @@ -121,12 +126,13 @@ and metadata completeness is `complete` if and only if all asset rows are ## Privacy boundary -Only portable Bluesky account data belongs in Bluesky v2. Archives must not contain OAuth or -other credentials, private keys, sessions, schedules, pending/running/history -jobs, logs, analytics, diagnostics, error reports, caches, temporary data, -filesystem paths, or UI state. Portable settings are defaults, not authority -to schedule or execute work, and do not overwrite an existing account unless -the user explicitly chooses to adopt them. +Only portable Bluesky saved data belongs in Bluesky v2. Cyd Bluesky archives +must not contain OAuth or other credentials, private keys, sessions, schedules, +pending/running/history jobs, logs, analytics, diagnostics, error reports, +caches, temporary data, filesystem paths, or UI state. Portable Bluesky account +settings are defaults, not authority to schedule or execute work, and do not +overwrite an existing Bluesky local account unless the user explicitly chooses +to adopt them. ## Version behavior @@ -146,19 +152,27 @@ is release-enabled. examples generated by `scripts/generate.py`. They cover every category, captured/current profiles, reply/quote/external context, relationships, observations, deletion state, chats, settings, images, previews, video -thumbnails, and a full video payload. The incomplete fixture differs by one -expected unavailable full-video asset. Expectations are machine-readable in -`fixtures/semantic-expectations.json`. +thumbnails, and a playable full video payload. The PNG payloads have complete +chunk framing and valid CRCs; the MP4 is an FFmpeg-generated test pattern with +movie metadata and sample tables. The incomplete fixture differs by one +expected unavailable full-video asset. + +`fixtures/semantic-expectations.json` defines the normalized identity, profiles, +records, selections, record subjects, direct context, conversations, messages, +relationships, observation and deletion state, assets and their digests, +asset roles, portable Bluesky account settings, completeness, and version +behavior. A consumer must compare all of those semantics, not only row counts +or category names. Consumers compare normalized database meaning, asset digests, completeness, and rejection outcomes—not ZIP bytes, entry order, or SQLite page layout. ## Bluesky version history -| Version | Status | Meaning | -| ------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| Unversioned (“v1”) | Unsupported | Historical Mobile-only Bluesky archive format; never a cross-client contract. | -| 2 | Current | First Cyd Bluesky archive contract supported for Desktop/Mobile interchange. Plaintext ZIP and canonical SQLite interchange database. | +| Version | Status | Meaning | +| ------------------ | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| Unversioned (“v1”) | Unsupported | Historical Mobile-only Bluesky archive format; never a cross-client contract. | +| 2 | Current | First Cyd Bluesky archive contract supported for Desktop/Mobile interchange. Plaintext ZIP and canonical SQLite Bluesky interchange database. | Future Bluesky versions must append an entry here and define explicit reader behavior. Version meaning must never be inferred from a filename or applied to diff --git a/docs/archive/bluesky/v2/assets/README.md b/docs/archive/bluesky/v2/assets/README.md new file mode 100644 index 00000000..507c3e11 --- /dev/null +++ b/docs/archive/bluesky/v2/assets/README.md @@ -0,0 +1,12 @@ +# Canonical media sources + +`full-video.mp4` is a 10-second, 1280×720 FFmpeg test pattern generated without +third-party source material: + +```sh +ffmpeg -f lavfi -i testsrc=duration=10:size=1280x720:rate=30 \ + -pix_fmt yuv420p full-video.mp4 +``` + +The fixture generator creates the three one-pixel PNG sources itself with +distinct RGBA values, complete PNG chunk framing, and valid CRCs. diff --git a/docs/archive/bluesky/v2/assets/full-video.mp4 b/docs/archive/bluesky/v2/assets/full-video.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..eb6ab69acd3811f1e5f07334c187bb452a995e12 GIT binary patch literal 149576 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

GRHg7u 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 KuLYsi^?w1}dchI^ literal 0 HcmV?d00001 diff --git a/docs/archive/bluesky/v2/fixtures/complete.cyd b/docs/archive/bluesky/v2/fixtures/complete.cyd index b968898fdca8a98f2fb9e3006deebb9633eae9d9..9a8316f94b501879d33eafddce7c7d3407a3cb8e 100644 GIT binary patch literal 146688 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 z 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

HW-xcn^(RW^|I+cqYC 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 IzfNHP3+szt6951J literal 7043 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 C>6VHB diff --git a/docs/archive/bluesky/v2/fixtures/incomplete.cyd b/docs/archive/bluesky/v2/fixtures/incomplete.cyd index bd3f143ad93249a3b4d381e6a450945b5a92a368..90bd17e6003b8d3102d923f05e5073d03c2d8cb0 100644 GIT binary patch literal 6596 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 B=Kufz literal 6620 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 diff --git a/docs/archive/bluesky/v2/fixtures/semantic-expectations.json b/docs/archive/bluesky/v2/fixtures/semantic-expectations.json index 4dcffe91..e817cf77 100644 --- a/docs/archive/bluesky/v2/fixtures/semantic-expectations.json +++ b/docs/archive/bluesky/v2/fixtures/semantic-expectations.json @@ -11,21 +11,422 @@ "otherPlatform": "reject_unsupported_archive_platform", "newerVersion": "reject_unsupported_newer_version" }, + "commonSemantics": { + "archive": { + "createdAt": "2026-01-15T12:00:00.000Z", + "accountDid": "did:plc:canonicalalice", + "accountUuid": "018d5f7a-9b3c-7d10-8a2e-1f4c6b8d0e12" + }, + "identity": { + "did": "did:plc:canonicalalice", + "currentProfileId": "profile-alice-current" + }, + "profiles": [ + { + "id": "profile-alice-captured", + "did": "did:plc:canonicalalice", + "handle": "alice.test", + "displayName": "Alice Captured", + "description": "captured author", + "avatarAssetId": null, + "bannerAssetId": null, + "capturedAt": "2025-12-01T09:00:00.000Z" + }, + { + "id": "profile-alice-current", + "did": "did:plc:canonicalalice", + "handle": "alice.example", + "displayName": "Alice Current", + "description": "current profile", + "avatarAssetId": "asset-image", + "bannerAssetId": null, + "capturedAt": "2026-01-15T12:00:00.000Z" + }, + { + "id": "profile-bob", + "did": "did:plc:canonicalbob", + "handle": "bob.example", + "displayName": "Bob", + "description": "direct context author", + "avatarAssetId": null, + "bannerAssetId": null, + "capturedAt": "2026-01-15T12:00:00.000Z" + } + ], + "records": [ + { + "uri": "at://did:plc:canonicalalice/app.bsky.feed.like/like", + "cid": "bafy-like", + "recordType": "app.bsky.feed.like", + "authorProfileId": "profile-alice-captured", + "indexedAt": null, + "createdAt": "2026-01-03T10:00:00.000Z", + "firstObservedAt": "2026-01-03T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": null, + "facets": [], + "payload": {} + }, + { + "uri": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "cid": "bafy-post", + "recordType": "app.bsky.feed.post", + "authorProfileId": "profile-alice-captured", + "indexedAt": null, + "createdAt": "2026-01-01T10:00:00.000Z", + "firstObservedAt": "2026-01-01T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": "Own post with full video", + "facets": [], + "payload": {} + }, + { + "uri": "at://did:plc:canonicalalice/app.bsky.feed.repost/repost", + "cid": "bafy-repost", + "recordType": "app.bsky.feed.repost", + "authorProfileId": "profile-alice-captured", + "indexedAt": null, + "createdAt": "2026-01-02T10:00:00.000Z", + "firstObservedAt": "2026-01-02T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": null, + "facets": [], + "payload": {} + }, + { + "uri": "at://did:plc:canonicalalice/app.bsky.graph.listitem/bookmark", + "cid": "bafy-bookmark", + "recordType": "app.cyd.bookmark", + "authorProfileId": "profile-alice-captured", + "indexedAt": null, + "createdAt": "2026-01-04T10:00:00.000Z", + "firstObservedAt": "2026-01-04T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": null, + "facets": [], + "payload": {} + }, + { + "uri": "at://did:plc:canonicalbob/app.bsky.feed.post/quote", + "cid": "bafy-quote", + "recordType": "app.bsky.feed.post", + "authorProfileId": "profile-bob", + "indexedAt": null, + "createdAt": "2025-12-29T10:00:00.000Z", + "firstObservedAt": "2025-12-29T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": "2026-01-10T00:00:00.000Z", + "text": "Quoted record later deleted at source", + "facets": [], + "payload": {} + }, + { + "uri": "at://did:plc:canonicalbob/app.bsky.feed.post/reply", + "cid": "bafy-reply", + "recordType": "app.bsky.feed.post", + "authorProfileId": "profile-bob", + "indexedAt": null, + "createdAt": "2025-12-30T10:00:00.000Z", + "firstObservedAt": "2025-12-30T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": "Direct reply parent", + "facets": [], + "payload": {} + } + ], + "selections": [ + { + "category": "bookmarks", + "subjectId": "at://did:plc:canonicalalice/app.bsky.graph.listitem/bookmark", + "selectedAt": "2026-01-15T12:00:00.000Z" + }, + { + "category": "chats", + "subjectId": "convo-canonical", + "selectedAt": "2026-01-15T12:00:00.000Z" + }, + { + "category": "likes", + "subjectId": "at://did:plc:canonicalalice/app.bsky.feed.like/like", + "selectedAt": "2026-01-15T12:00:00.000Z" + }, + { + "category": "posts", + "subjectId": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "selectedAt": "2026-01-15T12:00:00.000Z" + }, + { + "category": "reposts", + "subjectId": "at://did:plc:canonicalalice/app.bsky.feed.repost/repost", + "selectedAt": "2026-01-15T12:00:00.000Z" + } + ], + "recordSubjects": [ + { + "relationshipUri": "at://did:plc:canonicalalice/app.bsky.feed.like/like", + "subjectRecordUri": "at://did:plc:canonicalalice/app.bsky.feed.post/post" + }, + { + "relationshipUri": "at://did:plc:canonicalalice/app.bsky.feed.repost/repost", + "subjectRecordUri": "at://did:plc:canonicalbob/app.bsky.feed.post/quote" + }, + { + "relationshipUri": "at://did:plc:canonicalalice/app.bsky.graph.listitem/bookmark", + "subjectRecordUri": "at://did:plc:canonicalalice/app.bsky.feed.post/post" + } + ], + "recordContext": [ + { + "recordUri": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "kind": "external", + "contextRecordUri": null, + "contextProfileId": null, + "external": { + "title": "Canonical link", + "uri": "https://example.com/context" + } + }, + { + "recordUri": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "kind": "quote", + "contextRecordUri": "at://did:plc:canonicalbob/app.bsky.feed.post/quote", + "contextProfileId": "profile-bob", + "external": null + }, + { + "recordUri": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "kind": "reply_parent", + "contextRecordUri": "at://did:plc:canonicalbob/app.bsky.feed.post/reply", + "contextProfileId": "profile-bob", + "external": null + } + ], + "conversations": [ + { + "id": "convo-canonical", + "rev": "1", + "firstObservedAt": "2026-01-15T12:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null + } + ], + "conversationMembers": [ + { + "conversationId": "convo-canonical", + "profileId": "profile-alice-captured" + }, + { + "conversationId": "convo-canonical", + "profileId": "profile-bob" + } + ], + "messages": [ + { + "id": "message-canonical", + "conversationId": "convo-canonical", + "senderProfileId": "profile-bob", + "sentAt": "2026-01-05T10:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null, + "text": "Portable direct message", + "facets": [], + "payload": {} + } + ], + "relationships": [ + { + "uri": "at://did:plc:canonicalalice/app.bsky.graph.follow/bob", + "kind": "follow", + "actorDid": "did:plc:canonicalalice", + "subjectDid": "did:plc:canonicalbob", + "createdAt": "2026-01-15T12:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": null + }, + { + "uri": "mute:did:plc:canonicalbob", + "kind": "mute", + "actorDid": "did:plc:canonicalalice", + "subjectDid": "did:plc:canonicalbob", + "createdAt": "2026-01-15T12:00:00.000Z", + "observedAt": "2026-01-15T12:00:00.000Z", + "sourceDeletedAt": "2026-01-12T00:00:00.000Z" + } + ], + "recordAssets": [ + { + "ownerType": "profile", + "ownerId": "profile-alice-current", + "assetId": "asset-image", + "role": "avatar", + "position": 0 + }, + { + "ownerType": "record", + "ownerId": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "assetId": "asset-image", + "role": "content", + "position": 0 + }, + { + "ownerType": "record", + "ownerId": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "assetId": "asset-video-full", + "role": "content", + "position": 1 + }, + { + "ownerType": "record", + "ownerId": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "assetId": "asset-preview", + "role": "preview", + "position": 0 + }, + { + "ownerType": "record", + "ownerId": "at://did:plc:canonicalalice/app.bsky.feed.post/post", + "assetId": "asset-thumbnail", + "role": "thumbnail", + "position": 0 + } + ], + "portableSettings": [ + { "key": "delete_follows", "value": false }, + { "key": "delete_posts", "value": { "olderThanDays": 30 } }, + { "key": "save_bookmarks", "value": true }, + { "key": "save_chats", "value": true }, + { "key": "save_likes", "value": true }, + { "key": "save_posts", "value": true }, + { "key": "save_reposts", "value": true } + ] + }, "fixtures": { "complete.cyd": { "completeness": "complete", - "categories": ["bookmarks", "chats", "likes", "posts", "reposts"], - "contextKinds": ["external", "quote", "reply_parent"], - "assetKinds": ["image", "preview", "thumbnail", "video"], - "unavailableAssets": 0 + "assets": [ + { + "id": "asset-image", + "kind": "image", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "6c55d7bbccd73bb135e8e7c7161b4be3cef97142313f2fba304e73b3329ecc3d", + "archivePath": "media/sha256/6c/6c55d7bbccd73bb135e8e7c7161b4be3cef97142313f2fba304e73b3329ecc3d", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-image", + "width": 1, + "height": 1, + "altText": "canonical image" + }, + { + "id": "asset-preview", + "kind": "preview", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "74280ef143147745086279ee96a1a35f8821c5f03785b46476537c24e3990847", + "archivePath": "media/sha256/74/74280ef143147745086279ee96a1a35f8821c5f03785b46476537c24e3990847", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-preview", + "width": 1, + "height": 1, + "altText": "canonical preview" + }, + { + "id": "asset-thumbnail", + "kind": "thumbnail", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "c7fe85dd5a8b22c8c3295535bb3665617f778c9d81058f3b8adc1eae69db99ec", + "archivePath": "media/sha256/c7/c7fe85dd5a8b22c8c3295535bb3665617f778c9d81058f3b8adc1eae69db99ec", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-thumbnail", + "width": 1, + "height": 1, + "altText": "canonical thumbnail" + }, + { + "id": "asset-video-full", + "kind": "video", + "mediaType": "video/mp4", + "byteCount": 149576, + "sha256": "f7a5be429b0d633d22038d97f5930c95e8403643fbb5b4e7274ee5ec16018cde", + "archivePath": "media/sha256/f7/f7a5be429b0d633d22038d97f5930c95e8403643fbb5b4e7274ee5ec16018cde", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-video-full", + "width": 1280, + "height": 720, + "altText": "canonical video" + } + ] }, "incomplete.cyd": { "completeness": "incomplete", - "categories": ["bookmarks", "chats", "likes", "posts", "reposts"], - "contextKinds": ["external", "quote", "reply_parent"], - "assetKinds": ["image", "preview", "thumbnail", "video"], - "unavailableAssets": 1, - "missingSemanticAsset": "asset-video-full" + "assets": [ + { + "id": "asset-image", + "kind": "image", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "6c55d7bbccd73bb135e8e7c7161b4be3cef97142313f2fba304e73b3329ecc3d", + "archivePath": "media/sha256/6c/6c55d7bbccd73bb135e8e7c7161b4be3cef97142313f2fba304e73b3329ecc3d", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-image", + "width": 1, + "height": 1, + "altText": "canonical image" + }, + { + "id": "asset-preview", + "kind": "preview", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "74280ef143147745086279ee96a1a35f8821c5f03785b46476537c24e3990847", + "archivePath": "media/sha256/74/74280ef143147745086279ee96a1a35f8821c5f03785b46476537c24e3990847", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-preview", + "width": 1, + "height": 1, + "altText": "canonical preview" + }, + { + "id": "asset-thumbnail", + "kind": "thumbnail", + "mediaType": "image/png", + "byteCount": 70, + "sha256": "c7fe85dd5a8b22c8c3295535bb3665617f778c9d81058f3b8adc1eae69db99ec", + "archivePath": "media/sha256/c7/c7fe85dd5a8b22c8c3295535bb3665617f778c9d81058f3b8adc1eae69db99ec", + "availability": "available", + "unavailableReason": null, + "sourceUrl": "https://cdn.example/asset-thumbnail", + "width": 1, + "height": 1, + "altText": "canonical thumbnail" + }, + { + "id": "asset-video-full", + "kind": "video", + "mediaType": "video/mp4", + "byteCount": null, + "sha256": null, + "archivePath": null, + "availability": "unavailable", + "unavailableReason": "source video was unavailable at export", + "sourceUrl": "https://cdn.example/asset-video-full", + "width": null, + "height": null, + "altText": null + } + ] } }, "excluded": [ diff --git a/docs/archive/bluesky/v2/scripts/generate.py b/docs/archive/bluesky/v2/scripts/generate.py index ca9ba58b..1d39ce01 100755 --- a/docs/archive/bluesky/v2/scripts/generate.py +++ b/docs/archive/bluesky/v2/scripts/generate.py @@ -3,13 +3,13 @@ from __future__ import annotations -import base64 import hashlib import json import sqlite3 import struct import tempfile import zipfile +import zlib from pathlib import Path ROOT = Path(__file__).resolve().parents[1] @@ -19,22 +19,28 @@ DID = "did:plc:canonicalalice" UUID = "018d5f7a-9b3c-7d10-8a2e-1f4c6b8d0e12" -# A real 1x1 PNG. Distinct suffixes are legal trailing ancillary bytes and make -# the canonical image, preview, and thumbnail independently addressable. -PNG = base64.b64decode( - "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=" -) +def png_chunk(kind: bytes, payload: bytes) -> bytes: + checksum = zlib.crc32(kind + payload) & 0xFFFFFFFF + return struct.pack(">I", len(payload)) + kind + payload + struct.pack(">I", checksum) -def box(kind: bytes, payload: bytes) -> bytes: - return struct.pack(">I4s", len(payload) + 8, kind) + payload + +def one_pixel_png(red: int, green: int, blue: int) -> bytes: + signature = b"\x89PNG\r\n\x1a\n" + header = struct.pack(">IIBBBBB", 1, 1, 8, 6, 0, 0, 0) + scanline = bytes((0, red, green, blue, 255)) + return ( + signature + + png_chunk(b"IHDR", header) + + png_chunk(b"IDAT", zlib.compress(scanline)) + + png_chunk(b"IEND", b"") + ) -# A small complete ISO-BMFF payload used to prove that video means the offline -# full-video object, not merely its preview or thumbnail. -VIDEO = box(b"ftyp", b"isom\x00\x00\x02\x00isomiso2mp41") + box( - b"free", b"canonical-cyd-bluesky-v2-full-video" -) + box(b"mdat", b"\x00\x00\x00\x01\x65\x88\x84canonical-video-sample") +IMAGE = one_pixel_png(35, 116, 171) +PREVIEW = one_pixel_png(80, 160, 80) +THUMBNAIL = one_pixel_png(200, 120, 40) +FULL_VIDEO = (ROOT / "assets" / "full-video.mp4").read_bytes() def add_asset( @@ -67,8 +73,8 @@ def add_asset( digest, archive_path, f"https://cdn.example/{asset_id}", - 1 if kind != "video" else 320, - 1 if kind != "video" else 180, + 1 if kind != "video" else 1280, + 1 if kind != "video" else 720, f"canonical {kind}", ), ) @@ -91,16 +97,16 @@ def populate(db: sqlite3.Connection, staging: Path, complete: bool) -> None: ) db.execute("INSERT INTO identity VALUES (?, ?)", (DID, "profile-alice-current")) - add_asset(db, staging, "asset-image", "image", "image/png", PNG + b"image") - add_asset(db, staging, "asset-preview", "preview", "image/png", PNG + b"preview") - add_asset(db, staging, "asset-thumbnail", "thumbnail", "image/png", PNG + b"thumbnail") + add_asset(db, staging, "asset-image", "image", "image/png", IMAGE) + add_asset(db, staging, "asset-preview", "preview", "image/png", PREVIEW) + add_asset(db, staging, "asset-thumbnail", "thumbnail", "image/png", THUMBNAIL) add_asset( db, staging, "asset-video-full", "video", "video/mp4", - VIDEO if complete else None, + FULL_VIDEO if complete else None, "source video was unavailable at export", ) db.execute( diff --git a/src/bluesky_archive_v2/__tests__/canonicalFixtures.test.ts b/src/bluesky_archive_v2/__tests__/canonicalFixtures.test.ts index 88ad3e4f..a4a6456b 100644 --- a/src/bluesky_archive_v2/__tests__/canonicalFixtures.test.ts +++ b/src/bluesky_archive_v2/__tests__/canonicalFixtures.test.ts @@ -10,6 +10,209 @@ const contractRoot = path.resolve("docs/archive/bluesky/v2"); const fixtureRoot = path.join(contractRoot, "fixtures"); const temporaryDirectories: string[] = []; +type JsonObject = Record; + +type SemanticExpectations = { + archiveFormat: JsonObject; + desktopBlueskyVersionBehavior: Record; + commonSemantics: JsonObject; + fixtures: Record< + "complete.cyd" | "incomplete.cyd", + { completeness: string; assets: JsonObject[] } + >; +}; + +function readExpectations(): SemanticExpectations { + return JSON.parse( + fs.readFileSync( + path.join(fixtureRoot, "semantic-expectations.json"), + "utf8", + ), + ) as SemanticExpectations; +} + +function rows(database: Database.Database, sql: string): JsonObject[] { + return database.prepare(sql).all() as JsonObject[]; +} + +function parseJsonFields(values: JsonObject[], fields: string[]): JsonObject[] { + return values.map((value) => ({ + ...value, + ...Object.fromEntries( + fields.map((field) => [ + field, + value[field] === null ? null : JSON.parse(value[field] as string), + ]), + ), + })); +} + +function normalizeSemantics(database: Database.Database): JsonObject { + const archive = database + .prepare( + `SELECT created_at AS createdAt, account_did AS accountDid, + account_uuid AS accountUuid FROM archive`, + ) + .get() as JsonObject; + const identity = database + .prepare("SELECT did, current_profile_id AS currentProfileId FROM identity") + .get() as JsonObject; + + return { + archive, + identity, + profiles: rows( + database, + `SELECT id, did, handle, display_name AS displayName, + description, avatar_asset_id AS avatarAssetId, + banner_asset_id AS bannerAssetId, captured_at AS capturedAt + FROM profiles ORDER BY id`, + ), + records: parseJsonFields( + rows( + database, + `SELECT uri, cid, record_type AS recordType, + author_profile_id AS authorProfileId, indexed_at AS indexedAt, + created_at AS createdAt, first_observed_at AS firstObservedAt, + observed_at AS observedAt, source_deleted_at AS sourceDeletedAt, + text, facets_json AS facets, payload_json AS payload + FROM records ORDER BY uri`, + ), + ["facets", "payload"], + ), + selections: rows( + database, + `SELECT category, subject_id AS subjectId, selected_at AS selectedAt + FROM selections ORDER BY category`, + ), + recordSubjects: rows( + database, + `SELECT relationship_uri AS relationshipUri, + subject_record_uri AS subjectRecordUri + FROM record_subjects ORDER BY relationship_uri`, + ), + recordContext: parseJsonFields( + rows( + database, + `SELECT record_uri AS recordUri, kind, + context_record_uri AS contextRecordUri, + context_profile_id AS contextProfileId, external_json AS external + FROM record_context ORDER BY record_uri, kind`, + ), + ["external"], + ), + conversations: rows( + database, + `SELECT id, rev, first_observed_at AS firstObservedAt, + observed_at AS observedAt, source_deleted_at AS sourceDeletedAt + FROM conversations ORDER BY id`, + ), + conversationMembers: rows( + database, + `SELECT conversation_id AS conversationId, profile_id AS profileId + FROM conversation_members ORDER BY conversation_id, profile_id`, + ), + messages: parseJsonFields( + rows( + database, + `SELECT id, conversation_id AS conversationId, + sender_profile_id AS senderProfileId, sent_at AS sentAt, + observed_at AS observedAt, source_deleted_at AS sourceDeletedAt, + text, facets_json AS facets, payload_json AS payload + FROM messages ORDER BY id`, + ), + ["facets", "payload"], + ), + relationships: rows( + database, + `SELECT uri, kind, actor_did AS actorDid, subject_did AS subjectDid, + created_at AS createdAt, observed_at AS observedAt, + source_deleted_at AS sourceDeletedAt + FROM relationships ORDER BY uri`, + ), + recordAssets: rows( + database, + `SELECT owner_type AS ownerType, owner_id AS ownerId, + asset_id AS assetId, role, position + FROM record_assets ORDER BY owner_type, owner_id, role, position`, + ), + portableSettings: parseJsonFields( + rows( + database, + `SELECT key, value_json AS value + FROM portable_settings ORDER BY key`, + ), + ["value"], + ), + }; +} + +function normalizeAssets(database: Database.Database): JsonObject[] { + return rows( + database, + `SELECT id, kind, media_type AS mediaType, byte_count AS byteCount, + sha256, archive_path AS archivePath, availability, + unavailable_reason AS unavailableReason, source_url AS sourceUrl, + width, height, alt_text AS altText + FROM assets ORDER BY id`, + ); +} + +function crc32(bytes: Buffer): number { + let checksum = 0xffffffff; + for (const byte of bytes) { + checksum ^= byte; + for (let bit = 0; bit < 8; bit += 1) { + checksum = (checksum >>> 1) ^ (0xedb88320 & -(checksum & 1)); + } + } + return (checksum ^ 0xffffffff) >>> 0; +} + +function expectValidPng(bytes: Buffer): void { + expect(bytes.subarray(0, 8)).toEqual( + Buffer.from([137, 80, 78, 71, 13, 10, 26, 10]), + ); + const chunkTypes: string[] = []; + let offset = 8; + while (offset < bytes.length) { + const length = bytes.readUInt32BE(offset); + const typeStart = offset + 4; + const dataEnd = typeStart + 4 + length; + const chunkEnd = dataEnd + 4; + expect(chunkEnd).toBeLessThanOrEqual(bytes.length); + const typeAndData = bytes.subarray(typeStart, dataEnd); + chunkTypes.push(typeAndData.subarray(0, 4).toString("ascii")); + expect(bytes.readUInt32BE(dataEnd)).toBe(crc32(typeAndData)); + offset = chunkEnd; + } + expect(offset).toBe(bytes.length); + expect(chunkTypes[0]).toBe("IHDR"); + expect(chunkTypes).toContain("IDAT"); + expect(chunkTypes.at(-1)).toBe("IEND"); +} + +function expectPlayableMp4Structure(bytes: Buffer): void { + const boxes = new Map(); + let offset = 0; + while (offset < bytes.length) { + const size = bytes.readUInt32BE(offset); + const type = bytes.subarray(offset + 4, offset + 8).toString("ascii"); + expect(size).toBeGreaterThanOrEqual(8); + expect(offset + size).toBeLessThanOrEqual(bytes.length); + boxes.set(type, bytes.subarray(offset, offset + size)); + offset += size; + } + expect(offset).toBe(bytes.length); + expect([...boxes.keys()]).toEqual( + expect.arrayContaining(["ftyp", "mdat", "moov"]), + ); + const movie = boxes.get("moov")!; + expect(movie.includes(Buffer.from("mvhd"))).toBe(true); + expect(movie.includes(Buffer.from("trak"))).toBe(true); + expect(movie.includes(Buffer.from("stbl"))).toBe(true); +} + async function openFixture(name: "complete" | "incomplete") { const archivePath = path.join(fixtureRoot, `${name}.cyd`); const directory = await unzipper.Open.file(archivePath); @@ -31,6 +234,45 @@ afterEach(() => { }); describe("canonical Cyd Bluesky archive v2 fixtures", () => { + test.each(["complete", "incomplete"] as const)( + "%s fixture matches every normalized semantic expectation", + async (fixtureName) => { + const { database } = await openFixture(fixtureName); + const expectations = readExpectations(); + const fixtureExpectations = expectations.fixtures[`${fixtureName}.cyd`]; + + expect(normalizeSemantics(database)).toEqual( + expectations.commonSemantics, + ); + expect(normalizeAssets(database)).toEqual(fixtureExpectations.assets); + expect( + database.prepare("SELECT completeness FROM archive").pluck().get(), + ).toBe(fixtureExpectations.completeness); + database.close(); + }, + ); + + test("complete fixture contains valid PNGs and a structured playable MP4", async () => { + const { database, directory } = await openFixture("complete"); + const entries = new Map( + directory.files.map((entry) => [entry.path, entry]), + ); + const assets = rows( + database, + "SELECT kind, archive_path AS archivePath FROM assets ORDER BY kind", + ); + + for (const asset of assets) { + const bytes = await entries.get(asset.archivePath as string)!.buffer(); + if (asset.kind === "video") { + expectPlayableMp4Structure(bytes); + } else { + expectValidPng(bytes); + } + } + database.close(); + }); + test.each(["complete", "incomplete"] as const)( "%s fixture represents every portable category and direct context", async (fixtureName) => { @@ -132,14 +374,24 @@ describe("canonical Cyd Bluesky archive v2 fixtures", () => { (await metadataEntry!.buffer()).toString("utf8"), ) as Record; - expect(metadata).toMatchObject({ + expect(metadata).toEqual({ format: "cyd-archive", platform: "bluesky", version: 2, + createdAt: "2026-01-15T12:00:00.000Z", + accountDid: "did:plc:canonicalalice", + accountUuid: "018d5f7a-9b3c-7d10-8a2e-1f4c6b8d0e12", + completeness: "complete", }); expect( - database.prepare("SELECT format, platform, version FROM archive").get(), - ).toEqual({ format: "cyd-archive", platform: "bluesky", version: 2 }); + database + .prepare( + `SELECT format, platform, version, created_at AS createdAt, + account_did AS accountDid, account_uuid AS accountUuid, + completeness FROM archive`, + ) + .get(), + ).toEqual(metadata); expect(database.pragma("application_id", { simple: true })).toBe( 0x43594232, ); @@ -147,15 +399,7 @@ describe("canonical Cyd Bluesky archive v2 fixtures", () => { }); test("semantic expectations make Desktop Bluesky version support explicit", () => { - const expectations = JSON.parse( - fs.readFileSync( - path.join(fixtureRoot, "semantic-expectations.json"), - "utf8", - ), - ) as { - archiveFormat: Record; - desktopBlueskyVersionBehavior: Record; - }; + const expectations = readExpectations(); expect(expectations.archiveFormat).toEqual({ format: "cyd-archive",