Collapse the edition split — one target, twins merged, verify-editions retired

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
This commit is contained in:
2026-07-30 17:25:50 -04:00
parent f7c8088783
commit 092300c7d2
52 changed files with 253 additions and 905 deletions
+16 -8
View File
@@ -8,14 +8,22 @@
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<!-- The family App Group (12-editions.md ▸ Distribution, ruled 2026-07-29). Every edition
declares this same group id, and the board registry with its app-wide peers — the
clipboard's staging store, the shared defaults suite — homes in its container from day
one, so a paying upgrader launches Pro onto their own recents rather than an empty
screen. **It must be in base's shipped entitlements**: base ships first, and an edition
that joined the group later would have a migration to do. Security-scoped bookmarks are
the stated exception — they never cross sandboxes, group or not, which is why each
edition holds its own grant slot on the shared record. -->
<!-- Remotes: pull/push and auth (07-sync-collab.md), which only the git provider ever makes.
**Declared now, dormant until Pro ships** — the one-app collapse traded "the free app
provably has no network access" for "no network use until you subscribe", with eyes open
(12-editions.md ▸ The target, re-ruled 2026-07-30). It sits in the shipped entitlements
from the start because a key added later is a new provisioning profile and a new review
surface for what is meant to be a StoreKit-only change. No `keychain-access-groups`
alongside it: a group shares items *between* apps, and there is one app — Pro's
credentials go to the sandbox's own keychain, which needs no key at all. -->
<key>com.apple.security.network.client</key>
<true/>
<!-- The App Group, on borrowed time. 12-editions.md ▸ App-side state (re-ruled 2026-07-30)
removes it wholesale — the board registry and its Application Support peers home in the
ordinary sandbox container once there is one app — but the removal is the *code's* to
make, not this file's: `AppGroup.swift` still resolves its container through this key,
and pulling it first would silently drop the app into the fallback home. It goes with
that code. -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.dev.rzen.indie.Kanban</string>