Skip to content

Build the v2 writer before the reader that consumes it - #109

Merged
micahflee merged 1 commit into
mainfrom
issue-91-writer-first-ordering
Sep 10, 2026
Merged

micahflee merged 1 commit into
mainfrom
issue-91-writer-first-ordering

Conversation

@micahflee

Copy link
Copy Markdown
Member

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

File Change
0004 Renamed and rewritten around the built-vs-enabled split. Building and testing the writer is ungated; enabling it for users waits on #100.
0008 One sentence placing Mobile-generated fixtures under the pinned bundle rather than beside it.
0016 New. Records why the writer seeds fixtures from a curated test account, and why that does not make them contract authority.

Nothing in the repo referenced 0004's old filename.

Dependency graph

before:  93 ─→ 95 ─→ 96 ─→ 97 ─┐
         90 ──────────→ 98 ────┴─→ 99 ─→ 100
                        ↑______ blocked by 96

after:   93 ─→ 95 ─┐
         90 ───────┴─→ 98 (+fixtures) ─→ 96 ─→ 97 ─→ 99 ─→ 100

#97, #99, and #100 needed no edits.

Worth a second look

🤖 Generated with Claude Code

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>
@micahflee
micahflee merged commit e83e52c into main Sep 10, 2026
1 check passed
@micahflee
micahflee deleted the issue-91-writer-first-ordering branch September 10, 2026 22:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant