3.4 KiB
Merged Character Dictionary Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Replace per-anime character dictionary imports with one merged Yomitan dictionary driven by MRU usage retention.
Architecture: Persist normalized per-media character dictionary snapshots locally, maintain MRU retained media ids in auto-sync state, and rebuild a single merged Yomitan zip only when the retained set changes. Keep external AniList fetches only for media without a local snapshot; normal revisits stay local.
Tech Stack: TypeScript, Bun test, Node fs/path, existing Yomitan zip generation helpers.
Task 1: Lock in merged auto-sync behavior
Files:
- Modify:
src/main/runtime/character-dictionary-auto-sync.test.ts - Test:
src/main/runtime/character-dictionary-auto-sync.test.ts
Step 1: Write the failing test
Add tests for:
- single merged dictionary title/import replacing per-media imports
- MRU reorder causing rebuild only when order changes
- unchanged revisit skipping rebuild/import
- capped retained set evicting least-recently-used media
Step 2: Run test to verify it fails
Run: bun test src/main/runtime/character-dictionary-auto-sync.test.ts
Expected: FAIL on old per-media import assumptions / missing merged behavior
Step 3: Write minimal implementation
Update auto-sync runtime to track retained media ids and merged revision/hash, call merged zip builder, and replace one imported Yomitan dictionary.
Step 4: Run test to verify it passes
Run: bun test src/main/runtime/character-dictionary-auto-sync.test.ts
Expected: PASS
Task 2: Add snapshot + merged-zip runtime support
Files:
- Modify:
src/main/character-dictionary-runtime.ts - Modify:
src/main/character-dictionary-runtime.test.ts - Test:
src/main/character-dictionary-runtime.test.ts
Step 1: Write the failing test
Add tests for:
- saving/loading normalized per-media snapshots without per-media zip cache
- building merged zip from retained media snapshots with stable dictionary title
- preserving images/terms from multiple media in merged output
Step 2: Run test to verify it fails
Run: bun test src/main/character-dictionary-runtime.test.ts
Expected: FAIL because snapshot/merged APIs do not exist yet
Step 3: Write minimal implementation
Refactor dictionary runtime to expose snapshot generation/loading and merged zip building from stored metadata/images.
Step 4: Run test to verify it passes
Run: bun test src/main/character-dictionary-runtime.test.ts
Expected: PASS
Task 3: Wire app/runtime config and docs
Files:
- Modify:
src/main.ts - Modify:
src/config/definitions/options-integrations.ts - Modify:
README.md
Step 1: Write the failing test
Add or update tests if needed for new dependency wiring / docs-adjacent config description expectations.
Step 2: Run test to verify it fails
Run: bun test src/main/runtime/character-dictionary-auto-sync.test.ts src/main/character-dictionary-runtime.test.ts
Expected: FAIL until wiring matches merged flow
Step 3: Write minimal implementation
Swap app wiring to new snapshot + merged build API, update config/docs text from TTL semantics to usage-based merged retention.
Step 4: Run test to verify it passes
Run: bun test src/main/runtime/character-dictionary-auto-sync.test.ts src/main/character-dictionary-runtime.test.ts && bun run tsc --noEmit
Expected: PASS