A picture of the screen, and the first modern page to render
The X1 has no serial port, no remote display and no QMP. So "the render is wrong" could only ever be reported by somebody standing in front of the panel and describing it, which meant every rendering fault was argued about at one remove from the evidence. A browser's worst bugs are precisely the ones a log shows nothing of.
remote.sh shot now copies the frame the window server last composited and sends it over ordinary TCP to the container that already holds the log. The Mac turns the raw rows into a PNG, because a PNG encoder in the kernel would be a second implementation of something the far end already has. It is read-only: it composites nothing, draws nothing and changes no state.
The first picture it took answered more in one look than the whole session had managed by reasoning. That is not a flattering thing to write down and it is the main result here.
Five faults, in the order they became visible
What the picture showed was a browser window saying "Fetching https://chatgpt.com/", with the title parsed and nothing drawn at all. The page was not being rendered until every stylesheet had arrived, and that site links one of 1.8 MiB.
Unstyled first and refined as each sheet lands is what every browser does, and it is the difference between a slow page and a broken one. The document is now drawn the moment it parses, and each sheet that arrives throws the laid-out page away so the next draw is a fresh cascade.
Then the redirects. The kernel follows those itself, so one arriving at the browser means it gave up - a downgrade to plain HTTP, the hop limit, or a 3xx pointing nowhere. The browser drew it: fifteen bytes of nothing rendered as though it were a page, which is exactly what "it gets stuck on redirecting" looks like from the keyboard. The operation now answers with the Location when it has one and the browser follows it, counting hops so a site pointing at itself stops.
With the page finally on screen, two parsers were throwing declarations away. An unknown unit or an unknown colour function does not degrade gracefully - it invalidates the whole declaration. dvh, svh and lvh exist because a phone's address bar slides away; nothing on this machine retracts, so all three are just vh, but they have to parse, and Tailwind sets heights in them.
Worse, Tailwind v4 emits its entire default palette in oklch(), which this engine understood no better than it understood hsl(). Every colour on the page was therefore discarded and the sidebar drew as a black panel with text on it that could not be read. Both are understood now, oklch and oklab through the published matrices and this project's own powf, with the conversions checked against reference values rather than against how they look.
Twelve of fifty-eight
Rendering one site is not conformance, so the engine now runs a slice of the Web Platform Tests. A reftest is a page, and a second page built a simpler way that must render identically - the one kind of conformance test an engine can run with neither a stored screenshot nor a second browser to compare against. Render both sides with the same engine and the same font, compare the pixels, and any disagreement is this engine's, because nothing else took part.
58 pairs from css-flexbox, css-position and css-sizing, filtered to the self-contained ones with no scripts, no images and no external stylesheets, so that a failure is about layout and not about something that was never fetched.
12 of 58 pass. That is the number, and writing it down is worth more than not knowing it. The failures cluster usefully: the reversed flex directions account for six, align-content for five, and the rest are aspect ratios and percentage bases inside flex items. That is a worklist rather than a mystery.
The floor is asserted at 12 so the number can only go up, and the rate is printed rather than the passing set pinned. Pinning it would make every improvement a test edit, and would let a test that starts passing quietly start failing again.
What is not built
The sidebar is still the wrong shape, and the cause is known rather than fixed: layout takes a viewport width and no height, so vh resolves against the percentage basis and a height set in viewport units still comes out near zero.
Forty-six of the fifty-eight reftests fail. One page rendering is not a browser.