desktop reads everything by itself: one background read scheduler (4 per store, starts spaced per account, App Store Connect X-Rate-Limit slows it below 20 % and pauses at 100 left, backoff with jitter on 429 / RESOURCE_EXHAUSTED, visible app first, one read per key), per-method TTLs over the saved reads, Settings auto-read (on) and interval (15 min, paused while hidden), Refresh all, a refresh icon and 'read 3 min ago' / 'couldn't refresh' per card, writes invalidate, status line with progress and quota; quota reaches the window through ToolResult.quota (cli/lib/quota.ts); Health top issues open with versions, sample stack (health --issue / --signature, read health_issue), Open in Play Console, Copy for AI and likely-cause hints (cli/lib/crash-hints.ts); tests/scheduler.test.ts, tests/quota-crash-hints.test.ts, boot check auto-read case
This commit is contained in:
parent
89256f1e80
commit
0fb4ce0001
46 changed files with 1531 additions and 141 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -2,6 +2,20 @@
|
|||
|
||||
## Unreleased
|
||||
|
||||
- **Desktop reads everything by itself.** No more "Not read yet" and a Read button on every page: on start, when the
|
||||
window shows again and every 15 minutes while it is open (Settings: auto-read on / off, interval), every app's
|
||||
status, releases and submission state, TestFlight, catalog, prices, listings, health, reviews, analytics and checks
|
||||
are read in the background when their saved copy is older than its TTL (5 min to 6 h). Saved reads show at once
|
||||
with "read 3 min ago"; a failed refresh keeps them with "couldn't refresh: <reason>". One scheduler keeps it inside
|
||||
the stores' limits: 4 at a time per store, starts spaced per account, slower below 20 % of App Store Connect's
|
||||
hourly limit (read from `X-Rate-Limit`) and a pause at 100 left, exponential backoff with jitter on 429 /
|
||||
RESOURCE_EXHAUSTED, the visible app first. "Refresh all" in the toolbar, a refresh icon per card, writes refresh
|
||||
what they changed, and a status line: "Reading 12 of 48 · App Store limit 3,412/3,600 left this hour".
|
||||
- **Health: open a top issue.** Full title, type, counts, versionCode range, Android API range, last report, a sample
|
||||
stack trace (`storebound health --issue <id>` / `--signature <id>`, new read `health_issue`), Open in Play Console,
|
||||
Copy for AI, and a likely cause for known signatures (`cli/lib/crash-hints.ts`; first entry: the Capacitor
|
||||
`Bridge.getPermissionStates` NullPointerException from `checkPermissions()` during an activity transition).
|
||||
|
||||
- **Google API errors in words, not JSON.** Google's error bodies are parsed centrally (`cli/lib/google-errors.ts`)
|
||||
into typed findings: `api-disabled` (403 SERVICE_DISABLED: service, Cloud project id, the console page to turn it
|
||||
on), `no-app-access` (403 PERMISSION_DENIED: which app, the Users and permissions step), `auth-revoked` (401,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue