PR #7379 — a household names its co-resident

Live Preview: the branch's own dev server (npx next dev --port 3099), signed in as the smoke account, reading stage data. Names and numbers on stage are synthetic. Captured 2026-09-08 with Playwright at 1440×1000.

Before — main

/tenants?sortBy=unit&filterStatus=Active. One bare row per person: two residents on one lease are indistinguishable from a duplicated row.

Before: the tenants list on main, sorted by unit, Active only — 124 of 179.
Before: the tenants list on main, sorted by unit, Active only — 124 of 179.

After — this branch, stage data

Same URL. Stage's only multi-row groups (two, at units TEST-204 and TEST-312) each share ONE AppFolio tenant id across their two rows (appfolioTenantId 1845 / 1846, pmsOccupancyRef 995 / 996 — distinct id spaces, so not a seed artifact); one pair is the same Person twice, the other is two Person rows. The brief's same-AppFolio-id rule says both render as one resident and flag nothing, so the page is visually unchanged here, and that is the correct outcome. Whether the two-Person pair is a duplicate or a mis-keyed household is the dedup task's call, not this PR's.

After on stage: identical rows and count (124 of 179); the duplicate pairs carry no co-resident line and no flag.
After on stage: identical rows and count (124 of 179); the duplicate pairs carry no co-resident line and no flag.

After — this branch, two synthetic rows injected

The same page with a synthetic household (two residents, two AppFolio tenant ids, one occupancy ref) and a synthetic duplicate pair (one AppFolio tenant id twice) added to the /api/tenants response by Playwright request interception. Browser-only: nothing was written to any table. Unit 000/001 so they sort first.

After with synthetic rows: each household row reads
After with synthetic rows: each household row reads "+ Name · co-resident" beneath the resident, linked to the other person's page; the duplicate pair renders as two plain rows.

Why annotate rather than fold

The brief asked for one row per household. Gera, 2026-08-31 (#6685), on the sibling prospects list: "I would count co-applicant people as two … but I would make that consistent throughout." That list folded to households in #6647 and un-folded the next day. This list follows the ruling: one row per resident, each naming its household. The fold is a contained client change if the owner wants it.

PropFlow Docs