Records the channel decision: the Mac App Store, as version 2.0 of the existing dev.rzen.indie.Kanban record - the 1.x app already listed there under the Lanework name. The question the card held open was settled by three prior rulings (the edition split's separate App Store targets with base keeping the shipping bundle id, the 2.0 marketing version, and the account's App-Store-shaped tooling); RELEASE.md records the reasoning and why notarized-direct is not pursued for 2.0. Pipeline carried over from the 1.x repo: scripts/release.sh (archive + destination=upload export, --platform macos reminders in its epilogue), ExportOptions-macOS.plist, .env.release.example (+ .gitignore entry for the real credentials). scripts/metadata/ holds the fresh 2.0 listing - rewritten description/what's-new for the rewrite (plain-files boards, live outside edits, card windows, trash, undo, templates, agent guide, accessibility), carried keywords/URLs/categories/pricing (free)/ availability (ALL), and review notes updated to the 2.0 UI. All fields within API limits; asc-metadata --dry-run validates end-to-end against the live record (version 2.0 would be created; pricing and availability already correct). Local Release archive verified: Lanework 2.0 build 165, signed, correct identity. Remaining steps are deliberately user-gated at RELEASE.md's PUSH POINT: screenshots need a real display, and everything past the archive writes to the live record of a shipping 1.x app. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
49 lines
4.7 KiB
Markdown
49 lines
4.7 KiB
Markdown
# Distribution and release
|
|
|
|
## The channel decision (recorded 2026-07-29)
|
|
|
|
**Lanework ships on the Mac App Store**, as version 2.0 of the existing `dev.rzen.indie.Kanban` App Store record — the 1.x app already listed there under the name Lanework. This was not an open question by the time this document was written; three prior rulings settle it:
|
|
|
|
- The 2026-07-27 edition split (DESIGN/12-editions.md) defines the editions as **separate App Store targets** and gave base Lanework the existing `dev.rzen.indie.Kanban` bundle id precisely so it ships as the update to the existing record; Lanework Pro (`dev.rzen.indie.KanbanPro`) becomes its own record when it ships after pro-m1/pro-m2.
|
|
- The marketing version has been 2.0 since m3 — the successor numbering of the shipped 1.x.
|
|
- The portfolio's whole release tooling (appstore-publish skill, `asc-*.swift` scripts, the account's API key) is App-Store-shaped, and the 1.x pipeline for this very record already exists and works.
|
|
|
|
Notarized direct distribution is deliberately **not** pursued for 2.0: a second channel means a second update path and a second set of listing assets for no current audience, and nothing in the app requires escaping the App Store's sandbox rules (the app is already sandboxed with user-selected file access; base has no network entitlement at all). Revisit only if App Review rejects something architectural.
|
|
|
|
## The pipeline
|
|
|
|
Carried over from the 1.x release (same record, same scheme names — the pathfinder repo's pipeline, now living here):
|
|
|
|
- `scripts/release.sh` — XcodeGen regenerate, `xcodebuild archive` (Release, generic/platform=macOS), `-exportArchive` with `scripts/ExportOptions-macOS.plist` (`destination=upload` — straight to App Store Connect). Build number = git commit count, stamped by the existing post-build phase.
|
|
- `.env.release` (gitignored; `.env.release.example` committed) — account-level App Store Connect API credentials.
|
|
- `scripts/metadata/` — the listing source of truth (name, subtitle, description, keywords, what's-new, URLs, categories, pricing, availability, review notes). Pushed with the canonical scripts, **always with `--platform macos`**:
|
|
|
|
```sh
|
|
set -a; source .env.release; set +a; swift ../indie-skills/skills/appstore-publish/scripts/asc-metadata.swift --bundle dev.rzen.indie.Kanban --version 2.0 --platform macos --dry-run
|
|
```
|
|
|
|
- Screenshots: `scripts/metadata/screenshots/en-US/APP_DESKTOP/` — needs fresh 2.0 captures (see checklist).
|
|
|
|
## First-release (2.0) checklist
|
|
|
|
Run top to bottom; nothing below "PUSH POINT" may run without a deliberate decision — every step after it writes to the live App Store record of a shipping 1.x app.
|
|
|
|
1. [ ] All milestone work committed and pushed (build number = commit count).
|
|
2. [ ] Both unit suites green: `xcodebuild test … -scheme Kanban` and `… -scheme LaneworkPro` (`-only-testing:KanbanTests` / `KanbanProTests`).
|
|
3. [ ] `scripts/verify-editions.sh` — 26/26.
|
|
4. [ ] UI test pass on a real display (KanbanUITests: accessibility audits + end-to-end golden flows), plus the manual checklists (`KanbanUITests/AccessibilityVerification.md`, toolbar/undo/trash/drag-preview lists).
|
|
5. [ ] CHANGELOG.md current (it is the in-app release notes) — What's New (`scripts/metadata/version/en-US/whats_new.txt`) tells the same story.
|
|
6. [ ] Screenshots: capture the 2.0 board on a real display (APP_DESKTOP sizes come straight from screenshots of the running app; numeric filename prefixes set the store order).
|
|
7. [ ] Archive dry run: `scripts/release.sh` at least through the archive step completes locally.
|
|
8. **— PUSH POINT (everything below touches the live record) —**
|
|
9. [ ] `scripts/release.sh` — archive + upload the build.
|
|
10. [ ] Metadata dry run, then push (`asc-metadata.swift --platform macos`, commands above).
|
|
11. [ ] Verify pricing (currently free, carried from 1.x) and availability (ALL territories) still match intent — Pro will be the paid tier later.
|
|
12. [ ] Stage: `asc-submit.swift --bundle dev.rzen.indie.Kanban --version 2.0 --platform macos` (waits for build processing, attaches, stages the review submission — does not submit).
|
|
13. [ ] Review the staged listing at appstoreconnect.apple.com (age rating, privacy labels, and content rights carry over from 1.x — the stage step's errors will name anything missing).
|
|
14. [ ] Submit: the same command with `--submit`.
|
|
|
|
## Lanework Pro (later)
|
|
|
|
Pro ships after pro-m1 (git history) and pro-m2 (remote sync) as a **new** App Store record: bundle id `dev.rzen.indie.KanbanPro`, its own metadata folder and pricing (paid), created by hand in App Store Connect first (the API cannot create app records). The `scripts/release.sh` config block parameterizes to the `LaneworkPro` scheme at that point; everything else in the pipeline is shared.
|