Files
lanework/RELEASE.md
T
rzen aad8857ea0 Set up distribution and release
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
2026-07-29 13:43:26 -04:00

4.7 KiB

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:
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.