teaser v8: a 58 s story instead of a feature list (the game is done; the stores pile up; one missing line; hand it to your AI; a montage of builds, screenshots, products, forms, consoles; the scan turns green; one button is yours; Waiting for review; the end card), one short line per scene, cuts on the 120 BPM beat; music rewritten for the arc (calm, tension, near silence, a driving build, a stop, a resolve), mastered with one gain instead of dynamic loudnorm; the pile shows real console plan, Data safety CSV and price sheet lines, the builds beat real apple / play build dry runs; desktop.ts captures submit-ready (Send for review before the press); tests check every line, the beat-aligned cuts and the caption times; two unused teaser icons dropped
This commit is contained in:
parent
d5ffc159c0
commit
0b6c8cd7a0
11 changed files with 1117 additions and 1041 deletions
|
|
@ -25,6 +25,7 @@
|
|||
// console-plan-top.jpg the same panel at its top: the start page and the first steps
|
||||
// resubmit.jpg Tidy Lists' Releases > Send for review: back from App Review (UNRESOLVED_ISSUES), the rejected
|
||||
// version item, build 52 picked, Resubmit
|
||||
// submit-ready.jpg Prism Puddle's Releases > Send for review: build 52 picked, before "Submit for review" is pressed
|
||||
// submit-plan.jpg Prism Puddle's Send for review: build 52 picked, Submit for review pressed: the plan panel with
|
||||
// the dry run (nothing sent) and "Continue", the in-app step before the system dialog (the
|
||||
// native macOS dialog is not part of the web view, so it is never drawn here)
|
||||
|
|
@ -288,7 +289,12 @@ APPLE_STATUS_READY.emptyDrafts = [];\n`;
|
|||
// Prism Puddle: build 52 picked, Submit for review: the plan panel (dry run) with Continue
|
||||
await submitSection(c.page, 'Prism Puddle');
|
||||
await c.page.locator('[data-section="submit"] select').first().selectOption('52');
|
||||
await c.page.locator('[data-section="submit"] button', { hasText: 'Submit for review' }).first().click();
|
||||
await c.page.waitForTimeout(300);
|
||||
// before the press: build 52 picked, "Submit for review" the one button left (the owner's)
|
||||
const submitBtn = c.page.locator('[data-section="submit"] button', { hasText: 'Submit for review' }).first();
|
||||
await box(c.page, 'submitBtn', submitBtn);
|
||||
await shot(c.page, 'submit-ready');
|
||||
await submitBtn.click();
|
||||
await c.page.waitForSelector('.oa-panel');
|
||||
await c.page.waitForTimeout(800);
|
||||
await clearToasts(c.page);
|
||||
|
|
@ -312,7 +318,7 @@ APPLE_STATUS_READY.emptyDrafts = [];\n`;
|
|||
writeFileSync(join(OUT, 'boxes.json'), `${JSON.stringify({ ...boxes, source, sweeps }, null, 1)}\n`);
|
||||
await browser.close();
|
||||
if (errors.length) throw new Error(`page errors:\n ${[...new Set(errors)].join('\n ')}`);
|
||||
const n = 14 + Object.values(sweeps).reduce((k, f) => k + f.length, 0);
|
||||
const n = 15 + Object.values(sweeps).reduce((k, f) => k + f.length, 0);
|
||||
log(`${n} frames (${Object.entries(sweeps).map(([k, f]) => `${k} sweep: ${f.length} days`).join(', ')}) + boxes.json -> ${OUT}`);
|
||||
} finally {
|
||||
vite.kill();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue