Skip to content

Flow patterns — known sequence failures and their fixes

Failures that only show across two or more states of a flow, each with what to look for, the fix, its basis, and how well it is established. Used by the Walker as a second pass after its walk, and by anyone auditing a flow against continuity across states.

For single-state conventions (focus rings, loading buttons, error wording), query the corpus that ships with muriel:

python -m muriel uipromax guidelines --query "<term>"

Muriel's rules override corpus rows. Row 31, for example, dims disabled controls with opacity, which breaks the 8:1 text floor.

Status

  • standard — a published guideline or specification says it.
  • rule — a muriel rule, not yet seen in a sitting.
  • candidate — seen once in a sitting or user report; the fix is not yet confirmed.
  • confirmed — seen, fixed, and the fix verified in a later capture.

How the list changes. The chair edits it, never a seat. A candidate becomes confirmed when the ledger records its finding as hit (fixed, and the re-render shows it gone). A candidate whose findings are struck as noise in two sittings is removed. A new candidate needs a finding with frame and manifest evidence. Note the date and sitting for every change.

Is the pass earning its place? Ballots tag each finding source: walk or source: pattern. If several sittings go by with the pattern pass adding nothing the walk did not already find, cut it.

Patterns

P1 Moving target

  • Across frames: the next action sits somewhere new in each state.
  • Fix: one action area for the goal, stable across idle, working, ready, failure, and return. If a target must move, the move should carry meaning.
  • Basis: muriel continuity rules.
  • Status: confirmed. User report, 2026-10-29 (Protoplasm export). The fix was verified in the 2026-10-29 Walker sitting: one slot, 0 px shift across 10 frames.
  • Recurrence, 2026-11-05 (Protoplasm Jets panel): P1 came back through P13 below, in a different panel. That was the third time the cause had been fixed in only one panel.

P2 Relabel under the finger

  • Across frames: one button changes to a different or opposite action in place (Record → Cancel, Cancel → Download), with nothing to absorb a tap aimed at the old label. Focus may jump onto the new action.
  • Fix: ignore activation for a short window after any relabel, whether the system or the person caused it, and move focus only after that window. Do not let a completion that lands between pointer-down and pointer-up trigger the new action.
  • Basis: WCAG 2.2 SC 2.5.2 Pointer Cancellation asks that activation complete on the up-event so a person can abort. A relabel between down and up defeats that, because the change cannot be seen in time (muriel's application). uipromax row 32: no repeated activation while processing.
  • Status: candidate. 2026-10-29 export sitting, W1 and W4.

P3 One indicator, two quantities

  • Across frames: the same bar or number reports one thing in one state (playback position) and another in the next (job progress).
  • Fix: one indicator per quantity, each labelled. A control that seeks is not an indicator that reports work.
  • Basis: Apple Human Interface Guidelines, Progress indicators, which treats them as reporting a task's progress (determinate when its extent is known). Reading that as "one indicator per quantity" is muriel's application, not Apple's wording.
  • Status: confirmed. User report, 2026-10-29. The fix (two labelled bars) was verified in the 2026-10-29 sitting.

P4 Relayed handoff

  • Across frames: the person must press a button for a stage that nothing about their intent decides (Prepare, Process, Continue).
  • Fix: run the stage automatically. Keep a review step only if it protects a real choice, and if it is a product question, send it to a split.
  • Basis: cognitive walkthrough question 1 (Wharton et al., 1994): would the person be trying to achieve this effect at all?
  • Status: confirmed. User report, 2026-10-29. Automatic preparation was verified in the 2026-10-29 sitting.

P5 Stale result offered as current

  • Across frames: the settings change while work runs, and the result for the old settings becomes the current download or replaces the ready action.
  • Fix: tag each result with the revision that produced it. Only the current revision becomes the result; late or cancelled work is discarded.
  • Basis: muriel continuity rules.
  • Status: rule.

P6 Focus lost on relabel

  • Across frames: the focused control is hidden or replaced, and focus falls to the page body although the next action is in the same place.
  • Fix: move focus to the control that now occupies the slot (after the P2 window).
  • Basis: WCAG 2.2 SC 2.4.3 Focus Order.
  • Status: candidate. 2026-10-29 export sitting, W8.

P7 Raw system text in the status line

  • Across frames: an exception name or error object appears as the status ("AbortError: Cancelled"), often after a step that succeeded.
  • Fix: map known errors to plain language, and keep background cancellations out of the visible status. When the status line is a live region, the raw text is also announced.
  • Basis: uipromax row 33 (clear error messages); WCAG 2.2 SC 4.1.3 Status Messages for how the line is announced.
  • Status: candidate. 2026-10-29 export sitting, W5.

P8 Output differs from the chosen moment

  • Across frames: the person framed or chose something, but the delivered output starts, crops, or ends somewhere else (a loop excerpt that starts seconds after the held moment).
  • Fix: honor the choice, or say plainly before commit what the output keeps. Check the delivered file, not only the preview.
  • Basis: the Preview pattern in Tidwell's Designing Interfaces (show the result before committing); task correctness as a separate success criterion (task analysis).
  • Status: candidate. 2026-10-29 export sitting, W3.

P9 Placeholder reads as another control

  • Across frames: an empty or disabled control sits where a different control's label leads the eye (a playback slider under a "Focus" heading because a sticky footer covers the real slider), or its label changes while it stays empty.
  • Fix: hide controls that have nothing to act on, and keep sticky regions from covering the content above them.
  • Basis: muriel continuity rules.
  • Status: candidate. 2026-10-29 export sitting, W9.

P10 Cancel loses the work

  • Across frames: cancelling a long step discards what came before it (the take, the entered data), or leaves no route forward.
  • Fix: cancel stops only the running step; keep the work and offer the step again.
  • Basis: the Cancelability pattern in Tidwell's Designing Interfaces; muriel's "protect the user's work".
  • Status: standard. The fix held in the 2026-10-29 sitting: "Cancelled. Your scene is still here."

P11 Ready is not delivered

  • Across frames: the journey ends at "ready" or "download started", with no evidence of the output where the person will look for it.
  • Fix: check the output at its destination, and tell the person where it went.
  • Basis: muriel continuity rules.
  • Status: rule. In the 2026-10-29 sitting, W10 recorded it as a journey limit.

P12 Choice offered after the expensive step

  • Across frames: an option that changes the output appears only after the output has been built, so choosing it repeats the work and opens a cancel-and-retry branch.
  • Fix: offer the choice before the work starts, or build the alternatives together when it is cheap.
  • Basis: task analysis: put the deciding information where the choice happens.
  • Status: candidate. 2026-10-29 export sitting, W7.

P13 Transient in the layout flow

  • Across frames: a timed message (toast, caption, "saved") is inserted into a container's normal flow. Its arrival pushes every control below it out of place, and its expiry pulls them back. The person sees a flicker and the panel's edge jumping. A tap aimed during the window lands on a different control.
  • Fix: a transient never takes layout space. Show it in an overlay, or in a slot reserved at full height whether or not it is filled. Remove the mechanism, not one panel's exposure to it. Gate it with a geometry check: open each panel, trigger its actions, sample every control's rect before, during and after the transient's lifetime, and fail on any shift.
  • Basis: P1, applied to system-timed changes. A move the person did not cause, made while they are aiming, carries no meaning (muriel continuity rules).
  • Evidence: Protoplasm, 2026-11-05, logged at Andy's request as a major UI design failure. One global 1.8 s caption (#action-caption) was moved into whichever corner panel was open (show-corners.ts, panel.prepend(caption)). Measured at 844 × 390: after a drive-mode tap, the Jets panel's heading, mode row, direction row and Strength slider each dropped 63 px, then returned 2 s later. Earlier fixes exempted Layers (2026-10-23) and the deck (2026-10-29) one at a time. Turn, Sprinkle and Hands kept the mechanism, and no check covered geometry over time.
  • Status: confirmed. Three user reports, then the fix on Protoplasm master 2f5a6b7 (2026-11-05). It removed the mechanism for every panel and rebuilt Turn as a dial with no caption or readout. Verified the same day: corner-controls-check flyout-controls-hold-still-while-in-use passed with 0 px over 7 actions and 14 samples. A before/after capture at the same base commit (scripts/turn-dial-compare.mjs) showed the old panel's controls moving 14 to 78 px and the dial's 0 px at 1280 × 800, 390 × 844 and 844 × 390.

Sources

  • W3C (2023). Web Content Accessibility Guidelines (WCAG) 2.2. Success criteria 2.4.3, 2.5.2, 4.1.3. https://www.w3.org/TR/WCAG22/
  • Apple. Human Interface Guidelines: Progress indicators. https://developer.apple.com/design/human-interface-guidelines/progress-indicators
  • Tidwell, J., Brewer, C., and Valencia, A. (2020). Designing Interfaces (3rd ed.). O'Reilly. Patterns: Preview, Cancelability.
  • Wharton, C., Rieman, J., Lewis, C., and Polson, P. (1994). The cognitive walkthrough method: A practitioner's guide. In Usability Inspection Methods. Wiley.
  • muriel.uipromax ux-guidelines, rows 31–33 (MIT, ui-ux-pro-max-skill).