Phase 1 of the 2026-07-30 one-app pivot (DESIGN 0bec9a6, card c3a3ddd5):
the KanbanPro target, LaneworkPro scheme, KanbanProTests module-alias
bundle, KanbanPro/ source root and scripts/verify-editions.sh retire
wholesale. project.yml reads as a single-target file again (anchors
inlined, header rewritten in tier vocabulary).
The edition twins merge: EditionTypes -> PasteboardTypes (one
UTType(exportedAs:) home — the one app owns the family types),
EditionAbout -> AboutBox (the quiet Pro signpost survives as the About
box's one line; "…in Settings" deferred until the StoreKit phase gives
it somewhere to point). InertGitTests drops its Base prefix — the
inert-.git posture is unconditional app behavior, unsubscribed and
lapsed being one state.
Entitlements gain com.apple.security.network.client, declared now and
dormant until Pro's remotes use it; no keychain access group. The App
Group key deliberately stays — it goes with AppGroup.swift in phase 2,
since pulling it first would silently drop the app into the fallback
container. README/RELEASE.md build-and-pipeline prose updated to the
one-record world; the subscription story lands with phase 3.
1893 tests in 322 suites green.
Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
4.9 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 one-app collapse (DESIGN/12-editions.md, re-ruled 2026-07-30, superseding the 2026-07-27 two-app split) puts the whole family on one record:
dev.rzen.indie.Kanban, the id 1.x already ships under, so 2.0 is simply its update. Lanework Pro arrives inside it as a subscription after pro-m1/pro-m2, never as a second record. - 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-*.swiftscripts, 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, and its network-client entitlement stays dormant until Pro's remotes use it). 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),-exportArchivewithscripts/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.examplecommitted) — 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.
- All milestone work committed and pushed (build number = commit count).
- Unit suite green:
xcodebuild test -project Kanban.xcodeproj -scheme Kanban -destination 'platform=macOS,arch=arm64' -only-testing:KanbanTests. - 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). - 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. - 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).
- Archive dry run:
scripts/release.shat least through the archive step completes locally. - — PUSH POINT (everything below touches the live record) —
scripts/release.sh— archive + upload the build.- Metadata dry run, then push (
asc-metadata.swift --platform macos, commands above). - Verify pricing (currently free, carried from 1.x) and availability (ALL territories) still match intent — Pro will be the paid tier later.
- 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). - 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).
- Submit: the same command with
--submit.
Lanework Pro (later)
Pro is a subscription inside this app, not a second record (DESIGN/12-editions.md ▸ Distribution, re-ruled 2026-07-30): the two-app split that once wanted its own bundle id, metadata folder and scheme here is retired. It ships after pro-m1 (git history) and pro-m2 (remote sync) as an auto-renewable subscription configured against dev.rzen.indie.Kanban in App Store Connect. Nothing in this pipeline changes for it — same scheme, same archive, same upload; the subscription products and their review materials are the added work, and this section gets its steps when that phase is designed.