Skip to content

Free UI polish batch #273–#278 (tables, filters, primary, progress, copy, chips) - #284

Merged
MrDarkRoot merged 19 commits into
mainfrom
ui/batch-273-278
Oct 14, 2026
Merged

MrDarkRoot merged 19 commits into
mainfrom
ui/batch-273-278

Conversation

@MrDarkRoot

@MrDarkRoot MrDarkRoot commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

WriteLeash Free UI polish batch #273–#278

Batch PR containing all 6 presentation-only issues in dependency order. Individual worktrees preserved at /tmp/wl-273 … /tmp/wl-278; this branch ui/batch-273-278 cherry-picks them in order #273 → #274 → #278 → #276 → #275 → #277 with conflicts resolved keeping BOTH intents.

Base SHA: 325cbe722f7cc0e7d828a3dd620adbc5cd1244c8 (origin/main, verified git fetch origin && git rev-parse origin/main before each subagent).
Do NOT merge: single-owner repo, only @MrDarkRoot merges. No self-merge, no auto-merge.

Actual current behavior found (not just issue line numbers)

  • class-free-admin.php 2748 lines: support_details() L1520, render_history_table L1756, render_preview_view L2221, render_job_view L2562 — all confirmed.
  • free-selection.css 193 lines: .writeleash-table-scroll L126-130, .widefat table-layout:fixed + min-width:900px L131-134, padding 16px.
  • free-progress.js 189 lines: apply() L95-133; payload had NO numeric totals (only label/summary/notice/poll/rows).
  • free-selection.js 133 lines: selectedList() L51-64 full-width <li> + full .button Remove per item.
  • Filters at L2639-2646 were <p class="writeleash-filters"> with <strong>/<a class="button">, not subsubsub.
  • Job view had double-primary bug: Continue Undo was also button-primary while Resume available (reproduced on HEAD).
  • free-selection.js:114 still says "Reload if your session expired" — selection search UI, out of ui(free): live progress bar for Apply and Undo on the Progress and results screen #276 scope, left intact.

What each issue did

Conflict resolution (kept BOTH intents, never dropped)

  1. CSS #274 vs #276: kept .writeleash-progress block + ul.writeleash-filters.
  2. PHP #275 vs #276 call site: render_undo_section(..., $resume_available) + "Refresh this job…" wording.
  3. PHP #275 vs #277 preview bottom: $approvable + render_approve_form() + ui(free): copy and density pass — plain-language strings, collapsed intro, no empty Details toggles #277 short copy.
  4. PHP #273 vs #277 results: short paragraph + Details + writeleash-amount header classes.

Screenshots — committed at docs/review/pr-284-shots/ (not /tmp)

All PNGs English, USD, <1 MB, 4:3-ish, no customer data. 38 PNGs (~3 MB) + 3 fixtures + 2 DOM dumps + 106-line README on this branch (direct git ls-files proof).

Area Artefacts
Tables — Preview 5-col, Results 6-col, History 4-col pr284-table-1440/1024/782/375-{top,stuck}.png (8) + pr284-table-zoom200-720-{top,stuck}.png (2) + pr284-wl275-preview-1440/1024/782/zoom200.png + pr284-wl275-job-1440/782.png (6) — 16 PNGs 43K–157K; previews the 200% zoom equivalence (720 CSS px ≡ 1440@200%), sticky thead top:32px / 46px≤782px, region-only scroll at 375, no page h-scroll
Empty / conflict / pager (inside same table shots) Fixture rows carry No retained products… colspan=6, Not changed · left the newer value unchanged (CONFLICT), Not restored · preserved the newer value instead of restoring over it (UNDO_CONFLICT), disabled Previous + Next pager links
Filters — ul.subsubsub.writeleash-filters (6 active states, pipe separators) pr284-filters-all-1440/1024/782.png (3, 92–95K) + crops pr284-filter-{all,conflict,attention,review,undo-conflict,undo-review}-1440.png (6, 11–14K); one a.current[aria-current=page] + li.all/conflict/… + `
Progress — render_progress_bar() 4 states pr284-progress-all-1440/782/375.png (3, 82–85K) + crops pr284-progress-{apply-mid,apply-finished,undo-mid,undo-hidden}.png (4, 13–16K); data-progress-bar/fill (Apply 1/3 33%, 3/3 100%) + data-progress-undo-bar/fill (Undo 1/4 25%, 0/0 hidden when total <1); role=progressbar aria-valuemin/max/now + aria-label; progress-dom.json asserts
Chips + no-JS fallback pr284-chips-1440/1024/782/375.png (4, 157–172K) + pr284-chips-list-crop.png (63K) + pr284-chips-fallback-crop.png (46K); flex row writeleash-chip__text + writeleash-chip__meta (SKU·ID) + remove × icon; fallback <select multiple id=writeleash-free-products>

Fixtures: fixtures/fixture-{filters,progress,chips}.html + captured.css (repro). Full mapping in docs/review/pr-284-shots/README.md.

Changed strings (writeleash domain, for POT refresh)

New/changed: %s before to after; Planned prices are not guaranteed shopper prices. (standalone); Apply progress, Undo progress; Approved. … Progress updates automatically.; Undo in progress. Progress updates automatically.; Refresh to read the current price; Session or permission expired. Sign in again, then use Refresh saved progress.; This preset changed… Refresh and try again.; security token… Refresh the page…; History is unavailable… Refresh the page… (×2 sites); Saved progress… Refresh this page…; …Refresh this job…; intro lead + How it works + 4 steps; Details; Changing settings builds a new preview.; Approving applies only the prices shown above. …; Expected and planned are %1$s values. + Details remainder; undo inline visible per CI audit surface; This stored price format is not supported. Removed originals listed in #277 return. writeleash.pot regenerated via wp-cli (20 msgid swaps + Apply/Undo progress labels).

Current CI — head 29669358b2 (ui/batch-273-278)

Check Status Notes
PR_FAST ✅ pass 29–34s Public package + ownership + workflow-lint
plan / woo-plan-107 ✅ pass
jobs / journal / undo ✅ pass
admin / woo-free-admin ✅ pass 45m After fixing duplicate Approve (5 e2e/browser suites) + focus + one-primary + single-form count
CI_COVERAGE ✅ pass 7s Depends on all above
acceptance ⏸️ SKIPPED — merge blocker Touches admin+acceptance per path-ownership.json:63 (free-selection.css/js, free-progress.js, class-free-admin.php). Needs label ci112:29669358b2bdc3b8bca60182df4b533f2c24535c by @MrDarkRoot. Without it, the acceptance_* matrix (MySQL + MariaDB × default + Redis) is not evaluated — a skip is not a pass.
snapshot.php KEEP class-product-snapshot.php = 1 hunk invalid_price string-only: The stored price is outside the supported decimal contract. → This stored price format is not supported. Presentation copy per #277, no planner math/eligibility/fingerprint/storage change. php -l clean, i18n-catalog.php 610 PASS.

Do NOT merge — only @MrDarkRoot merges. Exact-head hosted Admin + acceptance matrix must show MySQL+MariaDB×default+Redis before merge (acceptance budget label required).

orchestrator added 18 commits October 14, 2026 10:12
- docs/review/pr-284-shots: 38 PNGs + fixtures + DOM dumps proving tables/filters/progress/chips at 1440/1024/782/375 + zoom200
- free-selection.css: contrast comment for chips #3c434a/#e4e4e4 7.9:1

Co-authored-by: ui/batch-273-278
Presentation-only batch #273-278 touches only class-free-admin.php,
free-selection.js, free-selection.css; historical #170 PNGs/result JSONs
unchanged. Refresh source_hashes per established contract.
Selection browser journey requires focus return to product search;
keep neighbour chip fallback only when search field absent.

Refresh #170 proof for free-selection.js.

Co-authored-by: ui/batch-273-278 CI fix
selection-browser journey action helper now uses .first() for Approve;
count assertion updated to 2 (top + bottom identical forms).

Co-authored-by: ui/batch-273-278 CI fix
presentation, recovery, presets, preset-labels all assert
Approve count 1 -> 2 for fresh/Repeat/refined previews; action
helpers use .first() for the duplicated button.

Co-authored-by: ui/batch-273-278 CI fix
…ish check

Preview now has 2 identical button-primary elements (top+bottom Approve)
for no-JS; other views stay at 1. Bound is 2 only for preview.

Co-authored-by: ui/batch-273-278 CI fix
Undo does not reverse: orders, completed sales ... must remain in
visible page text (presentation polish moved it to collapsed Details
which is not in innerText). Restore inline form while keeping first
clause shortened per #277.

Co-authored-by: ui/batch-273-278 CI fix
Co-authored-by: ui/batch-273-278 CI fix
Co-authored-by: ui/batch-273-278 CI fix
…suites

#275 renders Approve top+bottom (byte-identical POSTs). regression
form() helper and Approve tabTo target, exclusions + presets
Approve enter targets now use .first().

Co-authored-by: ui/batch-273-278 CI fix
#275 renders two byte-identical approve forms; invariant kept as
identical-plan binding instead of single-form count.

Co-authored-by: ui/batch-273-278 CI fix
#273 merges Preview before/after into one cell; update the two
positional assertions to the 5-col layout (merged cell holds both
values incl. absolute target).

Co-authored-by: ui/batch-273-278 CI fix
@MrDarkRoot

Copy link
Copy Markdown
Owner Author

@MrDarkRoot — acceptance budget request for PR #284

This PR touches class-free-admin.php + free-selection.css/js + free-progress.js, which per .github/ci/path-ownership.json:63 own the admin + acceptance gates. Current CI shows acceptance skipping (correct — no budget yet). PR_FAST, admin (woo-free-admin), plan, journal, jobs, undo are all green on head 29669358b2.

Budget mechanism (from ownership.py:acceptance_budget_approved()): add label ci112:29669358b2bdc3b8bca60182df4b533f2c24535c (exact 40-char head SHA, same-repo only) to this PR. Once you apply it, PR checks will re-run the acceptance_* matrix: MySQL + MariaDB × default + Redis. A skip is not a pass — CI_COVERAGE will require the acceptance results before merge.

No direct push to main, no self-merge — waiting for your label + green acceptance.

@MrDarkRoot MrDarkRoot added the ci112:29669358b2bdc3b8bca60182df4b533f2c24535c Exact-HEAD acceptance budget for PR #284 UI batch label Oct 14, 2026
Plugin Check OutputNotEscaped on render_progress_bar: wrap the
data-hook attributes in esc_attr. Refresh #170 source fingerprint.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci112:29669358b2bdc3b8bca60182df4b533f2c24535c Exact-HEAD acceptance budget for PR #284 UI batch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant