* fix: harden preload argv parsing for popup windows * fix: align youtube playback with shared overlay startup * fix: unwrap mpv youtube streams for anki media mining * docs: update docs for youtube subtitle and mining flow * refactor: unify cli and runtime wiring for startup and youtube flow * feat: update subtitle sidebar overlay behavior * chore: add shared log-file source for diagnostics * fix(ci): add changelog fragment for immersion changes * fix: address CodeRabbit review feedback * fix: persist canonical title from youtube metadata * style: format stats library tab * fix: address latest review feedback * style: format stats library files * test: stub launcher youtube deps in CI * test: isolate launcher youtube flow deps * test: stub launcher youtube deps in failing case * test: force x11 backend in launcher ci harness * test: address latest review feedback * fix(launcher): preserve user YouTube ytdl raw options * docs(backlog): update task tracking notes * fix(immersion): special-case youtube media paths in runtime and tracking * feat(stats): improve YouTube media metadata and picker key handling * fix(ci): format stats media library hook * fix: address latest CodeRabbit review items * docs: update youtube release notes and docs * feat: auto-load youtube subtitles before manual picker * fix: restore app-owned youtube subtitle flow * docs: update youtube playback docs and config copy * refactor: remove legacy youtube launcher mode plumbing * fix: refine youtube subtitle startup binding * docs: clarify youtube subtitle startup behavior * fix: address PR #31 latest review follow-ups * fix: address PR #31 follow-up review comments * test: harden youtube picker test harness * udpate backlog * fix: add timeout to youtube metadata probe * docs: refresh youtube and stats docs * update backlog * update backlog * chore: release v0.9.0
3.9 KiB
id, title, status, assignee, created_date, updated_date, labels, milestone, dependencies, references, priority, ordinal
| id | title | status | assignee | created_date | updated_date | labels | milestone | dependencies | references | priority | ordinal | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TASK-192 | Fix stale anime cover art after AniList reassignment | Done |
|
2026-03-20 00:12 | 2026-03-23 03:22 |
|
m-1 |
|
medium | 127500 |
Description
Fix the stats anime-detail cover image path so reassigning an anime to a different AniList entry replaces the stored cover art bytes instead of keeping the previous image blob under updated metadata.
Acceptance Criteria
- #1 Reassigning an anime to a different AniList entry stores the new cover art bytes for that anime's videos
- #2 Shared blob deduplication still works when multiple videos in the anime use the same new cover image
- #3 Focused regression coverage proves stale cover blobs are replaced on reassignment
Implementation Plan
- Add a failing regression test that reassigns an anime twice with different downloaded cover bytes and asserts the resolved cover updates.
- Update cover-art upsert logic so new blob bytes generate a new shared hash instead of reusing an existing hash for the row.
- Run the focused immersion tracker service test file and record the result.
Implementation Notes
2026-03-20: Created during live debugging of a user-reported stale anime profile picture after changing the AniList entry from the stats UI.
2026-03-20: Root cause was in upsertCoverArt(...). When a row already had cover_blob_hash, a later AniList reassignment with a freshly downloaded cover reused the existing hash instead of hashing the new bytes, so the blob store kept serving the old image while metadata changed.
2026-03-20: Added a regression in src/core/services/immersion-tracker-service.test.ts that reassigns the same anime twice with different fetched image bytes and asserts the resolved anime cover changes to the second blob while both videos still deduplicate to one shared hash.
2026-03-20: Fixed src/core/services/immersion-tracker/query.ts so incoming cover blob bytes compute a fresh hash before falling back to an existing row hash. Existing hashes are now reused only when no new bytes were fetched.
2026-03-20: Verification commands run:
bun test src/core/services/immersion-tracker-service.test.tsbash .agents/skills/subminer-change-verification/scripts/classify_subminer_diff.sh src/core/services/immersion-tracker/query.ts src/core/services/immersion-tracker-service.test.tsbash .agents/skills/subminer-change-verification/scripts/verify_subminer_change.sh --lane core src/core/services/immersion-tracker/query.ts src/core/services/immersion-tracker-service.test.ts2026-03-20: Verification results:- focused service test: passed
- verifier lane selection:
core - verifier result: passed (
bun run typecheck,bun run test:fast) - verifier artifacts:
.tmp/skill-verification/subminer-verify-20260320-001433-IZLFqs/
Final Summary
Fixed stale anime cover art after AniList reassignment by correcting cover-blob hash replacement in the immersion tracker storage layer. Reassignments now store the new fetched image bytes instead of reusing the previous blob hash from the row, while still deduplicating the updated image across videos in the same anime.
Added focused regression coverage that reproduces the exact failure mode: same anime reassigned twice with different cover downloads, with the second image expected to replace the first. Verified with the touched service test file plus the SubMiner core verification lane.