maniator / maniator/verticopolis
[Bug]: [P3] The late export toast may be announced to nobody, because it bypasses sayVisibly
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 5
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Description
Deferred from the adversarial review (Edge Case Hunter) of the #774 fix.
src/ui/UI.ts documents the hazard and exists to solve it: "the asynchronous import and export paths all share one hazard: a <dialog> paints over the toast rail at any z-index. A failure announced with a toast from there is announced to nobody (GH #658)." That is what sayVisibly is for.
The new late-success branch in runExportFlow uses the raw deps.ui.toast. That toast fires at least ten minutes after the export was invoked, and the feature's own rationale is that the player has moved on by then, which makes them maximally likely to have the saves dialog, stats panel, or another modal open at that moment. So the one notice this feature exists to deliver is the one most likely to be painted over.
Compounding it: ui.toast writes only the rail. The bulletin log is written solely by renderLog, so there is no scrollback record. The 3.6 second dwell is the entire notice, and the paired "The export is not responding" toast is ten minutes gone from the rail, so the two never co-exist on screen for the player to connect.
Not fixed in the #774 PR because it needs a small decision rather than a mechanical change:
ExportFlowDeps.uiis currentlyPick<UI, "toast" | "downloadFile">and does not carrysayVisibly, so the dependency shape has to widen.sayVisiblyaccepts only"bad" | "info", while the copy party ruled this toast"good". EithersayVisiblywidens to accept "good", or the late toast changes kind, or a third path is needed. Changing the kind is a copy decision and belongs back with the party if taken.
Worth weighing alongside #784 (the live path has no late-success wording at all), since both are about a late outcome failing to reach the player and a single design pass could settle the delivery mechanism for both.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the hazard documented in src/ui/UI.ts, then trace the late-success branch in runExportFlow and the ExportFlowDeps.ui type. Compare the available sayVisibly kinds with the existing toast behavior, and review #784 for the related live-path case. Done means the late outcome reaches the player reliably without leaving the delivery decision unresolved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- accessibility, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100