| UI or UX | UX - Forward edit-history replay | UX - Post-action recovery behavior | UI + UX - Unpublished object version lifecycle | UI + UX - Modal command surface |
| UI guidance | Show Redo as a visible command, menu item, toolbar control, or command-palette row whose enabled state matches the current redo stack. | Show a named recovery affordance after the completed action, such as Undo delete for a specific task, near the result or in a consistent status region. | Label the current version explicitly as Draft, Unpublished changes, Published, Active, Locked, or Unavailable, and place that label near the object title, list row, editor header, and publish actions. | Render a compact dialog-like command surface with a search input, current scope, typed command mode, active result, command metadata, and empty state. |
| UX guidance | Use redo to let users recover from undoing too far without recreating work by hand. | Let users move quickly through frequent reversible actions, then recover from mistakes after seeing the result. | Use draft state when users need to pause work on an object, return later, and decide whether to publish, activate, discard, or keep editing an unpublished version. | Accelerate expert navigation and repeated actions across a large product while preserving ordinary navigation for novice and low-frequency users. |
| Good UI | A document toolbar shows Undo and Redo; Redo is disabled until the user undoes Move Summary before Risk. | Deleting Quarterly report removes it from the list and shows a recovery panel saying Quarterly report deleted with an Undo task button. | A knowledge article header says Draft saved today, shows the currently published title, and offers Resume draft, Compare with published, Discard draft, and Publish. | Centered command surface with input, shortcut hint, scope chip, grouped commands, command type labels, and a visible active row. |
| Bad UI | A Redo button remains enabled after the user types new content, with no indication that the old future branch is gone. | A tiny x removes an item with no object-specific recovery label. | An editor opens directly into draft text but the header only says Saved, so users cannot tell whether viewers see the changes. | Huge branded modal that buries the input below decorative content. |
| Good UX | A user moves a heading, chooses Undo, sees Redo move heading become available, and redoes the same move against the same document outline. | Undo restores the deleted task to the list and reports Quarterly report restored. | A user opens a published article that has an unpublished version, chooses Resume draft, reviews a change summary, publishes, and sees the page become visible to viewers. | Keyboard shortcut or visible trigger opens the palette, focus lands in the command input, arrows move the active row, and Enter activates the highlighted safe command. |
| Bad UX | A user undoes a move, selects a different heading, presses Redo, and the product applies the old operation to the wrong target. | A second delete overwrites the first recoverable item without explaining which action Undo affects. | A user closes an editor after seeing Saved, later discovers the page was never published, and cannot find the draft in the content list. | Palette is the only way to reach important navigation. |
| Best fit | Users perform reversible sequences of edits and can undo too far. | The action is common and mistakes are likely. | Users create or edit objects that should not become visible, active, submitted, or externally effective until a later action. | Users need to traverse a broad product surface quickly. |
| Avoid when | The system cannot reliably store or replay the undone operation. | The action has external side effects that cannot be recalled. | The change is a small one-field edit that should be saved or canceled immediately. | The app has only a few obvious actions. |
| Required state | No-redo state before any undo has happened. | Normal state before the user action. | Published or active state with no draft. | Closed state with discoverable trigger. |
| Accessibility burden | Expose Redo as a named button, menu item, or command row when editing commands are visible. | Make the undo control keyboard reachable and programmatically identifiable. | Expose Draft, Published, Unpublished changes, Locked, and Unavailable as text in the page title area and list rows, not only by color or icon. | Use dialog semantics with a clear name and modal behavior when the rest of the page is inert. |
| Common misuse | Leaving redo enabled after a new edit invalidates the undone future. | Offering undo for an action that cannot actually be reversed. | Using Saved to mean both saved draft and published content. | Hiding basic navigation behind a keyboard-only palette. |