Plan · 21 August · revised
Revised after measuring production. The earlier diagnosis of “everything says Past due” was wrong on the main point, and the correction changes what to build first.
The config is stamped, and the parser is wired at all three call sites. The reason no account shows a real stage is neither of those: the parsers went live 20 Aug 19:01Z, and exactly two emails have arrived since — a pest-control invoice and a lease-copy request. The 1,534 older signals were extracted before the parser existed, so they carry no facts and never will on their own.
The eviction evidence is already in the mailbox. One real signal, 19 Aug: subject RE: Follow Up for Case - 641732 - Luis Ruiz. The case number and the resident are in the subject line.
Re-parsing all 1,535 historical signals from their stored from + subject:
| Outcome | Count |
|---|---|
| Would claim a parse | 218 |
→ filed | 54 |
→ judgment | 16 |
→ eviction_scheduled | 13 |
→ at_firm | 13 |
| Distinct case references recovered | 24 |
| Carrying a unit number | 0 |
Unit matching reads the body, and bodies are not stored on signals. So a subject-only backfill can never bind a signal to a resident by unit.
It does not need to. It recovers 24 case references, and binding a case reference to a tenancy is exactly what the human-authored link already shipped to do. The link is the binding mechanism — which makes the operator surface the unlock for everything else, not a nicety at the end.
Today a stage says “Read off collections mail about this unit” — it never says WHICH mail. It should carry the subject, sender, date and the quoted line, so clicking a stage shows why we said it. Pure code, no prod write, and it is the thing that makes every later stage trustworthy rather than asserted.
evicted reachable
Nothing maps to it today; writ_at_sheriff → eviction_scheduled is as deep as the ladder goes. Mail that says “eviction proceeding… key return” is evidence, so this is a mapping gap rather than an absent source. Retires one of the three “can never match” filter options by making it true.
Writes collections facts onto 218 historical signals. Built to print its whole diff and write nothing by default. Applying it is a production write and will not run without explicit approval.
Write #1 shipped the endpoint, not a UI. Until a person can link a case, the 24 recovered references bind to nobody and the backfill lights nothing. This is the unlock.
Blocked on #6054 landing. The rules are written; this is the plumbing that performs the write.
Independent of everything above. An unlinked case writes nothing but still raises the alarm — the message most likely to land on an unlinked case is the assistance approval that arrives after a writ.
A fifth ReviewType on /review. Largest of the set, and last.
evicted becomes reachable in step 2, and the other two are answered by the backfill giving them sources.