Răsfoiți Sursa

Merge branch 'release-0-5-3' of bajdev/mpckit into main

bajdev 1 oră în urmă
părinte
comite
c436348a3a

+ 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 on a project file with an unusual pad layout. 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."