67ff5808

By: Michael Lynch <git@mtlynch.io>

Split tinybeans parsing into per-file functions with a higher-level assembler

ParseJournal, ParseFollowers, and ParseEntry each take an io.Reader and
parse a single JSON file independently. Parse(fs.FS) is now a thin
assembler that opens each file, calls the per-file parsers, resolves
MediaPath, and assembles the Export.

Tests call each parser directly with strings.NewReader so the test data
is a plain JSON string. TestParse uses a minimal fstest.MapFS focused
on MediaPath resolution and assembly correctness rather than re-testing
JSON field parsing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Suite timing

Time to Start Worker time Duration Time to finish
Config 0s 0s 0s 1s
Eval 1s 32s 32s 33s
Build 24s 3m44s 1m33s 1m57s
Test - - - -
Deploy - - - -
Suite 0s 4m18s 1m56s 1m57s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s