apps folders add adds the folder (template note, refusals with reasons); MCP: .mcp.json never spawns a missing plugin path (sh fallback to PATH, npx), mcp/serve skip the self-update, spawned handshake test; store build minimums in one dated table: Play target API 36 and App Store Xcode 26 / SDK 26 blocked in scan, validate, play upload/release, apple upload; pitfalls 81-83

This commit is contained in:
CRTkafa 2026-10-20 12:15:00 +07:00
parent 9805582278
commit 9ab64bcbdf
16 changed files with 323 additions and 14 deletions

View file

@ -994,3 +994,35 @@ that fails without the fix (see CONTRIBUTING.md).
`cli/shots/report.ts`, `IMAGE_SPECS.mac` and `macNote` in `cli/shots/spec.ts`, `MAC_DISPLAY` in
`cli/apple/screenshots.ts`, `sheetTimeoutMs`; `tests/mac-landscape.test.ts`, `tests/browser/landscape.browser.ts`,
the macOS case in `tests/idempotency.test.ts`.
## 81. `storebound apps folders add` listed the folders and added nothing
- **Symptom:** `storebound apps folders add` (or with `"$PWD"`) in a freshly init-ed folder printed the folder list,
no error, and ~/.storebound/projects.json stayed without the folder.
- **Cause:** only `apps add` added; `apps folders` ignored every word after it and listed.
- **Do:** `apps folders add [<folder>]` is now the same as `apps add [<folder>]` (bare = the current folder). A folder
whose config still has template values is added with a note; a folder without a config is refused with the reason
and the fix (`storebound init`). Unknown words after `apps folders` are an error, never a silent list.
- **Guard:** `folders` and `templateNote` in `cli/apps.ts`; `tests/store-minimums.test.ts` (apps folders add).
## 82. The MCP server failed to connect: spawn ENOENT, CONNECTION_CLOSED
- **Symptom:** the client showed `storebound (ENOENT) posix_spawn '<home>/…/bin/storebound'` or
"CONNECTION_CLOSED: Connection closed".
- **Cause:** `.mcp.json` spawned `${CLAUDE_PLUGIN_ROOT}/bin/storebound` directly; when that folder is gone (an old
plugin cache after an update) or the variable is unset (the repo opened as a project), the spawn fails before any
code runs. Under npx, the self-update could also start a second npx download before the handshake.
- **Do:** `.mcp.json` runs `sh -c`: the plugin's launcher if it exists, else `storebound` on PATH, else
`npx -y storebound@latest mcp`. `mcp` and `serve` skip the self-update. Nothing may print on stdout before the
JSON-RPC answer (logs go to stderr).
- **Guard:** `MCP_LAUNCH` in `tools/gen-adapters.ts`, `cli/index.ts`; `tests/mcp-spawn.test.ts` spawns the CLI, the
launcher and the `.mcp.json` command with a missing plugin root and completes `initialize` within 10 s.
## 83. Uploads below the store's build minimum (Play target API level, App Store Xcode / SDK)
- **Symptom:** Google Play refuses a bundle with targetSdkVersion 35 (API 36+ for new apps and updates since
2026-08-31); App Store Connect refuses an IPA built with an Xcode / SDK older than the minimum (Xcode 26 / the 26
SDKs since 2026-04-28).
- **Do:** set `targetSdkVersion` (and `compileSdkVersion`) in android/variables.gradle (Capacitor), the app module's
build.gradle(.kts), Flutter's android/app/build.gradle or Unity's Target API Level; build iOS with the current Xcode.
`scan` / `validate` (rules `play-target-sdk`, `apple-min-sdk` from the newest IPA in build/ios/export) and
`play upload` / `play release` / `apple upload` block before any network call, naming the requirement, date and fix.
- **Guard:** the dated tables `PLAY_TARGET_SDK_TABLE` and `APPLE_MIN_SDK_TABLE` in `cli/lib/store-minimums.ts` (a new
year is one row); `tests/store-minimums.test.ts`.