@@ -58,8 +58,10 @@ before anything else runs.
58583 . Leave via the back button (` icon-ChevronLeft ` ); the unsaved-changes dialog
5959 ("Unsaved changes will be permanently lost.") appears — click ** Exit Anyway** ;
6060 assert the editor was left
61- 4 . Re-open the flow ** by id** (` /flow/<id> ` , waiting for its
62- ` GET /api/v1/flows/<id> ` to resolve and the canvas to mount); assert the
61+ 4 . Re-open the flow ** by id** via ` openFlowById ` (` /flow/<id> ` ; the helper gates
62+ on the canvas mounting and on the flow being writable, and the spec
63+ additionally waits for the flow's own ` GET /api/v1/flows/<id> ` so the count
64+ below cannot read a canvas whose graph has not been applied); assert the
6365 canvas has ** 0** nodes (` div-generic-node ` count = 0) — the edit was discarded
64665 . Add the Chat Input component again (hover the sidebar entry →
6567 ` add-component-button-chat-input ` )
@@ -107,8 +109,12 @@ fails if either save did not persist (see Notes on the hardening).
107109 search. Adds use the draggable wrapper hover → add button (the sidebar row is
108110 briefly ` pointer-events-none ` ; dragging it is unreliable).
109111- ` data-testid="title-Chat Input" ` / ` div-generic-node ` — node presence on canvas.
110- - ` GET /api/v1/flows/{id} ` and the ` /flow/{id} ` route — the re-open path (see the
111- #1336 note below for why this is not the flows-list card).
112+ - ` GET /api/v1/flows/{id} ` and the ` /flow/{id} ` route — the re-open path, entered
113+ through ` helpers/flows/open-flow-by-id.ts ` (see the #1336 note below for why
114+ this is not the flows-list card).
115+ - ` helpers/ui/assistant-onboarding.ts ` — the onboarding flag is seeded before the
116+ first navigation, so the tooltip upstream arms at canvas mount + 10 s cannot
117+ land over the canvas-controls bar this spec clicks four times.
112118- No API key — the Chat Input / Chat Output components are added to the graph,
113119 never executed.
114120
@@ -151,6 +157,22 @@ fails if either save did not persist (see Notes on the hardening).
151157 again, from the other side). The re-open is therefore by URL, and each exit now
152158 asserts the editor was left — verified by forcing the save PATCH to 500, which
153159 now fails at the exit step instead of 45 s later on an unrelated locator.
160+ - ** #1342 (the re-open uses the repo's by-id entry, not a local ` goto ` ).** #1336 's
161+ fix hand-rolled ` page.goto('/flow/{id}') ` + a canvas wait, which was the fourth
162+ copy of the block ` helpers/flows/open-flow-by-id.ts ` (#1214 ) was extracted to
163+ stop. Migrated to ` openFlowById ` , which adds two guarantees the copy did not
164+ have: the onboarding overlay cannot appear, and the editor is not handed back
165+ while ` POST /api/v1/authz/me/permissions ` is still in flight — the #1005 window
166+ in which a mutation is silently swallowed, and this spec adds a component
167+ immediately after two of the three re-opens. ** One thing did not come from the
168+ helper and must stay** : the wait on the flow's own ` GET /api/v1/flows/{id} ` .
169+ ` openFlowById ` returns on ` canvas_controls_dropdown ` + writability, neither of
170+ which implies the graph has been applied — and the discard assertion
171+ (` div-generic-node ` count = 0) is the one check that PASSES VACUOUSLY on a
172+ canvas that has not painted its nodes yet. The seed is called at the top of the
173+ test rather than left to the helper, because upstream arms the tooltip at canvas
174+ mount + 10 s over the bar ` adjustScreenView ` clicks, and the first editing phase
175+ (two of those calls, plus the on-canvas save) happens before any re-open.
154176- ** #790 (load-collateral, critical clicks hardened).** On load-degraded /
155177 guard-tripped dailies (2026-07-15/16) the spec failed with
156178 ` locator.click: Timeout 20000ms exceeded ` on a manual-save click target. Not a
0 commit comments