Two companies selected — Tenants, Properties and Work Orders name the company on every row

Multi-company selection: captured on stage with the smoke user holding JPCO and Wei Slope Polanski (anonymized stage data). One shared Company column (companyColumn) across the three lists: full names when wide, and a building-icon header with short codes below xl. Never a raw company id.

23 Sept 2026 · branch feat/tenants-many-orgs · captured against propflow-stage · at d1891e40c6+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.

1 · 1 · Tenants, two companies, 1600px

Tenants with JPCO and Wei Slope Polanski selected. The Company column names each row's company in full, never by its internal id.

Asserted in the captured DOM — COMPANY · JPCO. The Company column header and a company name are on screen.

1 · Tenants, two companies, 1600px
/tenants with two companies selected, 1600px wide.

2 · 2 · Tenants, two companies, 1100px — icon header, short codes

Tenants below xl: the Company header is a building icon (accessible name Company), and each row shows the shared short code, JPCO or WSP. A company with no display name shows a dash, never its internal id.

Asserted in the captured DOM — JPCO. A short code is on screen. The icon header is checked by the waitFor on its aria-label.

2 · Tenants, two companies, 1100px — icon header, short codes
/tenants with two companies selected, 1100px wide.

3 · 3 · Properties, two companies, 1600px

Properties in its table view (the page opens in cards; the capture switches to the table), sorted by the Company column. This table is wide, so even at 1600px its Company column is in the compact form: a building-icon header and short codes. JPCO's two buildings sort to the top as JPCO, and Wei Slope Polanski's follow as WSP. None is labelled with an internal id. The table is wider than the card at this width, and its rightmost column runs past the card edge. That comes from how wide the Properties table already is, not from this PR; the Company column here is only a few characters wide.

Asserted in the captured DOM — JPCO · WSP. Sorted by Company: JPCO's two buildings come first and Wei Slope Polanski's follow, each labelled with its short code. The icon header is checked by the waitFor on its aria-label.

3 · Properties, two companies, 1600px
/properties with two companies selected, 1600px wide.

4 · 4 · Properties, two companies, 1100px — icon header, short codes

Properties at 1100px, unsorted: Wei Slope Polanski's buildings list first with the short code WSP under the building-icon header.

Asserted in the captured DOM — WSP. A short code is on screen. The icon header is checked by the waitFor on its aria-label.

4 · Properties, two companies, 1100px — icon header, short codes
/properties with two companies selected, 1100px wide.

5 · 5 · Work orders, two companies, 1600px

Work orders with JPCO and Wei Slope Polanski selected. This table has more columns than the other two, so even at 1600px its Company column is in the compact form: a building-icon header and short codes (WSP, JPCO), never an internal id. The two companies' rows interleave by date.

Asserted in the captured DOM — WSP · JPCO. Both companies' short codes are on screen. The icon header is checked by the waitFor on its aria-label.

5 · Work orders, two companies, 1600px
/maintenance/work-orders with two companies selected, 1600px wide.

6 · 6 · Work orders, two companies, 1100px — icon header, short codes

Work orders at 1100px: the same icon header and short codes.

Asserted in the captured DOM — WSP · JPCO. Both companies' short codes are on screen. The icon header is checked by the waitFor on its aria-label.

6 · Work orders, two companies, 1100px — icon header, short codes
/maintenance/work-orders with two companies selected, 1100px wide.

What this page does not show

The Some of these companies can't be shown. state appears only for a viewer whose building assignments exclude every building of one selected company. The smoke user is a platform admin with no assignment limit, so it can never trigger that state, and no stage account like that exists without creating one. The route and client tests in this PR cover that state.

PropFlow Docs