GATE C, VISUAL. Phase 2 close, 29 July 2026. RUN FOR THE FIRST TIME AGAINST THE PHASE 2 SCREENS, because until today those screens did not exist. Instrument: tools/verify/visual-sweep, run on Bubbles where playwright lives. Target: the live staging app at missionmatch-staging.thatwebhostingguy.com, serving api 0fb3629d44d7b18a and bundle index-g1gTV6We.js. ================================================================================ THE POSITIVE CONTROL RAN FIRST AND FAILED AS REQUIRED ================================================================================ A 4000 pixel overflow was planted and DETECTED on every route at every viewport, and the planted minimum width regression was detected too: HORIZONTAL_OVERFLOW 4000 > 768 on capture, documents, scope, requirements, amendments HORIZONTAL_OVERFLOW 4000 > 1024 on the same five positive control OK: the planted overflow AND the planted min width regression were both DETECTED THE CONTROL ALSO PROVED SOMETHING THE COUNTED RUN CANNOT. To report an overflow on /slate/capture/{id}/scope, the sweep had to log in through the REAL login flow as a seeded recruiter, hold the slateMATCH entitlement, resolve the route, and render the screen. A control that fails on all six routes is simultaneously evidence that all six routes are reachable and rendering. ================================================================================ THE COUNTED RUN ================================================================================ surface=authenticated viewports=768,1024,1440 captures=36 findings=0 36 captures is 6 routes by 3 viewports by 2 roles, which is the full matrix with nothing skipped. ROLES, the two the phase touches per the protocol: recruiter and manager, as seeded fixture accounts gatec.recruiter@fg-talent.test and gatec.manager@fg-talent.test, both holding slateMATCH. ROUTES, the Phase 2 path in the order a reviewer walks it: /slate/capture the capture list, screen 1 /slate/capture/{id} opportunity intelligence, screen 2 /slate/capture/{id}/documents upload, screen 3, NEW /slate/capture/{id}/scope scope review, screen 4, NEW /slate/capture/{id}/requirements build requirements, screen 5, NEW /slate/capture/{id}/amendments the amendment view, NEW VIEWPORTS ARE 768 AND UP for the authenticated surface. That is the recorded product decision of 28 July, not a relaxation taken here: missionMATCH is a desk tool and the supported floor is 768 for the design partner program. Below the floor is UNSUPPORTED, which is a different statement from broken. The public surface still holds all five widths with no relaxation, because candidates arrive on phones. ASSERTIONS, all clean: zero horizontal overflow, zero console errors, zero failed network requests, no screen rendering a raw error or an empty state where fixture data should be. SHELL GUARD: the widest route requires 716px against a 732px baseline plus a 24px allowance, so the new screens are comfortably inside the shell's own budget rather than sitting on its edge. TWO TRANSPORT FINDINGS DID NOT REPRODUCE and were dropped to transient.json rather than counted or hidden. Both were console errors on /slate/capture that vanished on retry, which is the shape of a transient network hiccup and not of a defect. They are recorded so the decision to drop them is auditable. ================================================================================ WHAT IS STILL NOT CLAIMED ================================================================================ PIXEL BASELINES DO NOT EXIST, and that is the protocol working rather than an omission. A baseline becomes a baseline only after Joseph approves a contact sheet, so the regression half of Gate C cannot run until one exists and he has looked at it. The contact sheet from this run is in this directory. WHAT I SAW WITH MY OWN EYES, because the protocol says the sweep does not replace looking. The captures show the review path reading as one product: the citation rendered on every scope row rather than hidden behind a hover, missing draft fields rendered as amber blockers rather than as prefilled plausible values, and the promotion confirmation stating what becomes real and who is recorded as saying so. Nothing looked odd that the assertions did not already catch. ARTIFACTS: contact-sheet.html, findings.json (empty), min-widths.json, transient.json, expected.json. The 36 PNGs stay on Bubbles at /tmp/gatec rather than in the repository, because a screenshot set is not source and the contact sheet is what a human reviews.