import Foundation /// **Pro's source root.** This directory — and this file's presence in it — *is* the edition /// split (12-editions.md ▸ Targets): the `Kanban` target compiles `Kanban/` alone, the /// `KanbanPro` target compiles `Kanban/` **plus** `KanbanPro/`. Nothing in the shared tree is /// `#if`-ed on an edition, because "the editions differ at the binary level" (12) is only true if /// the difference is a file one target builds and the other does not. /// /// **What lands here, and when.** Nothing yet — this is a reserved root, split out ahead of the /// code so pro-m1 is a set of new files rather than a second pass over the project structure: /// /// - `KanbanPro/Git/` — the git `HistoryProviding` implementation (06-history-undo.md: undo as /// forward restore commits over HEAD's first-parent ancestry), init/adoption, branches, commit /// identity, repository hygiene. Brings the libgit2 dependency with it; the base target must /// never gain one, which `scripts/verify-editions.sh` checks against the signed binary. /// - `KanbanPro/Remote/` — pull/push, push-on-commit (07-sync-collab.md). The /// `com.apple.security.network.client` entitlement Pro already carries is for this, and base's /// lack of it is the other half of what the verification script checks. /// - `KanbanPro/Auth/` — remote credentials over the declared keychain access group /// (07 ▸ Auth: Keychain, SSH, TOFU). /// /// **What does not land here**: anything the edition matrix marks ✓ for all three editions. The /// board experience, agent attribution and accessibility are shared code and stay in `Kanban/`. /// /// The type itself is a namespace, not state — the composition root that picks a /// `HistoryProviding` per edition arrives with the providers it chooses between (base's native /// stack in m8-native-undo, Pro's git stack in pro-m1), and inventing a seam here before either /// exists would be guessing at its shape. enum ProEdition { /// The edition's own bundle identifier (12 ▸ Targets, ruled 2026-07-27: base keeps /// `dev.rzen.indie.Kanban`, Pro mints its own). Stated as a constant so the value has one /// home in Pro-only code; the running app reads its identity from `Bundle.main`, which is /// already how the App Support directory is per-edition without a line of edition code /// (`BoardRegistry`, `ClipboardStore`). static let bundleIdentifier = "dev.rzen.indie.KanbanPro" }