diff --git a/CHANGELOG.md b/CHANGELOG.md index 50b8127..b56d34d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,72 @@ # Changelog +## v0.7.0 (2026-03-19) + +### Added +- Immersion: Added Mine Word, Mine Sentence, and Mine Audio buttons to word detail example lines in the stats dashboard. +- Immersion: Mine Word creates a full Yomitan card (definition, reading, pitch accent) via the hidden search page bridge, then enriches with sentence audio, screenshot, and metadata extracted from the source video. +- Immersion: Mine Sentence and Mine Audio create cards directly with appropriate Lapis/Kiku flags, sentence highlighting, and media from the source file. +- Immersion: Media generation (audio + image/AVIF) runs in parallel and respects all AnkiConnect config options. +- Immersion: Added word exclusion list to the Vocabulary tab with localStorage persistence and a management modal. +- Immersion: Fixed truncated readings in the frequency rank table (e.g. お前 now shows おまえ instead of まえ). +- Immersion: Clicking a bar in the Top Repeated Words chart now opens the word detail panel. +- Immersion: Secondary subtitle text is now stored alongside primary subtitle lines for use as translation when mining cards from the stats page. +- Stats: Added `subminer stats -b` to start or reuse a dedicated background stats server without blocking normal SubMiner instances. +- Stats: Added `subminer stats -s` to stop the dedicated background stats server without closing browser tabs. +- Stats: Stats server startup now reuses a running background stats daemon instead of trying to bind a second local server in another SubMiner instance. +- Launcher: Added launcher passthrough for `-a/--args` so mpv receives raw extra launch flags (`--fs`, `--ytdl-format`, custom audio/video settings, etc.) from the `subminer` command. +- Launcher: Added `subminer stats` to launch the local stats dashboard, force-start the stats server on demand, and open the dashboard in your browser. +- Launcher: Added `subminer stats cleanup` to backfill vocabulary metadata and prune stale or excluded immersion rows on demand. +- Launcher: Added `stats.autoOpenBrowser` so browser launch after `subminer stats` can be enabled or disabled explicitly. +- Immersion: Added a local stats dashboard for immersion tracking with Overview, Anime, Trends, Vocabulary, and Sessions views. +- Immersion: Added anime progress, episode completion, Anki card links, and occurrence drill-down across the stats dashboard. +- Immersion: Added richer session timelines with new-word activity, cumulative totals, and pause/seek/card event markers. +- Immersion: Added completed-episodes and completed-anime totals to the Overview tracking snapshot. + +### Changed +- Anki: Changed known-word cache settings to live under `ankiConnect.knownWords` instead of mixing them into `ankiConnect.nPlusOne`. +- Anki: Kept legacy `ankiConnect.nPlusOne` known-word keys and older `ankiConnect.behavior.nPlusOne*` keys as deprecated compatibility fallbacks. +- Stats: Added session deletion to the Sessions tab with the same confirmation prompt used by anime episode/session deletes, and removed all associated session rows from the stats database. +- Immersion: Kept immersion tracking history by default while preserving daily/monthly rollup maintenance. +- Immersion: Added exact lifetime summary reads for overview/anime/media stats so dashboard totals no longer depend on rescanning raw telemetry. +- Immersion: Reduced tracker storage overhead by removing duplicated subtitle text from subtitle-line event payloads. +- Immersion: Deduplicated episode cover-art blobs through a shared blob store and updated cover-art reads/writes to resolve shared images correctly. +- Immersion: Added indexes for large-history session, telemetry, vocabulary, kanji, and cover-art queries to keep dashboard reads fast as the SQLite database grows. +- Immersion: Renamed the stats dashboard's Anime tab to Library so the media browser label matches non-anime sources like YouTube and other yt-dlp-backed content. +- Anilist: Standardized episode completion threshold by introducing `DEFAULT_MIN_WATCH_RATIO` and using it for both local watched state transitions and AniList post-watch progress updates. +- Anilist: Episode auto-marking now uses the same threshold as AniList (`85%`), removing divergent completion behavior. +- Overlay: Excluded interjections and sound-effect tokens from subtitle annotation styling so they no longer inherit misleading lexical highlight treatment while still remaining visible and hoverable as plain subtitle tokens. +- Overlay: Expanded subtitle annotation noise filtering to also strip annotation metadata from standalone grammar-only helper tokens such as particles, auxiliaries, adnominals, common explanatory endings like `んです` / `のだ`, and merged trailing quote-particle forms like `...って` while keeping them tokenized for hover lookup. + +### Fixed +- Launcher: Fixed mpv Lua plugin binary auto-detection on Linux to also search `/usr/bin/subminer` and `/usr/local/bin/subminer` (lowercase), matching the conventional Unix wrapper name used by packaged installs such as the AUR package. +- Stats: Fixed the in-app stats overlay so it connects to the configured `stats.serverPort` instead of falling back to the default port. +- Overlay: Fixed subtitle frequency tagging for merged lookup-backed tokens like `陰に` by falling back to exact surface-form Yomitan frequencies when the normalized headword lookup misses. +- Overlay: Fixed MeCab merged-token position mapping across line breaks so merged content-plus-particle tokens like `陰に` keep their matched Yomitan frequency instead of inheriting shifted POS tags. +- Overlay: Fixed grouped frequency parsing in both Yomitan and fallback frequency-dictionary lookups so display values like `118,121` use the leading rank instead of collapsing the rank and occurrence count into `118121`. +- Overlay: Fixed frequency-rank ingestion to ignore Yomitan dictionaries explicitly marked `occurrence-based`, so raw occurrence counts are no longer treated as subtitle rank values. +- Overlay: Fixed inflected headword frequency tagging to prefer ranks from the selected Yomitan `termsFind` popup entry itself, ordered by configured dictionary priority, so forms like `潜み` use primary-dictionary ranks like `4073` before falling back to lower-priority raw lemma metadata such as `CC100`. +- Overlay: Fixed annotation-stage frequency filtering so exact kanji noun tokens like `者` keep their matched rank even when MeCab labels them `名詞/非自立`, instead of dropping the highlight after scan-time frequency lookup succeeds. +- Anki: Fixed repeated character-dictionary startup work by scheduling auto-sync only from mpv media-path changes instead of also re-triggering it from connection and media-title events for the same title. +- Overlay: Fixed macOS fullscreen overlay stability by keeping the passive visible overlay from stealing focus, re-raising the overlay window when reasserting its macOS topmost level, and tolerating one transient macOS tracker/helper miss before hiding the overlay. +- Overlay: Kept subtitle tokenization warmup one-shot for the lifetime of the app so later fullscreen/media churn on macOS does not replay the startup warmup gate after the first file is ready. +- Overlay: Added a bounded macOS tracker loss-grace window so fullscreen enter/leave transitions do not immediately hide and reload the overlay when the helper briefly loses the mpv window. +- Overlay: Skipped subtitle/tokenization refresh invalidation on character-dictionary auto-sync completion when the dictionary was already current, preventing startup flash/reload loops on unchanged media. +- Stats: Fixed session stats so known-word counts track real known-word occurrences without collapsing subtitle-line gaps. +- Stats: Fixed session word totals in session-facing stats views to prefer token counts when available, preventing known words from exceeding total words in the session chart. +- Stats: Fixed the stats Vocabulary tab blank-screen regression caused by a hook-order crash after vocabulary data finished loading. +- Anki: Fixed card-mine OSD feedback so the final mine result stops the Anki spinner first, then shows a single-line `✓`/`x` status without being overwritten by a later spinner tick. +- Stats: Removed the misleading `New words` series from expanded session charts; session detail now shows only the real total-word and known-word lines. +- Stats: Restored the cross-anime word table behavior in stats vocabulary surfaces so shared vocabulary entries no longer disappear or merge incorrectly across related media. +- Stats: `subminer stats -b` now runs as a standalone background stats daemon instead of reusing the main SubMiner app process, so the overlay app can still be launched separately for normal video watching. +- Stats: Dashboard word mining still works against the background daemon by using a short-lived hidden helper for the Yomitan add-note flow. +- Stats: Load full session timelines by default in stats session detail views so long sessions preserve complete telemetry history instead of being truncated by a fixed sample limit. +- Stats: Replaced heuristic stats word counts with Yomitan token counts, so session, media, anime, and trend subtitle totals now come directly from parsed subtitle tokens. +- Stats: Updated stats UI labels and lookup-rate copy to refer to tokens instead of words where those counts are shown. +- Overlay: Reduced repeated `Overlay loading...` popups on macOS when fullscreen tracker flaps briefly hide and recover the visible overlay. +- Stats: Scaled expanded session-detail known-word charts to the session's actual percentage range so small changes no longer render as a nearly flat line. +- Jlpt: Reduced JLPT dictionary startup log noise by summarizing duplicate surface-form collisions instead of logging one line per duplicate entry. + ## v0.6.5 (2026-03-15) ### Internal diff --git a/README.md b/README.md index 59455e5..1efc593 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ SubMiner is an Electron overlay for [mpv](https://mpv.io) that turns video into a sentence-mining workstation. Look up any word with [Yomitan](https://github.com/yomidevs/yomitan), mine it to Anki with one key, and track your immersion over time. +> [!NOTE] +> Release prep target: `v0.7.0`. This cut rolls the new stats/dashboard workflow, browser/daemon stats commands, dashboard mining actions, and the latest overlay/runtime stability fixes into the next 0-ver minor line. +
[![SubMiner demo (Animated preview)](./assets/minecard.webp)](./assets/minecard.mp4) @@ -107,6 +110,9 @@ Run `SubMiner.AppImage` (Linux), `SubMiner.app` (macOS), or `SubMiner.exe` (Wind subminer video.mkv # auto-starts overlay + resumes playback subminer --start video.mkv # explicit overlay start (if plugin auto_start=no) subminer stats # open the immersion dashboard +subminer stats -b # keep the stats daemon running in background +subminer stats -s # stop the dedicated stats daemon +subminer stats cleanup # repair/prune stored stats vocabulary rows ``` --- diff --git a/backlog/tasks/task-169 - Cut-minor-release-v0.7.0-for-stats-and-runtime-polish.md b/backlog/tasks/task-169 - Cut-minor-release-v0.7.0-for-stats-and-runtime-polish.md new file mode 100644 index 0000000..093dfd0 --- /dev/null +++ b/backlog/tasks/task-169 - Cut-minor-release-v0.7.0-for-stats-and-runtime-polish.md @@ -0,0 +1,80 @@ +--- +id: TASK-169 +title: Cut minor release v0.7.0 for stats and runtime polish +status: Done +assignee: + - codex +created_date: '2026-03-19 17:20' +updated_date: '2026-03-19 17:31' +labels: + - release + - docs + - minor +dependencies: + - TASK-168 +references: + - package.json + - README.md + - docs/RELEASING.md + - docs-site/changelog.md + - CHANGELOG.md + - release/release-notes.md +priority: high +ordinal: 108000 +--- + +## Description + + +Prepare the next release cut as `v0.7.0`, keeping 0-ver semantics by rolling the accumulated stats/dashboard, launcher, overlay, and stability work into the next minor line instead of a `1.0.0` release. + + +## Acceptance Criteria + +- [x] #1 Repository version metadata is updated to `0.7.0`. +- [x] #2 Root release-facing docs are refreshed for the `0.7.0` release cut. +- [x] #3 `CHANGELOG.md` and `release/release-notes.md` contain the committed `v0.7.0` section and consumed fragments are removed. +- [x] #4 Public changelog/docs surfaces reflect the new release. +- [x] #5 Release-prep verification is recorded. + + +## Implementation Plan + + +1. Bump `package.json` to `0.7.0`. +2. Refresh release-facing docs: root `README.md`, release guide versioning note, and public docs changelog summary. +3. Run `bun run changelog:build --version 0.7.0` to commit release artifacts and consume pending fragments. +4. Run release-prep verification (`changelog`, typecheck, tests, docs build if docs-site changed). +5. Update this task with notes, verification, and final summary. + + +## Implementation Notes + + +Bumped `package.json` from `0.6.5` to `0.7.0` and refreshed the root release-facing copy in `README.md` so the release prep explicitly calls out the new stats/dashboard line plus the background stats daemon commands. Updated `docs/RELEASING.md` with the repo's 0-ver versioning policy and an explicit `--date` reminder after the changelog generator initially stamped `2026-03-20` from UTC instead of the intended local release date `2026-03-19`. + +Ran `bun run changelog:build --version 0.7.0`, which generated `CHANGELOG.md` and `release/release-notes.md` and removed the queued `changes/*.md` fragments for the accumulated stats, launcher, overlay, JLPT, and stability work. Added a curated `v0.7.0` summary to `docs-site/changelog.md` so the public docs changelog stays aligned with the committed root changelog while remaining user-facing. + +Verification: +- `bash .agents/skills/subminer-change-verification/scripts/classify_subminer_diff.sh` +- `bun run changelog:lint` +- `bun run changelog:check --version 0.7.0` +- `bun run verify:config-example` +- `bun run typecheck` +- `bun run test:fast` +- `bun run test:env` +- `bun run build` +- `bun run docs:test` +- `bun run docs:build` + + +## Final Summary + + +Prepared minor release `v0.7.0` as the next 0-ver major line. Version metadata, root changelog, generated release notes, README release copy, release-guide policy, and the public docs changelog are now aligned for the release cut. + +Docs update required: yes. Completed in `README.md`, `docs/RELEASING.md`, and `docs-site/changelog.md`. +Changelog fragment required: no new fragment for this task. Existing pending release fragments were consumed into the committed `v0.7.0` changelog section and `release/release-notes.md`. + +Release-prep verification passed across changelog validation, config-example verification, typecheck, fast/env tests, full build, and docs-site test/build. + diff --git a/changes/2026-03-15-known-words-config-section.md b/changes/2026-03-15-known-words-config-section.md deleted file mode 100644 index 6c95bcf..0000000 --- a/changes/2026-03-15-known-words-config-section.md +++ /dev/null @@ -1,5 +0,0 @@ -type: changed -area: anki - -- Changed known-word cache settings to live under `ankiConnect.knownWords` instead of mixing them into `ankiConnect.nPlusOne`. -- Kept legacy `ankiConnect.nPlusOne` known-word keys and older `ankiConnect.behavior.nPlusOne*` keys as deprecated compatibility fallbacks. diff --git a/changes/2026-03-15-linux-plugin-binary-lowercase-fallback.md b/changes/2026-03-15-linux-plugin-binary-lowercase-fallback.md deleted file mode 100644 index 271523b..0000000 --- a/changes/2026-03-15-linux-plugin-binary-lowercase-fallback.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: launcher - -- Fixed mpv Lua plugin binary auto-detection on Linux to also search `/usr/bin/subminer` and `/usr/local/bin/subminer` (lowercase), matching the conventional Unix wrapper name used by packaged installs such as the AUR package. diff --git a/changes/2026-03-15-session-delete-from-sessions-tab.md b/changes/2026-03-15-session-delete-from-sessions-tab.md deleted file mode 100644 index d17c95e..0000000 --- a/changes/2026-03-15-session-delete-from-sessions-tab.md +++ /dev/null @@ -1,4 +0,0 @@ -type: changed -area: stats - -- Added session deletion to the Sessions tab with the same confirmation prompt used by anime episode/session deletes, and removed all associated session rows from the stats database. diff --git a/changes/2026-03-15-stats-overlay-port-fix.md b/changes/2026-03-15-stats-overlay-port-fix.md deleted file mode 100644 index 9b9c5b1..0000000 --- a/changes/2026-03-15-stats-overlay-port-fix.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Fixed the in-app stats overlay so it connects to the configured `stats.serverPort` instead of falling back to the default port. diff --git a/changes/2026-03-15-surface-frequency-fallback.md b/changes/2026-03-15-surface-frequency-fallback.md deleted file mode 100644 index 3fffb2a..0000000 --- a/changes/2026-03-15-surface-frequency-fallback.md +++ /dev/null @@ -1,9 +0,0 @@ -type: fixed -area: overlay - -- Fixed subtitle frequency tagging for merged lookup-backed tokens like `陰に` by falling back to exact surface-form Yomitan frequencies when the normalized headword lookup misses. -- Fixed MeCab merged-token position mapping across line breaks so merged content-plus-particle tokens like `陰に` keep their matched Yomitan frequency instead of inheriting shifted POS tags. -- Fixed grouped frequency parsing in both Yomitan and fallback frequency-dictionary lookups so display values like `118,121` use the leading rank instead of collapsing the rank and occurrence count into `118121`. -- Fixed frequency-rank ingestion to ignore Yomitan dictionaries explicitly marked `occurrence-based`, so raw occurrence counts are no longer treated as subtitle rank values. -- Fixed inflected headword frequency tagging to prefer ranks from the selected Yomitan `termsFind` popup entry itself, ordered by configured dictionary priority, so forms like `潜み` use primary-dictionary ranks like `4073` before falling back to lower-priority raw lemma metadata such as `CC100`. -- Fixed annotation-stage frequency filtering so exact kanji noun tokens like `者` keep their matched rank even when MeCab labels them `名詞/非自立`, instead of dropping the highlight after scan-time frequency lookup succeeds. diff --git a/changes/2026-03-16-character-dictionary-startup-dedupe.md b/changes/2026-03-16-character-dictionary-startup-dedupe.md deleted file mode 100644 index df5be99..0000000 --- a/changes/2026-03-16-character-dictionary-startup-dedupe.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: anki - -- Fixed repeated character-dictionary startup work by scheduling auto-sync only from mpv media-path changes instead of also re-triggering it from connection and media-title events for the same title. diff --git a/changes/2026-03-16-macos-fullscreen-overlay-stability.md b/changes/2026-03-16-macos-fullscreen-overlay-stability.md deleted file mode 100644 index 7a5de55..0000000 --- a/changes/2026-03-16-macos-fullscreen-overlay-stability.md +++ /dev/null @@ -1,7 +0,0 @@ -type: fixed -area: overlay - -- Fixed macOS fullscreen overlay stability by keeping the passive visible overlay from stealing focus, re-raising the overlay window when reasserting its macOS topmost level, and tolerating one transient macOS tracker/helper miss before hiding the overlay. -- Kept subtitle tokenization warmup one-shot for the lifetime of the app so later fullscreen/media churn on macOS does not replay the startup warmup gate after the first file is ready. -- Added a bounded macOS tracker loss-grace window so fullscreen enter/leave transitions do not immediately hide and reload the overlay when the helper briefly loses the mpv window. -- Skipped subtitle/tokenization refresh invalidation on character-dictionary auto-sync completion when the dictionary was already current, preventing startup flash/reload loops on unchanged media. diff --git a/changes/2026-03-16-stats-mining-and-vocabulary-ux.md b/changes/2026-03-16-stats-mining-and-vocabulary-ux.md deleted file mode 100644 index d1d6d81..0000000 --- a/changes/2026-03-16-stats-mining-and-vocabulary-ux.md +++ /dev/null @@ -1,11 +0,0 @@ -type: added -area: immersion - -- Added Mine Word, Mine Sentence, and Mine Audio buttons to word detail example lines in the stats dashboard. -- Mine Word creates a full Yomitan card (definition, reading, pitch accent) via the hidden search page bridge, then enriches with sentence audio, screenshot, and metadata extracted from the source video. -- Mine Sentence and Mine Audio create cards directly with appropriate Lapis/Kiku flags, sentence highlighting, and media from the source file. -- Media generation (audio + image/AVIF) runs in parallel and respects all AnkiConnect config options. -- Added word exclusion list to the Vocabulary tab with localStorage persistence and a management modal. -- Fixed truncated readings in the frequency rank table (e.g. お前 now shows おまえ instead of まえ). -- Clicking a bar in the Top Repeated Words chart now opens the word detail panel. -- Secondary subtitle text is now stored alongside primary subtitle lines for use as translation when mining cards from the stats page. diff --git a/changes/2026-03-16-stats-storage-optimizations.md b/changes/2026-03-16-stats-storage-optimizations.md deleted file mode 100644 index 37b779d..0000000 --- a/changes/2026-03-16-stats-storage-optimizations.md +++ /dev/null @@ -1,8 +0,0 @@ -type: changed -area: immersion - -- Kept immersion tracking history by default while preserving daily/monthly rollup maintenance. -- Added exact lifetime summary reads for overview/anime/media stats so dashboard totals no longer depend on rescanning raw telemetry. -- Reduced tracker storage overhead by removing duplicated subtitle text from subtitle-line event payloads. -- Deduplicated episode cover-art blobs through a shared blob store and updated cover-art reads/writes to resolve shared images correctly. -- Added indexes for large-history session, telemetry, vocabulary, kanji, and cover-art queries to keep dashboard reads fast as the SQLite database grows. diff --git a/changes/2026-03-17-background-stats-server.md b/changes/2026-03-17-background-stats-server.md deleted file mode 100644 index 81c6408..0000000 --- a/changes/2026-03-17-background-stats-server.md +++ /dev/null @@ -1,6 +0,0 @@ -type: added -area: stats - -- Added `subminer stats -b` to start or reuse a dedicated background stats server without blocking normal SubMiner instances. -- Added `subminer stats -s` to stop the dedicated background stats server without closing browser tabs. -- Stats server startup now reuses a running background stats daemon instead of trying to bind a second local server in another SubMiner instance. diff --git a/changes/2026-03-17-session-known-word-timeline-fix.md b/changes/2026-03-17-session-known-word-timeline-fix.md deleted file mode 100644 index 33af369..0000000 --- a/changes/2026-03-17-session-known-word-timeline-fix.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: stats - -- Fixed session stats so known-word counts track real known-word occurrences without collapsing subtitle-line gaps. -- Fixed session word totals in session-facing stats views to prefer token counts when available, preventing known words from exceeding total words in the session chart. diff --git a/changes/2026-03-17-stats-library-tab-label.md b/changes/2026-03-17-stats-library-tab-label.md deleted file mode 100644 index 7b425ac..0000000 --- a/changes/2026-03-17-stats-library-tab-label.md +++ /dev/null @@ -1,4 +0,0 @@ -type: changed -area: immersion - -- Renamed the stats dashboard's Anime tab to Library so the media browser label matches non-anime sources like YouTube and other yt-dlp-backed content. diff --git a/changes/2026-03-17-vocabulary-tab-hook-order-fix.md b/changes/2026-03-17-vocabulary-tab-hook-order-fix.md deleted file mode 100644 index 365ff1c..0000000 --- a/changes/2026-03-17-vocabulary-tab-hook-order-fix.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Fixed the stats Vocabulary tab blank-screen regression caused by a hook-order crash after vocabulary data finished loading. diff --git a/changes/2026-03-17-watch-threshold-centralization.md b/changes/2026-03-17-watch-threshold-centralization.md deleted file mode 100644 index 0ed0204..0000000 --- a/changes/2026-03-17-watch-threshold-centralization.md +++ /dev/null @@ -1,5 +0,0 @@ -type: changed -area: anilist - -- Standardized episode completion threshold by introducing `DEFAULT_MIN_WATCH_RATIO` and using it for both local watched state transitions and AniList post-watch progress updates. -- Episode auto-marking now uses the same threshold as AniList (`85%`), removing divergent completion behavior. diff --git a/changes/2026-03-18-mine-osd-spinner-result.md b/changes/2026-03-18-mine-osd-spinner-result.md deleted file mode 100644 index 3a8e501..0000000 --- a/changes/2026-03-18-mine-osd-spinner-result.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: anki - -- Fixed card-mine OSD feedback so the final mine result stops the Anki spinner first, then shows a single-line `✓`/`x` status without being overwritten by a later spinner tick. diff --git a/changes/2026-03-18-remove-session-new-words-series.md b/changes/2026-03-18-remove-session-new-words-series.md deleted file mode 100644 index 39aedc7..0000000 --- a/changes/2026-03-18-remove-session-new-words-series.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Removed the misleading `New words` series from expanded session charts; session detail now shows only the real total-word and known-word lines. diff --git a/changes/2026-03-18-stats-cross-anime-words-table.md b/changes/2026-03-18-stats-cross-anime-words-table.md deleted file mode 100644 index 1a0c5e1..0000000 --- a/changes/2026-03-18-stats-cross-anime-words-table.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Restored the cross-anime word table behavior in stats vocabulary surfaces so shared vocabulary entries no longer disappear or merge incorrectly across related media. diff --git a/changes/2026-03-18-stats-daemon-decoupling.md b/changes/2026-03-18-stats-daemon-decoupling.md deleted file mode 100644 index 5a826d8..0000000 --- a/changes/2026-03-18-stats-daemon-decoupling.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: stats - -- `subminer stats -b` now runs as a standalone background stats daemon instead of reusing the main SubMiner app process, so the overlay app can still be launched separately for normal video watching. -- Dashboard word mining still works against the background daemon by using a short-lived hidden helper for the Yomitan add-note flow. diff --git a/changes/2026-03-18-stats-full-session-timelines.md b/changes/2026-03-18-stats-full-session-timelines.md deleted file mode 100644 index a39d441..0000000 --- a/changes/2026-03-18-stats-full-session-timelines.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Load full session timelines by default in stats session detail views so long sessions preserve complete telemetry history instead of being truncated by a fixed sample limit. diff --git a/changes/2026-03-18-stats-mpv-args-passthrough.md b/changes/2026-03-18-stats-mpv-args-passthrough.md deleted file mode 100644 index e3d4732..0000000 --- a/changes/2026-03-18-stats-mpv-args-passthrough.md +++ /dev/null @@ -1,4 +0,0 @@ -type: added -area: launcher - -- Added launcher passthrough for `-a/--args` so mpv receives raw extra launch flags (`--fs`, `--ytdl-format`, custom audio/video settings, etc.) from the `subminer` command. diff --git a/changes/2026-03-18-stats-yomitan-token-counts.md b/changes/2026-03-18-stats-yomitan-token-counts.md deleted file mode 100644 index 01be369..0000000 --- a/changes/2026-03-18-stats-yomitan-token-counts.md +++ /dev/null @@ -1,5 +0,0 @@ -type: fixed -area: stats - -- Replaced heuristic stats word counts with Yomitan token counts, so session, media, anime, and trend subtitle totals now come directly from parsed subtitle tokens. -- Updated stats UI labels and lookup-rate copy to refer to tokens instead of words where those counts are shown. diff --git a/changes/2026-03-18-subtitle-noise-filtering.md b/changes/2026-03-18-subtitle-noise-filtering.md deleted file mode 100644 index ccb65cf..0000000 --- a/changes/2026-03-18-subtitle-noise-filtering.md +++ /dev/null @@ -1,5 +0,0 @@ -type: changed -area: overlay - -- Excluded interjections and sound-effect tokens from subtitle annotation styling so they no longer inherit misleading lexical highlight treatment while still remaining visible and hoverable as plain subtitle tokens. -- Expanded subtitle annotation noise filtering to also strip annotation metadata from standalone grammar-only helper tokens such as particles, auxiliaries, adnominals, common explanatory endings like `んです` / `のだ`, and merged trailing quote-particle forms like `...って` while keeping them tokenized for hover lookup. diff --git a/changes/2026-03-19-overlay-loading-osd-fullscreen-flaps.md b/changes/2026-03-19-overlay-loading-osd-fullscreen-flaps.md deleted file mode 100644 index 1230d61..0000000 --- a/changes/2026-03-19-overlay-loading-osd-fullscreen-flaps.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: overlay - -- Reduced repeated `Overlay loading...` popups on macOS when fullscreen tracker flaps briefly hide and recover the visible overlay. diff --git a/changes/2026-03-19-session-detail-chart-scaling.md b/changes/2026-03-19-session-detail-chart-scaling.md deleted file mode 100644 index a878a30..0000000 --- a/changes/2026-03-19-session-detail-chart-scaling.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: stats - -- Scaled expanded session-detail known-word charts to the session's actual percentage range so small changes no longer render as a nearly flat line. diff --git a/changes/jlpt-duplicate-log-summary.md b/changes/jlpt-duplicate-log-summary.md deleted file mode 100644 index 9c88e15..0000000 --- a/changes/jlpt-duplicate-log-summary.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: jlpt - -- Reduced JLPT dictionary startup log noise by summarizing duplicate surface-form collisions instead of logging one line per duplicate entry. diff --git a/changes/stats-command.md b/changes/stats-command.md deleted file mode 100644 index ddeb1d7..0000000 --- a/changes/stats-command.md +++ /dev/null @@ -1,6 +0,0 @@ -type: added -area: launcher - -- Added `subminer stats` to launch the local stats dashboard, force-start the stats server on demand, and open the dashboard in your browser. -- Added `subminer stats cleanup` to backfill vocabulary metadata and prune stale or excluded immersion rows on demand. -- Added `stats.autoOpenBrowser` so browser launch after `subminer stats` can be enabled or disabled explicitly. diff --git a/changes/stats-dashboard.md b/changes/stats-dashboard.md deleted file mode 100644 index 89939b5..0000000 --- a/changes/stats-dashboard.md +++ /dev/null @@ -1,7 +0,0 @@ -type: added -area: immersion - -- Added a local stats dashboard for immersion tracking with Overview, Anime, Trends, Vocabulary, and Sessions views. -- Added anime progress, episode completion, Anki card links, and occurrence drill-down across the stats dashboard. -- Added richer session timelines with new-word activity, cumulative totals, and pause/seek/card event markers. -- Added completed-episodes and completed-anime totals to the Overview tracking snapshot. diff --git a/docs-site/changelog.md b/docs-site/changelog.md index 5a904e4..2a4db5f 100644 --- a/docs-site/changelog.md +++ b/docs-site/changelog.md @@ -1,5 +1,13 @@ # Changelog +## v0.7.0 (2026-03-19) +- Added a full local immersion dashboard release line with Overview, Library, Trends, Vocabulary, and Sessions drill-down views backed by SQLite tracking data. +- Added browser-first stats workflows: `subminer stats`, background stats daemon controls (`-b` / `-s`), stats cleanup, and dashboard-side mining actions with media enrichment. +- Improved stats accuracy and scale handling with Yomitan token counts, full session timelines, known-word timeline fixes, cross-media vocabulary fixes, and clearer session charts. +- Improved overlay/runtime stability with quieter macOS fullscreen recovery, reduced repeated loading OSD popups, and better frequency/noise handling for subtitle annotations. +- Added launcher mpv-args passthrough plus Linux plugin wrapper-name fallback for packaged installs. +- Folded the accumulated release into the next 0-ver minor line rather than a `1.0.0` cut. + ## v0.6.5 (2026-03-15) - Seeded the AUR checkout with the repo `.SRCINFO` template before rewriting metadata so tagged releases do not depend on prior AUR state. diff --git a/docs/RELEASING.md b/docs/RELEASING.md index e5d3ec7..d99af2f 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -7,7 +7,7 @@ 3. Run `bun run changelog:lint`. 4. Bump `package.json` to the release version. 5. Build release metadata before tagging: - `bun run changelog:build --version ` + `bun run changelog:build --version --date ` 6. Review `CHANGELOG.md` and `release/release-notes.md`. 7. Run release gate locally: `bun run changelog:check --version ` @@ -25,6 +25,8 @@ Notes: +- Versioning policy: SubMiner stays 0-ver. Large or breaking release lines still bump the minor number (`0.x.0`), not `1.0.0`. Example: the next major line after `0.6.5` is `0.7.0`. +- Pass `--date` explicitly when you want the release stamped with the local cut date; otherwise the generator uses the current ISO date, which can roll over to the next UTC day late at night. - `changelog:check` now rejects tag/package version mismatches. - `changelog:build` generates `CHANGELOG.md` + `release/release-notes.md` and removes the released `changes/*.md` fragments. - Do not tag while `changes/*.md` fragments still exist. diff --git a/package.json b/package.json index 8ef2a10..ee4830c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "subminer", - "version": "0.6.5", + "version": "0.7.0", "description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration", "packageManager": "bun@1.3.5", "main": "dist/main-entry.js",