From 9b31b1f6e769c8231cc9c8093de547f79c18d4ff Mon Sep 17 00:00:00 2001 From: magdev Date: Sun, 3 May 2026 13:07:04 +0200 Subject: [PATCH] plan: defer macOS + Windows packaging from v0.2.0 to v0.9.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each cross-platform target carries operational prerequisites that v0.2.0 isn't ready to absorb (Apple Developer cert + notarisation pipeline + macOS runner; Authenticode cert + SmartScreen reputation warm-up + Windows runner). Folding both into the next minor would either delay v0.2.0 indefinitely or ship a half-done port. Better: keep Linux AppImage as the only packaged target until the framework's public API surface settles, then concentrate the cross-platform push into a single v0.9.0 release-candidate milestone right before v1.0.0. The §11 *Distribution UX* foot-guns (Gatekeeper, SmartScreen, AV pre-submissions, file-association docs) ride along with that milestone. v0.2.0 stays focused on the smaller deferred items (deferred makers, ReactiveObject pagination, qmltestrunner, end-to-end UI test, auto-backup, bridge:export, periodic auto-update, build-time cache warmup, native-dialog boundary doc) — all things a Linux-only contributor can deliver without operational blockers. Co-Authored-By: Claude Opus 4.7 (1M context) --- PLAN.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/PLAN.md b/PLAN.md index 888a627..6846ced 100644 --- a/PLAN.md +++ b/PLAN.md @@ -542,12 +542,7 @@ Open follow-ups from v0.1.0 shakedown: ### v0.2.0 — next minor -Pulls in the originally-Phase-3/4/5-deferred items that don't need new operational dependencies, plus the smaller §12 risks. - -**Packaging (was Phase 4b / 4c):** - -- **macOS packaging.** `.app` bundle + `.dmg` + Sparkle 2 + notarization. Hard prerequisites: self-hosted macOS runner, Apple Developer cert ($99/yr). -- **Windows packaging.** NSIS installer + WinSparkle + Authenticode signing. Hard prerequisites: self-hosted Windows runner, code-signing cert. +Pulls in the originally-Phase-3/5-deferred items that don't need new operational dependencies, plus the smaller §12 risks. Cross-platform packaging is parked at v0.9.0 — the operational lift (self-hosted runners + platform certs) is too big to fold into the next minor and Linux remains the primary target until the framework's surface stabilises. **Makers + reactive types (Phase 3.x deferred):** @@ -579,6 +574,14 @@ Bigger pieces still deferred (each warrants its own minor, not v0.2.0 noise): - **Flathub / Snap packaging** (§12). Better discoverability than AppImage at the cost of additional packaging surfaces. - **Composer `create-project` package** (Phase 5 out-of-scope). Publish `php-qml/skeleton` as a composer template so `composer create-project php-qml/skeleton my-app` works. Bash `bin/php-qml-init` stays for curl-bootstrap. +### v0.9.0 — cross-platform packaging (release-candidate milestone) + +Locks down the cross-platform story before promoting to v1.0.0. Held until v0.9.0 (rather than v0.2.0) because each item carries operational prerequisites (paid certs, self-hosted runners, platform-specific notarisation pipelines) that are easier to absorb in a single concentrated push than to drip-feed across minors. Linux AppImage stays the only packaged target until then. + +- **macOS packaging** (was Phase 4b). `.app` bundle + `.dmg` + Sparkle 2 + notarization. Prerequisites: self-hosted macOS runner, Apple Developer cert ($99/yr), notarisation toolchain. +- **Windows packaging** (was Phase 4c). NSIS installer + WinSparkle + Authenticode signing. Prerequisites: self-hosted Windows runner, code-signing cert (EV preferred to dodge SmartScreen reputation warm-up). +- **Per-platform first-launch UX** (§11, *Distribution UX*). Gatekeeper / SmartScreen / AV-vendor pre-submissions, file-association docs, App Store path decisions. + ### v1.0.0 — when When the public API (Symfony bundle services + attributes, Qt module C++ types + QML elements, maker output) is stable enough to commit to compatibility for. Items still in flux that should settle before this: