Browse Source

Release 0.5.3

Set the version to 0.5.3 in every file the README lists and in the
Version comment's example. The PR record lists what 0.5.3 changes for
beta testers, including the "A1" pad labels, and the PRs it includes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude 1 giờ trước cách đây
mục cha
commit
5417ce1846

+ 1 - 1
README.md

@@ -40,7 +40,7 @@ wails3 build       # builds bin/mpckit (bin\mpckit.exe on Windows)
 
 The first run installs the frontend packages and generates `frontend/bindings` from the Go service.
 
-`wails3 build` stamps the version (`APP_VERSION` in `Taskfile.yml`, kept in step with `version` in `build/config.yml`) and the commit it was built from, so About shows, for example, "Version 0.5.2" and "Build 2354f57" ("-dirty" if there were uncommitted changes). `wails3 dev` shows "dev".
+`wails3 build` stamps the version (`APP_VERSION` in `Taskfile.yml`, kept in step with `version` in `build/config.yml`) and the commit it was built from, so About shows, for example, "Version 0.5.3" and "Build 2354f57" ("-dirty" if there were uncommitted changes). `wails3 dev` shows "dev".
 
 Releasing a new version: set it in `APP_VERSION` (`Taskfile.yml`), `version` in `build/config.yml`, `build/windows/info.json` (four places), `build/windows/wails.exe.manifest`, `build/windows/nsis/wails_tools.nsh`, `build/darwin/Info.plist` and `Info.dev.plist` (two places each) and `build/linux/nfpm/nfpm.yaml`. After the merge, tag the merge commit `v<version>`.
 

+ 1 - 1
Taskfile.yml

@@ -6,7 +6,7 @@ vars:
   # Shown in the About dialog of production builds: the version, and the
   # commit it was built from ("-dirty" if there were uncommitted changes).
   # Keep APP_VERSION in step with `version` in build/config.yml.
-  APP_VERSION: "0.5.2"
+  APP_VERSION: "0.5.3"
   COMMIT:
     sh: git describe --always --dirty --exclude "*" 2>/dev/null || echo unknown
   BIN_DIR: "bin"

+ 1 - 1
build/config.yml

@@ -11,7 +11,7 @@ info:
   description: "Desktop kit editor for the MPC Sample" # The application description
   copyright: "(c) 2026 bajdev" # Copyright text
   comments: "Not affiliated with Akai Professional" # Comments
-  version: "0.5.2" # The application version
+  version: "0.5.3" # The application version
   # cfBundleIconName: "appicon" # The macOS icon name in Assets.car icon bundles (optional)
   #                               # Should match the name of your .icon file without the extension
   #                               # If not set and Assets.car exists, defaults to "appicon"

+ 2 - 2
build/darwin/Info.dev.plist

@@ -17,9 +17,9 @@
 		<key>CFBundlePackageType</key>
 		<string>APPL</string>
 		<key>CFBundleShortVersionString</key>
-		<string>0.5.2</string>
+		<string>0.5.3</string>
 		<key>CFBundleVersion</key>
-		<string>0.5.2</string>
+		<string>0.5.3</string>
 		<key>LSMinimumSystemVersion</key>
 		<string>12.0.0</string>
 		<key>NSAppTransportSecurity</key>

+ 2 - 2
build/darwin/Info.plist

@@ -17,9 +17,9 @@
 		<key>CFBundlePackageType</key>
 		<string>APPL</string>
 		<key>CFBundleShortVersionString</key>
-		<string>0.5.2</string>
+		<string>0.5.3</string>
 		<key>CFBundleVersion</key>
-		<string>0.5.2</string>
+		<string>0.5.3</string>
 		<key>LSMinimumSystemVersion</key>
 		<string>12.0.0</string>
 		<key>NSHighResolutionCapable</key>

+ 1 - 1
build/linux/nfpm/nfpm.yaml

@@ -6,7 +6,7 @@
 name: "mpckit"
 arch: ${GOARCH}
 platform: "linux"
-version: "0.5.2"
+version: "0.5.3"
 section: "default"
 priority: "extra"
 maintainer: ${GIT_COMMITTER_NAME} <${GIT_COMMITTER_EMAIL}>

+ 4 - 4
build/windows/info.json

@@ -1,12 +1,12 @@
 {
 	"fixed": {
-		"file_version": "0.5.2",
-		"product_version": "0.5.2"
+		"file_version": "0.5.3",
+		"product_version": "0.5.3"
 	},
 	"info": {
 		"0409": {
-			"FileVersion": "0.5.2",
-			"ProductVersion": "0.5.2",
+			"FileVersion": "0.5.3",
+			"ProductVersion": "0.5.3",
 			"CompanyName": "bajdev",
 			"FileDescription": "Desktop kit editor for the MPC Sample",
 			"LegalCopyright": "(c) 2026 bajdev",

+ 1 - 1
build/windows/nsis/wails_tools.nsh

@@ -14,7 +14,7 @@
     !define INFO_PRODUCTNAME "MPCkit"
 !endif
 !ifndef INFO_PRODUCTVERSION
-    !define INFO_PRODUCTVERSION "0.5.2"
+    !define INFO_PRODUCTVERSION "0.5.3"
 !endif
 !ifndef INFO_COPYRIGHT
     !define INFO_COPYRIGHT "(c) 2026 bajdev"

+ 1 - 1
build/windows/wails.exe.manifest

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
-    <assemblyIdentity type="win32" name="com.monoexp.mpckit" version="0.5.2" processorArchitecture="*"/>
+    <assemblyIdentity type="win32" name="com.monoexp.mpckit" version="0.5.3" processorArchitecture="*"/>
     <dependency>
         <dependentAssembly>
             <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/>

+ 1 - 1
internal/app/app.go

@@ -17,7 +17,7 @@ import (
 )
 
 // Version and Commit are set by production builds (Taskfile.yml) with
-// -ldflags "-X git.monoexp.com/bajdev/mpckit/internal/app.Version=0.5.2
+// -ldflags "-X git.monoexp.com/bajdev/mpckit/internal/app.Version=0.5.3
 // -X git.monoexp.com/bajdev/mpckit/internal/app.Commit=2354f57".
 var (
 	Version = "dev"

+ 66 - 0
pull-requests/release-0-5-3/release-0-5-3.md

@@ -0,0 +1,66 @@
+# Release 0.5.3
+
+Branch: `release-0-5-3` → `main`
+
+PR 9 of the review fixes plan (`docs/review-fixes-plan.md`): the 0.5.3 release of PRs 5–8 and 8b. After the merge, the merge commit is tagged `v0.5.3` ("MPCkit 0.5.3 (beta)").
+
+## What's new in 0.5.3 (for beta testers)
+
+0.5.3 is a hardening release. Projects from 0.5.2 open as before, and the files MPCkit exports are byte-for-byte the same as before for the same edits.
+
+**You'll notice**
+- **Pad labels are now "A1", "B2", … "H16"** instead of "A01", "B02", everywhere: the pad and sequence grids, the side panels, the move/copy picker and the confirm dialogs. One format everywhere, the same as MPCkit's command-line tool. Sequence names such as "Sequence 01" are unchanged, because that is how the device names them.
+- **Declining to replace an export forgets the folder or file you picked.** The next export asks again.
+
+**Safer under the hood**
+- **A failed edit no longer leaves a project half-changed.** For example, assigning a file that is not a WAV leaves the pad as it was. A failed tune, mute-group or sequence edit no longer marks the project as having unsaved changes.
+- **The window's code can no longer load, assign or export using a file path of its own.** MPCkit only opens and writes files you picked in a dialog or dropped on a pad.
+- **Builds are reproducible:**
+  - the frontend's package versions are locked;
+  - npm won't pick a package version published in the last 7 days;
+  - unused server-mode and Docker build options are gone.
+
+## What changed
+
+- **Version 0.5.3** in every file the README's "Releasing" paragraph lists:
+  - `APP_VERSION` in `Taskfile.yml`, and `version` in `build/config.yml`;
+  - Windows: `build/windows/info.json` (four places), `wails.exe.manifest` and `nsis/wails_tools.nsh`;
+  - macOS: `build/darwin/Info.plist` and `Info.dev.plist` (two places each);
+  - Linux: `build/linux/nfpm/nfpm.yaml`.
+- **Examples updated:** the `Version` comment's example in `internal/app/app.go`, and the README's About example.
+- **No toolchain change:** `go.mod` keeps `toolchain go1.27.4` from 0.5.2, and `govulncheck` still finds nothing.
+
+**PRs in this release:**
+
+| PR | Branch | Findings fixed | What it did |
+| --- | --- | --- | --- |
+| 5 | `unbind-paths` | S4 | Export goes where the dialog chose; no bound method takes a path. |
+| 6 | `atomic-edits` | M3, M4 | Edits are all-or-nothing; project state is only written by `project`. |
+| 7 | `a1-labels` | M6 | "A1" labels everywhere. |
+| 8 | `build-cleanup` | S6 (without CI), M7, M8, R1 | Lockfile, `.npmrc` `min-release-age=7`, no server, Docker or cross-compile tasks, config clean-up, unused `Version()` removed. |
+| 8b | `bound-surface` | S4 (rest) | Go-only methods on an unbound `Host`, bound methods pinned by `TestBoundMethods`, and `CancelExport`. |
+
+## Notes
+
+- **The review's open items** are in the plan's Backlog: S5, M9–M11 and R2–R7. None of them blocks this release.
+- **Open question 7 is unrelated to these fixes and still open:** whether `currentSequence` holds a slot or a list position.
+
+## Testing
+
+**On the server, every command with `GOTOOLCHAIN=go1.27.4`:**
+- `go test ./...` passes.
+- `go vet ./...` (also with `GOOS=windows`) and `staticcheck ./...` are clean.
+- **`govulncheck ./...`: "No vulnerabilities found."**
+- In `frontend`: `npm ci`, `npm run check` (0 errors, 0 warnings) and `npm run build`.
+- `wails3 build` builds. `go version bin/mpckit` says `go1.27.4`, the binary carries version `0.5.3`, and it starts under Xvfb.
+
+**On the laptop (PowerShell, in the repo):**
+1. `git fetch; git checkout release-0-5-3`
+2. `wails3 build`, then run `bin\mpckit.exe`. About shows "Version 0.5.3" and a Build line.
+3. Properties → Details of `bin\mpckit.exe`: product version 0.5.3.
+4. `go version bin\mpckit.exe`: `go1.27.4`.
+5. Quick tour:
+   - load `testdata\device\DemoFile.xpj`: the pads show "A1"-style labels;
+   - preview a pad;
+   - export to a folder, then export again and choose Cancel at "Replace existing files?".
+6. Optional: `go run golang.org/x/vuln/cmd/govulncheck@latest ./...` reports "No vulnerabilities found."