apple creative-assets: select Header and Search Results assets once processed (Prepare for Submission), not once approved: Apple reviews an asset only in a review submission, so 0.8.13 waited forever; upload and select in one run with a bounded processing wait; --add-for-review puts unreviewed assets into the draft review submission (never submits); --verify reads every slot back read-only (MCP apple_creative_assets_verify); a rejected file or one that failed processing twice is not re-uploaded, an archived copy is unarchived; fake commits library assets to PREPARE_FOR_SUBMISSION; pitfall 76 rewritten; apple-name check test only looks at name hints
This commit is contained in:
parent
3e4015b686
commit
183579449c
14 changed files with 378 additions and 95 deletions
|
|
@ -102,7 +102,8 @@ const UNIQUE: Record<string, (r: R) => string> = {
|
|||
betaTesters: r => String(r.attributes.email).toLowerCase(),
|
||||
};
|
||||
const ASSETS = /Screenshots$|^appPreviews$|^appScreenshots$|^appAssetLibrary(Images|Videos)$/;
|
||||
/** App Asset Library assets: a state of their own (AWAITING_UPLOAD -> WAITING_FOR_REVIEW after the commit; a test sets APPROVED). */
|
||||
/** App Asset Library assets: a state of their own (AWAITING_UPLOAD -> PREPARE_FOR_SUBMISSION after the commit, as Apple's
|
||||
* "App Store asset statuses" describe it: processed, not in a submission yet; a test sets the review states). */
|
||||
const LIBRARY = /^appAssetLibrary(Images|Videos)$/;
|
||||
/** Attributes a new resource of a type starts with. */
|
||||
const DEFAULTS: Record<string, Record<string, unknown>> = {
|
||||
|
|
@ -310,9 +311,14 @@ export class FakeAsc {
|
|||
rels: { [singular(self.type)]: self.id, ...Object.fromEntries(Object.entries(inc.relationships ?? {}).map(([k, v]) => [k, v.data.id])) } });
|
||||
if (attrs.uploaded === true && ASSETS.test(self.type)) {
|
||||
const { uploaded: _u, ...rest } = attrs;
|
||||
if (LIBRARY.test(self.type)) Object.assign(self.attributes, rest, { state: this.parts.includes(self.id) ? 'WAITING_FOR_REVIEW' : 'FAILED' });
|
||||
if (LIBRARY.test(self.type)) Object.assign(self.attributes, rest, { state: this.parts.includes(self.id) ? 'PREPARE_FOR_SUBMISSION' : 'FAILED' });
|
||||
else Object.assign(self.attributes, rest, { assetDeliveryState: { state: this.parts.includes(self.id) ? 'COMPLETE' : 'FAILED' } });
|
||||
delete self.attributes.uploadOperations;
|
||||
} else if (LIBRARY.test(self.type) && typeof attrs.archived === 'boolean') {
|
||||
// archive / unarchive (model: an unarchived asset is back in Prepare for Submission)
|
||||
const { archived, ...rest } = attrs;
|
||||
Object.assign(self.attributes, rest, { state: archived ? 'ARCHIVED' : 'PREPARE_FOR_SUBMISSION' });
|
||||
delete self.attributes.archived;
|
||||
} else if (self.type === 'reviewSubmissions' && (attrs.submitted === true || attrs.canceled === true)) {
|
||||
// seen live (2026-10-12): a REJECTED item that is not marked resolved blocks every submit with this 409, and an
|
||||
// empty draft cannot be canceled
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue