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:
CRTkafa 2026-10-13 04:48:27 +08:00
parent d5ffc159c0
commit 0b6c8cd7a0
11 changed files with 1117 additions and 1041 deletions

View file

@ -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();