Proof audit, pass 2, for [#24317](https://git.cafe/pingdotgg/t3code/pull/24317), mirrored as [#24317](https://github.com/pingdotgg/t3code/pull/24317). Read-only review of head [cb6a593a16](https://github.com/pingdotgg/t3code/commit/cb6a593a16050106ea2523bb827c4677a7e18791) against merge-base [36d4d711b7](https://github.com/pingdotgg/t3code/commit/36d4d711b79c73eb33131944f73ea4a8c6156484), 2026-10-27. The two lead-owned worktrees remained clean, at those exact revisions.

Findings, in priority order:

1. **M2 is missing, and a further capture can produce it on Pixel Tablet.** All four `M2-portrait-no-drawer-{light,dark}-{before,after}-*.mp4` attempts and the corresponding eight stills show the compact phone Home/thread screens. They do not show sidebar-pane cards with selected and unselected backgrounds. The expanded index correctly labels these attempts partial/unverified. The portrait Pixel 9 limitation is real, but is not a limitation of the affected native renderer.

   At the head, [deriveLayout](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/mobile/src/lib/layout.ts#L90) enables ordinary split view at width ≥720 and height ≥600 logical pixels. [AdaptiveWorkspaceLayout](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/mobile/src/features/layout/AdaptiveWorkspaceLayout.tsx#L270) mounts the primary sidebar for split view and passes its selected-thread key into ThreadNavigationSidebar. [The Android tablet orientation plugin](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/mobile/plugins/withAndroidTabletOrientation.cjs#L15), registered in app.config, overrides the general portrait setting with FULL_USER when smallestScreenWidthDp ≥600. Therefore use **Pixel Tablet, full-screen landscape**, with rotation enabled; its tablet layout can satisfy both split thresholds. Rotating portrait Pixel 9 is not a substitute.

   Steps: lease Pixel Tablet; install the pinned native client and serve the pinned JS bundle; pair to the same synthetic fixture backend; open Chats, then MIX6, keeping MIX6 alternate in the list. The split sidebar should be visible by default. If hidden, press **Show sidebar** in the Android header. To record opening, press **Maximize content**, then **Show sidebar**. Capture the selected MIX6 card and the unselected alternate simultaneously, in light and dark, before and after, with viewport/density readback and both milestone diffs. Keep keyboard closed and the app full screen. This is a source-derived route; I did not lease a tablet during this audit.

   **M1 does not suffice for M2.** [The same cardContent](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/mobile/src/features/threads/thread-list-v2-items.tsx#L1199) is reused, but mixed/null-state icons consume rowAppearance.mutedIconTintClassName. [Sidebar appearance](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/mobile/src/features/threads/thread-list-v2-row-appearance.ts#L27) switches that tint from foreground-muted to drawer-foreground-muted, changes horizontal padding from 20 to 12, adds radius, and changes selected/unselected backgrounds. This is more than a background-only duplicate. M1 proves the shared glyph/presenter, not its sidebar contrast and fit.

2. **W4/W5 need one clean dark terminal-hover retake under the brief's explicit unrelated-diff rule.** The pair `W4-W5-sidebar-search-dark-terminal-hover-before-36d4d711b7.png` / `...-after-cb6a593a16.png`, and its `...-diff0.png`, contain the disclosed non-PR pixel at **(4,69)**: RGB **(3,3,4) → (3,3,3)**. I verified it from the originals and opened the Diff0 corner. DiffT >8 excludes it, but Diff0 lights it up. This is one channel level at one pixel, not evidence of a product defect. Nevertheless, the user explicitly rejects a diff lit up by something the PR does not change. Retake this one shared cell and regenerate both diffs; the light and six-link cells and the search/hover recordings otherwise support W4/W5. No masking or repair is appropriate.

   ![Unrelated blue pixel in Diff0, original corner enlarged 20 times with nearest-neighbor scaling](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8847cb86ff77251a/search-diff0-corner-20x.png)

3. **W2 is N/A, not a missing producible badge capture.** Pass 1's claim that both card and settled slim rows render prBadge is wrong. [The slim early return](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/web/src/components/sidebar/SidebarThreadRow.tsx#L1092) ends at line 1249 without rendering prBadge; [the only row placement](https://github.com/pingdotgg/t3code/blob/cb6a593a16050106ea2523bb827c4677a7e18791/apps/web/src/components/sidebar/SidebarThreadRow.tsx#L1492) is in the card branch. Rest, hover, focus, selection, and the ordinary details tooltip cannot make the slim row render that aggregate. The tooltip lists individual PRs. The supplied light/dark absence stills and recordings agree with this source. To see a badge for a settled thread, enter PR-number query **15702** in sidebar search, then hover “Settled mixed six”; that uses the separate search renderer covered by W5. It is not a slim-row state. Remove W2 from the affected capture requirement and correct the matrix inventory.

4. **The live PR body still publishes the previous evidence set and rendering environment.** Its verification section names the old revisions, old 13-row matrix, Chrome154/DPR2/390×900 environment and earlier incomplete/native-build claims. The supplied new index instead names the correct revisions and Chromium148/DPR1/390×844/native Android delivery. The lead's merge explanation resolves the matrix's older SHA labels, and all accepted new evidence columns/sidecars use the requested revisions. Replace the obsolete body section with the new evidence and this audit's remaining gaps. This is a publication correction, not another capture row. I made no edit or comment.

No product defect was established by this bounded proof audit.

| Row | Status | Evidence reviewed / ruling |
|---|---|---|
| W1 | SUFFICIENT | W light/dark cards plus N light/dark opening recordings; mixed six, terminal, pending and alternate visible; long title leaves badge legible. |
| W2 | N/A — source disproves premise | W light/dark rest/hover absence pairs and focus recordings; aggregate never rendered by slim branch. |
| W3 | SUFFICIENT | W light/dark six and terminal; N light/dark toolbar; count/glyph fit. Independent N-light rebuild is pixel-identical. |
| W4 | INSUFFICIENT | Query→active results and clear recorded in W light/dark; dark terminal-hover shared cell has one unrelated Diff0 pixel. |
| W5 | INSUFFICIENT | Real fine-pointer CSS hover recorded in W light/dark; mixed stays neutral. Same dark terminal-hover cell requires clean retake. |
| W6 | SUFFICIENT | W light/dark palette query→active six/terminal results, recordings, labels and paired milestone diffs. |
| W7 | SUFFICIENT | Same palette recordings show settled six/terminal results and ordinary terminal mixed PR glyph. No query-clear/close claim accepted. |
| M1 | SUFFICIENT | Actual Pixel 9 RN Home screen-pane cards, light/dark, six/terminal/pending; accessible different-states/Show action labels. |
| M2 | INSUFFICIENT | Portrait phone absence attempts do not cover sidebar selected/unselected cards; Pixel Tablet route above is producible. |
| C1 | SUFFICIENT | Web selected toolbar/sidebar and native Home; homogeneous open +2 remains green; semantic pending/draft-ready variants agree. |
| C2 | SUFFICIENT | Web/native light controls retain draft glyph and muted +2. |
| C3 | SUFFICIENT | Web/native light controls retain closed glyph and red/rose +2. |
| C4 | SUFFICIENT | Web/native light controls retain merged glyph and violet +2. |
| C5 | SUFFICIENT | Connected merged+closed chain retains stack glyph, 2 layers and closed tone; source/readback confirms one chain. |
| C6 | SUFFICIENT | Web toolbar/sidebar and native grouped control/C8-expanded scene show single number 157110, not +N. Native top-Home FAB occlusion is not used as proof of that number. |
| C7 | SUFFICIENT | Web selected route and native grouped controls show no-links absence. |
| C8 | SUFFICIENT | Native shelf expand→scroll→collapse sequence on both revisions, paired expanded still entirely pixel-identical, slim rows have no PR badge. |

Coverage and image review:

- Opened all **35 accepted review composites**, visually inspecting their **70 original stills and 70 diff images**, including the W2/M2 absence evidence. Independently recomputed every diff from the original RGB files. All 35 reported Diff0/DiffT counts and both generated images match exactly. This arithmetic supplements the visual review.
- Checked all 70 original still metadata files: exact before/after SHAs, expected 1440×900 or 390×844 web dimensions, 1080×2424 native dimensions, theme, web DPR1/zoom1/root16px, native density2.625/fontScale1, frozen clock and two-frame stability all match. Web user agents identify Chromium148. Native labels and semantic before/after readbacks agree with the mixed/control claims.
- Opened every one of the **24 recordings** using the delivered timestamp contact sequences, then independently decoded **7,116 frames**, selected and opened **296 materially changed/endpoint frames** across all 24 clips, with original PTS for Android VFR. Compared the visible sequence with every narrated action. Search, hover, focus, narrow sidebar and C8 shelf actions are present. Ordinary asynchronous search transitions are not substituted for settled proof states. No accepted still contains a skeleton, spinner, broken text, ghosted backdrop or wrong theme/viewport. M2 clips include compact navigation transition blends and end early relative to their full driver timelines; they remain rejected as M2 proof.
- Palette Ctrl+A selects page text after the still helper blurs input; Backspace does not demonstrate clearing. The final Escape repaint is outside the recorded final frame. The new index explicitly disclaims both, and W6/W7 require query/results only, so neither is credited or added as a new gate.
- The “what else changed” list is accurate for the new delivery: mixed badge tones/glyphs also change through the palette blur and beside unchanged controls. Native C8 is identical. The one unrelated dark-search pixel is correctly disclosed, but disclosure does not waive the brief's rule. No unsupported focus-ring, under-chip, performance, route-action or iOS-installation claim is credited. Source-based legacy/semantic cases do not create new visual rows.

Independent rebuild:

Started the after worktree's actual dev app with `T3CODE_DEV_SEED=0 vp run dev --home-dir /tmp/lead-24317-r1/proof-audit-2/rebuild-20261027T172930Z/home`, captured spawn PID **397635**, and paired an independent agent-browser session. Used the uploaded public-RPC seeder and driver, changing only scratch root, session and shifted local endpoints. The first seed was interrupted by a target navigation; resumed the same partial synthetic seed with only already-existing thread.create ignored and confirmed fixture readback. No provider turn or live-state copy was involved.

An initial abbreviated narrow-only driver skipped earlier scenes and produced a collapsed composer: 26,991 changed pixels at threshold0 / 5,743 at threshold8. It is retained in the audit artifacts, but does not establish a delivery defect. Rerunning the **full published preceding scene sequence** produced `W1-W3-narrow-light-toolbar-after-cb6a593a16.png` with the documented Linux **HeadlessChrome148, 390×844 CSS, DPR1, zoom1, root16px, light/reduced-motion, fixed Date** environment and an exact full-image match: **0 pixels at threshold0; 0 at threshold8; no changed bounds**. Its metadata also passed the stable two-frame check. This resolves the earlier abbreviated-run discrepancy without masking, alignment or pixel changes. The subsequent broader script received SIGTERM after this required target was saved; no additional rebuild is claimed.

![Delivered head capture at left and independent rebuild at right; entire 390×844 image is identical](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/11c5b827c8c839f5/rebuild-delivered-comparison.png)

[Exact rebuild comparison statistics](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8f84bd93b854dd47/rebuild-full-compare-diff.json). [Audit artifacts: independently decoded recording boards/PTS, environment and diff audits, reproduction captures/drivers/logs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/61af0c526cba3877/proof-audit-2-artifacts.tar.gz). Credentials and isolated credential storage are excluded; log copies redact pairing credentials.

Lifecycle: audit completed within the 60-minute budget. No edits, pushes, PR comments, emulator launches or device leases. Closed the owned browser, stopped owned server process group 397635, and verified backend15942/web7902 no longer listen and its recorded processes exited. Both lead worktrees remain clean and untouched. Only the auditor-owned step scratch is removed after report upload; lead capture scratch and worktrees are retained. Disk remained 28GB available. Forge snapshot: 32/32 checks successful, no pending/failing checks; conflict observation stale/pending, outside this proof verdict. No test suite or merge-readiness certification performed.

FRICTION:

- tool | Browser panel unavailable; preview attempts returned “Invalid preview URL” and “net::ERR_CONNECTION_REFUSED at http://localhost:7902/” | Provide an available paired Browser panel, or authorize the supplied agent-browser reproduction driver explicitly as this brief did.
- tool | First public-RPC seed evaluation was interrupted by page navigation, then retry hit already-existing first thread | Await initial app navigation before seeding, and make the scratch seeder resumable on existing fixture IDs.
- brief | Pass-1 W2 premise and portrait Pixel 9 M2 device assignment conflicted with the actual render/layout branches | Check the slim early return and tablet split thresholds before declaring feasible matrix cells.
- tool | Broader reproduction command received SIGTERM/exit143 after the required exact-match capture had completed | Run long scene drivers as tracked background processes with captured PIDs, as for the server.

VERDICT: INSUFFICIENT W4 W5 M2
