2026-10-16 · Proposed — pending review · full design: Renewals with the team in the loop
TL;DR The engine Overnight Practice rounds Next
Team replies to Clara's renewal list now run through one decision engine, and nothing is on at a customer. Good: the engine never acted wrongly on real customer material. Bad: the reader that turns a reply into rows drops two of three replies over one unclear line.
flowchart LR
P[("Property system<br/>AppFolio today")] --> A["Adapter"]
A --> L["Monthly list<br/>to the team"]
L --> T["Team replies<br/>by email"]
T --> E{{"Decision<br/>engine"}}
E --> G["Send gate<br/>STOP · do not contact"]
G --> R(["Tenant"])
E -.- N["Skips if a human started it.<br/>Checks the world before<br/>each follow-up (next)."]
G -. "write back<br/>(built, not wired)" .-> P
classDef live fill:#e3f2ea,stroke:#2f7d5b,color:#1d2420
classDef soon fill:#fbf0dc,stroke:#b7791f,color:#1d2420
classDef gap fill:#f8e2dd,stroke:#b8432f,color:#1d2420
classDef neutral fill:#eef1ee,stroke:#8a958f,color:#1d2420
class P,A,L,T,E,G,R live
class N soon
Good: one path from the property system to the tenant, with the team deciding. Gap: the check before each follow-up and the write-back are not wired.
flowchart LR b1["Approval reply:<br/>'the rest goes out'"] --> a1["Says exactly<br/>what goes out"] b2["'Do not contact'<br/>was not a decision"] --> a2["Parks the row,<br/>stops outreach"] b3["AppFolio code<br/>inside the engine"] --> a3["Behind an adapter,<br/>dark"] b4["Approval release + STOP<br/>never seen live"] --> a4["Proven on the<br/>Willows sandbox"] classDef live fill:#e3f2ea,stroke:#2f7d5b,color:#1d2420 classDef gap fill:#f8e2dd,stroke:#b8432f,color:#1d2420 class b1,b2,b3,b4 gap class a1,a2,a3,a4 live
Good: on the Willows sandbox, one approval released a held offer, STOP blocked it, and "do not contact" parked the row.
right / recordedasked backno decision shape yetmissed / lost
Good: no wrong actions in either round, and 91% of clear calls right. Bad: 67% of replies recorded nothing because of one unclear row.
flowchart LR
S1["1 · Fix the reader<br/>matching bugs (filed)"] --> S2["2 · Two policy calls<br/>'gonna renew'<br/>paper leases"]
S2 --> S3["3 · Western Slope dry runs<br/>Oct 20 and Oct 27"]
S3 --> F{{"Fede decides<br/>the flip"}}
classDef live fill:#e3f2ea,stroke:#2f7d5b,color:#1d2420
classDef soon fill:#fbf0dc,stroke:#b7791f,color:#1d2420
classDef gap fill:#f8e2dd,stroke:#b8432f,color:#1d2420
classDef neutral fill:#eef1ee,stroke:#8a958f,color:#1d2420
class S1 soon
class S2 gap
class S3 neutral
class F neutral
Decisions to settle: hub section 4.