docs(plans): record stack #27 progress (findings #2, #5, #6 shipped) (#28)

Update the sitiai and klepon release-session plans to reflect what gh stack #27 landed (#24 docs/list-builds-pagination -> #25 feat/signing-doctor -> #26 feat/apps-await-processing): - sitiai: add a 2025-10-11 progress callout; mark findings #2 (signing doctor, PR #25), #5 (await-processing, PR #26) and #6 (list_builds pagination doc, PR #24) as shipped; detail the await-processing CLI surface; note the upload.rs cluster (#3 + #1, #4 folded) is next. - klepon: cross-link the two findings that built on its builds API (#6 pagination doc, #5 await-processing on BuildsApi::list_builds). Co-authored-by: siGit Code v1.6.7-acp <noreply@sigit.si>

Seto Elkahfi committed Oct 11, 2026 at 20:53 UTC 0b59bdddb29f0b15b7d0aa7abb2cec1f53b3d564
2 files changed +30 -3
.agents/plans/feature-plan-from-klepon-xcode-release-session.md
+5
@@ -30,6 +30,11 @@ Shipped as gh stack #9 (draft PRs, bottom to top):
30 custom `TokenSource`) (#7).
31 - [ ] MCP `list_builds` tool doesn't expose `BuildFilter` yet, so it lags
32 the CLI.
33 +- [x] Documented `list_builds` limit=200 as page size, not a cap
34 + (sitiai finding #6, PR #24).
35 +- [x] `asc apps await-processing` poll loop built on `BuildsApi::list_builds`
36 + (sitiai finding #5, PR #26) — a non-blocking alternative to altool
37 + `--wait`.
38
39 ## Docs
40 - [x] README crate table — builds API surface, altool upload.
.agents/plans/feature-plan-from-sitiai-release-session.md
+25 -3
@@ -12,6 +12,17 @@ Companion plan: [`feature-plan-from-klepon-xcode-release-session.md`](./feature-
12 upload *mechanism*; this one hardens the *pre-flight and verification* around
13 it. Shared context between the two:
14
15 +> **Progress (2025-10-11, this session):** gh stack #27 (bottom→top)
16 +> #24 `docs/list-builds-pagination` → #25 `feat/signing-doctor` →
17 +> #26 `feat/apps-await-processing`, rebased onto `development`, all CI-clean
18 +> (fmt / clippy `-D warnings` / test / `RUSTDOCFLAGS=-D warnings` doc /
19 +> lower-crate solo builds), signed+verified, auto-merge enabled. This landed
20 +> finding **#2** (signing doctor), finding **#5** (await-processing), and
21 +> finding **#6** (list_builds pagination doc). Still open from this plan:
22 +> **#1** (pre-upload `altool --validate-app`), **#3** (body-aware `success`),
23 +> **#4** (`.app`-vs-`.pkg` message). The one live item for all of them is the
24 +> ASC smoke test, still blocked on credentials.
25 +
26 - Both sessions hit the same root pain: a **stale private key / signing
27 identity with the right id but wrong contents**, which surfaces as an
28 indistinguishable 401 (klepon plan, "Separate / unaddressed bug") or, in
@@ -50,7 +61,7 @@ exposes `--validate-app` for exactly this: a fast server-side pre-flight
61 - **Value:** turns a ~minutes-late failure into a seconds-early one; catches
62 the common "wrong version / bad entitlement" class before upload.
63
53 -### 2. No local-keychain `signing doctor` — HIGH
64 +### 2. No local-keychain `signing doctor` — HIGH ✅ SHIPPED (PR #25)
65 The `signing` crate (`certificate.rs`, `profile.rs`, `csr.rs`) talks **only
66 to the ASC REST API**. `security find-identity` is called nowhere in the
67 repo; there is no local-keychain code at all. So the exact stale-identity
@@ -92,7 +103,7 @@ just not exported yet. People routinely point the tool at the `.app`.
103 "directory / wrong kind" from "path missing".
104 - **Value:** tiny, same-file, removes a recurring confusing error.
105
95 -### 5. No non-blocking `await-processing` loop — MEDIUM
106 +### 5. No non-blocking `await-processing` loop — MEDIUM ✅ SHIPPED (PR #26)
107 The only way to wait for ASC to finish processing a build is altool's
108 `--wait`, which blocks the altool process for the whole duration. There's
109 no poll-based path that uses the builds API (`BuildsApi::list_builds`,
@@ -103,8 +114,15 @@ caller poll on its own cadence.
114 with backoff. Complements klepon's builds API; an MCP-friendly
115 alternative to a blocking `--wait`.
116 - **Value:** better UX for CI/agents; builds on existing klepon surface.
117 +- **Shipped (PR #26):** `asc apps await-processing <APP_ID>` with
118 + `--version`, `--pre-release-version`, `--interval` (30s),
119 + `--timeout` (1800s). Shared poll loop + pure `classify()` /
120 + `AwaitConfig` / `AwaitOutcome` in `crates/frontend/src/await_processing.rs`
121 + (serializes without key material; 7 in-module tests). Terminal map:
122 + VALID → success, INVALID/FAILED → failure, else timeout → non-zero exit.
123 + CLI-only for now; the pure core is MCP-ready if a tool is added later.
124
107 -### 6. `list_builds` limit=200 pagination — LOW (doc-only)
125 +### 6. `list_builds` limit=200 pagination — LOW (doc-only) ✅ SHIPPED (PR #24)
126 `list_builds` caps at limit=200 with no cursor follow-through. Fine for
127 normal apps; note it as a known limit. Overlaps klepon's open "MCP
128 `list_builds` doesn't expose `BuildFilter`" item — fold into that rather
@@ -128,3 +146,7 @@ module, shared `--dry-run`/`altool_args` test scaffolding; #4 is cheap to
146 fold in alongside). #2 on its own branch (new macOS-only keychain surface,
147 `security` subprocess, cross-check against `CertificateApi`). Exercise #1
148 and #3 under klepon's still-open "Live smoke test against ASC" item.
149 +
150 +**Status:** #2 shipped (PR #25). The `upload.rs` cluster (#3 + #1, with #4
151 +folded in) is still the next natural branch — one file, shared test
152 +scaffolding, all inside what ascapi already owns.