1
+# Findings — SplitFire AI apps release session (KaroKowe Jam TestFlight)
2
+
3
+Context: shipping a macOS build (KaroKowe Jam) to TestFlight via the `asc`
4
+CLI. Concrete app id / bundle id / build number are omitted — this is a public
5
+repo; keep plan files to generalizable `asc` findings, not per-app identifiers.
6
+
7
+## 1. The release `asc` binary can silently lag `development`
8
+
9
+The installed/release `asc` predated the `testflight` subcommand, yet
10
+`asc apps upload` still worked — because upload only shells out to `altool`
11
+and doesn't touch the newer code paths. So an upload succeeding is **not**
12
+evidence that the binary is current.
13
+
14
+**Rule:** before relying on a newly-added subcommand (e.g. `testflight`),
15
+rebuild `asc` from `development` first (`cargo build --release`), or you'll hit
16
+`unrecognized subcommand` on a binary that otherwise looks healthy.
17
+
18
+## 2. `testflight groups` takes a nested subcommand, not an app id
19
+
20
+`asc testflight groups <APP_ID>` fails with
21
+`error: unrecognized subcommand '<APP_ID>'`. The app id is an argument of the
22
+leaf command, not of `groups`. Confirmed command surface:
23
+
24
+```
25
+asc testflight groups list <APP_ID>
26
+asc testflight groups get <GROUP_ID>
27
+asc testflight groups add-build --build-id <BUILD_ID>... <GROUP_ID>
28
+
29
+asc testflight app-review-detail get <APP_ID>
30
+asc testflight app-review-detail update ... # contact + demo-account details
31
+
32
+asc testflight app-review-submissions list <BUILD_ID>
33
+asc testflight app-review-submissions submit <BUILD_ID>
34
+```
35
+
36
+Notes:
37
+- `groups add-build` and `app-review-submissions submit` are **CLI-only** by
38
+ design (adding a build to an external group / submitting to Beta App Review
39
+ can trigger review — not something an MCP tool call should do unattended).
40
+- Both support `--dry-run` to print the request body before writing.
41
+
42
+## 3. Finish-the-release recipe (for next time)
43
+
44
+1. Upload: `asc apps upload <PKG> --wait` (always `--p8-file-path`; never the
45
+ script's raw `altool`, which can pick a stale `AuthKey_<id>.p8` → 401).
46
+2. Poll to VALID: `asc apps builds <APP_ID> --version <BUILD_NUMBER>` → grab the
47
+ build id once `processingState` is VALID.
48
+3. Beta review contact details: `asc testflight app-review-detail update ...`.
49
+4. Submit: find the Public Link group via `asc testflight groups list <APP_ID>`,
50
+ then either `groups add-build --build-id <BUILD_ID> <GROUP_ID>` or
51
+ `app-review-submissions submit <BUILD_ID>`.
52
+
53
+## 4. Process note
54
+
55
+Plan files and any other changes land on a feature branch and go in through a
56
+PR — never a direct commit to `development` (or `main`). It's easy to slip when
57
+a change feels like "just docs"; treat the branching rule as unconditional.
58
+See the **Git branching workflow** section of `AGENTS.md`.