mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Fix dataset-ref walk false positive and wire spec-mandated success toasts
- Prune the data payload and top-level datasets keys in all three ref walks (extractDatasetRefs, renameDatasetInSpec, resolveDatasetRefs) so a data row carrying a field named "data" is no longer misread as a library reference, spuriously rewritten, or made to throw DatasetNotFoundError. Adds tests, including a guard that lookup-transform refs (from.data) still resolve. - Wire the deferred success toasts now the Toaster has landed: publish, revert, extract-to-dataset, and snippet/dataset delete. Copy follows the council title-vs-message rule (title states the action, message adds the consequence). - Reconcile the spec's blanket toast mandate to "toast only what the user can't already see": no toast on visible-result creates (snippet, dataset form); Copy Reference stays inline and gains an aria-live announcement (new shared .visually-hidden utility) instead of a toast-per-copy. - Move the toast region to bottom-right so it stops covering the header action cluster (Publish/Revert, theme/datasets). - Update docs/spec 01F/02/05 and docs/architecture/07 + 10 to match.
This commit is contained in:
@@ -43,6 +43,28 @@ nature of the message, not by convenience.
|
||||
consent-for-destruction in a toast.
|
||||
- **Errors persist; success fades.** An error/warning toast waits for the user (a critical
|
||||
message must not vanish on a timer); success/info auto-dismiss (~6s).
|
||||
- **Toasts sit bottom-right**, not top-right. Carbon's default is the top, but our header's
|
||||
action cluster (Publish/Revert, theme/datasets) lives top-right — a toast there covers the
|
||||
control the user just used. Bottom-anchored, the stack grows upward with the newest toast
|
||||
nearest the corner, and still clears the centered confirm dialog. (`Toaster.module.css`.)
|
||||
- **Toast copy: title states it, message adds to it.** Every toast renders a `title` and a
|
||||
`message`. The title is the short headline — the action or what stopped, **no terminal
|
||||
period** ("Snippet published", "Storage full"). The message is **one short sentence that
|
||||
must not paraphrase the title** (Carbon, `components/notification/usage.mdx` §Body
|
||||
content: _"Don't repeat or paraphrase the title"_); it carries the **consequence** for a
|
||||
success ("Your draft is now the published version") or the **next step** for a fixable
|
||||
error. Name the specific item in the message when toasts can stack — a delete confirms
|
||||
_which_ one went ("…removed `\"Sales\"`…").
|
||||
- **Toast only what the user can't already see.** A success toast is for an outcome with no
|
||||
strong on-screen cue: a **side effect** (Extract creates a dataset off-screen while the
|
||||
user is in the editor), a **disappearance** (delete), or a **state flip** (publish/revert).
|
||||
An action whose result is immediately visible — a created snippet opening in the editor, a
|
||||
new dataset shown selected — is confirmed by that visible change; adding a toast is noise
|
||||
(NN/g aesthetic-and-minimalist; Carbon `notification/usage.mdx` "Deciding what to use").
|
||||
An **invisible** outcome that still shouldn't toast is **copy-to-clipboard**: confirm it
|
||||
_inline on the control_ ("Copied") with a polite `aria-live` announcement for assistive
|
||||
tech, never a toast-per-copy. This refines the spec's earlier blanket "every action
|
||||
toasts" (spec §01F/§02/§05, reconciled).
|
||||
- **The same failure can light up two channels.** An unrenderable spec shows the _same_
|
||||
message inline in both the editor (§03E) and the preview (§04) — one producer
|
||||
(`PreviewStore`), two subscribers. That's intentional, not duplication.
|
||||
|
||||
Reference in New Issue
Block a user