I'm parked on you

Everything I could decide myself is decided. What's left needs you. Each one carries the recommendation of the session that raised it — if you agree, pick it and press Done. A model's opinion, where there is one, appears on the card as a receipt line; cards with no receipt were never put to a model. "I'm not sure" is a real answer and becomes work for me. You don't need to open the session — pressing Done sends your answer back and it picks up.

1maintenance-eval handyman-* preflight fails since 2026-09-13: isInboundInHouseHandyman → resolveInboundVendorMembership(phone) is the UNSCOPED walk (findPersonByPhoneAcrossOrgs → pickPrimaryClaim). #8005 (merged 2026-09-12 18:04Z, 'mint an engagement for this org every run') made the jpco vendor sync mint Person pers_7a4d4fde + phone claim (+17206795566, manual_pm/primary, verifiedAt 18:19Z) + membership vm_appfolio_org_jpco_1478_* (isInHouse=false, propertyIds=[]) at 18:19Z. pickPrimaryClaim tie-breaks on newest verifiedAt so org_jpco now beats the intact bench row (pers_813d6e98 / vmem-vendor_appfolio_1478, org_sandbox, isInHouse=true, propertyIds=[appfolio-45]). The SMS router (inbound-router.ts:239, inbound-dispatcher.ts x4, resolve-actor.ts:292) is unscoped too — only the voice walk is scoped (2026-09-07). InboundMessageParams carries no dialled-line/property, so scoping SMS vendor resolution = plumbing Twilio To → property → org into the router: a Clara inbound design change. Which design?

In plain terms. The nightly maintenance test has been red two nights running (13 of 21 pass) because the test handyman's phone number now belongs to a real customer too, and Clara's text routing picks the newest match rather than the property that was texted — should we fix the routing so texts are matched within the property's own company (the way phone calls already are), or change the test setup so the number is only known to the test company?
The session raising this recommends: Scope text routing to the texted property's company (like calls)
Shared-login customers (jpco + situsgroup) make one contact number in two companies the normal case now, and the voice path already chose 'refuse cross-company matches' on 2026-09-07 — texts should follow the same rule; changing the bench only hides the same misroute for real customers.
Tried first, unsuccessfully: Verified in [propflow-prod]: 09-12 run 18/21 with handyman scenarios running; 09-13 and 09-14 both 13/21 with all 8 handyman-* scenarios outcome=error, empty conversationId. Temporal history of maintenance-eval-smith-20260914-070839: 8 injectScenarioActivity failures, each 'bench preflight FAILED … does NOT resolve to an in-house VendorMembership'. The seeded bench row is INTACT (queried phone-index VENDOR#vendor_appfolio_1478): re-seeding is not the fix. phone-index PHONE#+17206795566 holds 3 claims: org_sandbox (07-01, manual_pm, primary), org_western_slope (09-06, sms_inbound — lower trust tier, never won), org_jpco (09-12 18:19Z, manual_pm, primary, source=backfill) — newest verifiedAt wins the tie-break. Writer = src/lib/domain/pms/writers/vendor.ts mintEngagement (once per org — engagedVendorIds guard — so retiring the jpco CLAIM would stick, deleting the MEMBERSHIP would be re-minted next tick). No open smith-fix PR in either repo; no open block on this cause; yesterday's #7821 touched the writer but leaves the minted rows. Did NOT touch the org_jpco rows (customer-org prod data).

e4196861 is parked on this.

Pick an option above, then press Done.
PropFlow Docs