The newly enabled main-PR gate caught two latent breaks on its first run — both shipped while CI only fired for PRs to the unused dev branch: - The passkey-backup stage still drove the pre-#83 one-step flow; it now waits for the revealed phrase and clicks the explicit "I saved my phrase — enable sync" confirmation before expecting the synced heading. - #87's patchManifest extraction accidentally rewrote the helper's own body into a self-call, so every recipe installer overflowed the stack. The helper does the actual read/patch/write again. Full 33-stage golden journey verified locally end to end.
- commit
- 3836ae20acd68a800495a7a0ced87d0302a24147
- parent
- e87ffbeaed1680226d8354716ea7debf3df3f340
- author
- Dami <dami.etoile@gmail.com>
| M | tools/ | 15 | ++++++++++++--- |
@@ -643,9 +643,10 @@ async function patchManifest(
643643 // deno-lint-ignore no-explicit-any644644 patch: (manifest: any) => void,645645 ): Promise<void> {646- await patchManifest(projectRoot, (manifest) => {647- patch(manifest);648- });646+ const manifestPath = join(projectRoot, "public", "manifest.webmanifest");647+ const manifest = JSON.parse(await Deno.readTextFile(manifestPath));648+ patch(manifest);649+ await Deno.writeTextFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);649650 }650651 651652 async function installWebShareRecipe(projectRoot: string) {@@ -1140,7 +1141,15 @@ async function main() {
11401141 assert(worker === "development-disabled", `development worker state was ${worker}`);11411142 });11421143 await stage("passkey backup", async () => {1144+ // Backup is a two-step ceremony: the phrase is revealed first and sync1145+ // is enabled only after the explicit saved-it confirmation (which1146+ // reloads the document into the managed namespace).11431147 await page!.getByRole("button", { name: "Back up & enable sync" }).click();1148+ await page!.locator('[aria-label="Recovery phrase"] li').first().waitFor({1149+ state: "visible",1150+ timeout: 30_000,1151+ });1152+ await page!.getByRole("button", { name: "I saved my phrase — enable sync" }).click();11441153 await page!.getByRole("heading", { name: "Backed up & syncing" }).waitFor({11451154 state: "visible",11461155 timeout: 30_000,