sudacode
e816b3b371
fix(subtitles): recover positioned ASS word spacing and drop control debris ( #217 )
2026-08-25 02:22:21 -07:00
sudacode
03ea903927
fix(subtitles): preserve authored spaces in fragmented ASS karaoke
...
- Only trim indentation before slicing ASS event fields so a trailing authored space at a fragment's end is kept, preventing words from being joined together when fragmented karaoke lines are reconstructed
- Add regression test covering event-boundary word spacing
2026-08-22 23:32:35 -07:00
sudacode
88bb3edfa4
fix(subtitles): preserve lyric selection and deduplicate secondary text
...
- Seek sidebar selections past overlapping karaoke exit spans
- Collapse duplicate long ASS lines and omit reconstructed sign grids
2026-08-21 01:28:00 -07:00
sudacode
9445aef004
fix(subtitles): navigate by sanitized cues across ASS animation
...
- Route subtitle navigation through parsed cue boundaries
- Treat explicit short seeks as subtitle priming events
2026-08-20 00:20:51 -07:00
sudacode
c01bcd9d0f
fix(subtitles): collapse layered ASS lyrics across startup and seeks
...
- Reconstruct fragment-only karaoke while preserving canonical animated signs
- Reprocess live subtitles after initial playback and seek updates
- Add a development launcher for playable media files
2026-08-19 22:55:10 -07:00
sudacode
4ed878270f
fix(stats): accept legacy lexical rollup state schemas
2026-08-18 02:24:49 -07:00
sudacode
db61ce358d
fix(stats): preserve session rollups across schema upgrades
...
- Stop deleting imm_daily_rollups/imm_monthly_rollups on unrelated schema version bumps; their source session/telemetry rows may already be pruned, so deleted buckets could not be rebuilt
- Run startup session-rollup maintenance before the lexical rollup backfill takes the write lock, so recovery no longer races playback writes
- Update the vocabulary summary totals changelog fragment to reflect that watch-time, activity, efficiency, and library charts are no longer cleared during rebuilds
2026-08-18 01:12:58 -07:00
sudacode
e9778a945a
fix(overlay): deduplicate secondary subtitle rendering ( #208 )
2026-08-18 00:44:02 -07:00
sudacode
7de73e16a1
fix(stats): report complete vocabulary totals and new-word history ( #202 )
2026-08-18 00:42:46 -07:00
sudacode
273652f781
fix(subtitles): recover canonical lines from ASS animation ( #207 )
2026-08-18 00:30:48 -07:00
sudacode
ff0bc0af6d
fix(dictionary): prevent freezes and restore AppImage notifications ( #205 )
2026-08-17 18:41:03 -07:00
sudacode
00b1b79bf4
fix(mpv): recover from stalled IPC connects ( #204 )
2026-08-16 22:58:28 -07:00
sudacode
2938e7a32a
fix(overlay): prevent Windows mouse lag during click-through tracking ( #201 )
2026-08-16 01:34:51 -07:00
sudacode
a02c33dac4
fix(overlay): keep macOS modal windows on fullscreen Spaces ( #200 )
2026-08-15 21:43:26 -07:00
sudacode
2174e689a2
fix(overlay): support native Wayland file drag-and-drop ( #199 )
2026-08-15 00:15:38 -07:00
sudacode
7d729cb60c
fix(notifications): replace Linux progress updates in place ( #198 )
2026-08-14 22:20:33 -07:00
sudacode
d963def1a9
fix(stats): subtract lifetime totals incrementally on delete ( #196 )
2026-08-14 22:13:59 -07:00
sudacode
6fb3d2eb13
feat(stats): add library entry merge and episode move ( #190 )
2026-08-14 21:54:17 -07:00
sudacode
c5a77ac067
fix(anki): snapshot mining media clip timing ( #197 )
2026-08-14 21:50:32 -07:00
sudacode
b98d4d65c7
fix(stats): stop counting duplicate typeset subtitle lines ( #191 )
2026-08-14 00:12:56 -07:00
sudacode
bf85554d1e
fix(stats): batch deletes off the main thread ( #194 )
2026-08-13 22:31:52 -07:00
sudacode
57ddd19953
fix(overlay): handle X11 display scaling across monitors ( #193 )
2026-08-11 22:24:01 -07:00
sudacode
ee25536d90
fix(dictionary): stop large character dictionaries from timing out ( #189 )
2026-08-11 18:40:18 -07:00
sudacode
7b0fbdf254
fix(subtitles): collapse duplicate ASS events and decode text once ( #186 )
2026-08-10 22:21:44 -07:00
sudacode
dbdf578c68
perf(tokenizer): single-pass Yomitan scan with cross-line caching and prefetch fixes ( #185 )
2026-08-06 21:44:09 -07:00
sudacode
441ecf3c04
feat(overlay): add in-app changelog modal ( #187 )
2026-08-05 22:19:13 -07:00
sudacode
fe4dacc1e7
fix(overlay): show plain subtitle line immediately on tokenization cache miss ( #184 )
2026-08-04 01:55:52 -07:00
sudacode
b08cd0db35
fix(streaming): keep subtitle tokenization prefetch warm for full episodes ( #183 )
2026-08-03 21:22:18 -07:00
sudacode
bffb1c5982
fix(logging): surface subtitle processing debug/warn logs ( #182 )
2026-08-03 20:44:39 -07:00
sudacode
5b8848518a
feat(subsync): add reference and target subtitle track picker ( #181 )
2026-08-03 01:00:14 -07:00
sudacode
4d65dec340
fix(youtube): prevent playlist URLs from stalling yt-dlp probes ( #180 )
2026-08-01 22:56:28 -07:00
sudacode
b204d4dd6e
feat(anki): add configurable word card type for Kiku/Lapis ( #175 )
2026-07-31 17:17:29 -07:00
sudacode
6d2a72e13b
feat(stats): add library entry deletion and app-wide delete progress ( #174 )
2026-07-29 02:00:16 -07:00
sudacode
0d7084c8aa
fix(anilist): resolve later seasons via sequel relations, not title guessing ( #173 )
2026-07-28 22:56:26 -07:00
sudacode
95e0abc7b7
test(immersion): apply runtime SQLite pragmas in query tests
...
The query test suite opened each temp database with SQLite's defaults
(rollback journal, synchronous=FULL) while the runtime opens them via
applyPragmas (WAL, synchronous=NORMAL). Every statement therefore ran as
its own fsync-ing transaction.
That is unnoticeable on a fast local disk but dominates on CI: the file
took 40.6s there versus 0.5s locally, and the 106-insert case
'getVocabularyStats pages past hidden rows' crossed the 5s per-test
timeout and failed the quality gate.
Open test databases through a helper that applies the same pragmas as
production, so the tests exercise the runtime's actual SQLite
configuration instead of a slower one.
2026-07-28 02:23:16 -07:00
sudacode
987b325edb
Anki maturity-based known-word highlighting ( #172 )
2026-07-27 23:58:02 -07:00
sudacode
deae61b211
refactor: split anki-connect and stats-server resolvers into modules ( #169 )
2026-07-17 23:05:59 -07:00
sudacode
2398f5c030
refactor(main): eliminate local pass-through wrappers in main.ts ( #168 )
2026-07-15 03:22:03 -07:00
sudacode
2e2ee3f028
refactor(tsukihime): swap Animetosho backend for TsukiHime API ( #165 )
2026-07-13 22:03:35 -07:00
sudacode
49b926e08c
Sync Stats & History window, headless --sync-cli, and Windows remote support ( #160 )
2026-07-13 18:56:51 -07:00
sudacode
6fe1e0fee4
refactor(stats): drop dead IPC handlers, unify stats types over HTTP ( #164 )
2026-07-13 12:09:56 -07:00
sudacode
0ab840b362
refactor(tokenizer): extract subtitle annotation filter into rule table ( #162 )
2026-07-12 23:54:13 -07:00
sudacode
21a06c12fb
refactor(tokenizer): consolidate kana/POS helpers into token-classification ( #161 )
2026-07-12 23:27:25 -07:00
sudacode
4b7f750919
feat(animetosho): add English/Japanese subtitle download integration ( #159 )
2026-07-12 00:48:12 -07:00
sudacode
6ab3d823a4
feat(shortcuts): make clipboard-video-append shortcut configurable ( #158 )
2026-07-11 23:36:44 -07:00
sudacode
8acc78cc1c
test(tokenizer): add golden-file regression corpus with 11 fixtures ( #157 )
2026-07-11 00:50:03 -07:00
sudacode
8712780d08
fix(tokenizer): keep frequency rank for lexicalized kana expressions ( #156 )
2026-07-10 00:54:17 -07:00
sudacode
7b1a005a65
feat(anki): mirror mpv software volume into generated sentence audio ( #155 )
2026-07-10 00:44:23 -07:00
sudacode
db4139ba0b
fix(tokenizer): block kanji reading collisions and name/generic length t
...
- Add allowReadingOnlyMatch:false to kanji token known-word lookups so 渓谷/けいこく no longer matches a mined 警告/けいこく card via reading-only index
- Greedy name pre-pass yields when a strictly longer generic word starts at the same position (空 no longer splits 空気; ties still go to the name)
2026-07-09 01:03:58 -07:00
sudacode
6c251502b3
fix(tokenizer): exclude unparsed-run tokens from annotations and N+1 ( #153 )
2026-07-09 00:28:38 -07:00