From 307d0f2975b598061badfbe444175cd975e8a07f Mon Sep 17 00:00:00 2001 From: Fernando Abishai Date: Sun, 18 Oct 2026 16:10:20 -0700 Subject: [PATCH] release: prepare Cutmark v0.3.0 ad-hoc distribution --- .github/workflows/release.yml | 13 ++++++++++--- README.md | 2 +- docs/releases/v0.3.0.md | 34 ++++++++++++++++++++++++++++++++++ docs/releasing.md | 7 ++++--- scripts/version.sh | 2 +- 5 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 docs/releases/v0.3.0.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4a3e571..1782fd0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,7 +38,8 @@ jobs: echo "Reusing successful CI run $run_id for $GITHUB_SHA." legacy-release: - if: github.ref_name == 'v0.2.0' + # Explicit, version-scoped ad-hoc distribution; never weaken the protected production gate. + if: github.ref_name == 'v0.2.0' || github.ref_name == 'v0.3.0' needs: verify-ci runs-on: xcode-27 timeout-minutes: 20 @@ -64,10 +65,15 @@ jobs: - name: Verify legacy release artifact run: | test -f build.noindex/Cutmark.dmg + app=build.noindex/Cutmark.app + plist="$app/Contents/Info.plist" + test "$(/usr/libexec/PlistBuddy -c 'Print :ReleaseTag' "$plist")" = "$GITHUB_REF_NAME" + test "$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$plist")" = "${GITHUB_REF_NAME#v}" + codesign --display --verbose=4 "$app" 2>&1 | grep -F 'Signature=adhoc' codesign --verify --deep --strict build.noindex/Cutmark.app hdiutil verify -quiet build.noindex/Cutmark.dmg codesign --verify build.noindex/Cutmark.dmg - shasum -a 256 build.noindex/Cutmark.dmg + (cd build.noindex && shasum -a 256 Cutmark.dmg > SHA256SUMS && shasum -a 256 -c SHA256SUMS) - name: Create GitHub Release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -76,12 +82,13 @@ jobs: test -f "$notes" gh release create "${GITHUB_REF_NAME}" \ build.noindex/Cutmark.dmg \ + build.noindex/SHA256SUMS \ --repo "${GITHUB_REPOSITORY}" \ --title "Cutmark ${GITHUB_REF_NAME#v}" \ --notes-file "$notes" release: - if: github.ref_name != 'v0.2.0' + if: github.ref_name != 'v0.2.0' && github.ref_name != 'v0.3.0' needs: verify-ci runs-on: xcode-27 timeout-minutes: 90 diff --git a/README.md b/README.md index 82d0c4e..224fc71 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The first-run setup can guide you through missing dependencies. No AI provider i Download `Cutmark.dmg` from the latest GitHub release, open it, and copy `Cutmark.app` to Applications. -The current latest public release, Cutmark 0.2.0, uses the same ad-hoc signing channel as 0.1.1 and is not notarized. On first launch, macOS may require **System Settings → Privacy & Security → Open Anyway**. The repository also has a protected Developer ID + Apple notarization path for future production-signed releases once Apple credentials are configured. +Cutmark 0.3.0 uses an explicitly authorized ad-hoc signing channel, like 0.2.0, and is **not notarized**. On first launch, macOS may require **System Settings → Privacy & Security → Open Anyway**. The repository retains a separate, protected Developer ID + Apple notarization path for production-signed releases once Apple credentials are configured. ## Build from source diff --git a/docs/releases/v0.3.0.md b/docs/releases/v0.3.0.md new file mode 100644 index 0000000..5ec8285 --- /dev/null +++ b/docs/releases/v0.3.0.md @@ -0,0 +1,34 @@ +# Cutmark 0.3.0 + +Cutmark 0.3.0 adds a visual, non-destructive timeline editor alongside more flexible screen recording and a faster path from capture to review. + +## Recording + +- **Three capture modes:** record camera, screen, or camera and screen together. Screen-only mode does not create a camera take. +- **Source selection:** choose a display or an application window for screen capture, with fail-closed behavior if a selected window disappears. +- **Recording controls:** keep the pre-record button fixed at the bottom center while the active recording controls can be moved. +- **Capture recovery:** preserve per-take recording claims and recover playable camera or screen media after interruption when possible. + +## Visual timeline editing + +- **Real cut preview:** review actual selected footage in a larger editing workspace with a filmstrip, audio waveform, time ruler, and draggable playhead. +- **Non-destructive operations:** trim, re-extend to the original source range, split, reorder, duplicate, remove and undo without altering the original recording. +- **Navigation:** scrub from the ruler or media lanes, zoom to fit and adjust timeline zoom. Extra workspace after the clip does not add blank seconds to the exported edit. +- **Screen recording compatibility:** handle sparse or variable-frame-rate screen captures using available source metadata instead of rejecting a playable clip solely because its minimum frame duration is unusual. +- **MCP editing:** support reviewed timeline plans, including trim extension, through the Cutmark integration. + +## Review and updates + +- **After-stop preview:** once a take is saved, a small lower-left preview offers playback, review, and an Edit action without duplicating the recording. +- **Check for Updates:** a visible manual command in both the Cutmark app menu and the in-app menu reports whether an update is available or verification failed; checking does not automatically install an update. + +## Distribution and compatibility + +- **Platform:** macOS 15 or later on Apple silicon. The iPhone companion is not part of this release. +- **Signing:** this release intentionally uses the existing **ad-hoc signed, non-notarized** distribution channel. The separate Developer ID/notarization workflow remains fail-closed for other future release tags. +- **macOS Gatekeeper:** first launch may require **System Settings → Privacy & Security → Open Anyway**. +- **Validation:** CI tests/build and a manual Cutmark Smoke R5 check passed before merging the editor changes. Not every camera, microphone, window, or multi-monitor hardware combination was exercised. + +## Install + +Download `Cutmark.dmg`, verify its SHA-256 against `SHA256SUMS`, open the disk image, and drag `Cutmark.app` into Applications. Updating may require granting camera, microphone, or screen-recording permission again because this release is signed ad-hoc rather than with a stable Apple Developer ID. diff --git a/docs/releasing.md b/docs/releasing.md index 6615a1b..f687d43 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -19,9 +19,10 @@ CI result rather than repeating the entire test suite. A GitHub release is a dis not the place to bypass the reviewed source changes or validation. Do not create a tag to test an unfinished candidate. -The historical `v0.2.0` tag alone uses the legacy ad-hoc release job. All later versions use the -protected production signing and notarization gate described below; an ad-hoc test build is not -a substitute for the required release credentials. +Only `v0.2.0` and the expressly authorized `v0.3.0` use the legacy ad-hoc distribution job. +Neither is Apple notarized. All other release tags use the protected production signing and +notarization gate described below. An ad-hoc smoke build is not a substitute for a versioned +release artifact, and this exception must not automatically extend to future versions. ## GitHub environment diff --git a/scripts/version.sh b/scripts/version.sh index 57ac89f..d7e29ee 100755 --- a/scripts/version.sh +++ b/scripts/version.sh @@ -5,5 +5,5 @@ cd "$(dirname "$0")/.." || exit 0 git rev-parse --git-dir >/dev/null 2>&1 || exit 0 release="${CUTMARK_RELEASE:-$(git tag --points-at HEAD --list 'v[0-9]*.[0-9]*.[0-9]*' | sort -V | tail -1)}" version="${release#v}" -if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then version="0.2.0"; fi +if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then version="0.3.0"; fi echo "$version $(git rev-list --count HEAD)"