Promote nvrsion trunk → dev

Squash-merge nucleic/trunk into dev (234 commits of accumulated nvrsion work).

Resolved two auto-generated-file conflicts:
- cloud/nucleic-edge/wrangler.jsonc: kept dev's real KV namespace ids and the
  xyz.blakeslee.nucleic.remote APNS topic, with binding names corrected to
  RELAY_TOKENS/PUSH_TOKENS to match the worker code on both branches.
- Package.resolved: took trunk's newer dependency pins.

Nucleic-Promote: 1
Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Nucleic
2026-06-27 13:43:32 -07:00
co-authored by Claude Opus 4.8
parent efa94c51c8
commit b50cb60190
21 changed files with 3785 additions and 87 deletions
+50 -8
View File
@@ -28,8 +28,11 @@
# NUCLEIC_SIGN_ID codesign identity (default: "-", ad-hoc). Set to a Developer ID
# to sign for distribution (notarization/TestFlight is separate).
#
# An app icon is picked up automatically if present at Resources/AppIcon.icns
# (or per-channel Resources/AppIcon-<channel>.icns).
# An app icon is picked up automatically. Two formats, in priority order:
# Resources/AppIcon.icon — Icon Composer package (macOS 26 Liquid Glass). Carries the
# themed appearances (default/dark/clear/tinted); actool compiles it to Assets.car.
# • Resources/AppIcon.icns — legacy flat icon, no themed variants.
# Per-channel overrides (AppIcon-<channel>.{icon,icns}) take precedence over the generic names.
set -euo pipefail
@@ -134,16 +137,55 @@ else
echo " • kernel not bundled — it downloads automatically at runtime (optional: scripts/fetch-kernel.sh)"
fi
# Optional icon.
# Optional icon. Prefer a themed Icon Composer package (.icon → Assets.car via actool);
# fall back to a flat .icns. Per-channel files win over the generic names.
ICON_PLIST=""
ICON_SRC=""
[ -f "$ROOT/Resources/AppIcon-$CHANNEL.icns" ] && ICON_SRC="$ROOT/Resources/AppIcon-$CHANNEL.icns"
[ -z "$ICON_SRC" ] && [ -f "$ROOT/Resources/AppIcon.icns" ] && ICON_SRC="$ROOT/Resources/AppIcon.icns"
if [ -n "$ICON_SRC" ]; then
cp "$ICON_SRC" "$CONTENTS/Resources/AppIcon.icns"
ICON_SET="" # Resources/AppIcon[-<channel>].icon (Icon Composer, themed)
[ -d "$ROOT/Resources/AppIcon-$CHANNEL.icon" ] && ICON_SET="$ROOT/Resources/AppIcon-$CHANNEL.icon"
[ -z "$ICON_SET" ] && [ -d "$ROOT/Resources/AppIcon.icon" ] && ICON_SET="$ROOT/Resources/AppIcon.icon"
ICON_ICNS="" # Resources/AppIcon[-<channel>].icns (legacy flat fallback)
[ -f "$ROOT/Resources/AppIcon-$CHANNEL.icns" ] && ICON_ICNS="$ROOT/Resources/AppIcon-$CHANNEL.icns"
[ -z "$ICON_ICNS" ] && [ -f "$ROOT/Resources/AppIcon.icns" ] && ICON_ICNS="$ROOT/Resources/AppIcon.icns"
if [ -n "$ICON_SET" ]; then
# actool consumes the .icon directly (no .xcassets wrapper) and emits Assets.car into
# Contents/Resources. --app-icon names the icon; CFBundleIconName resolves that name
# against the compiled catalog at launch and is what enables the themed appearances.
# actool's partial plist is unusable on macOS (it omits CFBundleIconName), so we discard
# it and write the key ourselves below. ICON_NAME = the .icon basename (matches per-channel).
ICON_NAME="$(basename "$ICON_SET" .icon)"
echo " • compiling themed app icon: ${ICON_SET#"$ROOT/"} (CFBundleIconName=$ICON_NAME)"
ACTOOL_PLIST="$(mktemp -t actool-partial-plist)"
xcrun actool "$ICON_SET" \
--compile "$CONTENTS/Resources" \
--app-icon "$ICON_NAME" \
--include-all-app-icons \
--output-partial-info-plist "$ACTOOL_PLIST" \
--enable-on-demand-resources NO \
--development-region en \
--target-device mac \
--platform macosx \
--minimum-deployment-target 26.0 \
--output-format human-readable-text --notices --warnings --errors
rm -f "$ACTOOL_PLIST"
ICON_PLIST="
<key>CFBundleIconName</key>
<string>$ICON_NAME</string>"
# Ship a flat .icns alongside if one exists — harmless belt-and-suspenders for contexts
# that look for an icon file rather than the asset catalog.
if [ -n "$ICON_ICNS" ]; then
cp "$ICON_ICNS" "$CONTENTS/Resources/AppIcon.icns"
ICON_PLIST="$ICON_PLIST
<key>CFBundleIconFile</key>
<string>AppIcon</string>"
fi
elif [ -n "$ICON_ICNS" ]; then
cp "$ICON_ICNS" "$CONTENTS/Resources/AppIcon.icns"
ICON_PLIST="
<key>CFBundleIconFile</key>
<string>AppIcon</string>"
else
echo " • no app icon found (Resources/AppIcon.icon or AppIcon.icns) — using system default"
fi
# Sparkle auto-update keys. Embedded only for the distribution channels (beta/rc/stable) and