Gera's own report: "Fairhaven Residential (TEST)" wrapped onto two rows in the rail's corner. Now one row, ellipsised, like the many-grant trigger.
14 Sept 2026 · branch fix/org-switcher-single-org-one-row · captured against propflow-stage · at 1b1f39ac9b+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.
The real WorkspaceHeader and the real OrgScopeSwitcher from this branch, mounted over a grant that holds exactly one organization named Fairhaven Residential (TEST), in the rail's expanded width (240px). The trigger is capped at 168px; the name is wider than that, so it ends in an ellipsis instead of turning into a second line.
Why this is the right fix and not a font-size change. The many-grant trigger already clipped its label — nowrap, overflow hidden, ellipsis on an inner span. The single-grant branch rendered the name bare into the same flex box with none of the three, so it wrapped. Both branches now call one oneRow() helper, on the inner span: text-overflow does not inherit through a flex container, and a flex item only shrinks below its text once its own overflow is hidden. Put the three properties on the trigger itself and the name clips with no ellipsis.
Measured on this dev server, same fixture, before and after (Playwright, getBoundingClientRect and getComputedStyle on the text-bearing element):
| rows | height | white-space | overflow | text-overflow | truncated | |
|---|---|---|---|---|---|---|
| origin/main | 2 | 47px | normal | visible | clip | no |
| this branch | 1 | 28px | nowrap | hidden | ellipsis | yes (173 > 152px) |
Asserted in the captured DOM — Fairhaven Residential (TEST). The full name is in the DOM — an ellipsis is a paint effect, so innerText still carries every character. This assertion proves the single-grant branch is what is on screen (the attribute data-org-scope-single is rendered), not the No-organization or many-grant state; it does NOT by itself distinguish one row from two — the measurement table above does that.
The stage smoke account holds no Person role rows, so no signed-in route on this dev server reaches the single-grant branch — a platform admin there sees No organization. The capture therefore mounted the real header and the real switcher over a hand-made one-org grant on an uncommitted fixture route inside the worktree. The component under the camera is exactly this branch's file; the route is not part of the PR and does not exist on main.
The jsdom test pins the three literal style values on the text-bearing span and goes red against origin/main's component (no inner span). Only the browser measurement above proves the row count, which is why it is recorded here rather than claimed.