# Zync Desktop OS QA Recovery

Audience: AI coding agents first.

## Product intent

The Desktop OS keeps the familiar spatial model of a desktop and taskbar while adopting the restrained depth, responsive layouts, keyboard access, and touch-sized controls expected from current Windows, iOS, and ChromeOS interfaces.

## Behavioral contract

- Windows snap to either screen edge and resize from all eight edges/corners; app manifests provide responsive minimum and initial sizes.
- The shell occupies the viewport without page scrolling. Start, Settings, Today, tray controls, notification controls, and lock/sign-out actions are interactive. Locked mode unmounts interactive shell chrome until password reauthentication succeeds.
- Start, tray, and notification panels use the shell material, z-index, and reduced-motion contracts with stable `data-fx` hooks.
- Desktop icons use the shared context-menu primitive. Keyboard and double-click activation remain available.
- Command search has a constrained, scrollable result region and a fixed-height input row.
- The root module route uses a splat so descendant module routes remain renderable in a window.
- Customer statements preserve the Hebrew RTL statement through the existing HTML-to-PDF Worker and download as valid `application/pdf` bytes. Empty payment-adapter configuration resolves to the null adapter.
- Default desktop and mobile wallpapers are centered Zync futuristic-space AVIF assets at 3840×2160 and 2160×3840.

## Persistence and data

Shell layout writes are debounced and scoped to the authenticated tenant/device. Local pending state is namespaced and reconciled without allowing an older server response to overwrite a newer local commit. Existing API and database tenant guards remain unchanged unless a failing contract test proves otherwise.

Rationale: fail closed while session identity is unresolved so a prior tenant's cached window state cannot render during identity changes.

## Acceptance

- OS-focused tests, API tests, app typecheck/lint/build, and bundle budget pass.
- No new console errors or route warnings are introduced.
- Both wallpaper assets are non-empty AVIF files with the dimensions above.
