Split the project into Lanework and Lanework Pro targets

Two app targets from one source tree — no build flags, no #if in
shared code: an edition difference is a file one target compiles and
the other does not. Base keeps everything it had (dev.rzen.indie.Kanban,
minimal entitlements, AppIcon); KanbanPro compiles the same sources
plus the reserved KanbanPro/ root (Git/, Remote/, Auth/ land with
pro-m1 — libgit2 deliberately not added yet), adds network-client and
its keychain group, and hand-writes its Info.plist with the UTI block
verbatim — base exports the type, Pro imports it, one format either
app opens. The unit-test sources compile twice, once per host, with
Pro's module aliased so 56 test files keep @testable import Kanban
unchanged; scheme Kanban stays the muscle-memory command and
LaneworkPro joins it. InertGitTests pins the base posture with bytes
and mtimes — a full editing session over boards carrying realistic
.git trees at root and nested in a card leaves all twelve entries
untouched, and moves and copies carry them verbatim.
scripts/verify-editions.sh proves the rest: 26 checks over signatures,
symbols, entitlements, identity, and the shared UTI, discounting
Xcode's test-host exceptions by name rather than silently.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-07-28 13:15:06 -04:00
parent 06ee59e24b
commit f37892c9a9
20 changed files with 898 additions and 5 deletions
@@ -0,0 +1 @@
{"colors":[{"idiom":"universal"}],"info":{"version":1,"author":"xcode"}}
@@ -0,0 +1,68 @@
{
"images": [
{
"filename": "icon-mac-16.png",
"idiom": "mac",
"size": "16x16",
"scale": "1x"
},
{
"filename": "[email protected]",
"idiom": "mac",
"size": "16x16",
"scale": "2x"
},
{
"filename": "icon-mac-32.png",
"idiom": "mac",
"size": "32x32",
"scale": "1x"
},
{
"filename": "[email protected]",
"idiom": "mac",
"size": "32x32",
"scale": "2x"
},
{
"filename": "icon-mac-128.png",
"idiom": "mac",
"size": "128x128",
"scale": "1x"
},
{
"filename": "[email protected]",
"idiom": "mac",
"size": "128x128",
"scale": "2x"
},
{
"filename": "icon-mac-256.png",
"idiom": "mac",
"size": "256x256",
"scale": "1x"
},
{
"filename": "[email protected]",
"idiom": "mac",
"size": "256x256",
"scale": "2x"
},
{
"filename": "icon-mac-512.png",
"idiom": "mac",
"size": "512x512",
"scale": "1x"
},
{
"filename": "[email protected]",
"idiom": "mac",
"size": "512x512",
"scale": "2x"
}
],
"info": {
"author": "xcode",
"version": 1
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 538 KiB

+1
View File
@@ -0,0 +1 @@
{"info":{"version":1,"author":"xcode"}}