Pick an option on each card and press Done; your answer goes straight back to the session. The raiser's pick is marked. "I'm not sure" and "Take it to the engineering bridge" are real answers.
ONE production heal of the existing split renter records, in three steps. The save-path fixes that stop new splits are live (propflowai #25143; the company-line writer fix #25219 is merging). Every heal tool's safety fixes are merged: #25144 #25146 #25156 #25162 #25170 #25208 #25231. WHO RUNS IT: a founder, in their own terminal, from a fresh origin/main checkout (196e3007122 or later), as gera-admin. This driver session is unattended, so the repo's hard floor forbids it from running a prod-data merge or delete even with approval (Fable fa2e73056). REQUIRED ENV PREFIX on every command: DATA_BACKEND=dynamodb DYNAMODB_TABLE_NAME=propflow-prod AWS_REGION=us-east-1 (.env.local names propflow-stage). Check that the first line of each run says table=propflow-prod. Run each dry run immediately before its apply: nothing re-checks a record between plan and apply. STEP 1: merge the split prospect persons (identity merge) - Script: scripts/merge-split-prospect-persons.ts. Run it with no flags first (dry run), then add --mode=apply --confirm-table=propflow-prod. - Agent dry run on main 196e3007122, 2026-11-04 ~21:35Z: 7 groups, 9 Persons absorbed. Moves 1 conversation, 9 inquiry rows, 9 claims, 7 household rows. 35 verify reads, all keyed. 42 skipped (cross_org 28, conversation_real 6, overlapping 2, and one each of test_residue, prospect_claimless, already_merged, live_role, org_own_line, conversation_claimless). - Real companies (3 groups, 5 absorbed): - the Ecuador-phone trio 46f73428 / de2aa46b / 35e9a286 → pers_fd775980 - relay lead c08dd8c5 → pers_8e3552a0 - guest-card lead d181a905 → pers_b47627d0 - Test companies (4 groups, 4 absorbed): d1c1da11 in the Fairhaven test company, plus 1734a2bb, 01fef0ba and e57a3b31 in the sandbox. - Apply re-reads every moved row and exits 1 on any mismatch. A missed conversation fails loudly and is not rolled back. STEP 2: remove one ended duplicate tenancy row (archived first) - Script: scripts/dedup-occupancy-rows.ts with --env-file=.env.local. Dry run first, then add --mode=apply --confirm-table=propflow-prod. - An agent could NOT run its dry run (a box guard refuses full-table scans of prod), so its counts are unobserved. - Expected: record tenant_2888880e keeps the ACTIVE row (pers_816dc8e2) and archives, then deletes, the ENDED row (pers_8bba1ce1). An agent read both rows directly. - Only `former` rows can ever be deleted, inside a transaction pinned to the row as scanned. If the dry run lists more than that one group, read every group before you apply. STEP 3: repair the record that came in on a company's own line - Script: scripts/heal-org-own-line-pointer.ts --inquiry=06bfa686-6e68-5548-ac95-6527ab5e8e5b. Dry run first, then add --mode=apply --confirm-table=propflow-prod. - Agent dry run on main 196e3007122: HEAL. The prospect's link moves from the main-line call back to the person's own email thread 41946aee, and the stale company-line phone claim claim_8aefaa62 is retired, never merged. Two real splits given as controls were refused. When it is done, the driver verifies with a read-only check that the splits are gone, records it here, and the nightly spine-health check should go green.
81b6cc93 is parked on this.