You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This document defines the manual / scripted regression matrix used to validate
the eframe + egui 0.28 → 0.34.2 upgrade path for v0.3.0 across all
supported platforms. Task 58 covered the 0.28 → 0.31.1 jump; Task 89
added the 0.31 → 0.34.2 delta (see §8 below). Migration notes:
eframe-egui-031-upgrade.md,
eframe-egui-034-upgrade.md.
Scope: Only test cases that are materially affected by an egui 0.31 API
change, a Wayland/X11/macOS winit pipeline change, or a known
platform-specific subsystem (borderless window, portals, IME). Generic
regression coverage of unchanged subsystems lives in
v0.2.8-manual-test-suite.md. Run this
matrix after the v0.2.8 suite, not as a replacement.
1. How to read the matrix
Test IDs are stable (LAU-1, IME-3, …) so a v0.3.1 run can reuse the same
IDs and diff results.
Each test case lists the egui 0.31 API change or platform subsystem it
exercises — that is the reason the test exists. Drop a test only when the
underlying API change is also dropped.
Cells use:
✅ — passed
❌ — failed (link to issue in the Issues Found table at the bottom)
⚠️ — passed with caveats (note required)
– — not applicable on this platform
blank — not yet executed
"macOS-AS" = Apple Silicon, "macOS-Intel" = x86_64. Both must be tested
because Intel hit a separate idle-repaint regression in v0.2.x
(intel-mac-cpu-issue-analysis.md)
and the egui 0.31 bump touches the same render pipeline.
On Linux, check the desktop's portal stack
(linux-portal-dialogs.md): pgrep -a xdg-desktop-portal should list the matching backend
(xdg-desktop-portal-gnome / -kde / -wlr / -hyprland).
3. Test categories
Each section maps test cases to the egui 0.31 risk surface listed in
eframe-egui-031-upgrade.md. The matrix
table at the end of each section is the execution log.
3.1 Launch & lifecycle
Validates eframe::App::update plumbing and the per-theme Visuals slot fix
(0.31's biggest behavioural change for us — see Per-theme Visuals slots in
the upgrade doc).
ID
Test case
Why it matters
Steps
LAU-1
Cold start with empty session
Generic boot path
Delete .ferrite/session.json, launch, app shows Welcome page within 3s
LAU-2
First-frame theme correct (System)
set_visuals_of per-theme slot fix in theme/manager.rs::apply
Set OS theme to Light, set Ferrite theme to System, restart — every panel must be light on the first frame (no half-themed UI)
LAU-3
Toggling System ↔ Light ↔ Dark
per-theme slot fix
Settings → Appearance → cycle theme three times, no panel stays in the wrong palette
Tab.tab_content Loading→Ready transitions, polled in update() (egui frame loop)
Open a 10 MB+ file, progress bar visible, UI stays at 60fps, content correct after
FILE-3
Open 100K+ line file
Uniform-height path, line cache
Open big file, scroll top→bottom — smooth, no stutter, line numbers correct
FILE-4
Multi-encoding open
chardetng, unchanged by egui upgrade but must keep working
Open Shift-JIS, Latin-1 files — characters render correctly
FILE-5
Per file type viewers
All viewers go through the same update() loop
Open one of each: .csv, .json, .yaml, .toml, .pdf, .png — each opens in its viewer tab without panics
FILE-6
Cancel large load
Background thread cleanup
Open 10 MB+ file, close tab while loading — no crash, no leaked thread (verify in task manager / top)
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
FILE-1
✅
FILE-2
✅
FILE-3
✅
FILE-4
⚠️
FILE-5
✅
FILE-6
✅
3.3 Keyboard input & shortcuts
The winit input pipeline was rewritten between 0.29 (egui 0.28) and 0.31
(egui 0.31). This is the single biggest reason for the upgrade — fixes
#106 (Wayland) and
#111 (macOS Sonoma).
ID
Test case
Why it matters
Steps
KBD-1
Type ASCII
Baseline input
Open empty buffer, type "the quick brown fox" — characters appear
Launch on macOS 14, click editor, type — keys must register
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
KBD-1
✅
KBD-2
✅
KBD-3
✅
KBD-4
✅
KBD-5
✅
KBD-6
✅
KBD-7
✅
KBD-8
–
–
–
–
KBD-9
–
–
–
3.4 IME / complex text
The Memory::layer_transforms API change (now a method, not a field) directly
affects how IMEOutput is reported to the OS — see
windows-ime-layer-transform.md.
HarfRust shaping is unchanged by the bump but lives in the same render path
as the new 0.31 painter API.
echo 你好世界 — characters render at double width, no overlap
TRM-4
Drop zone overlay (left/right/top/bottom/center)
All five overlays draw via painter.rect_stroke(StrokeKind::Inside)
Drag a terminal tab over another pane — each of the five drop zones must render its preview rectangle without panicking
TRM-5
Split layout horizontal
Split painter
Cmd: split horizontal, both panes accept input
TRM-6
Split layout vertical
Split painter
Cmd: split vertical, both panes accept input
TRM-7
Theme switch with terminal open
ANSI color recompute
Switch theme while terminal visible — colors update immediately
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
TRM-1
✅
TRM-2
✅
TRM-3
✅
TRM-4
✅
TRM-5
✅
TRM-6
✅
TRM-7
✅
3.6 File dialogs
rfd is unchanged by the egui upgrade, but the dialog spawn path crosses the
winit event loop, which was rewritten. Smoke-test on every supported
WM/DE.
ID
Test case
Why it matters
Steps
DLG-1
Open file dialog
Native dialog round-trip
File → Open, pick a .md, opens as tab
DLG-2
Save As dialog
Native dialog with filter
File → Save As, write .md filename, file written on disk
DLG-3
Open folder (workspace)
Folder picker
File → Open Folder → pick a directory, file tree appears
DLG-4
Cancel dialog
No spurious error toast
Open dialog, press Esc — no error message
DLG-5
GNOME (Wayland) portal
xdg-desktop-portal-gnome
Run on Ubuntu 24.04 GNOME Wayland, DLG-1..4 must work
If a Flatpak build is available, DLG-1..4 must work inside the sandbox
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
DLG-1
✅
DLG-2
✅
DLG-3
✅
DLG-4
✅
DLG-5
–
–
–
–
DLG-6
–
–
–
–
DLG-7
–
–
–
DLG-8
–
–
–
DLG-9
–
–
–
–
DLG-10
–
–
–
3.7 Borderless title bar & window resize
Heavy users of with_layer_id (deprecated in 0.31) and the new painter
signatures. Fully borderless mode is Windows-specific
(windows-borderless-window.md) but the
title bar code path runs everywhere.
ID
Test case
Why it matters
Steps
WIN-1
Drag window by title bar
Drag-region detection in app/title_bar.rs
Click + drag empty title bar area — window moves
WIN-2
Double-click title bar maximises
Standard OS behaviour through eframe
Double-click — toggles maximise
WIN-3
Resize from north edge (top)
Position-aware resize, button-area exclusion
Hover top edge outside the button cluster — cursor changes, drag resizes
WIN-4
Resize from north-east corner
Button-margin geometry fix
Hover NE corner — resize cursor (not Close button) — drag resizes
WIN-5
Resize from all 8 edges/corners
All winit resize hit-tests
Try each of 4 edges + 4 corners, each resizes
WIN-6
F10 fullscreen toggle
ToggleFullscreen shortcut
Press F10 — borderless fullscreen on, F10 again — restored
Drag window on Linux — pointer doesn't stick to title bar after release
WIN-10
macOS: traffic lights present
Native macOS title bar
Window has standard close/min/max buttons, drag works
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
WIN-1
✅
WIN-2
✅
WIN-3
✅
–
–
WIN-4
✅
–
–
WIN-5
✅
WIN-6
✅
WIN-7
✅
WIN-8
–
–
–
–
–
WIN-9
–
–
–
WIN-10
–
–
–
3.8 Mermaid diagrams
Every diagram renderer was touched by the painter API change (rect_stroke
gained StrokeKind, Frame::rounding → corner_radius). Each renderer
needs a dedicated smoke test because they live in separate modules.
source_epoch constant across rendered edit + commit
ID
Win11
macOS-AS
macOS-Intel
Linux-X11
Linux-Wayland
RS-1
RS-2
RS-3
RS-4
RS-5
RS-6
RS-7
4. Already verified on Windows 11 (Task 57)
The following items were validated as part of the egui 0.31 upgrade itself
(eframe-egui-031-upgrade.md §Validation)
and do not need to be re-run for the matrix on Windows 11. They still
need to be executed on macOS and Linux:
THM-4 (first-frame theme): the per-theme set_visuals_of fix has been
applied and verified visually on Win11.
Windows 11 manual pass (2026-05-18): All matrix rows ticked except IME-1..3
(deferred to JP/CN/KR testers) and platform-specific rows (WIN-8 Intel GPU,
Linux/macOS). FILE-4 ⚠️ (UTF-16LE). Outstanding for v0.3.0 ship: KBD-8
(Linux Wayland), KBD-9 (macOS Sonoma), and full matrix on macOS/Linux.
5. Execution log
Update this section as each platform is exercised.
uncommitted (post-fix; build errors A/B were already resolved on disk by user)
I-3 verified fixed live: the full 6-line mixed-script paste block (Hebrew / Bengali / Hindi / Arabic / CJK / emoji-ZWJ) pasted into an editor tab as a single block — no crash, process did not abort. Unit tests: 5/5 green (is_url ×3 + is_image_url ×2 in src/app/input_handling.rs). Matrix delta: IME-8 ⚠️→✅. FNT-3 unchanged (already ✅; the I-3 crash never lived in the font path). IME-5 left at ⚠️ (no-crash confirmed but isolated Bengali shaping not visually verified this run). I-1 / I-2 unchanged (S3, non-blockers). Pending on this box: LAU-5/6, FILE-2/3/4/6, IME-1/2/3, FNT-5 (still need user-supplied artefacts).
this doc
Win11 (Win10 proxy)
OlaProeis
2026-05-18
local dev
Full Windows matrix pass except IME-1..3 (external testers). New ✅: LAU-5/6, FILE-2/3/6 (incl. 500k lines), FNT-5/6, TBLE-1..3. FILE-4 ⚠️ (UTF-16LE → I-4). WIN-5 ✅ after I-1 fix (window.rs margin + consume_clicks_in_resize_zones, status_bar.rs). Prior ✅ retained: LAU-1..4, KBD-1..7, DLG-1..4, THM-1..5, MMD-1..9, TRM-1/2/4..7, WIN-1..4/6/7, IME-4/6/7/8, FNT-1..4. Still ⚠️: TRM-3 (I-2), IME-5. Deferred: IME-1..3, WIN-8 (no Intel iGPU), all macOS/Linux.
this doc
Win11
macOS-AS
macOS-Intel
Linux-X11 (GNOME Xorg)
Linux-X11 (Sway/Hyprland)
Linux-Wayland (GNOME)
Linux-Wayland (KDE)
6. Issues found
Issue #
Test ID
Platform
Severity
Blocker for v0.3.0?
Notes
I-1
WIN-5
Win11 (Win10 proxy)
S3
No — fixed 2026-05-18
Status-bar Help (?) overlapped the bottom-right resize grab zone; resize release could open About. Fix:consume_clicks_in_resize_zones + WindowResizeState::blocks_widget_clicks() in window.rs. WIN-5 ✅ on 2026-05-18 pass; shipped in CHANGELOG.md § 0.3.0 Fixed.
I-2
TRM-3
Win10 (proxy for Win11)
S3
No — fixed
CJK input on the prompt line showed ???? while shell output rendered correctly (Windows console code-page). Resolved with UTF-8 active on the shell session; TRM-3 ✅ on Windows pass. Shipped in CHANGELOG.md § 0.3.0 Fixed.
I-3
Smart-paste of mixed-script text
Win11 (Win10 proxy)
S1
No — fixed
is_url in src/app/input_handling.rs used byte slicing past : that could split a UTF-8 codepoint → panic / abort on paste like Hebrew: שלום. Fix:s.get(colon_pos..colon_pos + 3) == Some("://"). Regression tests in input_handling.rs. Live-verified 2026-05-09; still ✅ on 2026-05-18 Windows pass.
I-4
FILE-4
Win11
S3
No
UTF-16LE files rejected at open: is_binary_content treats null bytes as binary before BOM/encoding detection runs (state.rs). Shift-JIS and Latin-1 OK. UTF-16LE is listed in COMMON_ENCODINGS for save but not open. Follow-up: skip binary check when BOM indicates UTF-16, or detect UTF-16 before null-byte heuristic.
Zero S2 issues on Win11 / macOS-AS / Linux-Wayland (GNOME).
KBD-8 and KBD-9 must be ✅ — they are the user-visible reason for the
upgrade.
Open issues should be filed in GitHub and linked back here under "Notes".
7. Scripted helpers
For now the matrix is manual. Candidates for scripting in a follow-up:
A small cargo xtask regression-smoke that runs cargo build + cargo test + opens a known set of fixture files and screenshots the result.
CI workflow gate: extend .github/workflows/ so a v0.3.0 release tag
cannot publish without a green run on Win11, macOS, and Ubuntu (X11 and
Wayland) runners.