From d97a596780890c440ef05b6d3db2e561680f3632 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 28 Oct 2026 11:51:58 -0400 Subject: [PATCH 1/3] macOS packaging: retry stapler when Apple's CloudKit drops the connection Co-Authored-By: Claude Opus 5.5 --- packaging/macos/package.sh | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/packaging/macos/package.sh b/packaging/macos/package.sh index ef7f99c5..2fba0d14 100755 --- a/packaging/macos/package.sh +++ b/packaging/macos/package.sh @@ -80,6 +80,21 @@ sign() { codesign --force --sign "$IDENTITY" ${kc[@]+"${kc[@]}"} "${ts[@]}" "$@" } +# `stapler staple` and `stapler validate` both fetch the ticket from Apple's CloudKit, and a dropped +# connection there (NSURLErrorDomain -1005, "Error 68") fails them although notarization worked. +# Both are idempotent, so retry with a pause; a missing or bad ticket still fails every try. +stapler_retry() { + local try + for try in 1 2 3 4; do + xcrun stapler "$1" "$2" && return 0 + [[ "$try" = 4 ]] && break + echo "stapler $1 failed (try $try of 4); retrying in $((try * 20)) s" >&2 + sleep $((try * 20)) + done + echo "error: stapler $1 $(basename "$2") failed 4 times" >&2 + exit 1 +} + notarize() { local file="$1" out id status echo "==> notarizing $(basename "$file") (this can take a few minutes)" @@ -121,8 +136,8 @@ codesign --verify --strict --deep --verbose=2 "$APP" if [[ "$NOTARIZE" = 1 ]]; then ditto -c -k --keepParent "$APP" "$WORK/DeckCraft-notarize.zip" notarize "$WORK/DeckCraft-notarize.zip" - xcrun stapler staple "$APP" - xcrun stapler validate "$APP" + stapler_retry staple "$APP" + stapler_retry validate "$APP" spctl --assess --type execute -vvv "$APP" fi @@ -147,8 +162,8 @@ sign "$DMG" codesign --verify --strict --verbose=2 "$DMG" if [[ "$NOTARIZE" = 1 ]]; then notarize "$DMG" - xcrun stapler staple "$DMG" - xcrun stapler validate "$DMG" + stapler_retry staple "$DMG" + stapler_retry validate "$DMG" spctl --assess --type open --context context:primary-signature -vvv "$DMG" fi From 29f0f7772c47aa2bfb74fcbb0c4d3b1503300849 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 28 Oct 2026 11:52:01 -0400 Subject: [PATCH 2/3] Release 0.12.0 Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 56 +++++++++++++++++++++++++++--------------------------- Cargo.toml | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 01a92e4a..ed9a4995 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -983,7 +983,7 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "deckcraft" -version = "0.11.1" +version = "0.12.0" dependencies = [ "arboard", "chrono", @@ -1005,7 +1005,7 @@ dependencies = [ [[package]] name = "deckcraft-anim" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-geom", "deckcraft-model", @@ -1014,7 +1014,7 @@ dependencies = [ [[package]] name = "deckcraft-av1" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-bitstream", "rayon", @@ -1023,14 +1023,14 @@ dependencies = [ [[package]] name = "deckcraft-bitstream" -version = "0.11.1" +version = "0.12.0" dependencies = [ "craft-media", ] [[package]] name = "deckcraft-cli" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-engine", "deckcraft-mcp", @@ -1040,14 +1040,14 @@ dependencies = [ [[package]] name = "deckcraft-color" -version = "0.11.1" +version = "0.12.0" dependencies = [ "serde", ] [[package]] name = "deckcraft-engine" -version = "0.11.1" +version = "0.12.0" dependencies = [ "chrono", "deckcraft-anim", @@ -1073,7 +1073,7 @@ dependencies = [ [[package]] name = "deckcraft-fonts" -version = "0.11.1" +version = "0.12.0" dependencies = [ "epaint_default_fonts", "harfrust 0.13.3", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "deckcraft-format" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-model", "serde", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "deckcraft-geom" -version = "0.11.1" +version = "0.12.0" dependencies = [ "kurbo", "serde", @@ -1104,7 +1104,7 @@ dependencies = [ [[package]] name = "deckcraft-h264" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-bitstream", "rayon", @@ -1113,7 +1113,7 @@ dependencies = [ [[package]] name = "deckcraft-hevc" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-bitstream", "rayon", @@ -1122,21 +1122,21 @@ dependencies = [ [[package]] name = "deckcraft-isobmff" -version = "0.11.1" +version = "0.12.0" dependencies = [ "craft-media", ] [[package]] name = "deckcraft-matroska" -version = "0.11.1" +version = "0.12.0" dependencies = [ "craft-media", ] [[package]] name = "deckcraft-mcp" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-engine", "deckcraft-render", @@ -1146,7 +1146,7 @@ dependencies = [ [[package]] name = "deckcraft-media" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-av1", "deckcraft-h264", @@ -1164,7 +1164,7 @@ dependencies = [ [[package]] name = "deckcraft-metafile" -version = "0.11.1" +version = "0.12.0" dependencies = [ "image", "kurbo", @@ -1173,7 +1173,7 @@ dependencies = [ [[package]] name = "deckcraft-model" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-color", "deckcraft-geom", @@ -1185,15 +1185,15 @@ dependencies = [ [[package]] name = "deckcraft-ogg" -version = "0.11.1" +version = "0.12.0" [[package]] name = "deckcraft-opus" -version = "0.11.1" +version = "0.12.0" [[package]] name = "deckcraft-pdf" -version = "0.11.1" +version = "0.12.0" dependencies = [ "craft-pdf", "deckcraft-fonts", @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "deckcraft-pptx" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-color", "deckcraft-engine", @@ -1227,7 +1227,7 @@ dependencies = [ [[package]] name = "deckcraft-render" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-anim", "deckcraft-color", @@ -1246,7 +1246,7 @@ dependencies = [ [[package]] name = "deckcraft-text" -version = "0.11.1" +version = "0.12.0" dependencies = [ "chrono", "deckcraft-color", @@ -1260,7 +1260,7 @@ dependencies = [ [[package]] name = "deckcraft-ui-egui" -version = "0.11.1" +version = "0.12.0" dependencies = [ "craft-ui", "craft-update", @@ -1285,7 +1285,7 @@ dependencies = [ [[package]] name = "deckcraft-vp9" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-bitstream", "rayon", @@ -1294,7 +1294,7 @@ dependencies = [ [[package]] name = "deckcraft-web" -version = "0.11.1" +version = "0.12.0" dependencies = [ "deckcraft-engine", "deckcraft-ui-egui", @@ -6176,7 +6176,7 @@ checksum = "9440ea3e5aeabb0ac63af70daf835274065238cdd0cec83418f417eae38bacee" [[package]] name = "xtask" -version = "0.11.1" +version = "0.12.0" dependencies = [ "serde_json", ] diff --git a/Cargo.toml b/Cargo.toml index 8d46cd43..07960495 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"] default-members = ["crates/*", "apps/deckcraft", "apps/deckcraft-cli"] [workspace.package] -version = "0.11.1" +version = "0.12.0" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.95" From c2f33974839a74e5155a4df47d9f3fe5ae9b8d7b Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Wed, 28 Oct 2026 13:07:13 -0400 Subject: [PATCH 3/3] Grant network access so update checks can reach GitHub (#1502) --- packaging/linux/flatpak/ai.storyteller.deckcraft.bundle.yml | 6 +++--- packaging/linux/flatpak/ai.storyteller.deckcraft.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/linux/flatpak/ai.storyteller.deckcraft.bundle.yml b/packaging/linux/flatpak/ai.storyteller.deckcraft.bundle.yml index 6245147c..230c2289 100644 --- a/packaging/linux/flatpak/ai.storyteller.deckcraft.bundle.yml +++ b/packaging/linux/flatpak/ai.storyteller.deckcraft.bundle.yml @@ -31,9 +31,9 @@ finish-args: # document portal, so picked files work anywhere without broad filesystem access. Documents is # granted so decks passed by path (the command line, Open Recent) work in the usual place. - --filesystem=xdg-documents - # Deliberately not granted: network (the optional --control server listens on 127.0.0.1 in - # the sandbox; `flatpak override --user --share=network ai.storyteller.deckcraft` exposes it to - # host agents) and home/host filesystem access. + # Network: update checks reach GitHub. The optional --control server still listens on 127.0.0.1 + # only. Home/host filesystem access is deliberately not granted. + - --share=network modules: - name: deckcraft buildsystem: simple diff --git a/packaging/linux/flatpak/ai.storyteller.deckcraft.yml b/packaging/linux/flatpak/ai.storyteller.deckcraft.yml index 574dbc86..b99365c2 100644 --- a/packaging/linux/flatpak/ai.storyteller.deckcraft.yml +++ b/packaging/linux/flatpak/ai.storyteller.deckcraft.yml @@ -32,9 +32,9 @@ finish-args: # document portal, so picked files work anywhere without broad filesystem access. Documents is # granted so decks passed by path (the command line, Open Recent) work in the usual place. - --filesystem=xdg-documents - # Deliberately not granted: network (the optional --control server listens on 127.0.0.1 in - # the sandbox; `flatpak override --user --share=network ai.storyteller.deckcraft` exposes it to - # host agents) and home/host filesystem access. + # Network: update checks reach GitHub. The optional --control server still listens on 127.0.0.1 + # only. Home/host filesystem access is deliberately not granted. + - --share=network build-options: append-path: /usr/lib/sdk/rust-stable/bin modules: