Phase 7: visual polish & solid icons + wp.org 1.0.0 release prep#25
Merged
Conversation
- 11 tests for resolveIcon policy: fill preference, synonym map, outline fallback - SYNONYM_FILL target existence assertion (hard check — missing target is failure) - No-silent-drop invariant: all 87 CURATED names resolve to existing files - Data-URI shape: base64, baked #a7aaad grey, no currentColor - RED phase confirmed: generator lacks exports + is side-effectful on import Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Export resolveIcon(name) -> {file, source:'fill'|'synonym'|'outline'}
Prefers <name>-fill.svg; falls back to SYNONYM_FILL (7 validated synonyms);
else retains outline. Never drops a CURATED name.
- Export SYNONYM_FILL map (7 entries, all validated existsSync at load time)
files->file-earmark-fill, pencil-square->pencil-fill, images->image-fill,
folder2-open->folder-fill, cart3->cart-fill, person-circle->person-fill,
person-lock->person-fill-lock
- Export bakeDataUri(name): reads resolved SVG, bakes #a7aaad, strips
width/height/class, returns base64 data:image/svg+xml
- Export CURATED (87 names), ICON_DIR, MENU_GREY
- Guard writeFileSync behind main() called only when run directly
(process.argv[1] === fileURLToPath(import.meta.url)) — import is side-effect-free
- All 35 JS tests green (11 new icons-bundle + 24 existing)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 58 names now use <name>-fill.svg (direct Bootstrap fill variant) - 7 names use validated solid synonyms (SYNONYM_FILL map) - 22 names retained as outline (no solid form in Bootstrap Icons v1.13.1): speedometer2, journal-text, card-text, layout-text-window, film, music-note-beamed, list-ul, table, shop, cash-stack, receipt, truck, graph-up, gear-wide-connected, sliders, tools, wrench, server, globe, link-45deg, code-slash, search - Bundle still has exactly 87 entries; no silent drops - All entries are valid data:image/svg+xml;base64, data-URIs at #a7aaad Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 07-01-SUMMARY.md: fill-resolution policy + 87-entry bundle regeneration - STATE.md: progress 40%, decisions, session, metrics recorded - ROADMAP.md: Phase 7 plan progress updated (1/3 plans complete) - REQUIREMENTS.md: ICON-01 marked complete Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Widened inter-zone gap to 16px for deliberate status | panel | right-actions rhythm - Panel left-border widened to 2px; right-actions group gets matching 2px left-border - Status zone: flex-shrink:0 prevents compression when label is long - Panel label: max-width tightened to 200px to guard against status overrun - Non-color ::before glyph per state: ○ idle, ⏳ saving, ✓ saved, ⚠ error - Pulsing animation on saving glyph guarded by prefers-reduced-motion - All existing Phase 6 modified-indicator / reset-item rules untouched
- Icon grid: cell min-size 36px -> 40px, padding 9px for precise 20px glyph centering - Icon grid: gap tightened to 3px; both tabs now share same visual density - 44px touch target in <=782px media rule preserved with matching padding:12px - .maestro-firstrun styles: fixed bar above toolbar, native admin tokens, keyboard-focusable dismiss - .maestro-firstrun-dismiss: focus-visible outline, hover color change (no color-only) - assets/maestro.js: buildFirstRunCue() injects cue, localStorage-gated, try/catch guarded - Dismiss by click or Enter/Space; does not steal focus from menu - includes/class-assets.php: firstRun + firstRunDismiss i18n strings (WPCS-aligned) - composer lint clean; PHP unit 44/44; integration 29/29; JS 35/35
…tatus glyphs, icon grid, first-run cue Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… cue - ICON-01: Bootstrap tab asserts >50 visible cells, data-URI src on imgs, search filter narrows visible set (Phase 6 filter regression guard reused) - UX-02: bounding-box assertions at 1200px and 700px — toolbar width <= viewport, rename input right edge <= panel right edge (no overflow/resize) - First-run: page.evaluate() clears localStorage once before first nav so the cue appears fresh; dismiss removes it immediately; reload suppresses it - Screenshots written: icons-bootstrap-tab.png, icons-dashicons-tab.png, icons-side-by-side.png, toolbar-1200.png, toolbar-700.png - All 15 e2e tests pass (11 Phase 6 baseline + 4 new Phase 7 specs)
Triage screenshots from the wp-sudo thread into the v1.1 plan; no code changed. - BUG-01 double "Saved" check: i18n string + status glyph both render the mark - BUG-02 rename input shifts: breadcrumb label sits left of the input — keep it (it's specific about the target) but move it right of the input; relabel "Title" - BUG-03 toolbar buttons overlap at narrow widths: .maestro-toolbar lacks flex-wrap - BUG-04 idle "Editor active" circle reads as a dead control: it's the status glyph - BUG-05 status states use emoji glyphs (o/hourglass/check/warn) that go color-emoji or can be disabled — replace with dashicons (already loaded), keep WCAG 1.4.1 shapes All map to Phase 7 / plan 07-04; UX-02 reopened (BUG-01 + BUG-03 falsify its no-text-overlap criterion). V2-15 (role cloning for per-user menu hiding) added to the v2 backlog as a feasibility note: static snapshot vs dynamic user_has_cap inheritance vs per-user visibility, staying within the cosmetic-visibility principle. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v1.0.0 accepted by WordPress.org 2026-06-16. Pending todo flipped from "await review" to the actionable SVN deploy checklist (trunk + tags/1.0.0 + assets/), gated on confirming the granted slug. Captured the 2026-06-10 meta post on the new core-block screenshot gallery: our uniform 1440x980 set renders as a grid with no change required; optional Phase 8 caption polish noted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Slug confirmed maestro-menu-editor (matches the text domain). The script reuses bin/build.sh's runtime set, checks out the SVN repo to build/svn, syncs trunk/ and the directory assets/ (banners, icons, screenshot-1..4), and copies the tags/<version> tag. It deliberately stops before `svn ci` so publishing stays a manual, credentialed step. Version is read from readme Stable tag and checked against the main-file Version header. STATE.md records the confirmed slug + URL. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.0.0 is live at wordpress.org/plugins/maestro-menu-editor (deployed via GitHub Actions → SVN). Flag the pre-next-release listing work into Phase 8: - DOC-02: readme.txt copy rewrite (wp-readme-optimizer) - DOC-03: WordPress Playground "Try it first" demo link (blueprint-hosted.json ready; quick 1.0.1 candidate) in readme + GitHub README - REL-07: stronger banner graphic via the REL-06 pipeline - REL-08: refreshed screenshots + gallery-aware captions for the new core-block directory gallery Phase 8 gains plans 08-05 (copy + playground) and 08-06 (banner + screenshots). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
REL-07 primary design goal: balance the banner's stacked text rows (MAESTRO wordmark, subtitle, tagline) and the gold underline rule to approximately the same horizontal width, rather than mismatched line widths. Image work deferred. Mark DOC-02 (readme rewrite) and DOC-03 (Playground link) as drafted in PR #28. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- BUG-01: drop the trailing ✓ from the localized "Saved" string; the status glyph is now the single canonical mark (no more "✓ Saved ✓"). - BUG-02: the rename input is appended first so its left edge is fixed and no longer shifts with the selected item's name; the breadcrumb label (kept for context) moves to its right. "Title" label relabeled to "Rename". - BUG-03: .maestro-toolbar and .maestro-panel now flex-wrap, so zones and panel controls stack onto rows at narrow widths instead of overlapping. - BUG-04 + BUG-05: status indicators use dashicons instead of Unicode dingbats (idle → de-emphasised dashicons-marker dot, not an interactive-looking ring; saving → dashicons-update with a spin; saved → dashicons-yes; error → dashicons-warning). dashicons declared as a style dependency. Distinct shapes preserve the WCAG 1.4.1 non-color cue; emoji substitution/disabling no longer affects rendering. Test: extend the UX-02 no-overlap e2e to 480px and assert no two toolbar controls overlap (the width-only checks couldn't catch overlapping flex items). Local: phpcs clean, PHP unit 44/44, JS logic 35/35. e2e runs in CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…en RED→GREEN
Running the no-overlap assertion red-first exposed that the 480px viewport I'd
added was invalid: below 782px wp-admin switches to the off-canvas mobile menu,
so the test can't select a menu item at all — it failed in setup, not on the
assertion. Removed it.
The 700px viewport is a real guard: with the BUG-03 flex-wrap reverted the
assertion fails ("toolbar controls 1 and 3 overlap at 700px"); with the wrap it
passes. Full local e2e suite: 15/15. Deliverable screenshots refreshed against
the fixed UI (dashicons status glyphs, single "Saved" check).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RED→GREEN proven for BUG-03's no-overlap e2e at 700px; full local e2e 15/15; phpcs + PHP unit 44/44 + JS logic 35/35. UX-02 unblocked (defects cleared). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RED: asserts the .maestro-status ::before content is `none` when idle (and a glyph for the saved state). Fails against current code where idle still renders the dashicons-marker dot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The idle leading icon was unnecessary — the visible toolbar and "Editor active" text already signal edit mode, and the dot read as a fake control (BUG-04 follow-up). Set the base .maestro-status::before to content:none; the dashicon now appears only while saving / saved / error. Idle test goes GREEN; full e2e 16/16. Deliverable screenshots refreshed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Phase 7 (Visual Polish & Icons) marked Complete 2026-06-17. UX-02 and BUG-01..05 flipped to Complete in the traceability; plans 07-01..07-04 ticked; progress table + STATE position advanced to "Phase 8 next". Verification gate (honest sign-off): PHP unit 44/44, integration 29/29, e2e 16/16, JS logic 35/35, phpcs clean. BUG-03 no-overlap and idle-icon guards proven RED→GREEN. (Plugin Check is the wp.org scanner gate; re-verified at the 1.1.0 deploy — these changes are i18n/CSS/JS-DOM, no PCP surface.) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
What's in this branch
Two threads of work, layered:
Phase 7 — Visual Polish & Icons (code)
*-fillvariants so the picker mixes naturally with WordPress's solid dashicons; fill-resolution policy is unit-tested.wp.org 1.0.0 release prep (docs + tooling)
maestro-menu-editor(matches the text domain), public URL https://wordpress.org/plugins/maestro-menu-editor.bin/deploy-svn.sh— builds the runtime tree, checks out the SVN repo tobuild/svn, syncstrunk/+ the directoryassets/(banners, icons, screenshot-1..4), copiestags/1.0.0, and stops beforesvn ciso publishing stays a manual, credentialed step.Five edit-mode UI defects were triaged from wp-sudo-thread screenshots and are NOT fixed here — they're scoped into plan 07-04:
✓ Saved ✓double check (i18n string + status glyph both render).maestro-toolbarlacksflex-wrap)○reads as a dead control○⏳✓⚠) → replace with dashiconsBUG-01 and BUG-03 falsify UX-02's "no text-overlap / control-resize regressions" criterion, so UX-02 stays open until 07-04 lands. V2-15 (role cloning for per-user menu hiding) was also scoped into the v2 backlog.
Test baseline
Per Phase 7 execution (STATE.md): unit 44/44, integration 29/29, e2e 9/9, Plugin Check 0 errors. Not re-run in the doc/tooling commits (docs + a deploy script only).
🤖 Generated with Claude Code