Skip to content

Latest commit

 

History

History
167 lines (121 loc) · 33.7 KB

testing.md

File metadata and controls

167 lines (121 loc) · 33.7 KB

Testing

scripts/test-tile-artwork.ps1 -Executable <build>/ReStart.exe runs the installed-artwork fixture independently of Windows Search availability. Owned manifests and raster files exercise four sizes, two themes, three tile scales, folder thumbnails, live-content precedence, high-contrast fallback, cancellation and disabling. The full fidelity suite includes the same checks. Settings preview tests cover the new appearance switch across all eight languages, both themes, and save/discard. Tests never need another application's notification content.

Run on Windows with the stable SDK in global.json. Exit ReStart when rebuilding its own output, or pass an isolated OutputPath as described in the README.

dotnet restore ReStart.slnx --locked-mode
dotnet format whitespace ReStart.slnx --verify-no-changes --no-restore
./scripts/check-api-docs.ps1 -SelfTest
./scripts/check-api-docs.ps1
./scripts/check-architecture.ps1
./scripts/check-readmes.ps1
./scripts/test-privacy.ps1
dotnet build ReStart.slnx -c Release --no-restore
dotnet test ReStart.slnx -c Release --no-build --logger trx --results-directory artifacts/test-results
./scripts/smoke.ps1
./scripts/test-navigation.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-navigation.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe -AppFolders
./scripts/test-first-input.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-search-selection.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-fidelity.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-startup.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-warm-resume.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-settings-preview.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-appearance.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-motion.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-app-menus.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-jump-lists.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-release-info.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-placement.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-folder-drops.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-editing.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-scrolling.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-file-pinning.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-bundled-tiles.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-studio.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-platform.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/test-tile-data.ps1 -Executable src/ReStart.App/bin/Release/net10.0-windows/ReStart.exe
./scripts/package.ps1 -Runtime win-x64
./scripts/test-lifecycle.ps1 -Executable artifacts/publish/win-x64/ReStart.exe

What fixtures establish

Fixture Evidence
smoke WPF render, real catalog/icon counts, sanitized tile labels; optional SearchQuery E or packaged Executable
navigation 288 fictional apps at 800/1280/1920/2560 DIPs, occupied column width, heading continuity and eight Hide/Present resets
navigation -AppFolders Inline directory expansion, keyboard/Automation paths, hidden-child search, 1920/3840 widths; native Windows alphabet reference checks and known kana/Hangul/pinyin/stroke/Latin cases, mixed scripts, width/combining marks/symbols, Unicode initial navigation, picker scroll/focus and live install/remove/language rebuilds across all eight languages and both themes
first-input Delayed catalog and first-character search, reopening/rail focus, native activation, then real foreground events with WPF deactivation disabled: repeated intermediate-window transitions, owned dialogs, hook lifetime and disabled preference
motion Real WPF entrance/exit clocks, staged rows, catalog refresh, input during entrance, rapid reopen, taskbar dismissal, disabled animation and shutdown cleanup; placement intermediate frames, retargeting, reduced motion, deterministic capture sampling and 4,000 stationary-preview calls without rebuilding/restarting clocks
search-selection Native selection/automation, selected Enter target, first-Down advance, single/no-result and list-end bounds, arrows, typing continuation, same-query refresh, removed/new app catalogs, refresh failure/coalescing, preserved pins and eight languages in both themes
startup Delayed catalog, hidden prepared content, splash typeahead/cancellation/coalesced activation, native splash centering before and after localized size changes, initial photo/script/error frames, warm reopening, cold-start update routing, eight languages in dark/light/system modes and pixel-cache corruption/expiry/invalidation
warm-resume Twelve light/dark hide/reopen cycles with the periodic timer stopped, actual retained browser pixels, stable browser/worker identity, preserved JSON state and focus; hidden idle followed by immediate refresh; blocked wallpaper reads with responsive search, coalesced requests and rejection of stale results
appearance Eight languages across five families × dark/light/system modes, actual expanded-rail glyphs and alignment, splash theme resources, extreme RGB text/control/scrollbar contrast, invalid color rejection, ten native family-save/reopen/mode-switch/custom-RGB persistence paths, 16 localized wallpaper-control saves, 256 tint/blur combinations and 144 empty-home width/scale/theme/language cases
settings-preview Eight languages × two themes × save/discard, cancel-by-window-close, native prompt defaults/bounds/palette, immediate language/geometry preview, isolated disk/integration state, unrelated layout saves, invalid RGB, save failure, available-update navigation with hidden/visible launchers and existing drafts, and persistent ready notices
jump-lists Uses only a unique owned AppUserModelID: registers and executes a native task, checks Unicode/metacharacter arguments and working directory, pins/rereads/unpins an owned document across separate workers, rejects stale task identities, and tests helper crash/malformed/oversized/timeout failures. Opens Tasks/Pinned/document menus across eight languages and two themes with intercepted UI effects; checks independent switches, duplicates and stale requests. Never changes installed applications’ pins or tasks. Runs against build output and extracted x64 portable packages
app-menus Pin/unpin/menu refresh, directory destinations/icons, actual opened app-list/search and grouped/standalone/expanded-folder menus in eight languages and two themes; location labels, intercepted command routing, optional/extended verbs, locks, live controls, independent history and stale requests. Also opens Recently added/Most used removal/clear menus, collapsed/expanded navigation customization and nested document menus. Reads real filesystem/AppsFolder/package capabilities and the actual document-list COM class. When Windows history is enabled, round-trips a unique owned fixture link through native history without writing the user's Recent folder; otherwise preserves that privacy setting and checks the reader interface. No uninstall/elevation or installed-app history changes
fidelity Eight-language settings search/sidebar checks, asynchronous OS metadata selection retention, indexed-file cancellation, native index and eight-language AQS parsing, explicit intercepted Windows Search routing, feature switch save/reload, exact-identity Windows usage fixtures, four-size native XML tile rendering in both themes, folder thumbnails, retained visuals and hide/reopen refresh; local history, menu categories, Unicode launch options and stationary edge scrolling
release-info Version, licenses, original migration backup, upgrade record, Eight languages × light/dark settings, global tile and Start accent
placement Independent group anchors, collision preview/cancel, unchanged child cells, standalone footprint/no header, persistence, inline name events and normal/independent folder expansion
folder-drops Twelve real dispatcher-timer cases (independent → group / grouped → folder × normal/edit × same/mixed sizes), 192 source/target-size and grab-position cases, four deadline/edge/drift cases, earlier-neighbor header collisions, persisted identities, one-step undo/redo, cancellation, scrolling, batch grouping and folder-as-root grouping; 404 native-default checks covering all size pairs, normal/edit modes, legacy independent recipients, unnamed groups, Alt press/release, Shift displacement/dwell reset, selection folders and undo
editing Native selection clicks suppress launches, rigid previews/cancel/commit, one-step undo/redo/unpin, existing/expanded folder moves, parent-child exclusion, real save-lock rollback, eight languages × two themes, Finish selecting/Pinned tiles return paths, retained selection during drag navigation, Escape and reopen
scrolling Twelve axis/theme cases and 32 stationary-pointer scrolled-group previews without offset feedback or repeated layout
bundled-tiles Nineteen packages, four sizes, local clicks, retained state, photo binding/file handles, custom colors and a real host CPU-to-frame path
tile-data Actual worker rendering for weather/feed/local JSON, feed clicks, file producer updates, DPAPI round-trip/corruption, no imported bindings, saved-secret handling, eight languages × two themes and hide cleanup; no external requests
file-pinning Cold directory pin, single-instance transfers, exact shortcut target, deduplication and rejected missing targets
icons Nine Shell file/folder/shortcut patterns, four sizes × three scales, folder previews and status expiry/replacement
lifecycle Ten preview launches across two copied paths leave one primary process; duplicate smoke returns code 2
platform Hidden native host moved to each connected monitor's working area and back; native/WPF DPI and physical/logical bounds, point-to-monitor mapping, and sixteen language/theme UI Automation provider cases; no catalog/account-picture reads or foreground changes

Fixtures use isolated preview state, disable production hooks/startup/update requests and use temporary local connection files, and output PNG/JSON under artifacts. Placement copies binaries into a fresh directory. The WPF root can exceed the CI desktop's size, and tests verify the requested render width. Inspect images as well as success fields. Native routed/composition events are not physical OS input.

CI builds once, runs the existing guards and core tests, then passes that exact build to three isolated Windows runners via an artifact from the same workflow run. test-ui-suite.ps1 divides all twenty-two native invocations into navigation, layout and tile suites; checks remain sequential within each suite because preview instances share a session lease. The required Windows build and tests check is an aggregate gate that fails unless the build and every suite succeed, including skipped/cancelled dependencies. Both clean portable architecture jobs retain their independent clean-checkout publishes and x64 package tests. Only NuGet dependencies are cached; the UI build artifact is not reused between workflow runs.

Executable-alias core cases cover localized names, extensions/Unicode width, ranking ahead of substring noise, secondary shared-executable launchers, multi-term matching, unchanged launch identities, user/common shortcut precedence, removed apps and stale registrations. Package XML cases isolate each application and reject DTDs, malformed input and oversized documents. The search-selection fixture also creates a disposable Windows shortcut and an isolated HKCU/Software/ReStart.Tests/<GUID> App Paths key. It verifies native metadata, expansion/quoting, rejection of argument-bearing registrations, selected rows/Enter, catalog removal and unchanged pins without launching a real command.

Internal rearrangement checks follow complete horizontal and vertical trajectories across all four sizes, in normal and selection modes, both in groups and open folders. They require occupied-slot previews to stay within the original extent, unrelated groups to remain fixed, preview cancellation to leave the model unchanged, committed neighbors to use the released cells, and one-step undo to restore the original tree. Core cases also cover earlier unused holes, external insertions, mixed sizes and rigid multi-tile selections.

Core tests include semantic release ordering, bounded/invalid feeds, unauthenticated feed/rate/network distinctions, schema 1–3 originals retained through later saves, future producer protection and repeated group collisions without internal tile movement. Data-source tests use injected HTTP handlers and temporary files for selectors, RSS/Atom, response/depth bounds, redirects, credentials, timeouts, cancellation, concurrency, conditional reads and stale-cache backoff. Startup tests use HKCU/Software/ReStart.Tests/<GUID>, never the production Run value.

Windows integration fixtures do not read the user's notification payloads or enumerate their app usage. Disposable UserAssist-shaped records live under an owned HKCU/Software/ReStart.Tests/<GUID> namespace; tests check exact matching, tracking-policy refusal and unchanged bytes. Native tile tests create their own SQLite database and WAL writer, checking active tile/badge scope, exclusion of toasts and other apps, bound parameters, expiry, cancellation, locked/corrupt databases and unchanged records. XML and asset cases reject entities, active content, network references, traversal and unsupported formats. Settings fixtures reject arbitrary DeepLinks; AQS cases reject content predicates when content search is off. The Windows Search shortcut/dismissal is intercepted in automated tests; a separate user-operated check observes the actual Windows panel. Coordinator tests cover current-query transfer, cancellation, superseded handoffs, physical modifier release and waiting for dismissal. An owned WPF input exercises the production Value setter’s Unicode, read-only, wrong-window, cancellation and changed-foreground guards without reading another app’s controls. No automated fixture sends global keys or query text. These checks do not establish a real legacy app's end-to-end push delivery or Windows Start's private historical ranking.

The update-installation fixture also forces startup confirmation to appear between a missing-marker probe and an observed process exit. It checks that the final probe commits acknowledged startup, rejects unacknowledged exit and expired deadlines, and does not require an already acknowledged process to remain alive. Its five real process scenarios include a sharing lock held for 3.5 seconds after replacement begins, plus rollback, persistent-lock, interruption and unrelated-file checks. Failure reports identify the scenario and fixed error category without installation paths. Fixture-only failure context contains an allowlisted relative distribution filename, operation, retry count and elapsed milliseconds; CI and release failures retain these files. Exception messages and absolute paths are excluded.

For local coverage, build portable symbols and allow the neutral mapped source paths. Keep coverage reports and symbols outside release packages:

dotnet test tests/ReStart.Core.Tests/ReStart.Core.Tests.csproj -c Release -p:DebugType=portable -p:DebugSymbols=true --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.ExcludeAssembliesWithoutSources=None

Platform and accessibility checks

test-platform.ps1 launches the development-only --verify-platform entry point. It uses fictional apps, isolated settings and a hidden native WPF host, without a tray icon, input hooks, update requests, account picture or installed-app enumeration. The JSON report in artifacts/platform/<run>/verification.json contains only check counts, monitor working-area geometry/DPI and touch/Narrator availability. It excludes display names, hardware serial numbers, account identifiers and personal paths. CI retains this report.

The host moves to every connected monitor and then returns through them in reverse order, exercising actual native monitor transitions without changing display settings. UI Automation checks cover named Button/Invoke, Edit/Value and search Selection providers in eight languages and two themes. The default run does not activate the fixture, invoke real app commands or listen to Narrator speech. The coverage table distinguishes the measured local setup from remaining device work.

Add -Visible to test-platform.ps1 to exercise the same checks with the actual WPF launcher window. This explicitly foreground-changing mode still uses fictional apps and isolated settings; it does not register shell hooks. Both modes use the production working-area placement helper, including deferred correction after a real DPI transition. For manual screen-reader or touch work, launch the built executable with --verify-platform <local-output-directory> --interactive. After the checks, its maximized English fictional window includes mixed-size tiles and groups placed beyond the horizontal and vertical viewport. It remains available until dismissed or three minutes elapse. The separate touch-input.json contains only aggregate contact, mouse-promotion, drag/drop and scrolling counts and the final panning mode; it records no coordinates, text or device identifiers. Neither report marks manual speech or touch verification complete automatically. Narrator's Speech recap (Narrator+Alt+X) can expose actual announced text, but does not assess sound quality.

The fidelity suite exercises the touch-panning lease and routed preview events for release, lost capture, locked layouts/groups, app/search-row scrolling, blank-space panning and window hiding. It also raises a synthetic boundary-feedback event to check that the board consumes window-movement feedback without disabling panning. Its synthetic touch device never activates, reports OS input or starts an OLE drag. Those checks verify handler ownership and cleanup; only a real-device observation can establish physical dragging or the absence of visible boundary movement.

For mixed-DPI testing, configure different per-display scales in Windows, run the fixture, and restore the original configuration afterward. A report with only 96-DPI passes is not mixed-DPI evidence. Complete a separate visible interaction check for opening on each monitor, moving between them, taskbar dismissal and reconnects. For Narrator, check announced names/roles/selection, Tab and arrow order, dialogs, folders and web-tile content with the actual screen reader. Touch requires a physical digitizer; mouse promotion and injected events alone do not establish it.

Live tile display recovery

The Studio fixture includes 55 display-recovery assertions against two isolated browser tiles. It injects display/DPI notifications while a browser render is in flight and checks coalescing, fresh browser instances, retained JSON state and queued input, rejected stale replies, resumed frames and unchanged layout/configuration. Ordinary color changes retain browser instances; display recovery waits until an active drag or inline rename ends. These tests do not change Windows display settings or certify a particular GPU/driver reset.

Run just this regression with ./scripts/test-studio.ps1 -Executable <built-executable> -RecoveryOnly. The full Studio run includes it automatically. Removing browser regeneration makes the focused regression fail at the stale-presentation assertion.

Portable updater and diagnostic reports

Core tests use generated archives and temporary distributions for checksums, malformed manifests, escaping/ambiguous paths, links, duplicate names, bounded reads/redirects, version/architecture selection, file collisions, rollback, corrupt backups and repeated recovery. Diagnostic tests inject private sentinel strings and invalid enum values, assert the exact field whitelist and bound recent error categories.

./scripts/test-update-installation.ps1 -Executable <extracted-portable-executable> runs five isolated process scenarios: successful handoff/acknowledgment, recovery from a transient file lock longer than the former two-second retry budget, failed candidate startup, a persistently locked original file, and recovery of an interrupted transaction. It also restores explicit preparation after launch, rejects malformed/oversized readiness metadata and modified cached payload/helper files, and prevents cross-installation adoption. Before handoff testing, it checks update eligibility and download/restart controls with newer-producer, unsupported-schema and writable layouts in all eight languages and both themes. Protected layouts remain byte-for-byte unchanged; ordinary save failures still block restart, and preview mode remains ineligible. It uses copied binaries, fictional distribution files and sentinels under artifacts/update-installation, without hooks, tray, ordinary settings, real app lists or external downloads. Pass -PreviousExecutable <prior-portable-executable> to use the actual preceding release binary for the old parent, helper and restored app instead of the current fixture binary. Its embedded semantic version must be older than the current release. The transient-lock scenario always uses the current helper to test the new retry behavior. Core tests also exercise executable, inventory, journal and obsolete-file locks, bounded persistent failure after partial replacement, read-only preflight rejection and unchanged local sentinels. Both CI and release packaging run it for x64; ARM64 packages are built but cannot be executed by the x64 runner. test-release-info.ps1 also checks the diagnostic preview/copy action in all eight languages and both themes using an injected clipboard sink, preserving the user's real clipboard.

Tablet and taskbar regressions

The fidelity suite explicitly initializes TabletIntegration with a complete inert dependency set, rather than relying on preview startup (which skips normal shell initialization). It covers reveal on/off, ignored legacy tablet/hide preferences, close/disposal, failed recovery saves and unchanged layout/desktop Start preferences. Core tests cover fixed-taskbar exclusion, preference transitions, exact monitor scoping, negative/portrait geometry, unchanged launcher bounds, recovery locks, old records, invalid records and stale process identities. Owned WPF windows reproduce native position coercion and topmost occlusion. Recovery must allow the owning window procedure to choose a new position even when it differs from the original captured rectangle. Assertions also require front order without foreground activation and conditional tier recovery.

The watchdog process fixture runs the actual parent/child readiness handshake in an isolated directory. It verifies one reused guard across mode changes, then deliberately exits the parent without normal lease cleanup and requires independent orphan recovery. Its backend never calls a real taskbar API. CI does not change taskbar settings or visibility. An explicit local --taskbar-live-check <owned-output-directory> requires Windows automatic hiding already enabled and uses a full-screen topmost window to check reveal, short sustained geometry, front order, unchanged full-screen bounds, three further open/close cycles and Explorer hiding again after each close. Keep the pointer away from the taskbar while running it. Missing taskbars, fixed configuration or failed acquisition cannot count as a pass. The check reads Windows preferences before and after and never changes them. Do not run it in CI or infer untested configurations from a local pass. User verification of the normal launcher remains required before publishing the taskbar correction.

Settings preview checks include taskbar Save/Discard behavior and absence of the removed hide option across eight languages and both themes. Data-source checks exercise the native approval editor, encrypted per-tile grants, revocation cache clearing, copied identities, changed requests and changed destinations. Fake-provider tests cover integration/entity/action scope and approval changes during in-flight calls; no real credentials or service are used.

Windows 11 taskbar coverage must inspect the direct composition content as well as the tray HWND. The original reveal path can pass geometry, visibility and front-order checks while its content child stays hidden; that exact case was reproduced as a failing native check. The corrected check requires visible content during reveal, the tray physically offscreen except its two-pixel reveal strip after closing, and recovery of each content child changed from hidden to visible. A secondary tray can legitimately retain a child's original visible style while its parent is offscreen; that unchanged style must not be forced hidden. Recovery validation rejects duplicate, self-referential, invalid or excessive child handles and accepts older records without content data. Edge cases exclude a visible or partially revealed taskbar from restoring a child's captured hidden state, including on displays with negative coordinates.

The native check optionally accepts a third argument: --taskbar-live-check <owned-output-directory> <monitor-index>. The index is zero-based in Screen.AllScreens; omission selects the primary display. Run displays sequentially to preserve exclusive recovery ownership. This does not change scaling, taskbar preferences or the pointer position. Invalid indices fail before showing a window.

The content-reservation fixture checks the power controls with both collapsed and expanded rails at all four taskbar edges and four injected DPI conversion scales (100%, 125%, 150%, 200%). It requires unchanged native window and background dimensions, checks actual WPF control bounds, and renders dark/light verification images with a fictional taskbar band. These are geometry/conversion checks, not additional physical mixed-DPI coverage. Core tests also verify no double reservation, no reservation on another display and preservation of unrelated appbar space.

Native visibility checks also inspect the drawable clipping region. A real secondary tray reproduced the previous false positive: matching visible geometry and visible composition content, but a 1920-by-2-pixel region excluded almost the entire surface. The strengthened local check fails that case and requires an unrestricted rectangular surface during each reveal, plus recovery of a captured strip after closing. Owned native windows reproduce all four clipping edges, position-only failure, removal and exact restoration, including distinct empty, absent and complex regions. Core tests cover bounded serialization, old records without region data, invalid rectangles, custom regions, lease invalidation and exact secondary-edge resolution. Successful geometry, content style and clipping checks still require the normal launcher's visual verification before publishing.

Manual coverage still required

Area Check
Monitors Beyond measured 100%/125%/150% placement and mixed portrait/landscape: 200% DPI, reconnects, live configuration changes and production launcher/taskbar behavior
Dragging Header/tile drags, overlap/cancel/edge scroll, standalone neighbors, folder extraction, save/reopen
Editing Ctrl+E, click/keyboard selection, batch drag from different grab points, group/folder/open-space destinations, hold-to-folder preview, Ctrl+Z/Y, text-field undo, save/reopen
Input Bare Win then E, Enter, Win+E/D/L/Tab, IME composition, Ctrl+F, Esc, navigation
Taskbar Blank/app/secondary taskbar and thumbnail clicks close Start and preserve the original click; select a window after hovering a multi-window app, repeat after reopening; settings and drags stay open
Shell Win32/Store/link/URL launch; only supported app verbs; missing old pins
File dialogs Share an owned readable .py, image and PDF to the Windows chooser without sending; cancel/reopen and switch windows. Properties for a file, physical folder, shortcut and executable must stay visible after Start hides. Check unsupported/missing/locked targets omit the actions. Automated storage payload/menu checks do not verify the native chooser visually or every receiver.
Settings All languages/themes, contrast, scale, About/licenses, rollback information
Updates Public checks without an API key, rate limits, connectivity failure, newer compatible release; no implicit installation
Startup Enable/disable, moved installation, actual sign-in, Windows policy override
Accessibility Beyond the checked UI Automation providers and basic Narrator speech-recap sequence: audio quality, complete reading order, complex keyboard focus, web content and physical touch/long press

Do not execute power, uninstall or elevation commands as a routine smoke check. Automated events do not establish physical shortcut behavior. See compatibility for platform coverage.

The headless Studio fixture uses hidden native hosts and a real WebView2 renderer, without showing windows or loading a user catalog/account picture. Its layout matrix covers 8,352 combinations of package, size, scale, language, theme, optional names and data/weather states. Additional checks cover readable custom colors, independent story scrolling and board routing, scheduled closed-folder preview updates, retained transition frames, synthetic portrait resolution, icon clipping, update notices, syntax tokens, Tab/Shift+Tab, four offline formatters and one-step formatting undo. Ninety-six collision cases check preview/commit agreement, stationary stability, cancellation and unchanged models across all size pairs, app/live tiles, groups, folders and independent entries. Drag-image checks cover all four sizes and tile/group/selection/app sources: nonempty translucent snapshots, preserved grab offsets, bounded size, no input interception or model changes, leaving/re-entering the window and complete cleanup. The SVG clock hand must advance from PC time without another host update. Production composition/reparenting is additionally exercised by native bundled/startup fixtures on CI.

Tile resilience and private profile archives

./scripts/test-tile-reliability.ps1 -Executable <built-executable> runs real isolated renderer and browser-process crashes, retained JSON/queued input, retry exhaustion, recovery disabled, viewport suspension/resumption and 50/100-tile load cases. It uses a private fictional browser environment; no production processes or settings are touched. Aggregate CPU samples include only the fixture launcher and its environment's browser processes, excluding crashpad. Reports contain no process IDs, paths, app inventories or source content. CPU is normalized by logical processor count; measurements are observations, not cross-device performance guarantees.

Add -SoakSeconds 120 (up to 1800) to extend the 100-tile steady-state sample. The full Studio fixture runs the default short version, so CI and packaged-release verification cover it too. Core tests cover private backup resource inclusion, credential/history/cache exclusions, fresh IDs, revoked networking, cancellation, save failure, tampering and escaping/duplicate/unknown entries. The settings-preview fixture checks backup controls and help plus recovery/pause settings in all eight languages and both themes.

./scripts/test-warm-resume.ps1 -Executable <built-executable> -IdleSeconds 120 extends the actual hidden-idle interval (1–1800 seconds). Its JSON records local presentation/refresh observations and assertion counts, not personal app names or paths. It exercises real browser suspension and composition controls; the blocked wallpaper reader is an injected fixture. These checks do not simulate physical sleep, memory pressure, a full-day session or disconnected hardware, and do not establish a universal latency target.

Windows 10 and ARM64 hardware, physical touch and cable reconnect behavior remain device-specific checks. This release does not convert synthetic events or a browser crash fixture into evidence of those physical scenarios.

Session menus and expanded native search

The fidelity fixture checks account/power menus in eight languages and both themes, unsupported sleep/hibernate combinations, policy-disabled actions, confirmation cancellation, Windows Update results arriving after closure, and shutdown flags without forced application/user termination. Effects are intercepted: the fixture never locks, disconnects, signs out, sleeps, hibernates, shuts down or restarts the machine. Native reads of power capabilities/policies and local filename/content index queries are real. Repeated overlapping readers and cancellation/recovery exercise COM wrapper lifetime without querying personal search terms or modifying indexing.

The jump-list fixture registers an owned custom category and checks its title, category-scoped identity, original launch arguments and stale-key rejection when Windows permits document history. With history disabled, Windows may reject the registration; the report records CustomCategoryRoundTrip=false and preserves that privacy setting. Menu routing, settings and eight-language/two-theme cases use isolated data regardless of policy. CI with history enabled must read back the owned category. These checks do not establish native power effects, every Windows build, or private UWP notification/usage-history integration.