From ce76a756305c6591bfaff6a35f9e0846e0c08c0e Mon Sep 17 00:00:00 2001 From: sudacode Date: Sat, 4 Apr 2026 00:22:05 -0700 Subject: [PATCH] chore: prep 0.11.1 release --- ...anonical-SubMiner-Linux-app-id-metadata.md | 62 +++++++++++++++++++ ...task-278 - Prepare-patch-release-0.11.1.md | 44 +++++++++++++ changes/2026-04-04-linux-app-id-metadata.md | 4 ++ ...-04-04-linux-shortcut-portal-regression.md | 5 +- package.json | 4 +- src/release-workflow.test.ts | 7 +++ 6 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 backlog/tasks/task-276 - Restore-canonical-SubMiner-Linux-app-id-metadata.md create mode 100644 backlog/tasks/task-278 - Prepare-patch-release-0.11.1.md create mode 100644 changes/2026-04-04-linux-app-id-metadata.md diff --git a/backlog/tasks/task-276 - Restore-canonical-SubMiner-Linux-app-id-metadata.md b/backlog/tasks/task-276 - Restore-canonical-SubMiner-Linux-app-id-metadata.md new file mode 100644 index 00000000..b7f6ca82 --- /dev/null +++ b/backlog/tasks/task-276 - Restore-canonical-SubMiner-Linux-app-id-metadata.md @@ -0,0 +1,62 @@ +--- +id: TASK-276 +title: Restore canonical SubMiner Linux app-id metadata +status: Done +assignee: + - codex +created_date: '2026-04-04 06:31' +updated_date: '2026-04-04 06:34' +labels: + - bug + - linux + - electron +dependencies: [] +priority: medium +--- + +## Description + + +Fix the Linux/Wayland packaged app metadata so the OS-facing desktop/app-id metadata stays canonical `SubMiner` instead of the lowercase npm package name `subminer`. Add regression coverage around packaged metadata so future Electron/runtime changes do not silently reintroduce the lowercase class/app-id behavior. + + +## Acceptance Criteria + +- [x] #1 Top-level package metadata provides the canonical capitalized app name used by Electron runtime bootstrap on Linux +- [x] #2 Packaged Linux app metadata resolves to `SubMiner`/`SubMiner.desktop` instead of lowercase `subminer` +- [x] #3 Regression coverage fails before the fix and passes after it + + +## Implementation Plan + + +1. Add a focused packaging/runtime regression test that reads the packaged app metadata source and asserts the Linux Electron bootstrap-visible fields resolve to canonical `SubMiner` / `SubMiner.desktop`. +2. Run the targeted test first to capture the failing pre-fix state. +3. Update top-level package metadata in `package.json` with the canonical Electron runtime-facing fields needed for Linux bootstrap. +4. Re-run the targeted test and a lightweight packaging validation to confirm the packaged metadata now stays canonical. +5. Record verification notes and complete the task if all acceptance criteria pass. + + +## Implementation Notes + + +Added a regression in `src/release-workflow.test.ts` asserting top-level `productName` and `desktopName` stay canonical for Linux Electron runtime bootstrap. Verified the new test failed before the fix because both fields were missing from top-level package metadata. + +Updated top-level `package.json` metadata with `productName: SubMiner` and `desktopName: SubMiner.desktop` so packaged `app.asar` exposes the canonical Linux startup identity Electron reads before app code runs. + +Verification passed with `bun test src/release-workflow.test.ts`, `bun run build && ./node_modules/.bin/electron-builder --linux dir --publish never`, packaged `release/linux-unpacked/resources/app.asar` inspection showing `{ name: subminer, productName: SubMiner, desktopName: SubMiner.desktop }`, and `bun run changelog:lint`. + +Ran the full default handoff gate after the targeted/package verification: `bun run typecheck`, `bun run test:fast`, `bun run test:env`, and `bun run test:smoke:dist` all passed. + + +## Final Summary + + +Restored canonical Linux/Wayland app identity metadata by adding top-level Electron runtime fields to `package.json`: `productName: SubMiner` and `desktopName: SubMiner.desktop`. This fixes the packaged app metadata Electron reads before user code runs, so native Wayland compositors no longer need to derive the app-id/class from the lowercase npm package name alone. + +Added a regression test in `src/release-workflow.test.ts` that asserts the runtime-visible top-level metadata stays canonical. The new test was run first and failed before the fix because `productName` was missing, then passed after the metadata update. + +Verification: `bun test src/release-workflow.test.ts`; `bun run build && ./node_modules/.bin/electron-builder --linux dir --publish never`; inspected `release/linux-unpacked/resources/app.asar` and confirmed `productName: SubMiner` plus `desktopName: SubMiner.desktop`; `bun run changelog:lint`. Added changelog fragment `changes/2026-04-04-linux-app-id-metadata.md`. + +Full default handoff gate also passed: `bun run typecheck`; `bun run test:fast`; `bun run test:env`; `bun run test:smoke:dist`. + diff --git a/backlog/tasks/task-278 - Prepare-patch-release-0.11.1.md b/backlog/tasks/task-278 - Prepare-patch-release-0.11.1.md new file mode 100644 index 00000000..14308254 --- /dev/null +++ b/backlog/tasks/task-278 - Prepare-patch-release-0.11.1.md @@ -0,0 +1,44 @@ +--- +id: TASK-278 +title: Prepare patch release 0.11.1 +status: Done +assignee: + - '@codex' +created_date: '2026-04-04 07:16' +updated_date: '2026-04-04 07:19' +labels: + - release +dependencies: [] +priority: medium +--- + +## Description + + +Bump SubMiner from 0.11.0 to 0.11.1, run the local release checklist, and confirm whether the branch is ready for tagging/publishing. + + +## Acceptance Criteria + +- [x] #1 package.json is bumped to 0.11.1 without overwriting unrelated local metadata edits. +- [x] #2 Release prep checks are run and summarized, including changelog/build verification and local build/test gates. +- [x] #3 Any remaining release blockers are called out explicitly. + + +## Implementation Notes + + +Bumped package.json from 0.11.0 to 0.11.1 while preserving the existing local productName/desktopName edits. + +Fixed the Linux shortcut changelog fragment metadata so changelog lint now passes and the previously failing CI cause is addressed locally. + +Release checks run: bun run changelog:lint, bun run changelog:check --version 0.11.1, bun run verify:config-example, bun run typecheck, bun run test:fast, bun run test:env, bun run build. All passed except changelog:check, which is expected until pending fragments are built into CHANGELOG.md/release/release-notes.md. + +Current release blocker: pending changelog fragments /changes/2026-04-04-linux-app-id-metadata.md and /changes/2026-04-04-linux-shortcut-portal-regression.md still need bun run changelog:build --version 0.11.1 --date 2026-04-04 before tagging. + + +## Final Summary + + +Prepared local patch release version 0.11.1 and ran the release gate. changelog:lint, verify:config-example, typecheck, test:fast, test:env, and build all passed. changelog:check still fails because the pending changelog fragments have not been built into CHANGELOG.md/release notes yet; run bun run changelog:build --version 0.11.1 --date 2026-04-04 as the remaining pre-tag step. + diff --git a/changes/2026-04-04-linux-app-id-metadata.md b/changes/2026-04-04-linux-app-id-metadata.md new file mode 100644 index 00000000..73a66e10 --- /dev/null +++ b/changes/2026-04-04-linux-app-id-metadata.md @@ -0,0 +1,4 @@ +type: fixed +area: release + +Linux packaged builds now expose the canonical `SubMiner` app identity to Electron's startup metadata so native Wayland compositors stop reporting the window class/app-id as lowercase `subminer`. diff --git a/changes/2026-04-04-linux-shortcut-portal-regression.md b/changes/2026-04-04-linux-shortcut-portal-regression.md index b6869dfb..2c3028f2 100644 --- a/changes/2026-04-04-linux-shortcut-portal-regression.md +++ b/changes/2026-04-04-linux-shortcut-portal-regression.md @@ -1 +1,4 @@ -- Linux: Restored the runtime options, Jimaku, and Subsync shortcuts after the Electron 39 regression by routing those actions through the overlay's mpv/IPC shortcut path. +type: fixed +area: linux + +Linux now restores the runtime options, Jimaku, and Subsync shortcuts after the Electron 39 regression by routing those actions through the overlay's mpv/IPC shortcut path. diff --git a/package.json b/package.json index 1e742a3f..b04310eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,8 @@ { "name": "subminer", - "version": "0.11.0", + "productName": "SubMiner", + "desktopName": "SubMiner.desktop", + "version": "0.11.1", "description": "All-in-one sentence mining overlay with AnkiConnect and dictionary integration", "packageManager": "bun@1.3.5", "main": "dist/main-entry.js", diff --git a/src/release-workflow.test.ts b/src/release-workflow.test.ts index cf217f39..aefcab86 100644 --- a/src/release-workflow.test.ts +++ b/src/release-workflow.test.ts @@ -9,6 +9,8 @@ const makefilePath = resolve(__dirname, '../Makefile'); const makefile = readFileSync(makefilePath, 'utf8'); const packageJsonPath = resolve(__dirname, '../package.json'); const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')) as { + desktopName?: string; + productName?: string; scripts: Record; build?: { files?: string[]; @@ -75,6 +77,11 @@ test('release package scripts disable implicit electron-builder publishing', () assert.match(packageJson.scripts['build:win:unsigned'] ?? '', /build-win-unsigned\.mjs/); }); +test('top-level package metadata keeps Linux Electron runtime app identity canonical', () => { + assert.equal(packageJson.productName, 'SubMiner'); + assert.equal(packageJson.desktopName, 'SubMiner.desktop'); +}); + test('release packaging keeps default file inclusion and excludes large source-only trees explicitly', () => { const files = packageJson.build?.files ?? []; assert.ok(files.includes('**/*'));