Edition split follow-through: 12-editions.md and 13-native-undo.md join the corpus; git-era docs (06, 07) are Pro-scoped and cross-references realigned. Resolution session rulings written in place: caret chords yield to any focused text control (04, 11); the drop settle holds its proposal as overlay state and 02 gains the overlays family; Duplicate gets the save-panel fallback and a cancellable copy walk (03); Finder open is a standard document open (02); failed first opens record before loading with the folder name provisional (02); trash pointer ranges skip by kind, full-height marquee surface, Select All by kind, rows-only trashed universe (02, 04); Empty Trash counts entries (03); create handoff reads as one arrival (02); range-anchor lifecycle, board- background click grammar, jump landing cards, lane-domain shift-arrows (04); Reduce Motion restated per voice (10). Claude-Session: https://claude.ai/code/session_01CqjXB7ASoWtbyoGod68k97
7.8 KiB
Editions
Lanework ships as three editions built from one codebase and one on-disk format. This doc owns the edition axis: what each edition is, how the split is engineered (targets, the provider seam), and which features land where. Individual docs stay edition-agnostic where they can — they conditionalize on board mode (none / git / git+remote — 07-sync-collab.md), and this doc defines which modes each edition ships.
The three editions
- Lanework (base) — no git integration. Boards are plain folders (mode
noneeverywhere); undo/redo is macOS-native (13-native-undo.md). The full board experience: lanes, cards, styling, trash, attachments, card window, templates, agents, accessibility. - Lanework Pro — git integration as designed in 06-history-undo.md and 07-sync-collab.md: opt-in init, adoption, git-backed undo/history, branches, remotes, pull/push, auth. Plus Pro-only differentiators (matrix below).
- Lanework Teams — Pro plus tracker integration over the reserved enhanced schema (
remote/remote-state,comments/— 01-storage-format.md). Deferred — months out, no design pass yet; this doc only keeps the seam honest.
Why a real split and not feature flags: the editions differ at the binary level — base ships without libgit2 and without the network-client entitlement; Pro links git machinery and talks to remotes. And the strategic reason (settled): Teams' card sync must be backend-agnostic — it has to work over git and over a range of trackers — so history and sync must sit behind a genuine provider seam. Base's native undo is the first proof the seam is real: two working history providers before a third arrives.
Distribution (settled)
Separate Mac App Store apps — real Xcode targets, not an IAP unlock. Both editions declare the same .kanban package UTI (dev.rzen.indie.kanban-board) verbatim, so any board opens in either app; the format is one format, owned by 01-storage-format.md, with no edition-specific keys. Upgrade path is buying the other app; boards need no migration whatsoever (files are the interchange).
The provider seam
History (and later sync) is a provider behind one protocol boundary, chosen per edition at the composition root:
- HistoryProviding — the undo/redo substrate. Base binds the native undo stack (13-native-undo.md: NSUndoManager over inverse
WriteOperations). Pro binds the git provider (06-history-undo.md: undo as forward restore commits over HEAD's first-parent ancestry). Teams inherits Pro's. - Sync/tracker providers — deferred with Teams; the reserved schema keys and the one-way file flow (02-architecture.md) are the format-level seam already in place.
What is shared across providers (settled): 06's Undo routing is edition-independent — focus decides text-undo vs board-undo; only the substrate behind board-undo differs. The command surface is identical (⌘Z/⇧⌘Z, dynamically retitled menu items — both providers use NSUndoManager's title rewriting); menu titles draw on the same semantic vocabulary (06 ▸ Commit messages). A user moving between editions relearns nothing.
Base and .git — the inert posture (settled)
Base Lanework generalizes the repo-nested stance to every .git it meets: any .git is inert. Opening a board that has one (a Pro user's board, a repo-nested board) works normally — files read and write as on any board, native undo runs, the trash works — but the app never reads history, never commits, never touches .git in any way. To base, .git at the board root is a stray like any other, preserved verbatim. Pro's external-writer machinery (06 ▸ Interaction with external writers) already reconciles the uncommitted drift a base session leaves behind — a base edit is just a foreign change to Pro. The watcher's .git event filtering stays in base (it exists to ignore git churn, which mixed households will produce).
Base's popover git slot (03-board-ui.md ▸ Board popover) does not offer add-git. Its posture is contextual (settled — ruled 2026-07-27): on ordinary boards the section is simply absent — the popover is rename + style, complete in itself. Only when the board carries an inert .git does a calm info line appear: "This board has a git history. Lanework Pro works with it." — an honest explanation of what the folder is, surfacing exactly where the question arises, never a standing ad. The card window's absent History section follows the same pattern: absent, no placeholder.
Edition matrix
The feature sort. Everything not listed rides with "board experience" and is identical everywhere.
| Feature | Lanework | Pro | Teams |
|---|---|---|---|
| Board experience: lanes, cards, drag & drop, keyboard map, clipboard, search, styling, trash, attachments, card window, templates, welcome screen | ✓ | ✓ | ✓ |
Agent integration: agent guide, modified-by attribution, tolerance rules |
✓ | ✓ | ✓ |
| Accessibility (10-accessibility.md, all of it) | ✓ | ✓ | ✓ |
| Comments (post-2.0 design pass; per the standing decision, all editions) | ✓ (future) | ✓ (future) | ✓ (future) |
| Undo/redo | native (13) | git (06) | git (06) |
| Undo of foreign/agent edits | — (honest gap, 13) | ✓ (stack absorbs foreign commits) | ✓ |
| Overwrite protection (flush-before-overwrite, both-versions-as-commits) | — (07's accepted caveat is permanent here; trash + native undo are the safety story) | ✓ | ✓ |
| History surfaces: card History sidebar (05), View ▸ History (11) | — | ✓ | ✓ |
| Git: init/adoption, branches, commit identity, repository hygiene | — | ✓ | ✓ |
| Remotes: pull/push, push-on-commit, auth (Keychain, SSH, TOFU) | — | ✓ | ✓ |
| "While you were away" digest (WISHLIST item 1, requires git) | — | ✓ (future) | ✓ (future) |
Tracker integration (remote/remote-state sync, tracker-backed boards) |
— | — | ✓ (future) |
Docs 06 and 07 are Pro-edition docs; every other doc applies to all editions, with mode-conditioned passages (undo availability, popover git surface, Delete Immediately's confirmation branch) resolving per the modes the edition ships. Base ships exactly one mode: none (with the inert-.git posture above); Pro ships the full state machine.
Targets (settled shape; details at implementation)
Three app targets sharing sources: Lanework (base — excludes Pro-only source dirs, no libgit2, current minimal entitlements), LaneworkPro (adds git sources, libgit2 dependency, network-client entitlement, Keychain access), Teams deferred. Bundle ids (settled — ruled 2026-07-27): base keeps dev.rzen.indie.Kanban — it is the current app and ships first, so nothing re-wires; Pro mints dev.rzen.indie.KanbanPro with matching test-target ids; Teams reserves nothing yet. Shared UTI declaration in both Info.plists (base remains the exporter); distinct icon assets; parallel test targets and schemes. Milestones: the current plan's m7-git-undo and m8-remote-sync become Pro milestones, built as the git HistoryProvider behind the seam after base ships; a new native-undo milestone takes their place for base.
Edition naming in base (settled — ruled 2026-07-27)
Quiet signposts. Base presents as a complete app, not a demo: Pro is named in exactly two places — one line in the About box, and the contextual popover line on .git boards (above). Nothing on the welcome screen, nothing in banners. The iCloud/network-volume warning (07-sync-collab.md) is rewritten for base without the git recommendation — it warns on its own merits (eviction, silent forks) and recommends a local folder; there is no git to recommend and no Pro pitch in a warning (a warning that sells reads as manufactured).
Open questions
None currently — bundle ids, the popover slot posture, and edition naming were ruled 2026-07-27 and are settled above.