Repository navigation
Build the v2 writer before the reader that consumes it - #109
Merged
Merged
Conversation
Reader-first ordering left every Bluesky archive reader issue with no way to manufacture test data. The only component that can turn Bluesky saved data into a Cyd Bluesky archive is the writer, so building it last meant #96 and #97 would be developed against synthetic fixtures alone. Nothing actually required that order any more. ADR 0004 gated writer work on #90, and #90 closed on 2026-07-31; the epic's own text says the writer is blocked by #90 and nobody moved #98 afterward. What remains is a release concern, not a construction one: people should not get an export button before readers are proven, which #100 already covers. So 0004 now says what it was protecting rather than how it happened to be sequenced. Building and testing the writer is ungated; enabling it for users waits on #100. 0016 records the consequence. Exporting a curated test account through Mobile's own writer produces fixtures carrying real facets, CIDs, media bytes, and identifiers that generate.py does not reproduce, and it needs no separate collection tooling because reading Bluesky saved data is already the writer's job. Those fixtures prove Mobile's behavior, never the contract's meaning, which is the line 0008 now draws explicitly: the pinned canonical bundle stays the semantic oracle, and a fixture Mobile generated never settles a question about what v2 requires. Issues #91, #96, and #98 are updated to match. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reorders the #91 epic so Cyd Bluesky archive v2 export lands before import. No product code changes — three ADRs, plus issue edits already applied to #91, #96, and #98.
Why
Reader-first ordering left every reader issue with no way to manufacture test data. The writer is the only component that can turn Bluesky saved data into a Cyd Bluesky archive, so building it last meant #96 and #97 would be developed against synthetic fixtures alone.
Nothing required that order any more. ADR 0004 gated writer work on #90; #90 closed on 2026-07-31. The epic itself said "the writer and complete v2 conformance are blocked by #90" and nobody moved #98 afterward, so it was still carrying a lapsed dependency.
The surviving concern is a release concern, not a construction one: people should not get an export button before readers are proven. #100 already covers exactly that, unchanged.
Changes
000400080016Nothing in the repo referenced
0004's old filename.Dependency graph
#97, #99, and #100 needed no edits.
Worth a second look
docs/adr/, so it is rewritten in place under its original number.scripts/archive-contract/—test_bundle.pyalready does manifest reconciliation and digest verification, so pointing that machinery at an arbitrary.cydagainst the pinnedschema.sqlis mostly lifting existing code. Once Restore a complete Bluesky local account for offline browsing #96 lands, export → import → export round-trip equality becomes available, which is a stronger test than either half has today.data.dbfor a curated account is tens of KB; media is the whole story. Curating the test account before export matters more than trimming afterward, since committed media persists in repository history.🤖 Generated with Claude Code