feat: Repair Panel main-window redesign (single centered card) - #181
feat: Repair Panel main-window redesign (single centered card)#181JG2547 wants to merge 2 commits into
Conversation
Make the main workspace one centered, rounded "Repair Panel" card that is the dominant visual object and hosts EVERY wizard state on the same stable shell — checking, fix-available, action-needed, repairing, success, failure/retry, and the Zoom guided-recovery state. What changed (UI/UX only — no behavior, IPC, or state logic touched): - Wrap the wizard body + Advanced-details disclosure + action area in a single .repair-panel card (panel surface, hairline border, shadow, 18px radius). The header (product mark + summary badge) stays above it and the footer stays restrained below. - Center the card on both axes inside .main; drop the old containerless margin-top:auto / margin-bottom:auto / padding-bottom:80px centering hacks and the 640px workspace. - Give the card a fixed min-height (416px, just above the tallest pane) and center its content, so success/error/checking/repairing all occupy the same rectangle — geometry no longer jumps or repositions between states. Measured: identical card box (h=416, top=192) for all six states at 1000x760. - Collapse the empty Advanced-details region out of the flow when it has no visible content, removing the large content->footer gap. - Scope pane scrolling (46vh) so only a genuinely oversized pane (Zoom recovery) scrolls internally; the card and window never scroll. Fixes the prior problems: dead space, weak vertical centering, big header/footer gaps, detached status, misaligned Action-needed state, inconsistent geometry, and content jumping between states. Honest UNKNOWN/error states are preserved unchanged — nothing was flattened into a reassuring success for visual convenience. Evidence: tools/repair-panel-capture.js renders the real page files through the real renderer with a mocked electronAPI and screenshots each state at 1000x760, asserting no window overflow. PNGs + manifest under .audit/repair-panel/. Verified no vertical/horizontal window scroll and no clipping from the 720x640 minimum window up to 1280x860. Existing npm test suite passes; existing zoom-recovery capture harness still passes on the new tree. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
#182 is the designated Repair Panel survivor. Before closing this one I checked whether it actually contains this PR's intended behavior, rather than assuming it. The UI behavior is covered. One thing is not, so I am leaving this open rather than closing it. Covered by #182This PR's stated intent is a single centered card with one stable geometry for every state. #182 implements the same thing in
Same 560px, same centering, same "only an inner pane scrolls, never the window" rule. #182 reaches it by injecting CSS over the existing shell instead of editing #182 additionally has the cooperative-cancellation work ( NOT covered by #182
I verified this directly against the branch contents rather than the PR description:
So the capture harness is unique to this branch and would be lost. Why I have not closed thisThe rule I was given is to close this only after proving #182 contains every intended unique behavior. The behavior is proven above. The capture harness is tooling rather than behavior, but it is real unique value and closing this PR would discard it. I have also not pushed the harness onto #182's branch: Recommended resolution, whichever you prefer:
Say which and I will execute it. The |
|
Decision recorded: tooling-only preservation. This PR's Sequencing, deliberately in this order:
I will not describe the original seven-state harness as "preserved" if the replacement cannot drive #182's actual state model — that would be a claim about a file rather than about behaviour. Tracked as L-08 in Verified evidence behind the supersession call, taken from branch contents rather than PR descriptions:
So the harness is genuinely unique to this branch, which is why this PR is not being closed yet. |
Summary
The main workspace is now one centered, rounded "Repair Panel" card — the dominant visual object of the window. The same stable card hosts every wizard state (checking, fix-available, action-needed, repairing, success, failure/retry, and the Zoom guided-recovery state). The header (product mark + summary badge) sits above it; the footer stays restrained below.
This is a UI/UX-only change. No repair IPC, elevation, support-service, updater, profile-safety, diagnostics, accessibility, or honest UNKNOWN/error logic was touched — verified by the passing
npm testsuite and the existing zoom-recovery capture harness. Nothing was flattened into a reassuring success for visual convenience.Problems fixed
Excessive dead space · weak vertical centering · large header→content and content→footer gaps · detached status info · misaligned "Action needed" state · inconsistent panel geometry · content jumping/resizing between states — all addressed by fixing spacing and hierarchy, not by hiding information.
Rendered states (harness render, mocked electronAPI — not the packaged app; 1000×760)
Bonus — the tallest pane, Zoom guided recovery (blocked), rendered inside the card with its content scrolling internally, never the window:
Render → critique → adjust loop
Iteration 1 (card introduced, content-sized): the card rendered and centered, but its height swung 226px→400px across states (action-needed 226, checking 332, repairing 400, error 362). Concrete defect: the card visibly grew/shrank and re-positioned (top moved 200→287px) as the state changed — a direct violation of "geometry stable across states."
Adjustment: gave
.repair-panela fixedmin-height: 416px(just above the measured tallest pane, the 400px repairing rail) and vertically centered its content.Iteration 2 (measured): every state now occupies an identical box — h=416, top=192, optically centered (≈3px high, deliberate optical center) — at 1000×760. Success and error no longer resize or reposition the workspace. Also collapsed the empty Advanced-details region out of the flex flow so it adds no content→footer gap unless it actually has content (the failure "Copy error details" link or an expanded panel).
Cross-size verification: no window vertical/horizontal scroll and no clipping from the 720×640 minimum window (card top=132, bottom=548) through 900×700, 1000×760, up to 1280×860.
Acceptance criteria (verified against the screenshots + measured DOM metrics, not assertion)
Not-met / caveats (honest): For states with no primary CTA (action-needed, checking), the fixed card leaves some intentional internal whitespace as content centers within the stable box — this is the deliberate trade-off for non-jumping geometry, favored per the task. The screenshots are harness renders with a mocked
electronAPI(real page code/styles/copy, mocked scan/fix data); packaged-app visual inspection on real Win11 remains a separate step.Files changed
index.html— CSS for the card + centering; wrap wizard/adv/action in.repair-panel.tools/repair-panel-capture.js— new evidence harness (headless Chromium via global Playwright) driving the real renderer through each main state..audit/repair-panel/*.png+manifest.json— captured state evidence.Test / CI
npm test— PASS (exit 0): all 12 smoke suites incl. ui-state, messages, electron-security, updater-channel, release-identity.tools/ui-state-capture.js(zoom-recovery) — all 25 new-tree captures PASS (the single "old-blocked" FAIL is only because--base HEADwas used, so the "old" tree legitimately already has the card; not a regression).