Every building in or out of Propflow, its modules within the plan, and whether the customer may change buildings
30 Sept 2026 · branch s6a-admin-buildings-table · captured against propflow-stage · at a91a0d9bc6
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 staff Buildings table replaces the old per-building module picker.
The old per-building module picker is gone; in its place is the shared Buildings table, staff variant. At the top, the one company switch: Customer can change buildings, with who changed it and when. Each row: the building, units, the In Propflow (dashboard data) switch, an Off / Live choice per module the company plan includes (Maintenance also offers Drafts, which the helper line above the table explains, ADR-0139 §9; this test company's plan has only Leasing), Notes, and Status last as a dot and label.
Asserted in the captured DOM — Customer can change buildings · (DASHBOARD DATA) · STATUS. The table loaded (not its loading or error line), with the customer switch and the staff column label.
Every save lands here as one change with who made it and when, and staff can undo it until a building in it changes again.
Asserted in the captured DOM — Recent changes. The panel rendered under the table.
Same page, theme switched to dark through the product's own control. Every colour this PR adds is a token. Two things in this picture are the shared primitives, app-wide, and not from this PR: the Checkbox draws a white tick on a white box, and the Toggle's on-state track goes near-white so its knob barely reads. Both are the same components every settings page uses; they are left for a primitives fix rather than patched locally here.
Asserted in the captured DOM — Customer can change buildings · (DASHBOARD DATA) · STATUS. Same strings as the light capture: a theme switch changes colours, never content.
Round 1 (first capture) — a real bug, not a style note. The card showed We couldn't load this company's buildings. The staff read was addressed with ?organizationId=, which is the settings WRITE door's parameter; the READ door parses the scope parameter ?org= and answered 400. The unit test mocked fetch and could not see it. Fixed: reads use ?org=, writes use addressedTo(). On the second capture the table rendered but overflowed the half-width main column: the long staff header In Propflow (dashboard data) pushed Notes and Status (screen rule 6: Status last) out of view behind a horizontal scroll.
Round 2 (these captures). The staff header now wraps onto two lines, so every column fits at 1600 and Status is visible as the last column, a dot plus label (rule 6), compacting to On with the full module list on hover when tight, as the shared table designs it. Matches the mock: one switch per building labelled for staff, a checkbox only for modules in the plan (Leasing here; a module the plan lacks is simply absent, rule 18), Notes, Status; the company-wide Customer can change buildings pill sits above the table as a Badge (a pill outside a table is allowed). No who/when shows beside the pill here because this test company never had the setting written — it is the derived default. Known and not fixed here: the dark Checkbox/Toggle contrast above. No save was run, so nothing was written to stage; saving a module, flipping the customer switch and Undo are pinned by AdminBuildingsCard.dom.test.tsx.
Round 3 (after the Off / Drafts / Live choice replaced the module checkbox, per the gk-drafts-mode ruling). A native select is as wide as its longest option, so Drafts (we review first) pushed Status out of view again. Fixed: the options say Off / Drafts / Live, the helper line above the table says once what Drafts means, the staff name column is capped narrower, and a long building name now ends in an ellipsis with the full name on hover instead of being cut mid-word.