docs(planning): log the persistent saved-state indicator todo - #135
Merged
Conversation
The save indicator is event feedback that erases itself: maestro.js ~L1748 sets a 2s timer flipping 'saved' back to 'idle', blanking both the glyph and the SR text. Seconds after a rename commits there is no on-screen answer to "did that save?", and the only recourse is to change something else and watch again. Phase 25 reserved the status slot so it stopped shoving the toolbar sideways — the jarring half. This is the other half, and it is a design change rather than a bug fix, which is why it was deliberately kept out of 25-02 rather than smuggled in under the layout work. Core does not use the self-erasing toast. Block editor persists "Saved" until the document is dirty again; classic autosave persists a timestamp; the Customizer encodes it in the action control; Quick Edit lets the updated row BE the feedback. Gutenberg is the closest precedent because both autosave, so the user never presses Save and needs standing reassurance rather than a moment of it. The proposal keeps it glyph-only (the toolbar is icon-only by design and the slot is 24px) and stays empty until the first save, since claiming "Saved" on entry would be a small lie. Two caveats recorded, both raised in review rather than discovered later: 1. It collides with the existing per-row modified dot, which means "differs from the WordPress default" — NOT "unsaved". Two persistent indicators meaning different things is a decision to take deliberately, and the note lists the options including the one NOT recommended (repurposing the dot would break the documented WCAG 1.4.1 non-colour-signal reasoning). 2. The live region pairs role=status + aria-live + aria-atomic with an explicit speak() on the same transition, risking double-announcement. Pre-existing rather than introduced, but persistence makes it more noticeable and this is the natural moment to listen. Also corrects a worry I had raised out loud: the ERROR state does not self-erase. The timer is gated on `if ( ok )`, so an error correctly persists until the next change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Captures the design question raised at Phase 25's checkpoint: should the save marker persist?
The problem
The indicator is event feedback that erases itself —
maestro.js~L1748 sets a 2s timer flippingsaved→idle, blanking both glyph and SR text. Seconds after a rename commits there's no on-screen answer to "did that save?", and the only recourse is to change something else and watch again.Phase 25 reserved the status slot so it stopped shoving the toolbar sideways — the jarring half. This is the other half, and it's a design change rather than a bug fix, so it was deliberately kept out of 25-02 rather than smuggled in under the layout work.
Why persistent is the WordPress-native answer
Core doesn't use the self-erasing toast:
Gutenberg is the closest precedent because both autosave: the user never presses Save, so they need standing reassurance rather than a moment of it.
The proposal keeps it glyph-only (the toolbar is icon-only by design, slot is 24px) and stays empty until the first save, since claiming "Saved" on entry would be a small lie.
Two caveats, recorded rather than left to be discovered
1 · It collides with the modified dot. That per-row
•means "differs from the WordPress default" — not "unsaved". A persistent toolbar check alongside it puts two persistent indicators on screen meaning different things, and the difference isn't self-evident. The todo lists options including the one it explicitly doesn't recommend: repurposing the dot to mean "unsaved" would break the documented WCAG 1.4.1 non-colour-signal reasoning atmaestro.js~L136-146.2 · The live region wants a listen, not an assumption.
role=status+aria-live+aria-atomic="true"already pairs with an explicitspeak()on the same transition — a double-announcement risk. Pre-existing rather than introduced, but persistence makes it more noticeable, and this is the natural moment to check.One correction to something I said out loud
I'd flagged that the error state might also self-erase and be worth checking. It doesn't — the timer is gated on
if ( ok ), so an error correctly persists until the next change. Verified before writing this up.🤖 Generated with Claude Code