Lock the wizard mode switch while a run is generating
Reported: during a loading screen (freezing a deck) the Study deck / Make my homework switch stayed live, so the run could be swapped out mid-flight; a request that finished afterwards could even save a deck the user never saw and navigate them into it. - New lib/wizard-busy.ts: a tiny store both wizards publish to while phase === 'loading' (UploadScreen) or view.kind === 'loading' (HomeworkScreen); WizardModeSwitch hides itself while busy. - Both wizards abort the in-flight request on unmount, so leaving via the header logo or the Back gesture stops the run instead of letting it finish invisibly and save/navigate later. - Deck Cancel keeps its long-standing behaviour (wizard + cancelled notice + Retry), matching the freeze-loading suite. Verified: wizard suite 92 checks (mode switch hidden during deck and homework runs, it returns after Cancel, and a delayed reply after leaving mid-run saves nothing and navigates nowhere) plus mobile 134/134 (also de-flaked the sheet's Escape close by waiting for detach), regression 74/74, declutter 116/116, animation 8/8, native 35/35, i18n 25/25, phase1 38/38, phase2 43/43, phase3 20/20, freeze-loading 6/6. Lint + build clean. SW freezmo-v29.
This commit is contained in:
parent
8557b04621
commit
c662fb11f7
6 changed files with 75 additions and 6 deletions
14
README.md
14
README.md
|
|
@ -52,7 +52,10 @@ no database, no data leaving your machine except the requests you send to Ollama
|
|||
real summary — thumbnails/chips, files, difficulty, activities and folder, each with an
|
||||
*Edit* link back to its step. A flat Back/Cancel + Next/Freeze bar sits at the bottom above
|
||||
the safe area (the tab bar hides inside the wizard), and it is portalled to `<body>` so the
|
||||
screen entrance animation can never displace it. The desktop page is unchanged.
|
||||
screen entrance animation can never displace it. While a run is generating, the wizard's
|
||||
**mode switch hides** — a loading screen can't be swapped to the other wizard mid-flight —
|
||||
and leaving the page anyway aborts the request instead of saving a deck in the background.
|
||||
The desktop page is unchanged.
|
||||
- **Native-feel touches (phones)**: the Android Back gesture closes the topmost layer first
|
||||
(sheet, actions sheet, then one wizard step); deleting a deck shows an *Undo*
|
||||
toast instead of a confirm; the deck menu can share a deck as JSON through the system share
|
||||
|
|
@ -1034,9 +1037,12 @@ Things I chose while building, with the reasoning:
|
|||
Drawer-only destinations were re-homed: Progress and Exam became tabs, the New deck screen got
|
||||
a **Study deck ⇄ Make my homework** segmented switch (also on `/homework`), and the library's
|
||||
phone row gained a **⋯** sheet with Import JSON + New folder (folder chips still appear only
|
||||
once a folder exists). Verified by the mobile suite (134 checks: no hamburger/drawer, tab order,
|
||||
the label matrix, per-tab routing, deep links, Back from every tab and the ⋯ sheet) plus the
|
||||
other ten standing suites.
|
||||
once a folder exists). The mode switch is hidden while either wizard is generating
|
||||
(`lib/wizard-busy.ts`), and leaving a wizard mid-run aborts the request so a stray generation
|
||||
can never save a deck or yank the user into the study feed. Verified by the mobile suite
|
||||
(134 checks: no hamburger/drawer, tab order, the label matrix, per-tab routing, deep links,
|
||||
Back from every tab and the ⋯ sheet) plus the wizard suite (92 checks, including the
|
||||
loading-lock and abort-on-leave cases) and the other standing suites.
|
||||
|
||||
36. **The mobile declutter pass reshapes, it doesn't fork.** Phones (≤639px) get a 3-step deck
|
||||
flow and a 2-step homework flow that share the exact state and handlers with the desktop
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue