diff --git a/CHANGELOG.md b/CHANGELOG.md index da28bc1..70fd9fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## v0.9.1 (2026-03-24) + +### Changed +- Release: Reduced packaged release size by excluding duplicate `extraResources` payload and pruning docs, tests, sourcemaps, and other source-only files from Electron bundles. + +### Fixed +- Overlay: Restored controller navigation and lookup/mining controls while the subtitle sidebar is open, while keeping true modal dialogs blocking controller actions. +- Tokenizer: Fixed subtitle annotation clearing so explanatory contrast endings like `んですけど` are excluded consistently across the shared tokenizer filter and annotation stage. + ## v0.9.0 (2026-03-23) ### Added diff --git a/backlog/tasks/task-232 - Trim-release-package-size-by-pruning-duplicate-and-source-only-assets.md b/backlog/tasks/task-232 - Trim-release-package-size-by-pruning-duplicate-and-source-only-assets.md new file mode 100644 index 0000000..73d4c34 --- /dev/null +++ b/backlog/tasks/task-232 - Trim-release-package-size-by-pruning-duplicate-and-source-only-assets.md @@ -0,0 +1,66 @@ +--- +id: TASK-232 +title: Trim release package size by pruning duplicate and source-only assets +status: Done +assignee: + - '@codex' +created_date: '2026-03-24 12:05' +updated_date: '2026-03-24 12:30' +labels: + - release + - packaging +priority: medium +ordinal: 54700 +dependencies: [] +references: + - /home/sudacode/projects/japanese/SubMiner/package.json + - /home/sudacode/projects/japanese/SubMiner/src/release-workflow.test.ts + - /home/sudacode/projects/japanese/SubMiner/src/core/services/texthooker.ts +--- + +## Description + + + +Reduce packaged release artifact size without changing user-visible functionality by pruning files that are duplicated between `app.asar` and `extraResources`, excluding source/test/doc-only trees from Electron packaging, and trimming obviously non-runtime vendored payload. + + + +## Acceptance Criteria + + + +- [x] #1 Electron packaging excludes repo content that is source-only, test-only, docs-only, or duplicated by `extraResources`. +- [x] #2 Release packaging tests cover the new exclusion rules. +- [x] #3 Verification includes at least targeted release-packaging tests and one packaging-oriented validation step. + + +## Implementation Notes + + + +Completed scope: +- Exclude `assets`, `plugin`, and `vendor/yomitan-jlpt-vocab` from `files` because they are already staged via `extraResources`. +- Exclude `dist` sourcemaps/tests, repo docs/tests/packaging metadata, and stats source leftovers from `files`. +- Exclude non-runtime `vendor/texthooker-ui` payload such as `public/`, `.vscode/`, and package metadata. +- Exclude Linux musl libsql binary from packaged app payload for AppImage-focused savings. + +Verification: +- `bun test src/release-workflow.test.ts` +- `bun run build` +- `node_modules/.bin/electron-builder --linux dir --publish never` +- `node_modules/.bin/electron-builder --linux AppImage --publish never` + +Observed result: +- `release/linux-unpacked/resources/app.asar` dropped from about `100 MB` to `29 MB`. +- `release/SubMiner-0.9.0.AppImage` dropped from about `256 MB` to `194 MB`. + + + +## Final Summary + + + +Trimmed Electron packaging so release artifacts no longer bundle duplicated `extraResources`, source/test/doc-only repo content, non-runtime `texthooker-ui` files, or the Linux musl libsql binary. Added release-packaging regression coverage and verified the Linux package shrink with fresh local builds. + + diff --git a/backlog/tasks/task-233 - Cut-patch-release-v0.9.1-for-package-size-pruning.md b/backlog/tasks/task-233 - Cut-patch-release-v0.9.1-for-package-size-pruning.md new file mode 100644 index 0000000..23bdaa2 --- /dev/null +++ b/backlog/tasks/task-233 - Cut-patch-release-v0.9.1-for-package-size-pruning.md @@ -0,0 +1,69 @@ +--- +id: TASK-233 +title: Cut patch release v0.9.1 for package size pruning +status: Done +assignee: + - '@codex' +created_date: '2026-03-24 12:40' +updated_date: '2026-03-24 12:55' +labels: + - release + - patch +dependencies: + - TASK-232 +references: + - /home/sudacode/projects/japanese/SubMiner/package.json + - /home/sudacode/projects/japanese/SubMiner/CHANGELOG.md + - /home/sudacode/projects/japanese/SubMiner/release/release-notes.md + - /home/sudacode/projects/japanese/SubMiner/docs-site/changelog.md +priority: high +ordinal: 54800 +--- + +## Description + + + +Publish a patch release for the packaging-size cleanup by bumping the app version to `0.9.1`, generating committed release metadata, and keeping release-facing docs/changelog surfaces aligned. + + + +## Acceptance Criteria + + + +- [x] #1 Repository version metadata is updated to `0.9.1`. +- [x] #2 `CHANGELOG.md`, `release/release-notes.md`, and `docs-site/changelog.md` contain the committed `v0.9.1` release line and the consumed fragment is removed. +- [x] #3 Release-readiness verification passes for changelog, docs, tests, and build lanes. + + +## Implementation Notes + + + +Completed: +- Bumped `package.json` to `0.9.1`. +- Ran `bun run changelog:build --version 0.9.1 --date 2026-03-24`, which generated `CHANGELOG.md` + `release/release-notes.md` and consumed both pending release fragments. +- Synced `docs-site/changelog.md` with the generated `v0.9.1` release line. +- Confirmed no additional README/docs wording changes were needed beyond changelog surfaces. + +Verification: +- `bun run changelog:lint` +- `bun run changelog:check --version 0.9.1` +- `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 patch release `v0.9.1` locally. Version metadata, committed changelog artifacts, release notes, and docs-site changelog are aligned, and the release gate is green. Pending manual release actions are the release-prep commit, `git tag v0.9.1`, and push/tag publication. + + diff --git a/changes/2026-03-23-tokenizer-explanatory-contrast-ending.md b/changes/2026-03-23-tokenizer-explanatory-contrast-ending.md deleted file mode 100644 index 1f9fe85..0000000 --- a/changes/2026-03-23-tokenizer-explanatory-contrast-ending.md +++ /dev/null @@ -1,4 +0,0 @@ -type: fixed -area: tokenizer - -- Fixed subtitle annotation clearing so explanatory contrast endings like `んですけど` are excluded consistently across the shared tokenizer filter and annotation stage. diff --git a/docs-site/changelog.md b/docs-site/changelog.md index af67d37..00ac450 100644 --- a/docs-site/changelog.md +++ b/docs-site/changelog.md @@ -1,5 +1,10 @@ # Changelog +## v0.9.1 (2026-03-24) +- Reduced packaged release size by excluding duplicate `extraResources` payload and pruning docs, tests, sourcemaps, and other source-only files from Electron bundles. +- Restored controller navigation and lookup/mining controls while the subtitle sidebar is open, while keeping true modal dialogs blocking controller actions. +- Fixed subtitle annotation clearing so explanatory contrast endings like `んですけど` are excluded consistently across the shared tokenizer filter and annotation stage. + ## v0.9.0 (2026-03-23) - Added an app-owned YouTube subtitle flow with absPlayer-style timedtext parsing that auto-loads the default primary subtitle plus a best-effort secondary at startup and resumes once the primary is ready. - Added a manual YouTube subtitle picker on `Ctrl+Alt+C` so subtitle selection can be retried on demand during active YouTube playback. diff --git a/package.json b/package.json index 33a72a0..80864b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "subminer", - "version": "0.9.0", + "version": "0.9.1", "description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration", "packageManager": "bun@1.3.5", "main": "dist/main-entry.js", @@ -166,20 +166,44 @@ }, "files": [ "**/*", + "!assets{,/**/*}", "!src{,/**/*}", "!launcher{,/**/*}", + "!docs{,/**/*}", + "!tests{,/**/*}", + "!packaging{,/**/*}", + "!README.md", + "!CHANGELOG.md", + "!AGENTS.md", + "!CLAUDE.md", "!stats/src{,/**/*}", "!stats/index.html", + "!stats/public{,/**/*}", + "!stats/package.json", + "!stats/tsconfig.json", + "!stats/vite.config.ts", "!docs-site{,/**/*}", "!changes{,/**/*}", "!backlog{,/**/*}", "!.tmp{,/**/*}", "!release-*{,/**/*}", + "!dist/**/*.map", + "!dist/**/*.test.*", + "!dist/**/__tests__{,/**/*}", + "!scripts/**/*.test.*", + "!plugin{,/**/*}", "!vendor/subminer-yomitan{,/**/*}", + "!vendor/yomitan-jlpt-vocab{,/**/*}", "!vendor/texthooker-ui/src{,/**/*}", "!vendor/texthooker-ui/node_modules{,/**/*}", "!vendor/texthooker-ui/.svelte-kit{,/**/*}", - "!vendor/texthooker-ui/package-lock.json" + "!vendor/texthooker-ui/.vscode{,/**/*}", + "!vendor/texthooker-ui/public{,/**/*}", + "!vendor/texthooker-ui/README.md", + "!vendor/texthooker-ui/package.json", + "!vendor/texthooker-ui/package-lock.json", + "!vendor/texthooker-ui/tsconfig*.json", + "!node_modules/@libsql/linux-x64-musl{,/**/*}" ], "extraResources": [ { diff --git a/release/release-notes.md b/release/release-notes.md new file mode 100644 index 0000000..1b0978d --- /dev/null +++ b/release/release-notes.md @@ -0,0 +1,19 @@ +## Highlights +### Changed +- Release: Reduced packaged release size by excluding duplicate `extraResources` payload and pruning docs, tests, sourcemaps, and other source-only files from Electron bundles. + +### Fixed +- Overlay: Restored controller navigation and lookup/mining controls while the subtitle sidebar is open, while keeping true modal dialogs blocking controller actions. +- Tokenizer: Fixed subtitle annotation clearing so explanatory contrast endings like `んですけど` are excluded consistently across the shared tokenizer filter and annotation stage. + +## Installation + +See the README and docs/installation guide for full setup steps. + +## Assets + +- Linux: `SubMiner.AppImage` +- macOS: `SubMiner-*.dmg` and `SubMiner-*.zip` +- Optional extras: `subminer-assets.tar.gz` and the `subminer` launcher + +Note: the `subminer` wrapper script uses Bun (`#!/usr/bin/env bun`), so `bun` must be installed and on `PATH`. diff --git a/src/release-workflow.test.ts b/src/release-workflow.test.ts index 570e4dc..a86db6a 100644 --- a/src/release-workflow.test.ts +++ b/src/release-workflow.test.ts @@ -78,6 +78,30 @@ test('release packaging keeps default file inclusion and excludes large source-o assert.ok(files.includes('!release-*{,/**/*}')); assert.ok(files.includes('!vendor/subminer-yomitan{,/**/*}')); assert.ok(files.includes('!vendor/texthooker-ui/src{,/**/*}')); + assert.ok(files.includes('!assets{,/**/*}')); + assert.ok(files.includes('!plugin{,/**/*}')); + assert.ok(files.includes('!vendor/yomitan-jlpt-vocab{,/**/*}')); + assert.ok(files.includes('!docs{,/**/*}')); + assert.ok(files.includes('!tests{,/**/*}')); + assert.ok(files.includes('!packaging{,/**/*}')); + assert.ok(files.includes('!README.md')); + assert.ok(files.includes('!CHANGELOG.md')); + assert.ok(files.includes('!AGENTS.md')); + assert.ok(files.includes('!CLAUDE.md')); + assert.ok(files.includes('!stats/public{,/**/*}')); + assert.ok(files.includes('!stats/package.json')); + assert.ok(files.includes('!stats/tsconfig.json')); + assert.ok(files.includes('!stats/vite.config.ts')); + assert.ok(files.includes('!dist/**/*.map')); + assert.ok(files.includes('!dist/**/*.test.*')); + assert.ok(files.includes('!dist/**/__tests__{,/**/*}')); + assert.ok(files.includes('!scripts/**/*.test.*')); + assert.ok(files.includes('!vendor/texthooker-ui/public{,/**/*}')); + assert.ok(files.includes('!vendor/texthooker-ui/.vscode{,/**/*}')); + assert.ok(files.includes('!vendor/texthooker-ui/README.md')); + assert.ok(files.includes('!vendor/texthooker-ui/package.json')); + assert.ok(files.includes('!vendor/texthooker-ui/tsconfig*.json')); + assert.ok(files.includes('!node_modules/@libsql/linux-x64-musl{,/**/*}')); }); test('config example generation runs directly from source without unrelated bundle prerequisites', () => {