The screen shows the address Clara writes from. When there is nothing to connect, it no longer says "Connect your shared leasing email" over an empty space.
16 Sept 2026 · branch lane-b/finish-copy-email-card · captured against propflow-stage · at 346e7eb842+local
Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.
This is the emailSetup: null shape, and it is not an edge case: a production read of the real test company on 2026-09-16 returned exactly this. The screen names itself, shows the email a prospect will see, and says who decides the address — then stops.
What is NOT here is the finding. Two rounds ago this state rendered an <h2>Connect your shared leasing email</h2> with nothing beneath it and a "Skip for now" whose toast sent the customer to a Settings card that renders nothing at all when emailSetup is unset. The heading, the sign-in sentence, the vendor buttons and the Skip are all gated together now, and the footer carries Continue — without which these shapes would have had no control whatsoever.
The company name reads PropFlow Staff because an anonymous dev request resolves to the staff sentinel org — a real answer from the real endpoint, not a placeholder. A customer sees their own company there; what is being shown here is the shape, and the shape is what the finding was about.
The From line is a description, not an address: no PropFlow-provided address is minted for this company yet, so the card says so in words rather than inventing one.
Asserted in the captured DOM — How Clara reaches people · Here's the email your prospects will see. Then tell us who books tours. · YOUR LEASING EMAIL · a PropFlow address for your company · We'll confirm this address with you before Clara sends anything. · Want your own address instead? Tell us and we'll set it up. · Continue. Seven strings asserted in the captured DOM: the screen's own title and lead, the card's section label (uppercased by CSS, so the captured innerText is “YOUR LEASING EMAIL”), the DESCRIBED From address, the caption, the line after the card, and the Continue that is now the only control. The two strings that matter most cannot be asserted by this presence-only tool — “Connect your shared leasing email” and “Skip for now” are both ABSENT, which is the whole finding; the pixels show it and company-step.test.tsx asserts both absences directly.
The caption under the card sits in StatusDot, which is a table-cell primitive: its wrapper is whitespace-nowrap, and white-space inherits into the label. These captions are sentences of up to 85 characters, so without an override the longest one is a single unbreakable line ~500-560px wide — past the card's own border inside the 520px column, and well past this 390px dialog, dragging a horizontal scrollbar onto the step.
whitespace-normal on the label overrides the inherited value without touching the shared primitive, which is what this frame is here to show: the caption is on two lines, inside the card, and the dialog does not scroll sideways.
Asserted in the captured DOM — How Clara reaches people · We'll confirm this address with you before Clara sends anything. · Continue. The full caption is present at 390px — the string is unbroken in the DOM whether or not it wraps, so the WRAP itself is the picture's job, not the assertion's. What the assertion rules out is the caption having been truncated or dropped at this width.
Captured with no session, on purpose. The wizard is unreachable for the identities this tool signs in as — the smoke account is platform_admin and the wizard layout redirects staff to /dashboard, while the seeded non-staff identity is already onboarded and redirects too. A local dev server serves the step unauthenticated (src/middleware.ts short-circuits outside production, and the layout only runs its redirects when a session exists), so this is the step as a customer meets it. The address carries ?company_connected=false, which is how the gate at channels/page.tsx is told to mount the COMPANY shape rather than the per-building one (any company_* param does it — it is the shape a vendor callback lands on); the value is false, so no outcome view is triggered and the step sits in its ordinary idle state. The status fetch has no session either, which is precisely why it resolves to the emailSetup: null shape — the state being photographed is the real one, not a stub.
The owner: 'propflow' shape is NOT photographed here, and that is a gap I am naming rather than papering over. It needs the status API to answer with that setup, which needs a signed-in customer admin at a company staff have configured that way — the identity this tool cannot reach. ui-evidence stages cookies but does not stub network, so there is no honest way to force the shape from a spec. Its behaviour is pinned instead by the five-state table in email-preview.test.ts (including the readiness positive control, [F,F,F,F,F] with nothing provisioned and [F,T,T,T,F] with evidence) and by the render tests in company-step.test.tsx, which assert the heading, the sign-in sentence, "Connect it now" and "Skip for now" are all absent for that shape and that Continue is present.