# Zync OS Mobile T26 Final Gate — BLOCKED

Audience: Plan B controller, follow-up implementer.

Run date: 2026-07-13. Source: canonical `/home/user/Projects/zync.is/docs/specs/2026-07-11-zync-os-mobile-design.md` §Acceptance criteria. Canonical plan/spec Markdown are absent from this worktree; read-only parent-project copies used.

Decision: DO NOT close T26. All 12 acceptance criteria require green evidence. Criteria 2, 5, 8, 10, and 11 have red or unavailable required gates. Criteria 1, 3, 4, 6, 7, 9, and 12 have partial/static evidence only; they are not final-gate passes.

## Commands run

| Command | Result |
| --- | --- |
| `pnpm --filter zync-app test` | PASS: 2/2 Node checks. Does not execute app unit/Vitest suite. |
| `pnpm --filter zync-app typecheck` | PASS (fresh rerun 2026-07-13). |
| `pnpm --filter zync-app build` | PASS with warning (fresh rerun 2026-07-13): PWA injectManifest generated `dist/sw.js`; 274 precache entries; hard-cap check reports 138.0 kB gzip against 250.0 kB. Vite also warns that some minified chunks exceed 500 kB, so the build is not warning-clean. |
| Full mobile Chromium + WebKit Playwright matrix | FAIL: WebKit binary absent; Chromium visual snapshots absent/mismatched. No dependency/browser install attempted. |
| Chromium behavioral subset, excluding visual baseline file | FAIL: 52 passed; 12 failed. |
| `node apps/zync-app/tests/e2e/os-shell/artifact-completeness.js` | PASS exit status on fresh rerun, but it validates `data-fx` artifacts only; it does not replace Playwright baseline comparison. |
| `pnpm --filter zync-app exec tsx tests/e2e/os-shell/mutation-audit.ts tests/e2e/os-shell/fixtures/reference.kill.mjs` | BLOCKED on fresh rerun: `ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL Command "tsx" not found`. Registry has one desktop-only `window-open` fixture, not mobile fault coverage. |
| `rg -n 'useMutation\\s*\\(' apps/zync-app/src` excluding `src/os/**` | FAIL: direct calls remain across portal, contracts, admin/settings AI, projects, home, and shared components. Criterion 12's wrapper sweep is not zero. |
| Codex vision batch: `gpt-5.4-mini`/low then `gpt-5.5`/low | FIX-NEEDED from both tiers. Logs: `/home/user/.systray-ai/logs/cdx/20260713-053526-887189.log`, `/home/user/.systray-ai/logs/cdx/20260713-053617-904708.log`. |

## Acceptance ledger

| # | Status | Evidence / blocker |
| --- | --- | --- |
| 1 | PARTIAL | Mobile route/core suite has passing module-title checks. Full login/classic/device-override matrix was not green. |
| 2 | FAIL | `20-mobile-gestures.mobile.spec.ts`: shade stays `closed` after touch drag; recents remains `false` after dismissal drag, all four Chromium profiles. WebKit unavailable. |
| 3 | PARTIAL | URL tests exist (`09-url-contract.spec.ts`), but final mobile WebKit matrix did not run. |
| 4 | PARTIAL | Schema/typecheck green; persistence reset lacks a green final matrix result. |
| 5 | FAIL | Shade gesture failure prevents shade acceptance. |
| 6 | PARTIAL | 52 behavioral checks include migration-cluster successes; all-module/core-flow green claim blocked by red suite. |
| 7 | PARTIAL | Shared command-center implementation is present; no final all-mode green proof. |
| 8 | FAIL | Required suite/WebKit/vision/fault gates are not green. iOS checklist recorded separately. |
| 9 | PARTIAL | Build bundle budget PASS (138.0 kB reported against 250.0 kB script budget); throttled performance final gate not green. |
| 10 | FAIL | Gesture failure plus unavailable WebKit and failed visual baselines prevent all-surface a11y/state proof. |
| 11 | FAIL | `21-mobile-pwa.mobile.spec.ts`: `/offline.html` lacks visible `You're offline` heading and `Retry` in all four Chromium profiles. |
| 12 | FAIL | Typecheck PASS, but a fresh repository scan finds many direct `useMutation(...)` calls outside `src/os`; the required mutation-wrapper sweep is not zero. Server/client schema matrix was not independently green. |

## Visual judge

Status: FIX-NEEDED. Chromium generated actual images during the earlier suite, but no Playwright result screenshots survive and expected visual snapshots are absent/mismatched. WebKit executable `/home/user/.cache/ms-playwright/webkit-2311/pw_run.sh` remains absent.

The only available checked-in image, `apps/zync-app/public/screenshots/mobile-dashboard.png`, was judged independently by the required Codex batch. `gpt-5.4-mini`/low and the required `gpt-5.5`/low re-judge both returned `fix-needed`: the image is only a centered logo splash. It does not evidence home, dock, drawer, app frame/navigation, recents, notification shade, command center, sheets, guarded dismissal, RTL, motion keyframes, or accessibility states. Logo contrast is acceptable, but it is irrelevant to the required shell surfaces. Model logs are recorded in the command table. Do not mark the vision gate pass.

## Fault injection

Status: BLOCKED on fresh injection attempt. Existing kill registry: only `window-open`, owned by desktop `00-scaffold.spec.ts`. Required mobile effects and mobile behavioral faults have no registered kill entries. The audit runner fails before injection because `tsx` is unavailable. Do not count this desktop fixture as mobile mutation coverage.

## Required follow-up before rerun

1. Fix shade detent, recents dismissal, and offline fallback failures.
2. Commit approved mobile visual baselines and make WebKit available through the plan dependency/environment block; do not install from an agent command.
3. Add mobile kill registry entries and an executable runner already declared in project dependencies.
4. Re-run Chromium + WebKit matrix, mobile mutation audit, then an independent Codex vision-judge batch. Update every ledger row to PASS only with command output.
