Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
35 lines
2.7 KiB
Plaintext
35 lines
2.7 KiB
Plaintext
/* ── the first run ────────────────────────────────────────────────
|
|
Every one of these is on state that STAYS: a sheet that is up, a
|
|
counter, a field in the config, a row that is present or absent.
|
|
Nothing here waits on a notice or a picker — both windows are
|
|
shorter than the step's own wait plus the screenshot. */
|
|
"fresh-boot": (i) => i.setupUp && i.setupCards === "Where your music lives|Soulseek"
|
|
&& i.setupState === "private:out:todo" && i.setupWrites === 0
|
|
&& /^dialog\/true\/Welcome to SoulStream\/focus$/.test(i.dlg)
|
|
/* and nothing of the walk before it came through the reload: a
|
|
phone that has just been installed has no session to restore */
|
|
&& !i.mini
|
|
&& !i.a11yAnon && !i.a11yGhost && !i.a11yBad && !i.a11yState,
|
|
/* the tour's own door to the sign-in, and the stamp that a tour which
|
|
ran leaves behind whichever door closed it */
|
|
"fresh-community": (i) => !i.setupUp && i.title.startsWith("Community")
|
|
&& i.signIn === "Sign in to Soulseek" && i.setupWrites === 1 && i.setupState === "private:out:done",
|
|
"fresh-home": (i) => !i.setupUp && i.setupNotes === 1 && i.setupRows === 2
|
|
&& i.setupNoteText === "Choose your library folder|Sign in on Soulseek",
|
|
"fresh-albums": (i) => i.title.startsWith("Your library") && i.setupNotes === 1 && i.setupRows === 2
|
|
&& i.setupNoteText === "Choose your library folder|Sign in on Soulseek",
|
|
"fresh-artists": (i) => i.title.startsWith("Your library") && i.setupNotes === 1 && i.setupRows === 2,
|
|
"fresh-search": (i) => i.title.startsWith("Search") && i.setupNotes === 1 && i.setupRows === 2,
|
|
/* the preview reads the real config and adds nothing to the counter */
|
|
"fresh-preview": (i) => i.setupUp && i.setupWrites === 1 && i.setupCards === "Where your music lives|Soulseek",
|
|
/* a folder picked from the tour: the config moved, the permission the
|
|
new folder needs is offered, and still nothing was stamped */
|
|
"fresh-folder": (i) => i.setupUp && i.setupState === "chosen:out:done" && i.setupWrites === 1
|
|
&& /Allow all files access/.test(i.halfText),
|
|
/* and the note loses the row it answered — because the config changed,
|
|
not because a flag was flipped */
|
|
"fresh-fixed": (i) => !i.setupUp && i.setupNotes === 1 && i.setupRows === 1
|
|
&& i.setupNoteText === "Sign in on Soulseek" && i.setupWrites === 1,
|
|
/* the provisioned device is back, and it is NOT offered a first run */
|
|
"fresh-off": (i) => !i.setupUp && !i.setupNotes && i.setupState === "chosen:in:done" && !i.toast,
|