chore: archive completed backlog tasks and update ordinals

- Move ~35 completed tasks from backlog/tasks/ to backlog/completed/
- Add ordinal fields to remaining in-progress task files
- Mark task-255 (playlist browser modal) as Done with final notes
This commit is contained in:
2026-03-31 12:38:27 -07:00
parent d51e7fe401
commit 3502cdc607
71 changed files with 77 additions and 42 deletions

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-22 21:25' created_date: '2026-03-22 21:25'
updated_date: '2026-03-24 06:44' updated_date: '2026-03-31 19:37'
labels: labels:
- stats - stats
- immersion-tracker - immersion-tracker
@@ -21,6 +21,7 @@ references:
- >- - >-
/Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker-service.test.ts /Users/sudacode/projects/japanese/SubMiner/src/core/services/immersion-tracker-service.test.ts
priority: medium priority: medium
ordinal: 178500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-26 03:59' created_date: '2026-03-26 03:59'
updated_date: '2026-03-26 04:01' updated_date: '2026-03-31 19:37'
labels: labels:
- review-comments - review-comments
- coderabbit - coderabbit
@@ -18,6 +18,7 @@ references:
- >- - >-
/Users/sudacode/projects/japanese/SubMiner/src/main/runtime/youtube-playback-launch.ts /Users/sudacode/projects/japanese/SubMiner/src/main/runtime/youtube-playback-launch.ts
priority: medium priority: medium
ordinal: 177500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-26 04:30' created_date: '2026-03-26 04:30'
updated_date: '2026-03-26 04:31' updated_date: '2026-03-31 19:37'
labels: labels:
- review-comments - review-comments
- coderabbit - coderabbit
@@ -13,6 +13,7 @@ dependencies: []
references: references:
- /Users/sudacode/projects/japanese/SubMiner/src/main.ts - /Users/sudacode/projects/japanese/SubMiner/src/main.ts
priority: medium priority: medium
ordinal: 176500
--- ---
## Description ## Description

View File

@@ -4,7 +4,7 @@ title: Introduce domain type entrypoints and shrink src/types.ts import surface
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-26 20:49' created_date: '2026-03-26 20:49'
updated_date: '2026-03-27 00:14' updated_date: '2026-03-31 19:37'
labels: labels:
- tech-debt - tech-debt
- types - types
@@ -18,6 +18,7 @@ references:
- docs/architecture/README.md - docs/architecture/README.md
parent_task_id: TASK-238 parent_task_id: TASK-238
priority: medium priority: medium
ordinal: 174500
--- ---
## Description ## Description
@@ -27,7 +28,6 @@ priority: medium
<!-- SECTION:DESCRIPTION:END --> <!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [x] #1 Domain-focused type modules exist for the main clusters currently mixed together in `src/types.ts` (for example Anki, config/runtime, subtitle/media, and integration/runtime-option types). - [x] #1 Domain-focused type modules exist for the main clusters currently mixed together in `src/types.ts` (for example Anki, config/runtime, subtitle/media, and integration/runtime-option types).
- [x] #2 `src/types.ts` becomes a thinner compatibility layer or barrel instead of the sole source of truth for every shared type. - [x] #2 `src/types.ts` becomes a thinner compatibility layer or barrel instead of the sole source of truth for every shared type.

View File

@@ -1,10 +1,10 @@
--- ---
id: TASK-238.4 id: TASK-238.4
title: Decompose character dictionary runtime into fetch, build, and cache modules title: 'Decompose character dictionary runtime into fetch, build, and cache modules'
status: Done status: Done
updated_date: '2026-03-27 00:20'
assignee: [] assignee: []
created_date: '2026-03-26 20:49' created_date: '2026-03-26 20:49'
updated_date: '2026-03-31 19:37'
labels: labels:
- tech-debt - tech-debt
- runtime - runtime
@@ -19,6 +19,7 @@ references:
- docs/architecture/README.md - docs/architecture/README.md
parent_task_id: TASK-238 parent_task_id: TASK-238
priority: medium priority: medium
ordinal: 173500
--- ---
## Description ## Description
@@ -28,7 +29,6 @@ priority: medium
<!-- SECTION:DESCRIPTION:END --> <!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [x] #1 AniList fetch/parsing logic, dictionary-entry building, and snapshot/cache/zip persistence no longer live in one giant file. - [x] #1 AniList fetch/parsing logic, dictionary-entry building, and snapshot/cache/zip persistence no longer live in one giant file.
- [x] #2 The public runtime API stays behavior-compatible for current callers. - [x] #2 The public runtime API stays behavior-compatible for current callers.

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-26 20:49' created_date: '2026-03-26 20:49'
updated_date: '2026-03-27 00:00' updated_date: '2026-03-31 19:37'
labels: labels:
- tech-debt - tech-debt
- stats - stats
@@ -20,6 +20,7 @@ references:
- src/core/services/immersion-tracker-service.ts - src/core/services/immersion-tracker-service.ts
parent_task_id: TASK-238 parent_task_id: TASK-238
priority: medium priority: medium
ordinal: 175500
--- ---
## Description ## Description
@@ -29,7 +30,6 @@ priority: medium
<!-- SECTION:DESCRIPTION:END --> <!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [x] #1 Query responsibilities are grouped into focused modules such as library/session detail, vocabulary/kanji detail, and maintenance/cleanup helpers. - [x] #1 Query responsibilities are grouped into focused modules such as library/session detail, vocabulary/kanji detail, and maintenance/cleanup helpers.
- [x] #2 The stats server and immersion tracker service depend on stable exported query surfaces instead of one monolithic file. - [x] #2 The stats server and immersion tracker service depend on stable exported query surfaces instead of one monolithic file.

View File

@@ -4,7 +4,7 @@ title: Extract remaining inline runtime logic and composer gaps from src/main.ts
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-27 00:00' created_date: '2026-03-27 00:00'
updated_date: '2026-03-27 22:13' updated_date: '2026-03-31 19:37'
labels: labels:
- tech-debt - tech-debt
- runtime - runtime
@@ -24,6 +24,7 @@ references:
- src/main/runtime/composers - src/main/runtime/composers
parent_task_id: TASK-238 parent_task_id: TASK-238
priority: high priority: high
ordinal: 172500
--- ---
## Description ## Description
@@ -33,7 +34,6 @@ priority: high
<!-- SECTION:DESCRIPTION:END --> <!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [x] #1 `runYoutubePlaybackFlow`, `maybeSignalPluginAutoplayReady`, `refreshSubtitlePrefetchFromActiveTrack`, `publishDiscordPresence`, and `handleModalInputStateChange` no longer live as substantial inline logic in `src/main.ts`. - [x] #1 `runYoutubePlaybackFlow`, `maybeSignalPluginAutoplayReady`, `refreshSubtitlePrefetchFromActiveTrack`, `publishDiscordPresence`, and `handleModalInputStateChange` no longer live as substantial inline logic in `src/main.ts`.
- [x] #2 The large subtitle/prefetch, stats startup, and overlay visibility dependency groupings are wrapped behind named composer helpers instead of remaining inline in `src/main.ts`. - [x] #2 The large subtitle/prefetch, stats startup, and overlay visibility dependency groupings are wrapped behind named composer helpers instead of remaining inline in `src/main.ts`.

View File

@@ -1,10 +1,10 @@
--- ---
id: TASK-238.7 id: TASK-238.7
title: Split src/main.ts into boot-phase services, runtimes, and handlers title: 'Split src/main.ts into boot-phase services, runtimes, and handlers'
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-27 00:00' created_date: '2026-03-27 00:00'
updated_date: '2026-03-27 22:45' updated_date: '2026-03-31 19:37'
labels: labels:
- tech-debt - tech-debt
- runtime - runtime
@@ -21,6 +21,7 @@ references:
- src/main/runtime/composers - src/main/runtime/composers
parent_task_id: TASK-238 parent_task_id: TASK-238
priority: high priority: high
ordinal: 171500
--- ---
## Description ## Description
@@ -30,7 +31,6 @@ After the remaining inline runtime logic and composer gaps are extracted, `src/m
<!-- SECTION:DESCRIPTION:END --> <!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [x] #1 Service instantiation lives in a dedicated boot module instead of a large inline setup block in `src/main.ts`. - [x] #1 Service instantiation lives in a dedicated boot module instead of a large inline setup block in `src/main.ts`.
- [x] #2 Domain runtime composition lives in a dedicated boot module, separate from lifecycle and handler dispatch. - [x] #2 Domain runtime composition lives in a dedicated boot module, separate from lifecycle and handler dispatch.

View File

@@ -4,7 +4,7 @@ title: Fix stats server Bun fallback in coverage lane
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 07:31' created_date: '2026-03-29 07:31'
updated_date: '2026-03-29 07:37' updated_date: '2026-03-31 19:37'
labels: labels:
- ci - ci
- bug - bug
@@ -13,6 +13,7 @@ dependencies: []
references: references:
- 'PR #36' - 'PR #36'
priority: high priority: high
ordinal: 170500
--- ---
## Description ## Description

View File

@@ -4,13 +4,14 @@ title: Migrate Discord Rich Presence to maintained RPC wrapper
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 08:17' created_date: '2026-03-29 08:17'
updated_date: '2026-03-29 08:22' updated_date: '2026-03-31 19:37'
labels: labels:
- dependency - dependency
- discord - discord
- presence - presence
dependencies: [] dependencies: []
priority: medium priority: medium
ordinal: 169500
--- ---
## Description ## Description

View File

@@ -5,13 +5,14 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-29 10:01' created_date: '2026-03-29 10:01'
updated_date: '2026-03-29 10:10' updated_date: '2026-03-31 19:37'
labels: [] labels: []
dependencies: [] dependencies: []
references: references:
- src/core/services/subtitle-cue-parser.ts - src/core/services/subtitle-cue-parser.ts
- src/renderer/modals/subtitle-sidebar.ts - src/renderer/modals/subtitle-sidebar.ts
- src/core/services/subtitle-cue-parser.test.ts - src/core/services/subtitle-cue-parser.test.ts
ordinal: 168500
--- ---
## Description ## Description

View File

@@ -4,7 +4,7 @@ title: Fix macOS visible overlay toggle getting immediately restored
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 10:03' created_date: '2026-03-29 10:03'
updated_date: '2026-03-29 22:14' updated_date: '2026-03-31 19:37'
labels: [] labels: []
dependencies: [] dependencies: []
references: references:
@@ -13,6 +13,7 @@ references:
- /Users/sudacode/projects/japanese/SubMiner/src/core/services/cli-command.ts - /Users/sudacode/projects/japanese/SubMiner/src/core/services/cli-command.ts
- >- - >-
/Users/sudacode/projects/japanese/SubMiner/src/main/overlay-visibility-runtime.ts /Users/sudacode/projects/japanese/SubMiner/src/main/overlay-visibility-runtime.ts
ordinal: 165500
--- ---
## Description ## Description

View File

@@ -4,7 +4,7 @@ title: Fix AniList token persistence on setup login
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 10:08' created_date: '2026-03-29 10:08'
updated_date: '2026-03-29 19:42' updated_date: '2026-03-31 19:37'
labels: labels:
- anilist - anilist
- bug - bug
@@ -15,6 +15,7 @@ documentation:
- src/main/runtime/anilist-token-refresh.ts - src/main/runtime/anilist-token-refresh.ts
- docs-site/anilist-integration.md - docs-site/anilist-integration.md
priority: high priority: high
ordinal: 166500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- '@codex' - '@codex'
created_date: '2026-03-29 10:10' created_date: '2026-03-29 10:10'
updated_date: '2026-03-29 10:23' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- macos - macos
@@ -24,6 +24,7 @@ references:
- >- - >-
/Users/sudacode/projects/japanese/SubMiner/src/renderer/overlay-mouse-ignore.test.ts /Users/sudacode/projects/japanese/SubMiner/src/renderer/overlay-mouse-ignore.test.ts
priority: high priority: high
ordinal: 167500
--- ---
## Description ## Description

View File

@@ -4,11 +4,12 @@ title: 'Docs: add subtitle sidebar and Jimaku integration pages'
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 22:36' created_date: '2026-03-29 22:36'
updated_date: '2026-03-29 22:38' updated_date: '2026-03-31 19:37'
labels: labels:
- docs - docs
dependencies: [] dependencies: []
priority: medium priority: medium
ordinal: 164500
--- ---
## Description ## Description

View File

@@ -4,13 +4,14 @@ title: Harden AUR publish release step against transient SSH failures
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-29 23:46' created_date: '2026-03-29 23:46'
updated_date: '2026-03-29 23:49' updated_date: '2026-03-31 19:37'
labels: labels:
- release - release
- ci - ci
- aur - aur
dependencies: [] dependencies: []
priority: high priority: high
ordinal: 163500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-30 01:59' created_date: '2026-03-30 01:59'
updated_date: '2026-03-30 02:03' updated_date: '2026-03-31 19:37'
labels: [] labels: []
dependencies: [] dependencies: []
references: references:
@@ -14,6 +14,7 @@ references:
- /Users/sudacode/projects/japanese/SubMiner/src/anki-integration.ts - /Users/sudacode/projects/japanese/SubMiner/src/anki-integration.ts
- /Users/sudacode/projects/japanese/SubMiner/src/core/services/stats-server.ts - /Users/sudacode/projects/japanese/SubMiner/src/core/services/stats-server.ts
- /Users/sudacode/projects/japanese/SubMiner/src/media-generator.ts - /Users/sudacode/projects/japanese/SubMiner/src/media-generator.ts
ordinal: 162500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-30 02:10' created_date: '2026-03-30 02:10'
updated_date: '2026-03-30 02:20' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- anilist - anilist
@@ -17,6 +17,7 @@ references:
- >- - >-
/Users/sudacode/projects/japanese/SubMiner/src/main/runtime/anilist-token-refresh.ts /Users/sudacode/projects/japanese/SubMiner/src/main/runtime/anilist-token-refresh.ts
priority: high priority: high
ordinal: 161500
--- ---
## Description ## Description

View File

@@ -1,17 +1,18 @@
--- ---
id: TASK-255 id: TASK-255
title: Add overlay playlist browser modal for sibling video files and mpv queue title: Add overlay playlist browser modal for sibling video files and mpv queue
status: In Progress status: Done
assignee: assignee:
- '@codex' - '@codex'
created_date: '2026-03-30 05:46' created_date: '2026-03-30 05:46'
updated_date: '2026-03-31 05:59' updated_date: '2026-03-31 19:37'
labels: labels:
- feature - feature
- overlay - overlay
- mpv - mpv
- launcher - launcher
dependencies: [] dependencies: []
ordinal: 180500
--- ---
## Description ## Description
@@ -22,10 +23,10 @@ Add an in-session overlay modal that opens from a keybinding during active playb
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [ ] #1 An overlay modal can be opened during active playback from a dedicated keybinding and closed without disrupting existing modal behavior. - [x] #1 An overlay modal can be opened during active playback from a dedicated keybinding and closed without disrupting existing modal behavior.
- [ ] #2 The modal shows video files from the current media file's parent directory in best-effort episode order and highlights the current file when present. - [x] #2 The modal shows video files from the current media file's parent directory in best-effort episode order and highlights the current file when present.
- [ ] #3 The modal shows the active mpv playlist/queue with enough metadata to identify the current item and queued order. - [x] #3 The modal shows the active mpv playlist/queue with enough metadata to identify the current item and queued order.
- [ ] #4 The user can add a directory file to the mpv playlist, remove playlist items, and reorder playlist items from the modal using both mouse and keyboard interactions. - [x] #4 The user can add a directory file to the mpv playlist, remove playlist items, and reorder playlist items from the modal using both mouse and keyboard interactions.
- [x] #5 Modal state stays in sync after playlist mutations so the rendered queue reflects mpv's current playlist order. - [x] #5 Modal state stays in sync after playlist mutations so the rendered queue reflects mpv's current playlist order.
- [x] #6 Feature coverage includes automated tests for ordering/playlist behavior and docs or shortcut/help updates for the new modal. - [x] #6 Feature coverage includes automated tests for ordering/playlist behavior and docs or shortcut/help updates for the new modal.
<!-- AC:END --> <!-- AC:END -->
@@ -84,4 +85,8 @@ Split playlist-browser UI row rendering into `src/renderer/modals/playlist-brows
2026-03-30 latest CodeRabbit remediation on PR #37: switched nowMs() numeric test-clock branch from Math.floor() to Math.trunc() so numeric and string-backed mock clocks agree for negative fractional values. Refactored playlist-browser modal tests onto a shared setup/teardown fixture that restores global window/document descriptors correctly, and added regression coverage that injected globals are deleted when originally absent. Verification: `bun test src/core/services/immersion-tracker/time.test.ts src/renderer/modals/playlist-browser.test.ts`, `bun run typecheck`. 2026-03-30 latest CodeRabbit remediation on PR #37: switched nowMs() numeric test-clock branch from Math.floor() to Math.trunc() so numeric and string-backed mock clocks agree for negative fractional values. Refactored playlist-browser modal tests onto a shared setup/teardown fixture that restores global window/document descriptors correctly, and added regression coverage that injected globals are deleted when originally absent. Verification: `bun test src/core/services/immersion-tracker/time.test.ts src/renderer/modals/playlist-browser.test.ts`, `bun run typecheck`.
2026-03-30 CodeRabbit follow-up: wrapped the injected-globals cleanup regression in try/finally so restore always runs, and changed the keydown test append mock to return createMutationSnapshot() before exercising Ctrl+ArrowDown. Verified with `bun test src/renderer/modals/playlist-browser.test.ts` and `bun run typecheck`. 2026-03-30 CodeRabbit follow-up: wrapped the injected-globals cleanup regression in try/finally so restore always runs, and changed the keydown test append mock to return createMutationSnapshot() before exercising Ctrl+ArrowDown. Verified with `bun test src/renderer/modals/playlist-browser.test.ts` and `bun run typecheck`.
2026-03-31 assessment: the playlist-browser feature is landed on `main` via `d51e7fe4 Add playlist browser overlay modal (#37)` with runtime, IPC, renderer, keybinding, and changelog/docs coverage present. Verified passes: `bun test src/main/runtime/playlist-browser-runtime.test.ts src/main/runtime/playlist-browser-open.test.ts src/main/runtime/playlist-browser-sort.test.ts src/renderer/handlers/keyboard.test.ts src/core/services/ipc.test.ts src/core/services/ipc-command.test.ts src/config/definitions/domain-registry.test.ts`.
Remaining action item before close: fix `src/renderer/modals/playlist-browser.test.ts` so the cleanup regression does not assume `globalThis.window` / `globalThis.document` start absent under Bun, rerun the playlist-browser modal lane (and then typecheck/build if you want the full closeout proof), then finalize the task.
<!-- SECTION:NOTES:END --> <!-- SECTION:NOTES:END -->

View File

@@ -5,13 +5,14 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-30 06:04' created_date: '2026-03-30 06:04'
updated_date: '2026-03-30 06:12' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- texthooker - texthooker
- websocket - websocket
dependencies: [] dependencies: []
priority: medium priority: medium
ordinal: 160500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-30 06:15' created_date: '2026-03-30 06:15'
updated_date: '2026-03-30 06:17' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- texthooker - texthooker
@@ -13,6 +13,7 @@ labels:
- startup - startup
dependencies: [] dependencies: []
priority: high priority: high
ordinal: 159500
--- ---
## Description ## Description

View File

@@ -5,7 +5,7 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-30 06:25' created_date: '2026-03-30 06:25'
updated_date: '2026-03-30 06:26' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- texthooker - texthooker
@@ -14,6 +14,7 @@ labels:
- startup - startup
dependencies: [] dependencies: []
priority: high priority: high
ordinal: 158500
--- ---
## Description ## Description

View File

@@ -4,13 +4,14 @@ title: Fix integrated --start --texthooker startup skipping texthooker server
status: Done status: Done
assignee: [] assignee: []
created_date: '2026-03-30 06:48' created_date: '2026-03-30 06:48'
updated_date: '2026-03-30 06:56' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- texthooker - texthooker
- startup - startup
dependencies: [] dependencies: []
priority: high priority: high
ordinal: 157500
--- ---
## Description ## Description

View File

@@ -7,7 +7,7 @@ status: Done
assignee: assignee:
- '@codex' - '@codex'
created_date: '2026-03-31 00:58' created_date: '2026-03-31 00:58'
updated_date: '2026-03-31 01:01' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- macos - macos
@@ -27,6 +27,7 @@ references:
documentation: documentation:
- docs/workflow/verification.md - docs/workflow/verification.md
priority: high priority: high
ordinal: 156500
--- ---
## Description ## Description

View File

@@ -1,9 +1,10 @@
--- ---
id: TASK-261 id: TASK-261
title: Fix immersion tracker SQLite timestamp truncation title: Fix immersion tracker SQLite timestamp truncation
status: In Progress status: Done
assignee: [] assignee: []
created_date: '2026-03-31 01:45' created_date: '2026-03-31 01:45'
updated_date: '2026-03-31 19:37'
labels: labels:
- immersion-tracker - immersion-tracker
- sqlite - sqlite
@@ -12,7 +13,7 @@ dependencies: []
references: references:
- src/core/services/immersion-tracker - src/core/services/immersion-tracker
priority: medium priority: medium
ordinal: 1200 ordinal: 179500
--- ---
## Description ## Description
@@ -23,7 +24,17 @@ Current-epoch millisecond values are being truncated by the libsql driver when b
## Acceptance Criteria ## Acceptance Criteria
<!-- AC:BEGIN --> <!-- AC:BEGIN -->
- [ ] #1 Current-epoch millisecond timestamps persist correctly in session, telemetry, lifetime, and rollup tables - [x] #1 Current-epoch millisecond timestamps persist correctly in session, telemetry, lifetime, and rollup tables
- [ ] #2 Startup backfill and destroy/finalize flows keep retained sessions and lifetime summaries consistent - [x] #2 Startup backfill and destroy/finalize flows keep retained sessions and lifetime summaries consistent
- [ ] #3 Regression tests cover the destroyed-session, startup backfill, and distinct-day/distinct-video lifetime semantics - [x] #3 Regression tests cover the destroyed-session, startup backfill, and distinct-day/distinct-video lifetime semantics
<!-- AC:END --> <!-- AC:END -->
## Implementation Notes
<!-- SECTION:NOTES:BEGIN -->
2026-03-31 assessment: epoch-ms timestamp writes now route through `toDbMs()` / `toDbTimestamp()` in `src/core/services/immersion-tracker/query-shared.ts`, which avoids libsql numeric-parameter truncation by binding BigInt/string values before they hit SQLite. The fix is wired through the session, storage/telemetry, lifetime, and rollup-maintenance paths in `src/core/services/immersion-tracker/session.ts`, `src/core/services/immersion-tracker/storage.ts`, `src/core/services/immersion-tracker/lifetime.ts`, and `src/core/services/immersion-tracker/maintenance.ts`.
Acceptance coverage is present: `bun test src/core/services/immersion-tracker-service.test.ts` passed with explicit regressions for destroy/finalize persistence, startup backfill when retained sessions exist but lifetime tables are empty, startup reconciliation of stale active sessions, `rebuildLifetimeSummaries`, and distinct-day / distinct-video lifetime semantics. `bun test src/core/services/immersion-tracker/time.test.ts src/core/services/immersion-tracker/maintenance.test.ts` also passed.
Remaining action item before close: fix the two `src/main/runtime/stats-cli-command.test.ts` cleanup-lifetime assertions that currently use Bun-misparsed underscored millisecond literals (`1_710_000_000_000` evaluates to `-2147483648` under Bun 1.3.11), rerun that verification lane, then write the final summary and mark the task Done.
<!-- SECTION:NOTES:END -->

View File

@@ -5,11 +5,12 @@ status: Done
assignee: assignee:
- codex - codex
created_date: '2026-03-31 19:03' created_date: '2026-03-31 19:03'
updated_date: '2026-03-31 19:05' updated_date: '2026-03-31 19:37'
labels: labels:
- bug - bug
- anilist - anilist
dependencies: [] dependencies: []
ordinal: 155500
--- ---
## Description ## Description