From 9e973dae320abe09846207d7831680da560230b4 Mon Sep 17 00:00:00 2001 From: TuringLambdaAI Date: Tue, 20 Oct 2026 16:29:51 +0800 Subject: [PATCH 1/3] fix(macos): align DMG drag arrow and regenerate artwork for package builds --- .github/workflows/acceptance.yml | 4 ++++ .github/workflows/release.yml | 6 ++++++ assets/dmg-background.svg | 17 +++++++++-------- scripts/render-dmg-background.sh | 26 ++++++++++++++++++++++++++ shared/spec/DESIGN-TOKENS.md | 11 +++++++++++ 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100755 scripts/render-dmg-background.sh diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index 8b2c0a49..8a9b7ad8 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -74,6 +74,10 @@ jobs: run: | raco pkg install --auto --no-docs "https://github.com/turinglambdaai/keel.git#${KEEL_PIN}" raco pkg install --auto --no-docs "https://github.com/turinglambdaai/rivet.git#${RIVET_PIN}" + - name: Render DMG artwork from SVG + run: | + brew install librsvg + bash scripts/render-dmg-background.sh - name: Run executable acceptance contract shell: bash run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3fba709d..3743d25b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -45,6 +45,12 @@ jobs: raco pkg install --auto --no-docs 'https://github.com/turinglambdaai/rivet.git#${{ env.RIVET_PIN }}' - name: Version preflight (VERSION == rivet.rktd == updater == tag) run: bash scripts/check-release-version.sh "${{ github.ref_name }}" + # The Finder DMG uses the PNG, not the editable SVG. Regenerate it so + # artwork changes always land in the release (Rivet uses a 660x400 view). + - name: Render DMG artwork from SVG + run: | + brew install librsvg + bash scripts/render-dmg-background.sh # DMG (human installer) + portable zip + SBOM + notices, launch # smoke included. The macOS update feed entry is the portable zip, # assembled by scripts/make-update-manifest.sh in the publish job. diff --git a/assets/dmg-background.svg b/assets/dmg-background.svg index d7cded46..b0be4f89 100644 --- a/assets/dmg-background.svg +++ b/assets/dmg-background.svg @@ -7,10 +7,6 @@ - - - - @@ -19,10 +15,15 @@ taskly A focused, keyboard-friendly task manager - - - + + + Drag taskly into Applications to install diff --git a/scripts/render-dmg-background.sh b/scripts/render-dmg-background.sh new file mode 100755 index 00000000..11c35b26 --- /dev/null +++ b/scripts/render-dmg-background.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# The SVG is the editable source; Rivet stages the PNG named in rivet.rktd. +# Run before packaging on macOS so the release never ships stale artwork. +set -euo pipefail +root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +svg="$root/assets/dmg-background.svg" +png="$root/assets/dmg-background.png" +if ! command -v rsvg-convert >/dev/null 2>&1; then + echo "rsvg-convert is required (macOS: brew install librsvg)" >&2 + exit 1 +fi +rsvg-convert --format png --output "$png" "$svg" +# Fail before Rivet if the generated image no longer matches its fixed Finder +# window geometry (660x400 at 2x): a valid PNG may still crop/misalign icons. +python3 - "$png" <<'PY' +import struct +import sys +with open(sys.argv[1], "rb") as stream: + header = stream.read(24) +if header[:8] != b"\x89PNG\r\n\x1a\n" or header[12:16] != b"IHDR": + raise SystemExit("DMG artwork is not a valid PNG") +size = struct.unpack(">II", header[16:24]) +if size != (1320, 800): + raise SystemExit(f"DMG artwork must be 1320x800, got {size}") +print(f"Rendered DMG artwork: {size[0]}x{size[1]}") +PY diff --git a/shared/spec/DESIGN-TOKENS.md b/shared/spec/DESIGN-TOKENS.md index 853904b0..bb6a6b8f 100644 --- a/shared/spec/DESIGN-TOKENS.md +++ b/shared/spec/DESIGN-TOKENS.md @@ -109,3 +109,14 @@ accent-filled white-text rounded button. No chrome field borders anywhere. White rounded square (macOS-squircle radius ≈ 22.5%) with a quiet checklist mark: one system-blue rounded bar over two neutral (`#CECED3`) bars, staggered widths. Monochrome, no gradients — must read on light and dark docks alike. + +## macOS DMG artwork contract + +- The editable source is `assets/dmg-background.svg`; the shipping installer + embeds `assets/dmg-background.png`, regenerated before macOS release and + packaged acceptance by `scripts/render-dmg-background.sh` (`librsvg`). +- Finder's branded installer is 660×400 points at 2× scale, requiring a + 1320×800 background. The Taskly and Applications icon slots are controlled + by pinned Rivet (positions 130,160 and 450,160 at 80pt icons). Keep the + straight drag arrow centered in the clear space between those slots and + do not draw art over the icon/label areas. From 8ef1c1e6e4d2ea87183aadf34239d8053a2b606c Mon Sep 17 00:00:00 2001 From: TuringLambdaAI Date: Tue, 20 Oct 2026 16:31:38 +0800 Subject: [PATCH 2/3] style(macos): improve DMG install instructions and Taskly branding --- assets/dmg-background.svg | 10 ++++++++-- shared/spec/DESIGN-TOKENS.md | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/assets/dmg-background.svg b/assets/dmg-background.svg index b0be4f89..371f6af8 100644 --- a/assets/dmg-background.svg +++ b/assets/dmg-background.svg @@ -12,9 +12,15 @@ - taskly + Taskly A focused, keyboard-friendly task manager + + DRAG TO INSTALL + @@ -25,5 +31,5 @@ fill="none" stroke="#c15f3c" stroke-opacity="0.88" stroke-width="9" stroke-linejoin="round" stroke-linecap="round"/> - Drag taskly into Applications to install + Drag Taskly into Applications diff --git a/shared/spec/DESIGN-TOKENS.md b/shared/spec/DESIGN-TOKENS.md index bb6a6b8f..e5ad9313 100644 --- a/shared/spec/DESIGN-TOKENS.md +++ b/shared/spec/DESIGN-TOKENS.md @@ -119,4 +119,6 @@ widths. Monochrome, no gradients — must read on light and dark docks alike. 1320×800 background. The Taskly and Applications icon slots are controlled by pinned Rivet (positions 130,160 and 450,160 at 80pt icons). Keep the straight drag arrow centered in the clear space between those slots and - do not draw art over the icon/label areas. + do not draw art over the icon/label areas. The small `DRAG TO INSTALL` + cue and high-contrast bottom instruction sit entirely in the background's + clear middle and lower text zones, never underneath Finder's icon labels. From a91a78e8267746c60727203bff5a961951e12889 Mon Sep 17 00:00:00 2001 From: TuringLambdaAI Date: Wed, 21 Oct 2026 00:40:18 +0800 Subject: [PATCH 3/3] docs(macos): require mounted DMG visual check before release --- shared/spec/DESIGN-TOKENS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shared/spec/DESIGN-TOKENS.md b/shared/spec/DESIGN-TOKENS.md index e5ad9313..1270ee11 100644 --- a/shared/spec/DESIGN-TOKENS.md +++ b/shared/spec/DESIGN-TOKENS.md @@ -122,3 +122,7 @@ widths. Monochrome, no gradients — must read on light and dark docks alike. do not draw art over the icon/label areas. The small `DRAG TO INSTALL` cue and high-contrast bottom instruction sit entirely in the background's clear middle and lower text zones, never underneath Finder's icon labels. +- Final visual acceptance must inspect the mounted DMG in Finder (not only the + raw SVG/PNG): app icon, Applications target, arrowhead and labels must stay + aligned at native scale. The 1320x800 renderer check is necessary but cannot + prove Finder's overlay composition is correct.