diff --git a/backlog/tasks/task-143 - Keep-character-dictionary-auto-sync-non-blocking-during-startup.md b/backlog/tasks/task-143 - Keep-character-dictionary-auto-sync-non-blocking-during-startup.md index 6800031..6fcf149 100644 --- a/backlog/tasks/task-143 - Keep-character-dictionary-auto-sync-non-blocking-during-startup.md +++ b/backlog/tasks/task-143 - Keep-character-dictionary-auto-sync-non-blocking-during-startup.md @@ -1,11 +1,11 @@ --- id: TASK-143 title: Keep character dictionary auto-sync non-blocking during startup -status: In Progress +status: Done assignee: - codex created_date: '2026-03-09 01:45' -updated_date: '2026-03-20 09:22' +updated_date: '2026-03-23 03:22' labels: - dictionary - startup @@ -18,7 +18,7 @@ references: - >- /home/sudacode/projects/japanese/SubMiner/src/main/runtime/current-media-tokenization-gate.ts priority: high -ordinal: 38500 +ordinal: 144500 --- ## Description diff --git a/backlog/tasks/task-177.1 - Fix-overview-lookup-rate-metric.md b/backlog/tasks/task-177.1 - Fix-overview-lookup-rate-metric.md index 0d943c7..00ff385 100644 --- a/backlog/tasks/task-177.1 - Fix-overview-lookup-rate-metric.md +++ b/backlog/tasks/task-177.1 - Fix-overview-lookup-rate-metric.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-19 17:46' -updated_date: '2026-03-19 17:54' +updated_date: '2026-03-23 03:22' labels: - stats - immersion-tracking @@ -19,6 +19,7 @@ references: - src/core/services/stats-server.ts parent_task_id: TASK-177 priority: medium +ordinal: 132500 --- ## Description diff --git a/backlog/tasks/task-177.2 - Count-homepage-new-words-by-headword.md b/backlog/tasks/task-177.2 - Count-homepage-new-words-by-headword.md index fed11c1..8194fb1 100644 --- a/backlog/tasks/task-177.2 - Count-homepage-new-words-by-headword.md +++ b/backlog/tasks/task-177.2 - Count-homepage-new-words-by-headword.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-19 19:38' -updated_date: '2026-03-19 19:40' +updated_date: '2026-03-23 03:22' labels: - stats - immersion-tracking @@ -17,6 +17,7 @@ references: - stats/src/lib/dashboard-data.ts parent_task_id: TASK-177 priority: medium +ordinal: 130500 --- ## Description diff --git a/backlog/tasks/task-177.3 - Fix-attached-stats-command-flow-and-browser-config.md b/backlog/tasks/task-177.3 - Fix-attached-stats-command-flow-and-browser-config.md index e04e84a..3758747 100644 --- a/backlog/tasks/task-177.3 - Fix-attached-stats-command-flow-and-browser-config.md +++ b/backlog/tasks/task-177.3 - Fix-attached-stats-command-flow-and-browser-config.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-19 20:15' -updated_date: '2026-03-19 20:17' +updated_date: '2026-03-23 03:22' labels: - launcher - stats @@ -19,6 +19,7 @@ references: - src/main/runtime/stats-cli-command.test.ts parent_task_id: TASK-177 priority: medium +ordinal: 129500 --- ## Description diff --git a/backlog/tasks/task-182.2 - Improve-session-detail-known-word-chart-scaling.md b/backlog/tasks/task-182.2 - Improve-session-detail-known-word-chart-scaling.md index 840111e..9abc17c 100644 --- a/backlog/tasks/task-182.2 - Improve-session-detail-known-word-chart-scaling.md +++ b/backlog/tasks/task-182.2 - Improve-session-detail-known-word-chart-scaling.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-19 20:31' -updated_date: '2026-03-19 20:52' +updated_date: '2026-03-23 03:22' labels: - bug - stats @@ -17,6 +17,7 @@ references: - >- /Users/sudacode/projects/japanese/SubMiner/stats/src/lib/session-detail.test.tsx parent_task_id: TASK-182 +ordinal: 128500 --- ## Description diff --git a/backlog/tasks/task-188 - Refactor-stats-chart-data-pipeline-to-use-backend-aggregated-series.md b/backlog/tasks/task-188 - Refactor-stats-chart-data-pipeline-to-use-backend-aggregated-series.md index e0a3282..cc85efe 100644 --- a/backlog/tasks/task-188 - Refactor-stats-chart-data-pipeline-to-use-backend-aggregated-series.md +++ b/backlog/tasks/task-188 - Refactor-stats-chart-data-pipeline-to-use-backend-aggregated-series.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-18 00:29' -updated_date: '2026-03-18 00:55' +updated_date: '2026-03-23 03:22' labels: - stats - performance @@ -22,6 +22,7 @@ references: - stats/src/types/stats.ts - stats/src/lib/dashboard-data.ts priority: medium +ordinal: 138500 --- ## Description diff --git a/backlog/tasks/task-191 - Assess-PR-19-CodeRabbit-review-follow-ups.md b/backlog/tasks/task-191 - Assess-PR-19-CodeRabbit-review-follow-ups.md index 44ed52d..494e107 100644 --- a/backlog/tasks/task-191 - Assess-PR-19-CodeRabbit-review-follow-ups.md +++ b/backlog/tasks/task-191 - Assess-PR-19-CodeRabbit-review-follow-ups.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-17 23:15' -updated_date: '2026-03-17 23:18' +updated_date: '2026-03-23 03:22' labels: - pr-review - stats @@ -16,6 +16,7 @@ references: - src/core/services/immersion-tracker-service.ts - src/core/services/immersion-tracker-service.test.ts priority: medium +ordinal: 139500 --- ## Description diff --git a/backlog/tasks/task-192 - Assess-remaining-PR-19-review-batch.md b/backlog/tasks/task-192 - Assess-remaining-PR-19-review-batch.md deleted file mode 100644 index 692a4fe..0000000 --- a/backlog/tasks/task-192 - Assess-remaining-PR-19-review-batch.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -id: TASK-192 -title: 'Assess remaining PR #19 review batch' -status: Done -assignee: - - codex -created_date: '2026-03-17 23:24' -updated_date: '2026-03-17 23:42' -labels: - - pr-review - - stats - - docs -milestone: m-1 -dependencies: [] -references: - - docs/superpowers/plans/2026-03-12-immersion-stats-page.md - - src/core/services/immersion-tracker/__tests__/query.test.ts - - src/core/services/ipc.ts - - src/core/services/stats-server.ts - - src/main.ts - - src/renderer/handlers/keyboard.ts - - stats/src -priority: medium ---- - -## Description - - -Validate the remaining PR #19 automated review findings against the current branch, implement only the technically correct fixes, and document which comments are stale, already addressed, or not warranted. - - -## Acceptance Criteria - -- [x] #1 Each remaining review comment is classified as actionable, already fixed, stale, or not warranted -- [x] #2 Confirmed bugs or correctness issues are fixed with focused regression coverage where it fits -- [x] #3 Final notes record which comments were intentionally not applied and why - - -## Implementation Plan - - -1. Inspect the referenced files in batches and compare each comment against current branch behavior. -2. Separate correctness/security regressions from stylistic nitpicks and already-fixed items. -3. Add tests first for confirmed behavior bugs where practical, apply the smallest safe fixes, and rerun targeted verification. - - -## Implementation Notes - - -Swept the pasted PR #19 review batch against the current branch. - -Classification: -- Already fixed on current branch: `src/core/services/immersion-tracker/__tests__/query.test.ts` cleanup rethrow, `src/core/services/ipc.ts` limit validation, `src/core/services/stats-server.ts` max-limit parsing and CORS removal, `src/main.ts` quit-path TDZ issue, `src/renderer/handlers/keyboard.ts` stats-toggle shortcut ordering/config usage, `stats/src/components/vocabulary/WordList.tsx`, `stats/src/hooks/useSessions.ts`, `stats/src/hooks/useTrends.ts` stale-error reset, `src/core/services/__tests__/stats-server.test.ts` kanji endpoint/readability notes, `src/core/services/stats-window.ts`, `stats/src/App.tsx`, `stats/src/components/layout/TabBar.tsx`, `stats/src/components/overview/QuickStats.tsx`, `stats/src/components/overview/WatchTimeChart.tsx`, `stats/src/components/sessions/SessionDetail.tsx`, `stats/src/components/sessions/SessionRow.tsx`, `stats/src/components/trends/DateRangeSelector.tsx`, `stats/src/components/vocabulary/KanjiBreakdown.tsx`, `stats/src/components/vocabulary/VocabularyTab.tsx`, `stats/src/hooks/useVocabulary.ts`, `stats/src/lib/api-client.ts`, `stats/src/types/stats.ts`. -- Stale / obsolete against current architecture: `docs/superpowers/plans/2026-03-12-immersion-stats-page.md` path does not exist on this branch; `stats/src/components/trends/TrendsTab.tsx` / monthly-range comments describe older client-side aggregation code that is no longer present because trends now come from `getTrendsDashboard`. -- Not warranted as written: `stats/src/lib/formatters.ts` no longer emits negative `Xd ago`; current code short-circuits future timestamps to `just now`, so the reported bug condition is gone even though the suggested wording differs. -- Actionable and fixed now: `src/core/services/ipc.ts` no-tracker `statsGetOverview` fallback omitted required hint fields (`totalLookupCount`, `totalLookupHits`, `newWordsToday`, `newWordsThisWeek`). Added the missing fields in the fallback object and updated IPC tests to assert the full shape. - -Verification: -- `bun test src/core/services/ipc.test.ts` -- `bun test src/core/services/ipc.test.ts --test-name-pattern "empty stats overview shape without a tracker|validates and clamps stats request limits"` -- `bash .agents/skills/subminer-change-verification/scripts/classify_subminer_diff.sh src/core/services/ipc.ts src/core/services/ipc.test.ts` - -Repo verifier note: -- `bash .agents/skills/subminer-change-verification/scripts/verify_subminer_change.sh --lane core src/core/services/ipc.ts src/core/services/ipc.test.ts` -- That verifier run captured a temporary `bun run typecheck` failure in `src/anki-integration.test.ts` and `src/core/services/__tests__/stats-server.test.ts`, but a fresh rerun after the follow-up validation no longer reproduces those diagnostics. -- Fresh verification: `bun run typecheck` passes locally. -- artifact dir from the earlier failed verifier snapshot: `.tmp/skill-verification/subminer-verify-20260317-234027-i6QJ3n` - - -## Final Summary - - -The larger pasted PR #19 review batch was not mostly new work on the current branch. After verifying each item against the live code, almost all were already fixed or stale. One additional item was still actionable: the no-tracker fallback returned by `statsGetOverview` in `src/core/services/ipc.ts` omitted required hint fields, which made the fallback shape inconsistent with the normal overview payload. That fallback is now fixed and covered by IPC tests. - -Count-wise: the earlier open CodeRabbit service comments contributed 2 actionable fixes, and this larger pasted batch contributed 1 additional actionable fix on top of those. - diff --git a/backlog/tasks/task-192 - Fix-stale-anime-cover-art-after-AniList-reassignment.md b/backlog/tasks/task-192 - Fix-stale-anime-cover-art-after-AniList-reassignment.md index 81a5adc..3106c62 100644 --- a/backlog/tasks/task-192 - Fix-stale-anime-cover-art-after-AniList-reassignment.md +++ b/backlog/tasks/task-192 - Fix-stale-anime-cover-art-after-AniList-reassignment.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-20 00:12' -updated_date: '2026-03-20 00:14' +updated_date: '2026-03-23 03:22' labels: - stats - immersion-tracker @@ -17,6 +17,7 @@ references: - src/core/services/immersion-tracker/query.ts - src/core/services/immersion-tracker-service.test.ts priority: medium +ordinal: 127500 --- ## Description diff --git a/backlog/tasks/task-194 - Redesign-YouTube-subtitle-acquisition-around-download-first-track-selection.md b/backlog/tasks/task-194 - App-owned-YouTube-subtitle-picker-flow.md similarity index 97% rename from backlog/tasks/task-194 - Redesign-YouTube-subtitle-acquisition-around-download-first-track-selection.md rename to backlog/tasks/task-194 - App-owned-YouTube-subtitle-picker-flow.md index b42dd45..ff6d0d9 100644 --- a/backlog/tasks/task-194 - Redesign-YouTube-subtitle-acquisition-around-download-first-track-selection.md +++ b/backlog/tasks/task-194 - App-owned-YouTube-subtitle-picker-flow.md @@ -4,6 +4,7 @@ title: App-owned YouTube subtitle picker flow status: Done assignee: [] created_date: '2026-03-18 07:52' +updated_date: '2026-03-23 03:22' labels: [] dependencies: [] references: @@ -13,6 +14,7 @@ references: documentation: - /home/sudacode/projects/japanese/SubMiner/youtube.md priority: medium +ordinal: 137500 --- ## Description diff --git a/backlog/tasks/task-196 - Fix-subtitle-prefetch-cache-key-mismatch-and-active-cue-window.md b/backlog/tasks/task-196 - Fix-subtitle-prefetch-cache-key-mismatch-and-active-cue-window.md index bff32ca..19c6019 100644 --- a/backlog/tasks/task-196 - Fix-subtitle-prefetch-cache-key-mismatch-and-active-cue-window.md +++ b/backlog/tasks/task-196 - Fix-subtitle-prefetch-cache-key-mismatch-and-active-cue-window.md @@ -4,13 +4,16 @@ title: Fix subtitle prefetch cache-key mismatch and active-cue window status: Done assignee: [] created_date: '2026-03-18 16:05' +updated_date: '2026-03-23 03:22' labels: [] dependencies: [] references: - - /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-processing-controller.ts - - /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-prefetch.ts -documentation: [] + - >- + /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-processing-controller.ts + - >- + /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-prefetch.ts priority: high +ordinal: 136500 --- ## Description diff --git a/backlog/tasks/task-197 - Eliminate-per-line-plain-subtitle-flash-on-prefetch-cache-hit.md b/backlog/tasks/task-197 - Eliminate-per-line-plain-subtitle-flash-on-prefetch-cache-hit.md index 8414d1e..51a1130 100644 --- a/backlog/tasks/task-197 - Eliminate-per-line-plain-subtitle-flash-on-prefetch-cache-hit.md +++ b/backlog/tasks/task-197 - Eliminate-per-line-plain-subtitle-flash-on-prefetch-cache-hit.md @@ -4,15 +4,19 @@ title: Eliminate per-line plain subtitle flash on prefetch cache hit status: Done assignee: [] created_date: '2026-03-18 16:28' +updated_date: '2026-03-23 03:22' labels: [] dependencies: - TASK-196 references: - - /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-processing-controller.ts - - /home/sudacode/projects/japanese/SubMiner/src/main/runtime/mpv-main-event-actions.ts - - /home/sudacode/projects/japanese/SubMiner/src/main/runtime/mpv-main-event-main-deps.ts -documentation: [] + - >- + /home/sudacode/projects/japanese/SubMiner/src/core/services/subtitle-processing-controller.ts + - >- + /home/sudacode/projects/japanese/SubMiner/src/main/runtime/mpv-main-event-actions.ts + - >- + /home/sudacode/projects/japanese/SubMiner/src/main/runtime/mpv-main-event-main-deps.ts priority: high +ordinal: 135500 --- ## Description diff --git a/backlog/tasks/task-199 - Forward-launcher-log-level-into-mpv-plugin-script-opts.md b/backlog/tasks/task-199 - Forward-launcher-log-level-into-mpv-plugin-script-opts.md index c7c05ae..b42489b 100644 --- a/backlog/tasks/task-199 - Forward-launcher-log-level-into-mpv-plugin-script-opts.md +++ b/backlog/tasks/task-199 - Forward-launcher-log-level-into-mpv-plugin-script-opts.md @@ -4,6 +4,7 @@ title: Forward launcher log level into mpv plugin script opts status: Done assignee: [] created_date: '2026-03-18 21:16' +updated_date: '2026-03-23 03:22' labels: [] dependencies: - TASK-198 @@ -12,8 +13,8 @@ references: - /home/sudacode/projects/japanese/SubMiner/launcher/mpv.ts - /home/sudacode/projects/japanese/SubMiner/launcher/main.test.ts - /home/sudacode/projects/japanese/SubMiner/launcher/aniskip-metadata.test.ts -documentation: [] priority: medium +ordinal: 134500 --- ## Description diff --git a/backlog/tasks/task-200 - Address-latest-PR-19-CodeRabbit-follow-ups.md b/backlog/tasks/task-200 - Address-latest-PR-19-CodeRabbit-follow-ups.md index 17031d0..fa7dce9 100644 --- a/backlog/tasks/task-200 - Address-latest-PR-19-CodeRabbit-follow-ups.md +++ b/backlog/tasks/task-200 - Address-latest-PR-19-CodeRabbit-follow-ups.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-19 07:18' -updated_date: '2026-03-19 07:28' +updated_date: '2026-03-23 03:22' labels: - pr-review - anki-integration @@ -19,6 +19,7 @@ references: - src/anki-integration/runtime.ts - src/anki-integration/known-word-cache.ts priority: medium +ordinal: 133500 --- ## Description diff --git a/backlog/tasks/task-201 - Suppress-repeated-macOS-overlay-loading-OSD-during-fullscreen-tracker-flaps.md b/backlog/tasks/task-201 - Suppress-repeated-macOS-overlay-loading-OSD-during-fullscreen-tracker-flaps.md index 1db1c48..8700bee 100644 --- a/backlog/tasks/task-201 - Suppress-repeated-macOS-overlay-loading-OSD-during-fullscreen-tracker-flaps.md +++ b/backlog/tasks/task-201 - Suppress-repeated-macOS-overlay-loading-OSD-during-fullscreen-tracker-flaps.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-19 18:47' -updated_date: '2026-03-19 19:01' +updated_date: '2026-03-23 03:22' labels: - bug - macos @@ -20,6 +20,7 @@ references: - >- /Users/sudacode/projects/japanese/SubMiner/src/core/services/overlay-visibility.test.ts priority: high +ordinal: 131500 --- ## Description diff --git a/backlog/tasks/task-204.1 - Restore-stale-only-startup-known-word-cache-refresh.md b/backlog/tasks/task-204.1 - Restore-stale-only-startup-known-word-cache-refresh.md index be6388e..21ea213 100644 --- a/backlog/tasks/task-204.1 - Restore-stale-only-startup-known-word-cache-refresh.md +++ b/backlog/tasks/task-204.1 - Restore-stale-only-startup-known-word-cache-refresh.md @@ -5,7 +5,7 @@ status: Done assignee: - '@Codex' created_date: '2026-03-20 02:52' -updated_date: '2026-03-20 03:02' +updated_date: '2026-03-23 03:22' labels: - anki - cache @@ -17,6 +17,7 @@ references: - docs/plans/2026-03-19-known-word-cache-incremental-sync-design.md parent_task_id: TASK-204 priority: high +ordinal: 124500 --- ## Description diff --git a/backlog/tasks/task-205 - Address-PR-19-Claude-frontend-review-follow-ups.md b/backlog/tasks/task-205 - Address-PR-19-Claude-frontend-review-follow-ups.md index 77fe71e..7e5c81d 100644 --- a/backlog/tasks/task-205 - Address-PR-19-Claude-frontend-review-follow-ups.md +++ b/backlog/tasks/task-205 - Address-PR-19-Claude-frontend-review-follow-ups.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-20 02:41' -updated_date: '2026-03-20 02:46' +updated_date: '2026-03-23 03:22' labels: [] milestone: m-1 dependencies: [] @@ -14,6 +14,7 @@ references: - stats/src/hooks/useSessions.ts - stats/src/hooks/useTrends.ts priority: medium +ordinal: 126500 --- ## Description diff --git a/backlog/tasks/task-206 - Assess-latest-PR-19-CodeRabbit-review-comments.md b/backlog/tasks/task-206 - Assess-latest-PR-19-CodeRabbit-review-comments.md index 2f71157..57923a4 100644 --- a/backlog/tasks/task-206 - Assess-latest-PR-19-CodeRabbit-review-comments.md +++ b/backlog/tasks/task-206 - Assess-latest-PR-19-CodeRabbit-review-comments.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-20 02:51' -updated_date: '2026-03-20 02:59' +updated_date: '2026-03-23 03:22' labels: - pr-review - launcher @@ -22,6 +22,7 @@ references: - src/anki-integration.ts - src/anki-integration/known-word-cache.ts priority: medium +ordinal: 125500 --- ## Description diff --git a/backlog/tasks/task-207 - Verify-PR-19-follow-up-typecheck-blocker-is-cleared.md b/backlog/tasks/task-207 - Verify-PR-19-follow-up-typecheck-blocker-is-cleared.md index 0818bc4..604345c 100644 --- a/backlog/tasks/task-207 - Verify-PR-19-follow-up-typecheck-blocker-is-cleared.md +++ b/backlog/tasks/task-207 - Verify-PR-19-follow-up-typecheck-blocker-is-cleared.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-20 03:03' -updated_date: '2026-03-20 03:04' +updated_date: '2026-03-23 03:22' labels: - pr-review - anki-integration @@ -15,6 +15,7 @@ dependencies: [] references: - src/anki-integration/anki-connect-proxy.test.ts priority: medium +ordinal: 123500 --- ## Description diff --git a/backlog/tasks/task-208 - Assess-newest-PR-19-CodeRabbit-round-after-1227706.md b/backlog/tasks/task-208 - Assess-newest-PR-19-CodeRabbit-round-after-1227706.md index fc07469..9ca5b96 100644 --- a/backlog/tasks/task-208 - Assess-newest-PR-19-CodeRabbit-round-after-1227706.md +++ b/backlog/tasks/task-208 - Assess-newest-PR-19-CodeRabbit-round-after-1227706.md @@ -5,7 +5,7 @@ status: Done assignee: - '@codex' created_date: '2026-03-20 03:37' -updated_date: '2026-03-20 03:47' +updated_date: '2026-03-23 03:22' labels: - pr-review - launcher @@ -17,6 +17,7 @@ references: - launcher/mpv.ts - src/anki-integration.ts priority: medium +ordinal: 122500 --- ## Description diff --git a/backlog/tasks/task-209 - Exclude-grammar-tail-そうだ-from-subtitle-annotations.md b/backlog/tasks/task-209 - Exclude-grammar-tail-そうだ-from-subtitle-annotations.md index 6660f56..28372ad 100644 --- a/backlog/tasks/task-209 - Exclude-grammar-tail-そうだ-from-subtitle-annotations.md +++ b/backlog/tasks/task-209 - Exclude-grammar-tail-そうだ-from-subtitle-annotations.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-20 04:06' -updated_date: '2026-03-20 04:33' +updated_date: '2026-03-23 03:22' labels: - bug - tokenizer @@ -18,6 +18,7 @@ references: - >- /Users/sudacode/projects/japanese/SubMiner/src/core/services/tokenizer.test.ts priority: high +ordinal: 120500 --- ## Description diff --git a/backlog/tasks/task-210 - Show-latest-session-position-in-anime-episode-progress.md b/backlog/tasks/task-210 - Show-latest-session-position-in-anime-episode-progress.md index 376f7ec..43dfe30 100644 --- a/backlog/tasks/task-210 - Show-latest-session-position-in-anime-episode-progress.md +++ b/backlog/tasks/task-210 - Show-latest-session-position-in-anime-episode-progress.md @@ -5,7 +5,7 @@ status: Done assignee: - '@Codex' created_date: '2026-03-20 04:09' -updated_date: '2026-03-20 04:25' +updated_date: '2026-03-23 03:22' labels: - stats - bug @@ -17,6 +17,7 @@ references: - src/core/services/immersion-tracker/query.ts - src/core/services/immersion-tracker/session.ts - src/core/services/immersion-tracker-service.ts +ordinal: 121500 --- ## Description diff --git a/backlog/tasks/task-211 - Recover-anime-episode-progress-from-subtitle-timing-when-checkpoints-are-missing.md b/backlog/tasks/task-211 - Recover-anime-episode-progress-from-subtitle-timing-when-checkpoints-are-missing.md index 2e41459..a29119e 100644 --- a/backlog/tasks/task-211 - Recover-anime-episode-progress-from-subtitle-timing-when-checkpoints-are-missing.md +++ b/backlog/tasks/task-211 - Recover-anime-episode-progress-from-subtitle-timing-when-checkpoints-are-missing.md @@ -1,11 +1,13 @@ --- id: TASK-211 -title: Recover anime episode progress from subtitle timing when checkpoints are missing +title: >- + Recover anime episode progress from subtitle timing when checkpoints are + missing status: Done assignee: - '@Codex' created_date: '2026-03-20 10:15' -updated_date: '2026-03-20 10:22' +updated_date: '2026-03-23 03:22' labels: - stats - bug @@ -14,20 +16,26 @@ dependencies: [] references: - src/core/services/immersion-tracker/query.ts - src/core/services/immersion-tracker/__tests__/query.test.ts +ordinal: 119500 --- ## Description + Anime episode progress can still show `0%` for older sessions that have watch-time and subtitle timing but no persisted `ended_media_ms` checkpoint. Recover progress from the latest retained subtitle/event segment end so already-recorded sessions render a useful progress percentage. + ## Acceptance Criteria - -- [x] `getAnimeEpisodes` returns the latest known session position even when `ended_media_ms` is null but subtitle/event timing exists. -- [x] Existing ended-session metrics and aggregation totals do not regress. -- [x] Regression coverage locks the fallback behavior. + +- [x] #1 `getAnimeEpisodes` returns the latest known session position even when `ended_media_ms` is null but subtitle/event timing exists. +- [x] #2 Existing ended-session metrics and aggregation totals do not regress. +- [x] #3 Regression coverage locks the fallback behavior. + ## Implementation Notes + Added a query-side fallback for anime episode progress: when the newest session for a video has no persisted `ended_media_ms`, `getAnimeEpisodes` now uses the latest retained subtitle-line or session-event `segment_end_ms` from that same session. This recovers useful progress for already-recorded sessions that have timing data but predate or missed checkpoint persistence. Verification: `bun test src/core/services/immersion-tracker/__tests__/query.test.ts` passed. `bun run typecheck` passed. + diff --git a/backlog/tasks/task-212 - Fix-mac-texthooker-helper-startup-blocking-mpv-launch.md b/backlog/tasks/task-212 - Fix-mac-texthooker-helper-startup-blocking-mpv-launch.md index e1f88f5..cc05b45 100644 --- a/backlog/tasks/task-212 - Fix-mac-texthooker-helper-startup-blocking-mpv-launch.md +++ b/backlog/tasks/task-212 - Fix-mac-texthooker-helper-startup-blocking-mpv-launch.md @@ -1,10 +1,10 @@ --- id: TASK-212 title: Fix mac texthooker helper startup blocking mpv launch -status: In Progress +status: Done assignee: [] created_date: '2026-03-20 08:27' -updated_date: '2026-03-20 08:45' +updated_date: '2026-03-23 03:22' labels: - bug - macos @@ -15,6 +15,7 @@ references: - /Users/sudacode/projects/japanese/SubMiner/src/main.ts - /Users/sudacode/projects/japanese/SubMiner/plugin/subminer/process.lua priority: high +ordinal: 140500 --- ## Description diff --git a/backlog/tasks/task-213 - Show-character-dictionary-progress-during-paused-startup-waits.md b/backlog/tasks/task-213 - Show-character-dictionary-progress-during-paused-startup-waits.md index 1eb5c71..f3f2782 100644 --- a/backlog/tasks/task-213 - Show-character-dictionary-progress-during-paused-startup-waits.md +++ b/backlog/tasks/task-213 - Show-character-dictionary-progress-during-paused-startup-waits.md @@ -1,10 +1,10 @@ --- id: TASK-213 title: Show character dictionary progress during paused startup waits -status: In Progress +status: Done assignee: [] created_date: '2026-03-20 08:59' -updated_date: '2026-03-20 09:22' +updated_date: '2026-03-23 03:22' labels: - bug - ux @@ -18,6 +18,7 @@ references: /Users/sudacode/projects/japanese/SubMiner/src/main/runtime/character-dictionary-auto-sync-notifications.ts - /Users/sudacode/projects/japanese/SubMiner/src/main.ts priority: medium +ordinal: 141500 --- ## Description diff --git a/backlog/tasks/task-214 - Jump-subtitle-sidebar-directly-to-resume-position-on-first-resolved-cue.md b/backlog/tasks/task-214 - Jump-subtitle-sidebar-directly-to-resume-position-on-first-resolved-cue.md index b44c1af..229efe5 100644 --- a/backlog/tasks/task-214 - Jump-subtitle-sidebar-directly-to-resume-position-on-first-resolved-cue.md +++ b/backlog/tasks/task-214 - Jump-subtitle-sidebar-directly-to-resume-position-on-first-resolved-cue.md @@ -1,10 +1,10 @@ --- id: TASK-214 title: Jump subtitle sidebar directly to resume position on first resolved cue -status: In Progress +status: Done assignee: [] created_date: '2026-03-21 11:15' -updated_date: '2026-03-21 11:15' +updated_date: '2026-03-23 03:22' labels: - bug - ux @@ -12,9 +12,12 @@ labels: - subtitles dependencies: [] references: - - /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.ts - - /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.test.ts + - >- + /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.ts + - >- + /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.test.ts priority: medium +ordinal: 142500 --- ## Description diff --git a/backlog/tasks/task-215 - Add-startup-auto-open-option-for-subtitle-sidebar.md b/backlog/tasks/task-215 - Add-startup-auto-open-option-for-subtitle-sidebar.md index f3434ed..904786f 100644 --- a/backlog/tasks/task-215 - Add-startup-auto-open-option-for-subtitle-sidebar.md +++ b/backlog/tasks/task-215 - Add-startup-auto-open-option-for-subtitle-sidebar.md @@ -1,10 +1,10 @@ --- id: TASK-215 title: Add startup auto-open option for subtitle sidebar -status: In Progress +status: Done assignee: [] created_date: '2026-03-21 11:35' -updated_date: '2026-03-21 11:35' +updated_date: '2026-03-23 03:22' labels: - feature - ux @@ -13,11 +13,15 @@ labels: dependencies: [] references: - /Users/sudacode/projects/japanese/SubMiner/src/types.ts - - /Users/sudacode/projects/japanese/SubMiner/src/config/definitions/defaults-subtitle.ts - - /Users/sudacode/projects/japanese/SubMiner/src/config/resolve/subtitle-domains.ts - - /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.ts + - >- + /Users/sudacode/projects/japanese/SubMiner/src/config/definitions/defaults-subtitle.ts + - >- + /Users/sudacode/projects/japanese/SubMiner/src/config/resolve/subtitle-domains.ts + - >- + /Users/sudacode/projects/japanese/SubMiner/src/renderer/modals/subtitle-sidebar.ts - /Users/sudacode/projects/japanese/SubMiner/src/renderer/renderer.ts priority: medium +ordinal: 143500 --- ## Description diff --git a/backlog/tasks/task-217 - Fix-embedded-overlay-passthrough-sync-between-subtitle-and-sidebar.md b/backlog/tasks/task-217 - Fix-embedded-overlay-passthrough-sync-between-subtitle-and-sidebar.md index 287151c..f9ab82e 100644 --- a/backlog/tasks/task-217 - Fix-embedded-overlay-passthrough-sync-between-subtitle-and-sidebar.md +++ b/backlog/tasks/task-217 - Fix-embedded-overlay-passthrough-sync-between-subtitle-and-sidebar.md @@ -5,7 +5,7 @@ status: Done assignee: - codex created_date: '2026-03-21 23:16' -updated_date: '2026-03-21 23:28' +updated_date: '2026-03-23 03:22' labels: - bug - overlay @@ -18,6 +18,7 @@ references: documentation: - docs/workflow/verification.md priority: high +ordinal: 118500 --- ## Description diff --git a/backlog/tasks/task-218 - Delete-zero-session-media-from-stats-library-and-trends.md b/backlog/tasks/task-218 - Delete-zero-session-media-from-stats-library-and-trends.md new file mode 100644 index 0000000..80c00d0 --- /dev/null +++ b/backlog/tasks/task-218 - Delete-zero-session-media-from-stats-library-and-trends.md @@ -0,0 +1,64 @@ +--- +id: TASK-218 +title: 'Delete zero-session media from stats library and trends' +status: Done +assignee: + - codex +created_date: '2026-03-22 16:20' +updated_date: '2026-03-22 21:10' +labels: + - stats + - immersion-tracker +priority: medium +dependencies: [] +references: + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/query.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/lifetime.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/maintenance.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/__tests__/query.test.ts +--- + +## Description + + +Deleting the last retained session for a video still left stale lifetime media rows and trend rollups behind, so the stats dashboard could continue showing ghost entries in Library and Trends after all sessions were gone. + + +## Acceptance Criteria + +- [x] #1 Deleting the final session for a video removes that media from Library queries and detail reads +- [x] #2 Deleting the final session for a video removes stale daily/monthly trend rollups for that media +- [x] #3 Regression coverage proves zero-session media disappears from affected stats surfaces after deletion + + +## Implementation Plan + + +1. Add a failing regression around deleting the only retained session for a video while preexisting lifetime and rollup rows exist. +2. Patch the deletion path to rebuild lifetime and rollup state from retained sessions inside the same transaction. +3. Run focused immersion-tracker tests plus the repo-native verifier core lane and record results. + + +## Implementation Notes + + +Added a query regression that seeds a finished session plus stale lifetime media/anime rows and daily/monthly rollups, deletes that only session, and asserts Library, Anime detail, and Trends all drop the media immediately. + +Refactored lifetime rebuild logic so it can run inside an existing delete transaction, then reused that helper from `deleteSession`, `deleteSessions`, and `deleteVideo`. + +Added a rollup rebuild helper that clears existing daily/monthly rollups and reconstructs them from retained telemetry inside the current transaction so deleted sessions cannot leave ghost trend points behind. + +Verification passed: +- `bun test src/core/services/immersion-tracker/__tests__/query.test.ts` +- `bun test src/core/services/immersion-tracker-service.test.ts` +- `bash .agents/skills/subminer-change-verification/scripts/classify_subminer_diff.sh src/core/services/immersion-tracker/query.ts src/core/services/immersion-tracker/lifetime.ts src/core/services/immersion-tracker/maintenance.ts src/core/services/immersion-tracker/__tests__/query.test.ts` +- `bash .agents/skills/subminer-change-verification/scripts/verify_subminer_change.sh --lane core src/core/services/immersion-tracker/query.ts src/core/services/immersion-tracker/lifetime.ts src/core/services/immersion-tracker/maintenance.ts src/core/services/immersion-tracker/__tests__/query.test.ts` + +Verifier artifact dir: `.tmp/skill-verification/subminer-verify-20260322-210718-n6sGL8` + + +## Final Summary + + +Delete paths now rebuild lifetime summaries and trend rollups after removing sessions, so when the last session for a video disappears the stats database also drops that media from Library, related detail reads, and chart data. Added a regression proving a video with only stale lifetime/rollup rows vanishes after its final session is deleted, and verified the change with focused immersion-tracker tests plus the SubMiner core verification lane. + diff --git a/backlog/tasks/task-219 - Restore-streamed-video-progress-in-anime-episodes.md b/backlog/tasks/task-219 - Restore-streamed-video-progress-in-anime-episodes.md new file mode 100644 index 0000000..31210e6 --- /dev/null +++ b/backlog/tasks/task-219 - Restore-streamed-video-progress-in-anime-episodes.md @@ -0,0 +1,33 @@ +--- +id: TASK-219 +title: 'Restore streamed video progress in anime episodes' +status: In Progress +assignee: + - codex +created_date: '2026-03-22 21:25' +updated_date: '2026-03-22 21:25' +labels: + - stats + - immersion-tracker + - youtube +priority: medium +dependencies: [] +references: + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/query.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker-service.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker/__tests__/query.test.ts + - /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker-service.test.ts +--- + +## Description + + +Episode progress for streamed media can stay at `0%` because some remote sessions persist `ended_media_ms = 0` even when subtitle timing and watch activity clearly advanced, and the anime episode query currently treats `0` as a valid progress checkpoint. + + +## Acceptance Criteria + +- [ ] #1 Anime episode progress ignores zero-valued session checkpoints and falls back to subtitle/event timing +- [ ] #2 New streamed sessions persist meaningful progress even when playback-position updates are missing or sparse +- [ ] #3 Regression tests cover the zero-checkpoint remote-session case + diff --git a/backlog/tasks/task-220 - Restore-YouTube-overlay-mpv-keybindings-after-picker-routing.md b/backlog/tasks/task-220 - Restore-YouTube-overlay-mpv-keybindings-after-picker-routing.md new file mode 100644 index 0000000..099fcea --- /dev/null +++ b/backlog/tasks/task-220 - Restore-YouTube-overlay-mpv-keybindings-after-picker-routing.md @@ -0,0 +1,66 @@ +--- +id: TASK-220 +title: Restore YouTube overlay mpv keybindings after picker routing +status: Done +assignee: + - codex +created_date: '2026-03-22 00:00' +updated_date: '2026-03-22 23:49' +labels: + - bug + - overlay + - youtube + - keyboard +dependencies: [] +references: + - src/renderer/handlers/keyboard.ts + - src/renderer/modals/youtube-track-picker.ts + - src/renderer/handlers/keyboard.test.ts + - src/renderer/modals/youtube-track-picker.test.ts +documentation: + - docs/workflow/verification.md +priority: high +ordinal: 118800 +--- + +## Description + + +Regression: after adding the YouTube subtitle picker modal path, visible-overlay keydown handling can stop before reaching the shared mpv keybinding dispatch path. Result: default overlay mpv bindings like `Space` pause/play and `q` quit stop working while the overlay owns focus during YouTube playback. + + +## Acceptance Criteria + +- [x] #1 Unhandled keys while the YouTube track picker state is active still fall through to the shared overlay mpv keybinding dispatcher. +- [x] #2 The YouTube picker continues to consume `Enter` and `Escape` for its own actions. +- [x] #3 Renderer regression tests cover both the picker modal key contract and the shared keyboard dispatch fallback. + + +## Implementation Plan + + +1. Add a failing renderer keyboard regression test covering YouTube picker state plus shared mpv keybinding fallback. +2. Update the global keyboard handler to return early only when the YouTube picker actually handles the key event. +3. Update the picker modal handler to return false for unhandled keys while preserving `Enter`/`Escape`. +4. Run the cheap renderer verification lane and record results. + + +## Implementation Notes + + +Fixed the regression by making the global renderer keyboard handler stop early for the YouTube picker only when the picker actually consumes the key. The picker modal now returns `false` for unrelated keys, so shared overlay mpv bindings like `Space` and `KeyQ` still dispatch while the visible overlay has focus. + +Added regression coverage in the keyboard handler suite for mpv keybinding fallback during YouTube picker state, plus a picker-modal contract test that keeps `Escape` handled but leaves unrelated keys unclaimed. + +Verification: +- `bun test src/renderer/handlers/keyboard.test.ts src/renderer/modals/youtube-track-picker.test.ts` +- `bash .agents/skills/subminer-change-verification/scripts/classify_subminer_diff.sh src/renderer/handlers/keyboard.ts src/renderer/handlers/keyboard.test.ts src/renderer/modals/youtube-track-picker.ts src/renderer/modals/youtube-track-picker.test.ts` +- `bash .agents/skills/subminer-change-verification/scripts/verify_subminer_change.sh --lane core src/renderer/handlers/keyboard.ts src/renderer/handlers/keyboard.test.ts src/renderer/modals/youtube-track-picker.ts src/renderer/modals/youtube-track-picker.test.ts` +- verifier artifact: `.tmp/skill-verification/subminer-verify-20260322-234831-b2m6nJ` + + +## Final Summary + + +Restored YouTube-session overlay mpv keybindings by removing an unconditional early return added to the renderer keyboard path for the YouTube subtitle picker modal. Unhandled keys now fall through to the shared mpv keybinding dispatcher, while handled picker keys (`Enter`, `Escape`) still stay local to the picker. Added renderer regression tests for both the keyboard fallback path and the picker modal key-consumption contract. +