store-only apps edit their listing on the store (storebound listing live / set: old -> new per field with the checks, a PATCH of only the edited fields; serve listing.set is the one store-only write, its token bound to the store ids; policy.rs STORE_ONLY_WRITES, write_with_confirm for store targets); screenshot captions per language and scene edited as a text edit of the shots copy JSON (JSON files keep their layout); Play content rating, target audience and App content answers in App info; docs/console-parity.md after the editors (73 rows: 55 complete, 18 with the reason) and tests/console-parity.test.ts keeping it honest

This commit is contained in:
CRTkafa 2026-10-14 00:53:38 +08:00
parent 3cea2af4e1
commit 7ac028421a
33 changed files with 852 additions and 157 deletions

View file

@ -9,6 +9,7 @@
// { "kind": "listing", "store": "apple", "lang": "en-US", "field": "subtitle", "value": "Lists that stay tidy" }
// { "kind": "listing", "store": "play", "lang": "tr-TR", "field": "short", "value": "..." }
// { "kind": "contact", "field": "email", "value": "review@example.com" } (.storebound/credentials.json, masked)
// { "kind": "shotsCopy", "lang": "en", "scene": "lists", "field": "title", "line": 0, "value": "Every list," }
// Every run plans first: old -> new per edit, the diff per file and the checks (store limits, required fields, keyword
// and metadata rules of `check --aso` / `scan`, URLs, and the whole config validated as `check` loads it). --dry stops
// there. An error stops the write; the files are written only when every check passes (comments, order and
@ -35,6 +36,7 @@ export function sources(ctx: Ctx): EditSources {
play: config.play ? file(resolve(config.play.listing ?? 'store/listing.md')) : null,
apple: config.apple ? file(resolve(config.apple.listing ?? 'store/appstore.md')) : null,
contact: file(contact),
shotsCopy: config.shots?.copy ? file(resolve(config.shots.copy)) : null,
appName: config.app.name,
appleName: appleName(config),
};