src/main/character-dictionary-runtime.ts is now one of the largest live production files in the repo and combines AniList transport, name normalization, snapshot/image shaping, cache management, and zip packaging. That file will keep growing as character-dictionary features evolve. Split it into focused modules so the runtime surface becomes orchestration instead of a catch-all implementation blob.
Acceptance Criteria
#1 AniList fetch/parsing logic, dictionary-entry building, and snapshot/cache/zip persistence no longer live in one giant file.
#2 The public runtime API stays behavior-compatible for current callers.
#3 The top-level runtime/orchestration file becomes materially smaller and easier to review.
#4 Existing character-dictionary tests still pass, and new focused tests cover the extracted modules where needed.
Implementation Plan
Identify the dominant concern boundaries inside src/main/character-dictionary-runtime.ts.
Extract fetch/transform/persist modules with narrow interfaces, keeping data-shape ownership explicit.
Leave the exported runtime API stable for current main-process callers.
Verify with the maintained character-dictionary/runtime test lane plus bun run typecheck.