How to read this page: four marks, one witness, one home per fact
Nearly everything below comes from one long conversation with one person on Sep 1, filtered through a transcription tool that lost the speaker labels. A little of it comes from a database we measured ourselves. Those two kinds of sentence must not read alike, so every load-bearing claim on this page carries a mark saying where it came from, lives in exactly one section, and has a name and a date attached to it.
The four marks, plus one
| Mark | Means | Safe to | How it fails |
|---|---|---|---|
| [X] | Measured by us in the 209 MB AppFolio extract — 174,619 timestamped events, 93,656 emails with full bodies, 32,309 texts, 45,960 lease/renewal rows, 1,355 notes, one file per tenant. | Quote to the client. Use as a baseline. Put in a contract once the producing query is checked in and the figure re-run. | It measures what AppFolio holds, not what happened — on Eileen's own estimate roughly half of tenant comms never reach it, and that half is [E], not counted (cannot-promise). And work-order lifecycle timings came from 1,124 detail records against a complete index of 2,588: a 43% non-random sample, so durations are provisional. Custody: every [X] figure on this page reaches it through one artefact — a run of Slack messages posted from the PropFlow side on Sep 1. The extract itself, the queries that produced these counts, and the scripts that pulled it are in no source this atlas read. The numbers are ours and the data is ours, so they are re-runnable in principle; nothing in the record lets a second person re-run them today. |
| [T] | Said on tape in the Sep 1 session. | Cite as "the client side said". Use to shape a question. | Lossy in three ways at once — see the panel below. A [T] is evidence a sentence was spoken, not that it is true. |
| [E] | Eileen's own reading, estimate or characterisation — a judgement, not an observation. | Treat as the best available hypothesis and the thing to test first. | An interested party three times over: she says she does not control the leasing or accounting functions she characterises ("those are the only two things I don't control") [T]; she expects this engagement to produce "some change to management" [T]; and the day's recap records that she intends eventually to start her own AI-first owner-operator business, treating this collaboration as conceptual homework — a recap line, with no verbatim tape behind that clause. None of that makes her wrong. It makes her one witness with a stake. And the "she" in every sentence of this cell is a machine's guess at who was speaking: attribution unverified. |
| [F] | A claim PropFlow made to the client, in the room or in a demo. | Treat as a promise we now owe, and check against appfolio-seam. |
Reads as a fact about our system. On tape, verbatim: "And so every, every five, ten minutes, we're, like, pulling five minutes" [F]. The actual read path is a scheduled report email, daily. An [F] is a liability row, not a capability row. |
| [?] | Unverified — believed, repeated, never checked. | Nothing. Carry it to register with a resolver glyph. |
It stops looking unverified after the third time someone repeats it. That is how the last atlas died. |
The test of whether the marks are working: these two sentences must not land with the same weight.
| Sentence | Mark | Stated in full in | Weight |
|---|---|---|---|
| Eileen ruled trust-the-caller over phone match | [T] | schema-doors | One person, once, in a session whose speaker labels a machine reconstructed. Strong signal about her preferences; no evidence about what her staff will accept. |
| 22% of work orders arrive before 8am or after 6pm, 10% on weekends | [X] | prospect-path | Counted, from data we hold. Survives the client contradicting it. Not yet reproducible by a second person — no query is in the record. |
Why [T] is weaker than it looks — the three lossy steps between the room and this page
1. Audio. Roughly 80% of the session was captured — but that figure is the recorder's own estimate of his own recording ("I think I lost part of it"), graded probable, and the fact-check bot that saw it could confirm nothing against any system. On it, about a fifth of the session exists only in participants' memory. Even the session's length is unsettled — the transcript header says ~5 hours and ~43,000 words (the file is 44,080), while the Slack thread that reported the capture rate says 7 hours. Unresolved [?]; settles with one look at the calendar invite.
2. Speakers. The Granola export carried no speaker labels. Every "Federico:" and "Eileen:" in the raw transcript was reconstructed by AI from content. So no quote on this page is attributed to a named person as established fact; where attribution matters, the sentence says "the client side" or "PropFlow side", or carries attribution unverified.
3. Names. The transcription garbles proper nouns, and it garbles them differently in different files. In the session transcript: the second principal appears as "Noel", "gnome" and "nam"; the renewals doer as "Eury" and "Euryd"; the client's own name survives as "Situs" five times and slips to "zitus" once. In the Slack-thread transcriptions of the same day the client renders as "Citus" throughout and Camellia as "Amelia" — so the garble set you are reading depends on which artefact a claim came from. Two traps that are not spelling: a leasing staffer called "Debbie" and the leasing manager called "Davey" may or may not be one person — the only finding pairing them is graded speculative, one of nine in 674, and the "Debbie" passage describes a woman living in a fancy apartment building, not anyone established as staff. And the recap credits renewals to "Miriam" while the tape names Miriam and Euryd as different people in one sentence and says renewals are "only being done by Euryd" — that is a disagreement about who does the work, not a variant of a name, and it is [?] in register. The atlas plan resolves "Noel/gnome/nam" to probably Noam Ashter, Hugo's cousin and CFO — but that name, both halves of it, appears nowhere in the transcript, the 674 findings, the critiques, the design brief or the Slack threads. It exists only in the plan. It is an inference by whoever wrote the plan, so it is [?] until a Situs org page, an email header or a GP introduction confirms it. Treat every person's name on this page as a handle for a role, not a verified identity.
What this does not undermine: quote content is verbatim from the export. A sentence is real; who said it, and whether it is true, are separate questions.
One witness
Nobody at PropFlow has spoken to Hugo, to the second principal, to Davey, to any of the three leasing staff, to any of the three offshore VAs, to any maintenance tech, or to any tenant. Every claim on this page about who will resist, why prior systems died, and who really does each job is one person's account of colleagues she says she does not manage. The leasing team's own version — that the dashboards and templates were bad, unsupported, or imposed without training — does not exist anywhere in our record. That is not a footnote; it is the largest single hole in the evidence base, and the completeness critic opened its review with it. The commercial critic's eighteen findings never raise it — so the hole is named once in our record, not twice, which is itself a reason not to treat it as settled background.
Discovery-time data quality is performed, not observed. On tape, watching a VA's fields: "she already knows I'm gonna yell about this, so she's already gone and done it before it's gonna be posted" [T]. Anything we saw being clean during the session was cleaned for the session. Baselines and ROI arithmetic come from [X] only — never from a screen share.
Scale of the corpus behind this page, for calibration: 674 findings drawn from 14 sources (8 transcript chunks, 6 Slack-thread sources), self-graded 555 certain / 110 probable / 9 speculative — but that grade measures how confidently the finding reads its source, not how good the source is. A "certain" finding on top of a single [T] remark is still a single [T] remark, and at least one "certain" finding carries an evidence quote that covers only half its own claim. The marks exist because that confidence field lies.
One home per fact
Each fact is stated in full in exactly one section — its HOME — and referenced everywhere else by section id, never restated. Restating is how the last atlas ended up with three unit counts and no way to tell which one had been retired. If you want the number, follow the id.
| Fact people keep repeating | Mark | Its only HOME |
|---|---|---|
| Roughly half of tenant comms on two personal cells | [E] | cannot-promise |
| ~550 units, ~21 buildings (and the two competing counts) | [E] | schema-doors |
| The ~$800/mo MCC price anchor | [T] | decision |
| 2,588 work orders Jan 1–Sep 1 and the lifecycle timings | [X] | work-order-path |
| 883 guest cards and the after-hours share | [X] | prospect-path |
| 735 of 932 tenants with no language tag | [X] | schema-doors |
| The isolation leak and the read/write pipes | [F] | appfolio-seam |
The extract's own inventory — the 209 MB and the five row counts in the [X] row above — is homed here, because it defines the mark. Every figure derived from it is homed in the section that uses it.
Every section closes with three lines, and a section without them is not finished:
| Line | What it commits |
|---|---|
| OWNER | The one person at PropFlow who keeps that section true. Not a team. |
| EXPIRES | The date after which the section is stale until re-verified. Past it, the section is not wrong — it is unsupported, which reads the same as wrong. |
| SIGNAL | The single observable that would tell you the section's claim is failing, before anyone reports it. |
Status vocabulary and resolver glyphs
Five words, used identically in every section and in register. A ruling never deletes a row; it dates it, so a reversal has something to point at.
| Status | Means |
|---|---|
| open | Two sources disagree, or nothing is known. The default: of the eleven rulings this atlas is organised around, zero are cleanly decided, three are contradicted on tape, and eight are open. |
| ruled | Decided — and the row must carry by whom and on what date. A ruling with no name and no date is an open row wearing a costume. |
| retired | No longer has a consequence — the AppFolio tier question, once API access was denied regardless of tier. Stays on the page so nobody re-opens it. |
| reframed | The question was wrong, and the row records the better one. |
| held-open-in-product | Never resolved in prose because the code carries both readings — storing asserted and inferred unit with a confidence, rather than choosing. |
Every row in register also carries a glyph naming the kind of thing that would settle it, because the cost of resolution differs by two orders of magnitude and the cheap rows should be closed this week.
| Glyph | Resolver | Cost |
|---|---|---|
| person | One ask of one named human | 10 minutes to one call |
| flask | One live test | A scheduled window and a person watching |
| scales | Counsel | Billable, slow, blocking |
| database | A query against our extract | Free, today, and under-used |
| infinity | Unresolvable by design — build a mechanism instead of an answer | Engineering |
A row with no glyph is not allowed on this page. A question with no named resolver type is a worry, and worries do not belong in an atlas.
The decision: sign, reshape, or walk — and the line where this is a bad account
Marks used throughout: [X] measured in our own AppFolio extract · [T] said on the whiteboard tape · [E] the client’s own figure · [F] something PropFlow asserted to the client · [?] no source in this record. What each one licenses you to do is in How to read this page.
sequenceDiagram
participant D as Data
participant S as System
participant P as One person
S->>D: watch the threshold
S->>P: Budget at 75%.
Want me to act?
P-->>S: yes — in the reply
S->>D: acts on the answer
Note over S,P: no screen anywhere in the loop
One in-person day produced a buying signal, a dollar figure, an NDA and five commitments. It did not produce a decision. Three shapes are on the table, none of them chosen, and the fastest way to lose this account is to send a proposal that names a price without naming a counterparty, a success metric or a walk-away line.
What is on the table
| Shape | What we would sell | What makes it hard | Whose yes is required |
|---|---|---|---|
| A · After-hours pilot PropFlow-side proposal [T] |
A paid 90-day after-hours/weekend leasing line, measured in guest cards written back into AppFolio under the Clara identity. | Low blast radius and measurable — but the wedge may not exist. The VAs are all ex-call-centre and Philippines-based bar one in Colombia, so Denver evenings are Manila daytime; nobody asked why they do not already cover the window, or what the rota actually is. If the gap is a shift-scheduling choice, a rota change closes it for free. | GPs (budget), the client's ops lead (scope), on-site staff (adoption). |
| B · Renewals first the buyer's own #1 ROI [T] |
The 90-day autonomous renewal flow PropFlow already runs at a single-building client — building-level policy, generated and sent offers, ledger holdbacks, two-week re-nag. Twelve offers went out at that client while this meeting was happening [T]. | Politically loaded. A fat-fingered renewal rate was named on the client side as a catastrophic outcome at the August demo [?] carried from the demo write-up — no verbatim anywhere in this evidence base, and the buyer predicts staff will invoke past automated-rent errors as the excuse for blocking the whole thing and slow-walk increases $50 at a time [T, her forecast, not an observed event]. It also needs write-back, per-building policy and an override-with-reason object first (renewal-path). |
Same, plus a working override channel. |
| C · Park | Nothing signed until the champion's real end date, a GP interview and the VA rota are on paper. | Costs the momentum of a day on site and an NDA already signed — and a second prospect is competing for the same two founders in the same week [T]. | PropFlow only. |
The build order was never reconciled in the room. That is contradiction #17 and it is the whole decision: PropFlow's first workload is the phone, the buyer's first workload is renewals.
What she asked us to build — the alerting and approval layer
Three pointers on this page route here for this one object — gate's blocks-to-scale row, register D4 ("a read/alert layer that owns no records"), and the term the quarterback layer as it is used elsewhere without ever being defined — so it is stated in full here and referenced everywhere else. Quarterback is the buyer's own word for the single person who has to take the next action; she is that person today for the whole portfolio, "the centre of the bow tie" through which all news funnels [T]. The ask is explicitly not a dashboard, and she made that argument herself: "I don't need another CRM. I'm already paying for one. I need you to pull the data out and identify markers beforehand" [T]. The dashboard graveyard in clock is the second half of the same argument.
| What it must do | What was actually said | Mark |
|---|---|---|
| Trigger on thresholds the user sets, over data we already hold — not on a fixed rule list of ours. | The one threshold anyone named is budget burn: "hey, heads up, you're 75 of the way spent on the budget". No second threshold exists in the record [?]. | [T] |
| Address a role, not an inbox — the ownership group / GPs, ops, and accounting. | "This should be, like, something where it's like you're sending a notification out to the ownership group or, like, the general partners". The accounting reviewer is named only in the day's summary, not on tape summary, not verbatim. | [T] |
| Name exactly one assignee per item, never a team queue. | "we say maintenance team or leasing team or whatever, it gives you the ability to dilute the responsibility amongst, like, people" — and the positive form: "being able to alert the quarterback who's gonna have to, like, do the next motion". | [T] |
| Be authored by the system, not by a colleague. This is the motive for the whole layer, and it is political rather than technical. | "taking the heat out of that by automating it from the system itself so that one person isn't being killed as a messenger for bringing it up". | [T] |
| Arrive days ahead of the event, not on the day of it. | "if I can tell you a few days early or a week, you'll have a little bit of time, too" — a proactive employee, her framing. | [T] |
| Deliver over email and SMS, with nothing to log into. The owners will not open AppFolio at all, which is why she hand-builds dashboards for them today. | Said in the room by PropFlow, so it is a promise we now owe: "There's no dashboard to go or anything to click. I'll just email you or text you. Like, hey, this is happening. Do you want me to do this?" | [F] |
| Carry its own reply path — the message proposes the action and acts on the answer. | Same sentence: "Do you want me to do this?" The approval object, the refusal path and any escalation when nobody answers are unspecified [?]. | [F] |
Acceptance criterion, written to be tested. An alert fires on a threshold its recipient defined, lands with exactly one named person over email or SMS, is authored by the system rather than by a colleague, arrives days before the event rather than the day of it, and is answered in the reply. Anything that requires the recipient to open a screen fails the test. The lead-time figure is hers — "a few days early or a week" — and no tighter number has been agreed [?].
Two adjacent pieces are deliberately not restated here: the staleness detection that feeds these alerts is homed in trust-ledger, and the argument that alerts belong in a meeting cadence rather than a screen — plus the inference that they land in an EOS L10 slot — is homed in gate. What this layer is worth, and on what basis it could be priced, is not established anywhere: see Money, stated once.
The facts that add up — each stated in full elsewhere
| Fact | Mark | Home |
|---|---|---|
| The champion's Denver presence ends within days; her end is stated three incompatible ways ("last week", "the next four months", "through December, relocating East Coast"). No successor is named for the sponsorship or for any single duty she personally holds. | [T] | clock |
| On-site leasing staff report to the GPs, not to the buyer, and hold a one-shot veto. Every system the buyer has introduced has been adopted for about three months and then abandoned once she stops policing it — and the four systems in the graveyard died of three different causes, not one. | [T]/[E] | clock |
| ~550 units and ~21 buildings against a stated ICP band of 1,000–10,000 units. Our own extract holds 932 tenants and 36 AppFolio property rows carrying 2026 work orders — three counts on record, none of them a house rule. | [E]/[X] | schema-doors |
| AppFolio denied API access outright. Reads are a daily scheduled report email; writes are a browser agent on a shared login that today has another client's identity hard-coded — a live isolation leak found by our own side. | [T] | appfolio-seam |
| The lead channel that converted best is banned to Situs for automated or company-identity posting — only one person still posts it by hand; roughly half of tenant communication runs on two personal cells we have no access path to; recording is off for on-site staff by decision. | [T]/[E] | cannot-promise |
| The only dollar figure anyone produced is ~$800/mo, set in a hallway on the way out. | [T] | here |
| 209MB of tenant PII already extracted — 174,619 events, 93,656 full-body emails, 32,309 texts. An NDA exists between the two companies. Training, evals and cross-client reuse were never negotiated. | [X]/[T] | here |
| There is no management clearing entity — expenses go direct to each ownership entity, each backed by a share of ~500 investors. Who we invoice is undetermined, and it decides who can say yes. | [T] | schema-doors |
Money, stated once
The room produced one number: the cancelable AppFolio maintenance call centre runs about $800/month, and the client side framed it as the minimum — "at least we can pay you that", "I'd rather give it to you guys" [T, hallway] attribution unverified. Read the provenance before you use the figure. It was a hallway exchange on the way out, not a negotiation; it reaches us second-hand and hedged in the retelling — "I think he said it was like 800 a month or something" — reported in the day's standup rather than captured on the session tape; and it has never been checked against an invoice. Do not quote it externally until one exists (register). Everything else on price is ours, not theirs.
The atlas's "$4.50/unit/mo, 30% off for three months, ~$10k setup, locked Aug 31" is an internal position. No PropFlow pricing was discussed on site. Do not repeat it as a client fact (retractions).
| Price basis | What the evidence says |
|---|---|
| Per unit | Actively resented. ILS vendors bill the 500-unit price against roughly 100 vacancies. She raised fee attribution across owners herself, warned that an owner will object to blanket allocation, and deferred it: "it's not gonna get figured out this month" [T]. |
| Per outcome | Untested, but fits the buyer's attribution instinct — she built her own owner-facing ad-spend-to-lease attribution dashboard [T]. |
| Per property / per conversation / per seat displaced | Never proposed, never tested. Unknown. |
| Ceiling | Unknown. No VA payroll, total AppFolio spend, total ILS spend, portfolio revenue or turn cost figure exists anywhere in the corpus, so there is no ROI argument that survives past the $800 anchor. |
DECIDED 2026-09-02 — the price basis is deliberately open. Gera, asked to choose among the bases above: "let's just put it's to be dated and just make it known. We don't want to make any sort of decisions right now until the contract is finalized." So this table is evidence, not a shortlist being narrowed. Nobody is mid-deliberation and nobody is about to pick — the basis is TBD until the contract is finalized, and the GP conversation in decision is what unblocks it. Quote no basis externally in the meantime, including the retracted $4.50 above.
Cost to serve. Our own delivery estimate is months of forward-deployed work against a one-week internal guess that was then withdrawn as too ambitious [T]. Against an $800/mo anchor that is negative margin, and it would consume most of a two-founder delivery capacity in a week when a second prospect is live — a question nobody has actually asked. That is the fixed cost. The variable cost is unmeasured [?]: nothing on record states a cost per voice minute, per work-order intake, per browser-automation session or per email re-index, and no maximum seconds-to-first-word has ever been set for a phone turn. It matters here rather than somewhere else, because the wedge is priced against an intake volume that is climbing month over month rather than sitting flat (work-order-path) — cost to serve grows with the same metric we would sell on. The numerator is ours, not the client's: nobody outside PropFlow can answer it, and nobody inside PropFlow has computed it. Until someone does, neither the price basis below nor the walk-away threshold that follows can actually be evaluated. Rule: no scope is signed without a Situs-only vs reusable tag on every gap (gate) and a price basis that is not the call centre's.
The success metric — proposed, not agreed
Nobody agreed one. At an account with a three-month adoption half-life, an unmeasured pilot dies silently at day 90 — by which time the champion has relocated, and on the shorter two of the three versions of her end date has already gone. Baseline, from our own extract, never from her dashboards and never from anything measured while staff knew they were watched:
| Measure (2026 YTD, 883 guest cards) | Value |
|---|---|
| Cards created after hours | 13% |
| Cards created on weekends | 7% |
| Implied after-hours cards per month | ~14 inferred: 13% × 883 over eight months |
| Cards that never got a human reply | 154 (17%) |
| First human reply | median 5.1h · p75 28h · p90 71h |
Target: after-hours guest cards with a transcript written back under the Clara identity, counted at day 90 from the first live call, compared against the same months of the prior year pulled raw from AppFolio. Note the size honestly before proposing it: ~14 cards a month is a thin number to hang a contract on, which is an argument for pairing the pilot with a second measurable workload, not for inflating the baseline.
The walk-away line
This is a bad account if any two of these hold on the day we sign:
| Condition | How it gets tested |
|---|---|
| The champion's authority ends before day 90 and no GP has been interviewed. | One ask, plus one meeting. |
| The VAs already cover Denver after-hours by rota — the wedge evaporates. | One ask (the rota, in Denver time). |
| Price cannot clear roughly 3× the call-centre floor on any basis — about $2,400/mo, against an $800 figure we have never seen billed inferred arithmetic; the 3× threshold is ours, not theirs. | One pricing conversation with the GPs — already agreed, not yet held (below). |
| AppFolio's terms forbid a browser agent on a shared login and Situs will not carry that risk. | Counsel, then the client. |
| The one-shot leasing-team demo cannot be scheduled with GP sponsorship. | One ask. |
| Data rights for training are refused — the account becomes a cost centre with no platform return. | Counsel plus the NDA's actual text. |
What the deal must contain if we sign
- Counterparty. Situs corporate (unreimbursed opex out of the GPs' pocket) or each ownership entity (reimbursable, per-property justification, possible investor-facing disclosure). Plus a position on what, if anything, gets disclosed to the ~500 investors. Undetermined today.
- Client-obligation schedule with named owners and a review cadence: verified availability inventory, whiteboard photo and writing cadence, credentials, a current website. At an account whose defining trait is that internal processes die in three months, these must be contract terms — otherwise we churn on a data-quality complaint about data we do not control and cannot rebut.
- Liability language for a missed statutory cure clock, a wrong rent, or a statement inconsistent with the executed lease. An NDA exists; an MSA and a DPA do not.
- Data rights: training, evals, cross-client reuse, deletion on exit — over a 209MB PII corpus already in our hands. This is both a deal-blower if raised late and our largest non-cash consideration; it can be traded against price.
- Scope fence with change control, against an unbounded wish list and our own admission that "I could spend months in there and build stuff" [T].
- A retention answer. Our stated principle writes everything back into the client's AppFolio, which by design leaves the accumulated value in their system on cancellation. What stays ours: the person spine, the answerable inventory, the language attribute, the learned policy. Name it in the contract or accept there is no renewal-year moat.
What was actually agreed, and who owes whom what
The day produced no decision, but it did produce commitments, and none of them survived into the last atlas. They belong here because two of them are the agreed mechanism for settling contradiction #17 above, and one of them is the meeting the walk-away line tests against. Only one carries any stated timing; the rest have no date on record, and the column says so rather than inventing one. The section's attribution unverified caveat applies throughout — the transcript's speaker labels were AI-reconstructed, so read "she" and "he" as the client side and the PropFlow side.
| Commitment | Owed by | Stated timing | What it would settle | Mark |
|---|---|---|---|---|
| Reverse-engineer and send the list of datasets to pull, plus the low-hanging-fruit builds that follow from data she already knows is clean — then both sides reconvene to pick the build order. "Think about this and think about not only things I showed you. Then let's talk about what data sets you want to pull and what things you can build as low hanging fruit." | Client side (Eileen) | "Meditate on it" during next week's cross-country drive. The reconvene has no date [?]. | The build order — which is contradiction #17, the thing this whole section calls the decision. It is also a dependency held by the person whose Denver presence ends within days (clock). |
[T] |
| The "training map" / prep checklist she asked for by name: what Situs must clean to get a phone system live — clean rent roll, verified availability list, and tenant/vendor contact data for caller identification. Her ask, verbatim: "is there a training mapping that you like kind of have where it's like, hey, guys, these are the three areas that, like, if we want to get a legit phone system operating as goal number one… these are what we need to do on our end." | PropFlow (Fede) | None on record [?]. | A document the client requested and has not received. Note the framing collision: the deal-contents list above turns overlapping items into contract terms we impose, while this is the onboarding artifact she asked us for. Both can be true; only one has been written. | Ask [T]; the commitment to produce it is recorded in the day's summary, not on tape summary, not verbatim |
| A follow-up meeting with the two GPs — Hugo and his cousin — "to figure out like the pricing model the contract you know kind of like what what they want what we can provide". PropFlow's own stated sequencing is that this happens before we build: "talking to hugo and his cousin about how this deal will be structured is the first thing we should do before we build". | PropFlow (Fede) to convene | None on record [?]. | Price basis, counterparty and GP sponsorship at once. The counterparty is one of the three things the lede says a proposal cannot go out without, and the price basis is what the money section above says we do not have. It is also, literally, the walk-away row's "one pricing conversation with the GPs" — so that test has an agreed but date-less meeting behind it rather than nothing. | Recorded in the day's standup, not on tape standup, not verbatim |
| Outreach to Jay, who runs the Western Slope operation and is the warmest referral out of the session. | PropFlow (Fede) | None on record [?]. | Register row A7 — Western Slope in or out. The row already carries a catcher; what was missing from this page is that our side committed to make the approach. | Day's summary, not verbatim summary, not verbatim |
| Recurring weekly on-site sessions, offered by PropFlow — "I can come in every week? Or however long we need just to go to each area and understand kind of like all the opportunities and then just prioritize." | PropFlow (Fede), offered | Weekly, if taken up. No acceptance is recorded [?]. | Nothing yet. It is a standing delivery-capacity commitment against the same two-founder bandwidth the cost-to-serve paragraph above says nobody has priced. Confirm it or withdraw it before it is assumed. | Graded probable only — the tape is garbled at this line probable, garbled audio |
None of these has an owner-and-date written down anywhere outside this table, and four of the five have no date at all. That is the same unowned-dependency failure this document diagnoses at the client, arriving in our own file — and the one with a date depends on a drive by a person who is relocating.
OWNER: Sean (commercial) with Fede (client facts) · EXPIRES: 2026-09-15, or the day any walk-away condition is tested · SIGNAL: a proposal goes out without a success metric or a counterparty named — or with a price basis asserted, which as of 2026-09-02 is the thing that is deliberately not decided (see the money section). The absence of a basis is no longer the alarm; printing one is.
What the last atlas got wrong — was → is
Twenty claims from the previous edition are dead. Most of them are still in your head, and several are in slides and Slack posts. Read this before you quote anything you remember. Each row gives the replacement, the provenance mark the record actually supports for that replacement (see key), and the one section that now owns the fact — no fact is restated anywhere else.
The unit count is the worst of them, because the old atlas turned it into a house rule — "quote Hugo's number, always". Three counts are on record and none is a rule: ~550 units E, the figure the client side quotes when it opens a vendor negotiation, sitting beside ~21 buildings E, which is the team's working description and has never been checked against a rent roll; ~500, which is what Tenant Turner bills against; and, in our own extract, 932 tenants X alongside 36 properties carrying 2026 work orders X — a set that includes sold assets, single houses and commercial. They do not reconcile, nobody has reconciled them, and every old sizing line that multiplied by 1,000 is out by roughly 2×.
The twenty rows
| Was (dead) | Is now | Home |
|---|---|---|
| ~550 units E, ~21 buildings E; ~500 billed by Tenant Turner T; 932 tenants and 36 properties with 2026 work orders X. Three counts, no house rule. | this section | |
| 22% of work orders land before 8am or after 6pm, 10% at weekends (~800 YTD); 13% of guest cards after hours, 7% at weekends X. Only after-hours leasing goes to voicemail. | prospect-path | |
| A per-pipe freshness contract: daily read-only report email, plus a browser agent. The 5–10 minute figure was a PropFlow claim to the client F, never a capability. | appfolio-seam | |
| Caller-asserted unit wins; store asserted, inferred and confidence separately. The client side rejected phone-matching outright T and accepts the impersonation risk. | schema-doors | |
| Roughly half of tenant communication runs on two employees' personal cells under a $50/month allowance T. We cannot see it. That we cannot demand it is her lay reading E — no BYOD policy has been produced either way. | cannot-promise | |
The MCC is AppFolio's all-day offshore maintenance intake T, taking work-order basics only, and it is the price floor named by an owner. Displacing it is last, separately priced, gated on a proven escalation ladder. (The "all but two properties" scope the last atlas carried is not retracted — but it is not evidence either: its only source is one line in the day's standup thread, never checked against AppFolio ?. It is stated once, in work-order-path, and referenced everywhere else.) | gate | |
| One line: API access was denied — the client was told they would get it "as an actual developer, not us" T. Tier is irrelevant. The pipes and their freshness replace the tier table. | appfolio-seam | |
| An internal position, not a client fact. No PropFlow price was discussed on site T. The only figure the day produced is the MCC floor — and it came from a hallway exchange on the way out, not from the room; the figure itself is stated in the last row of this table and nowhere else. | decision | |
| Renewals are the buyer's stated #1 ROI T, and PropFlow already runs autonomous 90-day renewals at Camellia. Both build orders are staged and dated; neither is decided. | renewal-path | |
| The client side ruled out AI answering during business hours T while agreeing to nights and weekends — the tape carries the substance in a garbled fragment, so treat the wording as reported, not quoted. The three-mode enum survives as a gate row; the Situs default does not. Call entry is by time of day. | prospect-path | |
| Unknown. There is no usable language field — 735 of 932 tenants carry no tag; 11,382 texts went out bilingual and 3,905 Spanish-only X. Language is captured from explicit signal only. | schema-doors | |
| Western Slope is a separate legal entity Situs owns 25% of T, a true third-party manager on its own AppFolio instance with its own operator. Management is an edge with a percentage; PMS instance is a namespace. | schema-doors | |
| Recording on-site staff is off the table for phase one by explicit decision — "the whole system would collapse" T. Per-leg, per-queue, per-role toggles; VA queue on, on-site off. "We record everything" is banned copy. | cannot-promise | |
| Matt does expense and accounting review; the champion is VP Operations T and absorbed the maintenance-manager role after firing a seven-year coordinator T. Neither surname appears in the 44,000-word record — zero hits on McKibbin, zero on Magana (a "Lee" appears once, as the sender of one guest-card follow-up email). ? on every name and title in this row: the speaker labels are AI-reconstructed. | clock | |
| The new record names no phone vendor at all — "Crexendo" has zero occurrences in the transcript, the findings or the threads, so whatever produced the word is unverifiable here ?. The phone tree is being rebuilt right now T and the rebuild has no named owner. Drop the vendor name; keep the caller-ID passthrough live test. | gate | |
| The buildings already exist in Situs's own AppFolio — we read out, we do not create. (The last atlas dated that estate to 2018; no such year appears anywhere in this record ?.) The jpco "sandbox" is a live customer's production books; the shared login with a runtime database menu is a real isolation leak T. | appfolio-seam | |
| Cleanliness is per surface. Work orders are the cleanest surface because the champion polices them T; leasing, vacancy, lease execution and notices are the swamp. A per-field ledger replaces the adjective. | trust-ledger | |
| The absence pitch was rejected on tape — "me and Hugo, we log in, I'm on vacation with them" T. Depersonalised escalation is the sale that was accepted. The abandonment anecdote is unmeasured. | decision | |
| Two real incidents become permanent regression cases: the 446 Galapago caller-ID misfile and the yellow-jackets/bees duplicate T. | gate | |
It was in the evidence base the whole time: ~$800/month, framed by Hugo's cousin — one of the two GP-owners — as the minimum Situs would rather pay us T, hallway. This row is its only home; decision references it. | decision |
Why each one died — the specific evidence
| Retracted | What killed it |
|---|---|
| Unit count | The 1,000 figure was one person's number promoted to a rule. Nothing in the new record supports it, and the extract's 36 properties with 2026 work orders is already more than the ~21 buildings the team describes verbally — a description that is itself unchecked against a rent roll. |
| Phone silence / 40–128 | "I have an army of them that can answer" T — three ex-call-centre VAs by day, plus the MCC taking maintenance intake all day. The VAs work from the Philippines (one from Colombia), fourteen hours ahead of Denver, so even the leasing gap may be a rota choice rather than a coverage hole. |
| 5–10 minute ingest | AppFolio denied API access outright. The only read path is a scheduled custom report — daily — plus browser automation. The client side's own ideal was hourly. The claim survives in the record in two forms ("every five, ten minutes" and "~5 minutes"); a per-pipe contract has to exist before either is repeated. |
| Phone-match identity | Rejected because of roommates, relatives, transfers and landlines: "I would rather trust what the person calling is saying" T. The MCC misfiling a live test call against 446 Galapago — a house managed privately on the side, matched by caller ID, while she said the correct address twice — is phone-matching failing in front of us. |
| One VoIP number | The sequential hunt group is what drives callers to the cells, and in-person lease signings are how tenants get those numbers. Ending in-person signings is a data-acquisition project; BYOD access is a counsel question, not a settled constraint. |
| MCC as after-hours vendor | Cutting the MCC is the act that exposes the ring-out risk on a 2am emergency — the on-call rota, what counts as an emergency and who pays the callout are all undocumented on Situs's side — and it removes the budget anchor the owners themselves named. Wrong thing to do first. |
| API tier table | Access was denied regardless of tier. Six days were spent waiting on a question with no Situs consequence. |
| "Locked" pricing | Per-unit pricing is actively resented — ILS vendors charge 500-unit prices against far fewer vacancies T. Fee attribution across ownership entities is out of scope this month, and the legal counterparty is still undetermined. |
| Renewals deferred | The champion has stopped building her own renewal process because she expects PropFlow to deliver it, and wants the recommendation to carry our name for political cover. That build order was never reconciled with ours. |
| Answering mode | Stated from both sides — on tape at the session, and in a client email in the thread record. |
| 70% Spanish | A percentage invites inference. 79% of tenant records have no language tag at all; the measured denominators are the only honest replacement. |
| One PMS connection | Two managing entities, two AppFolio instances, different ownership stakes, different billback methodology, different process maturity. |
| Record everything | The flagship capability is disabled at the flagship account, by decision. The champion tied her reluctance to switch it on to her own departure — a departure the record states three incompatible ways (last week / four months / through December); only her in-Denver presence unambiguously ends within days. |
| Roster | The transcript's speaker labels were AI-reconstructed from an export that carried none, and names are garbled throughout. "Noel"/"gnome" is one of the two GP-owners and, per the standup, Hugo's cousin — no title for him appears anywhere in the record, so any job title attached to him is inference, not evidence. Two surnames in the old roster have no source at all. |
| Crexendo | The name has zero occurrences in this corpus — transcript, findings and threads alike. It was load-bearing in the old design on the strength of a transcription and nothing else; the confidence was manufactured by the tool. |
| jpco property creation | We would have been writing new property records into a live customer's production books to test a client whose buildings already exist elsewhere. |
| Blanket dirty data | "That's where we're gonna live or die by the sword" T — the client already names data hygiene as the make-or-break dependency, per surface, not in general. |
| Absence coverage | Rejected to our faces. The proposed replacement signal for the abandonment anecdote is protected-class-adjacent and goes to counsel before it becomes a score. |
| Seven scenarios | They name fixtures after real buildings, which the atlas itself forbids, and one of them is recorded as a Western Slope property ? — a different AppFolio instance and possibly out of scope. |
| MCC cost unknown | An open question that was already answered in the corpus — the synthesis and one of the outside critics both filed it as uncaptured while the figure sat in the standup thread. The lesson is about the search, not the number. |
The method is retracted too, not just the numbers
Every row above has the same shape. A single-source statement — one person's figure, one transcription artefact, one internal pricing position, one pitch that had been rejected in the room — was promoted into a house rule, and the rule then got a verb that made it unfalsifiable: always, locked, decided. Once a claim reads as decided, nobody re-checks it and everybody quotes it, which is how "~1,000 units" survived long enough to size a build. The same mechanism invents job titles and dates: a role or a year that appears in no transcript acquires authority purely by being restated downstream.
| The habit that produced the errors | What replaces it |
|---|---|
| Bare assertion; a number's origin lost by the second slide | A provenance mark on every load-bearing claim — measured, said on tape, one party's reading, our own claim to the client, unverified |
| The same fact restated in four tabs, each drifting | One home per fact; every other mention is a section reference |
| Facts with no expiry, quoted a year later | An owner, an expiry date and a failure signal at the foot of every section |
| "Decided" with no decider and no date | A ruling is dated and named in register, or it does not exist. A ruling never deletes a row; it dates it. |
| Confidence borrowed from a tool (a transcript, a scraper, a synthesis) | An honest unknown with the one ask, test or query that would settle it |
| A title, a surname or a year that entered downstream and was never traced back to tape | Names and dates carry ? until a primary source is cited; role, not name, is what a claim hangs on |
Practical consequence for anyone writing the next PropFlow document about this account: the sentence "I read it in the atlas" is no longer an argument. Either the claim carries a mark and a home, or it is a memory.
Cut, not just corrected — things a reader might still cite
These were in the old edition and are gone from this one on purpose. If someone asks for them, this table is the answer.
| Cut | Why | What survives, and where |
|---|---|---|
| The AppFolio API create/read/update tier table | Access was denied regardless of tier; the table decided nothing | One paragraph naming the shared-login isolation leak — appfolio-seam |
| The 40/128-hour coverage-gap hero, and the headline stat tiles ($4.50, ~1,000 units, ~70% Spanish) | All four figures are retracted above | Measured after-hours volumes — prospect-path |
| The seven fictional call scenarios | Fixtures named after real buildings; one is recorded as being on the other AppFolio instance ? | Two real incidents as regression cases — gate |
| The roadmap tab: Phase 0, seven workstreams, five validation suites, the Gantt | Sequencing invented ahead of the facts that determine it | One gate list, and build order as a staged row — gate, register |
| The hierarchy tab (industry survey, cloud-provider comparison table, MITS, the two settings shapes) | A framework tour where five rulings were needed | Five lines with ADR pointers — schema-doors |
| "Commercial terms — exactly how to talk about price", the objections list, "why this is not Camellia" | A script written before a price basis existed | The walk-away line — decision; banned copy — cannot-promise |
| The "kill the VAs and the call centre saves $5–7k" ROI frame | The VAs are the rollout vehicle; the buyer's theory of value is freed bandwidth, not headcount | Retained only as banned copy — cannot-promise |
| The architecture tab's current-state stat blocks, goal state, cutover plan and ranked risk table | A risk table nobody owns rots; per-section signals do not | The empty-diff test and capability ladder as gate rows; a SIGNAL line per section |
Known gaps in this section: the evidence files record no publication date for the predecessor edition, so "the last atlas" is identified by content, not by date — fixing that is one ask of whoever holds the old file. Three replacements above also outrun the primary record and are marked ? rather than dropped: the MCC's property scope — one line in the day's standup thread, homed in work-order-path — the year Situs's estate entered AppFolio, and any job title for the owner who named the MCC floor. Two of those are one question to the client. The MCC's scope is not: it, and whether the "all day" coverage the record describes means round-the-clock, are one look at the AppFolio billing screen, and they belong in register beside the ask for the MCC intake script.
OWNER: Gera · EXPIRES: on the next atlas edition — this section is a diff against a fixed predecessor and has no meaning against a moving one · SIGNAL: a retracted number appears in any new PropFlow document or Slack post.
The clock and the veto: who decides, who adopts, who is leaving, and when
The person who wants to buy this cannot order the people who meet every prospect. The people who can kill it on sight report to someone else. And the champion's own end date exists in three incompatible versions, only one of which we can act on.
flowchart TD GP["GPs — Hugo + cousin"] VP["VP Ops — the buyer"] ON["On-site leasing ×3"] PF["PropFlow rollout"] SUC["No successor"] GP -->|"only they can direct"| ON VP --x|"cannot order"| ON ON --x|"can kill it"| PF VP -.->|"none named"| SUC classDef veto stroke:var(--bad),stroke-width:2px classDef ghost stroke:var(--muted),stroke-width:1px,stroke-dasharray:4 4,fill:none class ON veto class SUC ghost
Almost everything below rests on one interview with one interested party attribution unverified — the exceptions are the extract figures in rule 5, which are ours. Nobody at PropFlow has interviewed either GP, the leasing manager, any leasing agent, any VA, any tech, or any tenant; the only GP contact anywhere on record is a hallway exchange about price on the way out and an unminuted conversation with an owner noted in a standup. Treat the motives as one person's reading; treat the dates and counts as facts about what was said, not about what will happen.
Authority, not the org chart
The two GPs are an owner-operator pair; the record names them Hugo and "Noel," and describes the second as Hugo's cousin. The titles we have been carrying — president for one, CFO for the other — come from our own planning notes and appear in no primary source [?]; the same goes for the identification of the cousin with "Noel," which our notes themselves rate only as "almost certainly." What is on record is that the cousin set the price floor, and set it in a hallway on the way out, reported secondhand in the day's standup — "at least we can pay you that," meaning the ~$800/mo AppFolio maintenance call-centre line (MCC) [T, hallway]. Neither GP will open AppFolio [T]; the day's summary records a daily work-order dashboard email going to them instead [E]. The buyer is the VP Operations, and her reach stops exactly where the legacy on-site staff begin.
| Group | Reports to | What they can do to us | Mark |
|---|---|---|---|
| The two GPs — Hugo and the cousin who set the floor (titles and second name unconfirmed) | — | Fund it, mandate it anywhere. Per the client side's own prediction, they will be the most eager adopters and the first to shut it down when it bites | [T]/[E]/[?] |
| VP Operations — buyer, champion, "centre of the bow tie" | GPs | Buy it, design it, mandate it to the VAs and the maintenance techs. Cannot set a single rule the leasing team must follow: "I don't control the [leasing] area… They are Legacy employees. That historically Hugo and [the other GP] have managed" | [T] |
| On-site leasing — a manager plus two (the name is recorded as both "Davey" and "Debbie"; unresolved) | The GPs, not the buyer | Kill it once, permanently. Salaried, no incentive comp. They write and rewrite their own procedures every few months, insist on attending every lease signing in person across ~550 units, and unilaterally stopped working a paid lead source by declaring the leads bad | [T] |
| Three offshore VAs (Philippines, one Colombia; all ex-call-centre; the first hired three years ago) | VP Operations | Adopt. They accept process and expect to be scored — one already pre-fixes records ahead of an audit. This is the rollout vehicle | [T] |
| Maintenance techs (one W-2 carried as a vendor record so VAs can text him; 1099s) | VP Operations | SMS only — "they just don't want to use any software… I don't know how to use a computer" | [T] |
Unknown and material: whether the VAs are direct hires or through an agency, their contracted hours, their cost, and whether the VA program survives the champion's departure at all — she is the one who hired them after the on-site team refused her process. The "HireSmart" agency name appears only in our own internal planning notes, in no primary source [?] — as do the titles in the row above. Also unknown: what anyone at Situs was told about the day on site.
Three end dates, and which one we can act on
Do not average them. The three statements are: "this is my last week" [T]; "it'd be the next four months when I'm leaving" [T]; and a correction from the PropFlow side afterwards that she is not leaving the company at all — relocating East Coast, staying with Situs through roughly year-end, so it is "last week in the Denver office" [E]. Only the first is unambiguous, and only about presence: she drives cross-country the following week. Everything after that is disputed, and everything past December is unknown.
The rule that follows is a scheduling rule, not a forecast: ask for the physical and in-room artifacts now, in the days that are certain — the availability whiteboard photographed with its colour legend and its writer named, the after-hours on-call rota, the maintenance call centre's actual script and contract term, and the EOS Accountability Chart, quarterly Rocks and L10 scorecard, which probably already exist and which nobody has ever requested. Documents she can send from anywhere (rate card, annual operating calendar, turn buffers, pest adjacency rules) can wait for the disputed window. No successor sponsor is named. No successor for any single duty is named.
Bus factor by function
The method is the client's own, discovered by accident: one VA's maternity leave revealed that move-out charge-backs had run for five years with no documented process at all [T] — one person eyeballing inspection photos and improvising charges [E]. Nobody ran that test against anyone else. Run it on every row below before scoping anything that depends on one.
| Function | Held by | If that person stops |
|---|---|---|
| Maintenance management, absorbed after the 7-year coordinator was fired | VP Ops alone | Dispatch, assignment and vendor judgement have no second holder |
| Weekly hygiene sweep across 168 lead sources | VP Ops alone | Listings rot silently — our first tell that the account has gone dark |
| Marketing and the property sites, the in-flight phone/IVR rebuild, supervision of the weekly pest plan (the leasing manager writes it), the vendor rate card, some showings | VP Ops alone | Each either transfers to a named person or silently stops; zero recipients are on record |
| Renewals — nominally three people, actually one | One VA | The #1 stated ROI workload has a bus factor of one |
| Move-out charge-backs | The same VA | Already proven: a five-year void exposed by one absence |
| Advertising matrix, listings, guest cards, showing bookings | One VA | Every non-syndicated lead is hand-keyed by her — and this is exactly the job we would automate |
| After-hours batch of 5–6 accumulated contracts | One unnamed employee, by preference | Contract execution has an undocumented single owner on an undocumented schedule |
| Expense and accounting review | Matt | The approval step in the money path. What exactly it covers — and whether every maintenance dollar's allocation passes through it — was never asked |
| Orca billback rollout, live the day of the session | An outside developer, a friend of the client, built the tool; "Steven" is working the billback model with them | The biggest dollar leak sits on a tool whose contract owner, API and export are all unasked |
| The dashboard uploads | Interns — gone | Already stopped: last upload Aug 20 |
The graveyard, sorted by cause
The client side's summary of its own history is a three-month adoption half-life: "Soon as I create a system, it gets adapted for about three months. And then they just stop using it and go back to whatever way that they want while I'm not checking them" [T] — "adapted" is the ASR's rendering of "adopted." That is one narrative laid over three distinct failure modes, and only one of them is a design problem.
| What died | Cause | Failure mode |
|---|---|---|
| Intern-built AI dashboards (pest maps, unit adjacency) | The humans who pulled and uploaded the custom report left; nobody replaced them | Unowned dependency |
| Vacancy tracker; the AppFolio screening retry | Tracker ~3 months stale, noticed only by accident; the retry produced no comparison data and quietly lapsed | Unowned dependency |
| AppFolio's workflow builder ("far over engineered"); "Swordfish," an internal tool a developer friend built | Nobody ever used them | Resistance / never adopted |
| Zumper — ~100 guest cards a week portfolio-wide | Agents stopped calling the leads after a month, declaring them bad. No consequence followed | Resistance plus no consequence |
| Communication templates | Staff were "fundamentally rejecting templates" — until a new VA was hired, after which they were used | Personnel change, not tool change |
"Complete whole jobs end-to-end" is a real fix for the first two rows only. Rows three and four are a pay-and-consequence problem that nobody in the room named as such: the leasing agents are salaried with no incentive comp, the client side's own fix for the banned Facebook channel is to pay an individual a commission so they are self-incentivised, and her stated fantasy is hourly split shifts with incentives she does not have [T]. Row five says the cheapest adoption lever on record was hiring a different person.
Rules that follow
- Rollout enters through the VAs. They accept process and scoring, and they are the only group the buyer can actually direct.
- The leasing-team demo is a one-shot gate. It does not happen without GP sponsorship and an agreed communication plan, and it does not happen as a side effect of a site visit. The day's own action-item note says the "team demo/introduction to the leasing staff must be handled carefully — they are the de-facto decision makers."
- Staff objections are not requirements. The client side reads them as professionally-worded defences of discretion over specific tenants [E]. Give discretion a sanctioned override with a reason code rather than a path around the system (
schema-doors) — discretion with no legal exit becomes work outside the record, which is exactly what the personal cells already are. - Measure past month three. Anything measured before day 90 is measuring the honeymoon that every system in the graveyard above already lived through.
- Rule on whether a per-person number may be attributed at all, before any analysis is shown to anyone at Situs. Our extract already scores named individuals: of 883 guest cards YTD, 154 (17%) have no human reply logged in AppFolio — a count of the one channel we can read, while prospects are also answered by a VA inside the Zillow portal [T], in the AffordableHousing.com in-platform chat box unverified [T], and on Facebook Marketplace, where a single listing draws ~100 responses in the first two hours [T] (
cannot-promise) — and first human reply is median 5.1h, p90 71h on that same AppFolio-only denominator; of 87 cancelled showings, 46 were cancelled by staff [X]. Guest cards carry an assignee, so the figure reads as a person's work when it is a fact about logging: nobody has measured what share of prospect replies reach AppFolio, no such coverage measurement exists anywhere in the record, and until one does the number cannot honestly be attached to a named individual. That is a validity question, and it comes before the disclosure question. At an account where recording on-site staff is off the table because "the whole system would collapse," we are holding the same performance data by another door. Decide in that order: whether attribution is valid at all, then who sees it, attributed or aggregate, and who rules on that.
The layer you only need when deciding: what would make this section wrong
Single-witness bias is the biggest exposure. Every claim about who resists and why comes from one interview with one interested party. The leasing team's own account of why the dashboards, the workflow builder, Swordfish and the templates died does not exist anywhere in the record — their version might be that the tools were bad, unsupported, or imposed without training. Two conversations settle most of this section: the GPs on what they will fund and mandate, and one working session with the leasing manager.
Situs may run on EOS. It surfaces twice in the raw findings — once in a garbled exchange where the framework is named in passing, once as an aside about a billback model rebuilt "inside an EOS operating framework" — and is dropped by every synthesis. If the Accountability Chart, the quarterly Rocks and the L10 scorecard exist, then "the institutional brain is one person and nothing is written down" is partly wrong — and the weekly L10 is the obvious forum for our alerts and approvals to land in, which also answers where a deliberately dashboard-less product surfaces. None of the three has been requested, and nobody has confirmed the framework is live today.
Names and titles are unreliable. Speaker labels were AI-reconstructed and person names are garbled throughout: the leasing manager appears as both "Davey" and "Debbie"; the second GP appears as "Noel," as "gnome" and as "nam"; one VA appears as both "Miriam" and "Eury." "Noam Ashter," and the president/CFO titles, are our own reconstruction — they appear nowhere in the transcript, the findings or the day's threads. Do not put any of these names or titles in a client-facing document until someone confirms them in writing.
The champion's incentives cut both ways. She expects this engagement to force management changes, has paused her own renewal redesign so the recommendation appears to come from us, and — per one raw finding — intends to start her own AI-first owner-operator business, treating this as conceptual homework. That does not make her account false. It does make it advocacy, and it is the only account we have.
OWNER: Fede · EXPIRES: the day the end date is ruled in writing, or 2026-09-15, whichever comes first · SIGNAL: a week passes with no reply from the champion, or any duty in the bus-factor table is discovered to have stopped. First tell: the weekly 168-source sweep.
What we cannot promise — and the sentences banned at this account
About half of the current-tenant relationship at Situs happens somewhere no integration reaches today. That figure is the client's own estimate, not a measurement — and it is still the first bound on the contract, because every coverage, SLA and sentiment number PropFlow produces at this account is computed on the visible half, and any artifact that quotes one without saying so is wrong on its face.
The invisible half — this is its home
Roughly 50% of communication with current tenants runs on two employees' personal cell phones [E — "I would say 50 of the communications that are done with our current tenants are done through two people's personal cell phones"; her estimate, never measured], against a $50/month phone allowance [T]. The client-side reading is that the company therefore has no ability to look at them — "I pay them a 50 allotment towards their cell phone bills… but I don't have, like, the ability to go and look at them" [T]. one person's reading — unverified
That reading is one person's, not a lawyer's, and we have promoted it too far. No BYOD policy was ever asserted at Situs; nobody asked whether one could be asserted going forward for company business, whether a company-issued line costs less than the $50 stipend, or what Colorado requires. Until counsel rules, treat the invisible half as an open counsel question with an architectural consequence, not as a permanent boundary. If a policy can be asserted, a large share of the invisible half is recoverable and the shape of the whole engagement changes.
Two causes we can name, both fixable, both data-acquisition projects rather than efficiency projects: the sequential hunt group — calls roll person to person and callers gave up and dialled cells directly [T], at 3–5 rings each and roughly 20 seconds before a human is reached [F — those two figures come from the session summary, not from a verbatim line]; and in-person lease signings, which is how a tenant gets a staffer's mobile number in the first place and why they text that number forever after [T].
Channel by channel: read, write, or neither
| Channel | What we can actually do | Why it is bounded |
|---|---|---|
| AppFolio-logged texts, emails, calls, notes | Read and write back | Our extract holds 32,309 texts, 93,656 emails with full bodies, 1,355 internal notes and 174,619 timestamped events across 932 tenants, 209 MB, one file per tenant [X] |
| leasing@ and ap@ inboxes; the main line if it is forwarded to us | Read and write back — the forward is not in place today | Written notice-to-vacate is already forced to leasing@ by policy [T]; ap@ is the human-monitored vendor-bill inbox [T] |
| Zillow in-app messaging | Reply in place only — today that is a VA logged into the portal, not an integration [T] | Prospects stay in the channel where they started and are "immediately hesitant of fraud at the moment it switches channels" [T]. Moving a lead to SMS reads as a scam — and portal access is fragile: a VA was locked out of Zillow during the session [T]. |
| AppFolio unified comms view | Read, 30-day window | Every email, call and SMS in one place — but "these are all, like, the last 30 days" [T]. Not a history. |
| Google Calendar | One-way, AppFolio → calendar | Showings appear on staff calendars via API; "if you adjust it, it doesn't do anything to adjust that folio side" — calendar edits are lost with no signal [T] |
| The two personal cells | Nothing. No read, no bulk upload | See above — a counsel question, currently unresolved |
| AffordableHousing.com | Nothing. 15 applications stranded in-platform, on a Section 8 voucher channel [T] | In-portal chat box the client says cannot be pulled out. The tape here is ASR-garbled — "there's no way to plug the hint offline" [T] — so read it as probable, not settled, and confirm before it is used as a constraint. unverified |
| Google Chat | Nothing. Showings are negotiated here before anything reaches AppFolio [T] | Internal chat, no export path in evidence |
| Verbal deals and the whiteboard | Nothing. | A staffer verbally offered a tenant roughly $1,000 in concessions off a half-read text thread, with no documentation or notes; it was renegotiated down to about $500 [T] |
| Facebook Marketplace | Prohibited under any Situs identity | Banned four ways: listed under a prior owner's identity, VA logins from Philippine IPs flagged as a business, a VPN plus simultaneous logins flagged again, and canned replies flagged — while a single listing draws ~100 responses in the first two hours, so canned replies are unavoidable [T] |
Facebook is the account's self-reported best-returning source — "my best returns are Facebook", read off the client's own lease-attribution model and never checked against our extract [E]. Her fix is explicitly not software: pay a commission so an individual poster is self-incentivised to post on their own account [T]. We do not automate it, we do not log in, and we do not carry it in a pitch.
Recording: a matrix, never a switch
Nothing at Situs is recorded today — the matrix above is the agreed target, not the current state. The VA queue is the one leg the client volunteered: she was open to recording plus a quality score and expects the VAs to score well, because they are ex-call-centre and "used to working at a call center that just scores them anyway" [T]. On-site staff are off by decision, on her own prediction — "the moment that they find out that they're being recorded, I think the whole system would collapse" [T]. Note the hedge and the reason attached to it on tape ("I don't know if you want to do that right now because I'm leaving"): this was recorded as a firm phase-one constraint in the session summary [F], and it is worth re-confirming rather than inheriting. A new phone system with a recording toggle already exists at Situs and the staff do not know it can be turned on [T]. PropFlow's own deployed architecture records the full call including the human leg after transfer, plus voicemail [F] — which is exactly why the matrix, not a global default, has to be the configuration surface.
Banned copy at this account
| Do not say | Why it is false or hostile here | Say instead |
|---|---|---|
| "unified conversation history" | Arithmetically false on the client's own estimate — about half of tenant communication is off-system | "complete history of what AppFolio logged, labelled with its coverage" |
| "we record everything" | False, and the sentence that detonates on-site adoption | "you choose which queue and which leg is recorded" |
| "response-time SLA" | Computable only on the green segment. Our own baseline — 883 guest cards, median 5.1h to first human reply, 154 (17%) never answered [X] — is a guest-card number, not a portfolio number | every figure carries its coverage label, in the same sentence |
| "the AI answers your phone" | They already have an army: three offshore VAs on business hours [T], and AppFolio's paid maintenance call centre, reportedly enabled on all but two properties [?] (scope unverified — see work orders) — but it takes maintenance calls only, and its coverage hours are nowhere in the record. What they genuinely do not have is after-hours leasing: press one for leasing at night or on a weekend and it goes to voicemail, picked up by a VA on Monday morning [T] | "it answers the hours nobody is there, and it writes back what the humans don't" |
| "headcount replacement" / "kill the VAs and the call centre saves $5–7k" | A PropFlow-side ROI frame, never a client figure and never validated unverified. The VAs are the rollout vehicle — the only group that accepts new process — and her stated theory of value is the opposite: "the moment you take that burden off of the leasing staff and they have additional bandwidth, they'll be better about the rest of everything" [T] | "capture, accountability, de-escalation" — and let the labour maths stay unsaid until there is a cost baseline |
| "the operation crumbles when you're away" | Pitched and rejected on tape: offered as "if you go on vacation two weeks, then it crumbles over", answered "Not really. Not over two weeks… I'm pretty good at it" [T] | depersonalised escalation — the angle that was accepted |
Tenant-side trust — unexamined, and listed as such
An unfamiliar AI voice or an unknown number, at a population described as largely without social security numbers and afraid of immigration enforcement, may suppress reporting further rather than increase it. The line on tape is "I'd rather have the cockroaches than the possibility of you being an ice agent" [T], and tenants already withhold maintenance reports because "they're worried that if they flag themselves… you may not renew them" [T]. Every word of this is one person's account of her own tenants [E]. No tenant was interviewed. Nobody asked whether AI disclosure is required, advisable, or itself a trust event. This is the highest-consequence thing in the section that nobody has looked at.
The compliance layer that is entirely absent — open before any outbound is switched on
Across all 674 findings there are zero hits for A2P 10DLC, TCPA, STOP/HELP handling, carrier filtering, spam labelling or STIR/SHAKEN. For a 550-unit outbound programme that is go-live blocking, not polish. Specifically unresolved:
- Consent of record. 32,309 texts prove a practice exists for the 932 tenants; no documented policy, opt-out store, quiet hours or contact-frequency cap exists. Opt-out state also has to survive one human appearing as both prospect and tenant.
- Cross-border recording consent. The recorded leg may be a VA in the Philippines or Colombia calling a Colorado tenant. The record treats recording purely as internal politics; it was never asked as a consent question.
- Employment-law read. BYOD, the $50 stipend, and separately the GPS tracking of field technicians through Orca are all handled in the evidence as adoption problems, never as monitoring obligations with notice and consent attached.
- Data protection on the extract. 209 MB of tenant PII on this population, with no stated storage location, no answer on encryption at rest, no retention rule, no subprocessor or DPA disclosure covering the model vendors it would be fed to, and no deletion obligation if the deal dies.
- Number strategy. A brand-new number dialling 550 households is a spam-labelling risk, and per-brand identity (some properties carry their own) determines what a tenant sees on callback.
What would settle the top item: one employment-counsel opinion on whether Situs can assert a company-line-for-company-business policy going forward. That single answer either keeps the invisible half permanently invisible or turns it into a migration project.
OWNER: Fede · EXPIRES: 2026-10-01, or a counsel ruling on BYOD, whichever comes first · SIGNAL: any PropFlow artifact quotes an SLA or sentiment number without a coverage label.
AppFolio: the write target we cannot read, and the browser that leaks
AppFolio is the client's system of record, and writing back into it is the stated price of admission — the PropFlow side named it the first gap it must build no matter what [F]. It is also a system we have no sanctioned way into. Situs asked AppFolio for API access and was refused; on tape the client side says they were told a developer could get it, they could not [T]. So there is no client-grantable key and no plan-tier question to answer (that question is retired in retractions). What is left is two unsanctioned pipes — and one of them currently reaches into another client's books.
flowchart TD
PF["PropFlow"]
L["One shared browser login"]
A[("Situs books")]
J[("Camellia — another customer")]
PF --> L
L ==>|"read + write"| A
L ==>|"same login, same code"| J
The three pipes, and the freshness nobody has written down
| Pipe | Direction | Freshness on the record | Scope enforcement | What kills it |
|---|---|---|---|---|
| A · scheduled custom report → agent-controlled inbox PropFlow's existing mechanism — nothing in the record says it is stood up for Situs yet |
Read only — an emailed report has no write channel | Daily — "We set up daily report to send out to an email that's controlled by an AI agent that grabs it and writes it" [T] | Per-report, by whatever the saved report filters on. Never specified. | A human edits or deletes the saved report; a silent empty or truncated send; nobody notices the day's email never arrived. |
| B · browser agent (L4) on one shared login | Read and write | On demand — as fast as a session can be driven | None enforced. A runtime database menu (JP&Co ⇄ Situs) is the only thing standing between two clients' books [F] | One credential pool: a lockout, a rotation or a concurrent-session limit halts every client at once. A UI change breaks the agent. |
| C · API | — | — | — | Denied to the customer, and not a plan-tier question [T]. Whether a developer or partner agreement could open it has never been examined [?]. |
Three cadences are on the record and they cannot all be true: the PropFlow side told the client "every, every five, ten minutes, we're, like, pulling" [F]; the same session establishes the mechanism is a daily emailed report [T]; the client side's stated ideal is "in an ideal world, I would, like, get to, like, refresh, like, every hour" [T]. Nothing about a daily-grain, human-editable saved report can back a phone agent answering "is that unit available right now." Nobody says "applied units drop off automatically" again until a per-pipe freshness contract is written — which pipe, what grain, what the agent says when the data is older than the contract allows.
The leak: one code path, one login, two clients' books
In the PropFlow side's own words: it is "hard coded jp and co everywhere… an agent can never cross the boundary of a property — that's a leak we have currently that I discovered" [F]. Our so-called sandbox is not a sandbox: it is a real property inside Camellia's production AppFolio. The 2026-08-21 incident — a recon action that re-submitted a live Camellia resident's move-in — is the same leak seen from the other side, and the scope guard added afterwards is scoped to jpco only. Adding a second client to that code path multiplies the blast radius; it does not dilute it.
Two instances, one human, three namespaces
Situs and Western Slope run separate AppFolio databases; Situs owns 25% of Western Slope, a genuine third-party manager [T]. It is a second buyer, and the read on the record is that its priorities would run to maintenance and advertising rather than the quarterback layer — but that is one person's prediction about someone nobody in the room has asked [?]. No integration path to that instance is described anywhere in the corpus. The same client-side principal spans both instances, plus a house they manage privately (446 Galapago) that lives in the same phone-number namespace as Situs properties — which is exactly how the AppFolio-supplied call centre filed a live test work order against that house on caller ID alone, while the caller said the correct property aloud twice [T]. Credentials, sync jobs and property-id namespaces therefore have to be per instance. A database selector is not a boundary.
What we write today, and what write-back actually has to cover
Today PropFlow creates guest cards in AppFolio when a lead comes in. That is the whole write surface [F]. The client's price of admission is much wider, and the PropFlow side has already committed to it out loud.
| Write path | Status | Undoable? |
|---|---|---|
| Guest card creation | Live [F] | Presumed yes; never checked |
| Every Clara text / call / action → tenant communication log | Not built. Named the #1 must-build [F] | Unknown — can it be written at all through either pipe? Nobody answered this on tape open · flask |
| Tour scheduled / rescheduled events, guest-card status and back-and-forth | Not built [F] | Presumed yes; unverified |
| Work-order notes, labor summary, photo attachments | Not built; would need more L4 write endpoints [F] | Presumed yes; some step sequences are not [T] |
| Renewal calls and texts → tenant communication log | Not built [F] | Same unknown as row 2 |
| Out-of-system email: PDF of the exchange re-attached to the tenant's communication section plus an activity entry | Not built. This is the client's stated acceptance condition for anything happening outside AppFolio [T] | Presumed yes; unverified |
The write mechanics nobody has specified — read before quoting a build estimate
Every write above runs over browser automation of a UI that returns no machine-readable confirmation. None of the following has an answer anywhere in the corpus:
- Dedupe key. AppFolio exposes no external-id field we know of. What makes a second attempt at the same work order, guest card or activity entry a no-op?
- Retry after interruption. A session timeout or an auth prompt mid-write — how does the retry avoid creating a duplicate record?
- Write verification. How does the agent confirm the write landed, given the UI's silence?
- The failure is already on tape. The AppFolio-supplied call centre created a duplicate work order because it could not match "yellow jackets" to an existing "bees" ticket [T]. That is filed in the corpus as a vendor-quality anecdote; it is actually the spec for our own write path.
- Ingest contract for Pipe A. Which saved reports, what columns, is the schema stable, row caps and truncation, how many scheduled reports AppFolio permits, timezone and as-of semantics, what a truncated or empty send looks like versus a genuinely empty result, and how a missing morning email gets detected in time to matter.
- MFA / session lifecycle. Our own plan describes the shared credential as MFA-protected; the session record never mentions MFA at all [?]. Either way the coupling stands: one credential pool, every client behind it.
One-way doors
Some things written into AppFolio cannot be taken back, and PropFlow cannot promise to remediate them afterwards.
| Door | What it does | Rule |
|---|---|---|
| Step sequences that lock on completion | The client side gives this as the reason data goes stale: "once you do them, you can't go back and edit them" [T]. Which sequences, exactly, is never enumerated on the record | Enumerate them before any agent walks a sequence. Is the notice-to-vacate → move-out transition one of them? Unknown, and it gates the notice-intake agent open · flask |
| "Posted to internet" flag | Mints the property integration ID that feeds every ILS. Unposting a unit kills the feed — even where the placement is on a paid contract [T] | Never toggled by an agent without explicit human confirmation, per unit, in the moment. |
| Syndication submission | Shows the syndicator network and says it submitted, but "rarely feeds an answer back that you can click on" [T] | Treat as fire-and-forget. Never report success from the absence of an error. |
| Showing reminders | Observed failing in the client's own record during the session [T] | Do not build on top of them until we have measured the failure rate ourselves. |
Standing rule for this seam: every write path we ship names, in code and in the ledger, whether it can be undone. Anything that cannot is confirmed by a human first.
Adversary, not vendor
We are building a dependency on a company whose interests run against ours in three separate directions, and nobody has examined any of them.
- They clone partners. AppFolio was historically hostile to integrations and built in-house imitations of partner products — the client side's example is an inspection tool copied from HappyCo that they say is unusable [T]. The record has it opening up somewhat in the last two years [T].
- They already sell the thing our price is anchored to. The maintenance call centre is sold and billed through AppFolio, and the only anchor anyone has put on PropFlow's own fee is that call centre's monthly cost — a figure from a hallway exchange, never checked against an invoice. It lives in decision.
- Automating a shared human login may breach their terms and expose Situs's own tenancy to restriction [?]. Nobody has read AppFolio's customer terms or its partner/API program terms; they appear nowhere in the evidence base. The client cannot lose their PMS because of us — their investor portal is the switching cost that keeps them there [T]. This is a survival question for the account, not a legal footnote: scales glyph in the register.
OWNER: Gera · EXPIRES: the day the isolation test passes, or 2026-09-30, whichever comes first · SIGNAL: any Situs-scoped browser action appearing in a log without a client_id and a property_id on it.
Field by field: who writes it, which way it lies, and what Clara may assert
Cleanliness at Situs is a property of a surface, never of the company. Work orders are among the cleanest things in their AppFolio — the client side says so plainly, because that team is checked and policed on a regular basis [T] — while leasing, vacancy, lease execution and notices are the swamp. That is the industry prior exactly inverted, and it is the single most useful fact on this page: it means "is Situs's data clean?" is an unanswerable question and the only answerable one is "is this field clean, and which way does it lie?"
flowchart TD
SRC["Photos, docs, scrapes"] -.->|inputs, not answers| H{"Human verifies"}
H --> INV[("Answerable inventory (verified)")]
INV ==>|the only read| C(["Clara"])
RR[("Rent roll")] --x|never an answer| C
Write religiously, read defensively. Every field we write into AppFolio we write completely and on time, because write-back is the client's stated price of admission. Every field we read carries a corruption hypothesis with a direction and a magnitude, and terminates in a permission: Clara may assert it yes, may assert something derived from it, or never. A read path merged without a direction is a bug, not a shortcut.
The ledger
| Field | Who writes it | Cadence | Which way it lies | Magnitude | Clara may assert |
|---|---|---|---|---|---|
| Vacancy / is this unit empty | Leasing + on-site, at paperwork time | Batched and late — the client side reports one employee batching 5–6 contracts at week's end; transfers happen with keys handed over and paperwork deferred [T] | Over-states what is available | "Almost never correct" [T]; move-ins unrecorded, leases uncountersigned and unchecked, sold properties still present [T]. Our extract shows 36 property records carrying 2026 work orders against a stated ~21 buildings [X vs T] — the extract is known to include sold assets, houses and commercial buildings [X], but the 36 have never been reconciled row by row to physical buildings | never |
| Ready-for-showings date | Leasing / VA, by hand | Ad hoc | Wrong in both directions | One unit read "ready on the 15th" and was 70 days out [T]; the team's own rule is deliberately conservative — roughly move-out + 10 business days, set to avoid blowback rather than to fill units [T] | never — derive it (prospect-path) |
| Guest cards | Syndicated listings appear to feed back on their own (one fragmentary mention, unverified [T]); every other source is hand-keyed by a VA [T] | Hours-late by construction — one inbound at 6:40am was answered at 10:30am after the morning email sweep [T] | Under-counts real demand | 883 guest cards year-to-date 2026 [X] is a floor, not a count. A channel producing ~100 cards/week portfolio-wide was abandoned after about a month [T]; 15 applications sit stranded inside AffordableHousing.com, unconnected to AppFolio [T] | derived |
| Applications | Portal + team | Not maintained | Stale, and structurally unusable | The list includes people the client side believes already moved in, and is not broken out by property [T]. Unmeasured — we have no extract number for application staleness | derived |
| Language | Nobody, systematically — one property's units were hand-tagged once, unit by unit, and fed into an intern-built system [T] | — | Absent | 735 of 932 tenants carry no language tag [X], against 11,382 bilingual texts and 3,905 Spanish-only ones [X] | never from AppFolio — we own this field (schema-doors) |
| Contact role (resident / vendor / unknown) | Ops, via workaround | — | Wrong type | An in-house employee tech is set up as a vendor record so an offshore VA can text rather than email him [T]. Caller classification into resident, vendor or unknown is a stated onboarding prerequisite [T], so this misfires on the first call | derived |
| Work orders | Techs, VAs, and the maintenance call centre | Continuous — ~10.6 created per day [X] — and actively policed [T] | Read-safe — the one surface here that is | 2,588 created Jan 1 – Sep 1 [X]. Caveats: creator reads "Customer Service" on 155 of the 1,124 detail rows we captured (43% of the index, still pulling) — the call centre's fingerprint [X]; 46 recurring orders landed on the first of the month and staff have learned to ignore recurrings [T]; no cost data, because parts bought at Home Depot never reach the PO fields [T]; the "bill back to tenant" flag flows nowhere [T] | yes, with the creator caveat |
| Renewals & incentives | A manual sheet, plus an AppFolio incentive tracker | Irregular | Dark | The incentive tracker was discovered about six weeks before the session, and without it rent-roll numbers looked like errors — concessions are amortised across 12 months [T]. Non-renewal information is never entered [T] | never |
| Showings | AppFolio, syncing one-way into staff Google Calendars | Real-time out, nothing back | Lossy — calendar edits are silently discarded | 378 scheduled → 258 occurred → 170 prospect-confirmed [X]; outcomes frequently have no notes anywhere on the profile [T]. Leasing agents have no availability calendar at all [T] | derived |
| Notes | Everyone | — | Scattered by entry path | Notes surface in different places depending on how they were entered [T]; the guest-card redesign removed the activity log, so creator and sequence are no longer visible [T] | derived |
Outside AppFolio: where the truth actually is, and how fresh
The load-bearing facts are off-system, and every off-system source has a failure mode that is silence rather than error.
| Source | Truth it holds | Known freshness |
|---|---|---|
| The whiteboard | Unit availability — physical, colour-coded, in the leasing room; a pending application is marked by crossing the unit out; transfers and notices are colour-coded [T] | Unknown. Nobody photographed it. We do not know who writes it, how often, or what the legend means. This is the highest-value unknown in the section |
| Excel rate card | Vendor × service pricing for turns only, not recurring maintenance | "I haven't updated this in a while" [T] |
| Excel billback model | Cost allocation, uploaded into AppFolio | Current at upload; the client side says transparency is lost in the upload step [T] |
| Orca | Per-job time, cost, entity, responsibility and tech GPS | Live as of the day of the session; completions do not flow back out to the other systems [T] |
| Advertising control matrix | 168 lead sources outside syndication [T] | Swept by hand roughly weekly [T] |
| Google Sheets / dashboards | Vacancy, ad ROI, non-renewal spikes, budget thresholds | Dead. The intern-built dashboards last uploaded Aug 20 and stopped when the interns left [T]; a vacancy tracker ran ~3 months un-updated and was only caught because unit counts looked wrong [T] |
| Personal phones | Roughly half of all tenant communication, on two employees' phones the company has no right to access (see cannot-promise) [T] | Never captured |
So freshness is a schema field, not a footnote. Every source we mirror carries a last-updated stamp, every surface that renders it carries a stale banner, and a feed that stops gets its own DARK state — because a dead feed at Situs looks exactly like a quiet one. This is the client side's own most concrete ask: a layer that says "hey, FYI, this hasn't been updated since this time. Don't use this… so I can find the black hole part" [T].
The answerable inventory is an object, not a policy
"Only answer on verified units" is not a rule you write in a prompt and hope holds. It is a table with a state machine, sitting between the PMS mirror and every prospect-facing agent. The predicate is the client side's own tightening — "it's not just available. It's like you turn ready and show it right now" [T] — so turn_ready ∧ showable, with sold and disposed property explicitly excluded, scoped by cluster and asset type, and carrying {verified_by, verified_at, expires_at, excluded_reason}.
The three things people keep proposing as the availability answer are inputs to verification, never answers. The whiteboard is the real source of truth and is un-photographed. The website scrape is a PropFlow MVP proposed partly to force the client to keep the website current, while the same PropFlow-side account concedes the website is already out of date [F]. The maintained Google Doc was the client team's proposal and was rejected on the PropFlow side [T]. The forbidden edge is the red one: the voice agent never queries the synced rent roll, at any point, for any reason.
The four questions that make this object buildable — none of them answered yet
These come from our own engineering critique of the evidence base, not from the client. A verified allowlist with no staleness policy and no conflict rule is the same stale-data bug with an extra table.
- Who is the single writer, by what mechanism, on what cadence? A form, a sheet, a photo of the whiteboard? Unknown. Settled by one question to the leasing room.
- What TTL, and what does Clara say when it lapses mid-call? No TTL has been proposed by anyone. Until one exists,
expires_atis a column with no policy behind it. - What happens when AppFolio later contradicts a human-verified row? Does the human win permanently, or until the next sync? Undecided.
- Concurrency. Two prospects call at 9pm about the one turn-ready unit; a third is mid-application on it. Nothing in the corpus addresses holds, reservations or double-booking. This is not only a data-quality problem, and it gets strictly worse across ~21 buildings with several agent sessions at once.
The fair-housing check on the object
An allowlist is a list of buildings Clara is permitted to mention — which makes it, mechanically, a list of buildings she steers people toward. If the verified set systematically under-covers voucher-heavy properties, the agent is steering, whatever anyone intended. Voucher demand is real and already partly invisible here: 15 applications sit stranded in AffordableHousing.com, unconnected to AppFolio, and we have not checked which buildings they are for [T]. The client side also already tracks a live compliance line: advertised rent on affordable-housing channels must match market-rate advertised rent or it is source-of-income discrimination [T].
The audit is one chart, run every time the allowlist is rebuilt: voucher share per property, overlaid with allowlist coverage. A voucher-heavy building with no allowlist entry is a building Clara cannot mention. Gap We do not have voucher share per property anywhere in the corpus or the extract — the chart above is shape only, and the data has to be pulled before this audit can run even once.
And the steering question the client side asked directly, which nobody in the room answered: within a cluster, whose availability wins? Cross-selling within a cluster is already how they work, and one building is refinancing — pre-leasing it is worth basis points on the loan [T]. That is a legitimate business priority and an ordering rule inside a prospect-facing agent at the same time. It needs an answer that is written down before it is coded.
OWNER: Gera (the ledger), with Fede on the whiteboard facts · EXPIRES: 2026-09-30 — and the whiteboard rows expire the day a photograph and a legend arrive · SIGNAL: any Clara utterance about availability whose source is not a verified(ts) row; any read path merged without a direction.
Four rulings that cannot be unwound: identity, language, money, entities
A one-way door is a decision whose reversal costs a migration, a contract renegotiation, a voided legal case, or the account. Urgency is a different axis and lives in the register — a door can be irreversible and not due for a month. Four decisions qualify. Everything else is sequencing, and sequencing can be got wrong twice.
flowchart TD
S{"Tenant's own signal?"}
W["write preferred_language"]
EN["Leave empty → English"]
INF["surname · property · demographics"]
S -- yes --> W
S -- no --> EN
INF --x|"never — forbidden"| W
classDef forbidden stroke-width:2px,stroke-dasharray:4 3;
class INF forbidden;
| Door | What reversing it costs | The ruling | ADR |
|---|---|---|---|
| Identity | A migration over a history where transfers were never recorded | Phone-keyed, many-to-many, portfolio-level. Store {asserted_unit, inferred_unit, confidence} — never choose one. | none minted |
| Language | A collections or eviction case voided on a language claim — on the client side's reading of Colorado law | PropFlow owns the field. Explicit signal only. Default English. Per-message audit row. | none minted |
| Money | Staff sabotage, then the account | Every money decision ships with a sanctioned override object, drawn as a stage inside the pipeline. | none minted |
| Entities | A spine migration inside a live paying property | Axes, not a tree. Management is an edge with a percentage; PMS instance is its own namespace. | none minted |
Identity: the client bought impersonation risk to get routing accuracy
People at Situs are phone-keyed and many-to-many. Four or five share an apartment; the caller is often a relative of the leaseholder; tenants transfer between buildings; numbers change and some callers are on landlines [T]. The same human shows up in AppFolio as a current tenant and, twice, as a prospect under two names — denied applicants re-apply under a middle name, caught by searching the cell number, not the name [T].
So the client side ruled trust the caller over the phone match, explicitly and after debate — "that's something we debated a lot… it just breaks in real life" [T]. That inverts PropFlow's safety default — it buys routing accuracy with impersonation risk — and it is the client's risk to accept, so we take the ruling and write it down. The observed failure of the opposite rule is already on record: on a live test call the incumbent answering service — AppFolio's paid maintenance call centre, which takes intake all day — on all but two properties [?], a scope this record does not evidence (see work orders) — not an after-hours line — heard "1965 South High" twice and filed the work order against 446 Galapago, a house the caller manages privately, because that was the property matching her caller ID [T].
So we never collapse the two readings: store the asserted unit, the inferred unit and a confidence, and let policy decide what each level permits. Identity is portfolio-level — scope it to an organization and one human becomes two people across the Situs and Western Slope instances, and a disposition orphans a sold building's history.
The part that is not ruled: what confidence authorises
Trust-the-caller was settled as a matching heuristic, never as an authorisation model, and no artefact of that kind exists anywhere in this evidence base. Creating a work order on an asserted unit is one thing; reading a ledger balance or dispatching a technician into someone's home on the same assertion is another — and nothing in the ruling as it stands distinguishes them, so an unauthenticated caller who names a unit can do all three. That last claim is inherited, not introduced by us, and it has a source: the client side says anyone can call the line today and open a work order against any property with no verification — "so anyone can call any work order as well" [T, graded probable].
What confidence is, so the test can go red. Asserted in four places on this page and defined in none, it is a closed enum over the three signals this corpus actually contains — asserted_only · asserted + caller_id_match · asserted + pms_record_match — and nothing more. these three labels are ours, not the client's: nobody at Situs named a scale, so this is a proposed enum in the same sense as the emergency taxonomy in the gate, and it is offered so a gate row can be written against it. What each level permits is unruled, and this section will not invent it. A filled-in permit/refuse grid under a heading that says cannot be unwound reads as ruled however it is hedged; and "asserted + phone match" as an authorisation tier would quietly reinstate, under a new name, the exact rule the client side rejected on tape.
The refusal this door is missing. Every other door carries a test in gate-ours; identity carries only a storage row — asserted and inferred stored separately, each with confidence — which tests the schema, not the authorisation. The row it needs, beside the 446 Galapago and yellow-jackets regression cases: an action carrying money, private data or physical access, served on an asserted_only identity — passes when it refuses and the refusal alerts; work-order creation is explicitly exempt, matching today's intake. Tag reusable. That row is not in gate-ours today; writing it there is the whole of this finding.
Merge and unmerge cannot be drafted from evidence either. Who may merge a prospect into a tenant, and how a wrong merge is reversed, has no support anywhere in this corpus — merge semantics appear in it nowhere. The only merge-shaped fact on record is the one above: denied applicants re-applying under a middle name, caught by the cell number rather than the name. So this is an ADR item, not a table to fill in now.
Where it routes. One register row is owed and is not there — Queue A, catcher Eileen, due 2026-09-12 with the rest of that queue: what may a caller do unverified today, beyond opening a work order? It hangs off A5, the MCC intake script, which is already the behaviour spec for the maintenance line. The action × identity-confidence matrix and the merge/unmerge rules belong in the identity ADR and nowhere earlier. No mint date for that ADR has been set [?]: the expiry at the foot of this section is event-bound — "on the ADR" — so it cannot go past due, and this evidence base carries no date to replace it with.
Language: a legal fact PropFlow owns, because AppFolio has no field for it
Colorado requires communicating with a tenant in their desired language, and failing to can blow up a collections or eviction case [T] — the client side's reading of the statute, to confirm with counsel before we repeat it, though the operational consequence holds either way. AppFolio has no preferred-language field [T]. In our extract, 735 of 932 tenants carry no language tag, 11,382 texts went out in both languages and 3,905 in Spanish only [X]. Bilingual by habit, not by system. The previous atlas's "~70% of tenants are Spanish-speaking" is retracted: the share is unknown, and a percentage invites the exact inference this door forbids.
The forbidden inputs are forbidden as code, not as a norm. The client side supplied the counter-example: a Spanish surname does not mean a Spanish speaker, and tenants who got bulk Spanish sends wrote back to say stop, finding it offensive rather than helpful [T].
Two proposals competed in the room. The PropFlow side's baseline was tagging language into AppFolio custom fields so it could be pulled in a custom report; the client side asked for the opposite — a system that "doesn't really need to tag everything and custom fill it perfectly… it just knows the domain so well that it can infer things" [T]. Neither wins. The resolution is passive capture: the tenant speaks or types Spanish, or sets it themselves, and nothing else ever writes the field. Manual tagging is unenforceable here — every system introduced at this client is adopted for about three months, then abandoned once nobody checks [T] — and inference is the thing that voids the case.
The corollary nobody expects: the field is Spanish SMS too. Several maintenance workers are 1099, text-only, and invoice by texting a photo; one appliance vendor speaks no English and works through an intermediary [T]. Language is not a tenant-outbound setting. It belongs on the person, whoever they are.
Money: the override is a stage in the pipeline, not an escape hatch bolted on later
Every automated decision that touches money — renewal price, concession, waiver, chargeback — ships with a sanctioned override object, drawn inside the pipeline. The reason is behavioural: staff sabotage what they cannot legitimately override. Three incidents from one session make the case.
| Incident | What it shows |
|---|---|
| A long-tenured tenant at $850 against a business plan that says $1,300; staff construct elaborate excuses against raising it [T] | Without a legitimate override, the resistance goes underground and looks like a data problem |
| A $75 mail-key charge waived on sympathy grounds against a real cost the client side puts near $250 [T] | Small discretionary waivers are constant and currently invisible |
| A verbal $1,000 concession offered off a half-read text thread, with no note, later renegotiated down to $500 [T] | Authority is exercised with no record, so nothing can be reconstructed six months later |
The wider hole: there is no delegation-of-authority matrix at Situs at all — who may waive what, up to what amount, without whose sign-off is nowhere written down, and the only governing artefact on record is one manually updated sheet [T]. Authoring the matrix with the client is a deliverable, not a precondition we wait on; until it exists, approver has no domain to draw from.
The override object, field by field
| Field | Rule |
|---|---|
reason_code | Mandatory, from a closed list. Free text is how the $1,000 concession happened. |
approver | One named human, never a team. Domain comes from the delegation matrix once it exists. |
expires | Every exception is dated. A permanent override is a policy change and belongs in config, not here. |
audit_row | What the system believed at decision time — the inputs, not just the output. Renewal prices are computed from a rent roll the client side calls "really messy" and out of date [T]; months later, reconstructing the inputs is the difference between a correction and a credibility event. |
One real pricing bug will be cited at this account forever. The political cost of being wrong sits far above the engineering cost of being right — which is why this door is ruled before the renewal build, not during it (renewals).
Entities are axes, not a tree
No parent-pointer hierarchy survives this portfolio. Management is an edge with an ownership percentage, not a containment relation: Western Slope in Grand Junction is a separate legal entity, 25% Situs-owned, a genuine third-party manager with its own operator, its own AppFolio instance and its own billing rules — a one-hour minimum at roughly $75/hour where Situs bills actual time [T]. That reopens the previous atlas's "one PMS connection" ruling: PMS instance is its own id namespace, not an attribute of an organization.
| Axis | What splits on it at Situs |
|---|---|
| Management edge (with %) | Western Slope 25%-owned; Fox Street third-party managed [T] |
| PMS instance | Two AppFolio instances, compared side by side by the same person [T] |
| Property membership | Time-bounded. Tenants transfer between buildings, and have returned after Situs sold the building they lived in [T] |
| Cluster | Lakewood / Arvada / Denver, viewed as a vacancy heat map; cross-sell runs by cluster [T] |
| Asset type | Multifamily, office, and single-family — 446 Galapago is a house managed on the side [T] |
| Brand | Carr Street: own site, own photos, own Google Business page, own SEM campaign [T] |
| Accounting regime | Unresolved. "Only Fox Street" and "probably a third of our property" were said in the same session [T] |
| Lifecycle | Sold buildings still surface; our extract holds 36 properties with 2026 work orders including sold assets, houses and commercial [X] |
| Capital-event priority | Barcelona is refinancing; pre-leasing those units moves the rate by "a few hundred bips" [E] |
| Pro-forma defaults | The rent promised to investors should cascade into the unit's preferential-rent field [E] |
Behind all of it sit roughly 500 investors writing mostly $25k–$100k checks [T], and AppFolio's investor portal is why none of this can be replaced — the client side names it AppFolio's decisive advantage for a smaller syndicator, because property-management data flows straight through to the investment side [T]. That is the switching cost, and it settles our position: PropFlow is never a PMS replacement.
Whether Western Slope is in scope is open and belongs in the register. It cuts both ways: its operator is the warmest referral out of the session, and on our own reasoning a true third-party manager could bill our fee back to owners at management-fee economics — a better shape than our stated ICP logic predicts, since that logic says third-party managers are precisely the ones who read AI as headcount loss [T].
The axes are a migration, and we have already ruled where it may not run. Not from the session — from an internal PropFlow thread: the whole spine migration does not run inside a live real property before the founders are aligned on strategy, the reason given being irreversible decisions. "I would not want to migrate, like, do the whole spine migration while we're in a real property" internal thread, not the session. The posture recorded alongside it is cheap, reversible modelling — read-only ingestion, shadow tables — rather than committing to a normalised hierarchy that will have to be migrated again internal thread, not the session.
That leaves a fork nobody has chosen. Either the axes land and are proven ahead of the Situs cutover, or Situs onboards on today's per-property shape and the axes arrive later as a migration inside a live paying account — the one place the constraint forbids. It is also a contradiction sitting live on this page: the gate files "Entity axes" under what blocks scale rather than the first call, which cannot both hold and "land and prove the hierarchy change ahead of the cutover". Until someone rules it, read the sequencing as unruled [?] rather than as the gate's filing.
The resolver is an ADR, owner Gera, and it owes a register row it does not have. No due date is set [?] — none is derivable from this evidence base, and minting one here is the habit the retractions exist to break. What that ADR must answer, and this page deliberately will not: which axes are additive and which destructive to the current spine, whether an expand/contract dual-write is available at all, and how Camellia and jpco data — a history in which transfers were never recorded and the same human exists twice under two names — is backfilled onto time-bounded membership and portfolio-level identity. Nothing in this corpus describes PropFlow's own spine mechanics, so every one of those answers would be invented here. They belong in the ADR, checked against the tree.
What our code does today
Five lines, carried from the previous atlas's hierarchy archaeology. None were re-verified against the current tree in this session — verify before citing them in an ADR.
| Today | Consequence |
|---|---|
An Organization row exists | The container is there; nothing reads it as a policy floor — OrganizationSettings has zero readers |
| Settings resolve per property only — six (plus one) source-code edits to onboard a property, no org floor | Property #22 costs the same as property #2. This never amortises |
| The hierarchy arrow is reversed in one shipped reader | One resolver reads property-over-org — the opposite of the ruled direction |
Organization is five entities under one name | Which five is not enumerated anywhere in this evidence base. Re-derive it before the ADR, do not guess |
| Precedence between org and property config is unruled | This is the door. A customer who authors config against the current shape turns the precedence rule into a migration |
OWNER Gera · EXPIRES on the ADR that rules each door — four ADR numbers to be minted, none exist today · SIGNAL a schema migration touching person, language, override or membership lands without an ADR reference.
How a call and a lead actually move — and the after-hours slice we would take
Two paths carry a stranger into Situs: the phone, and the guest card. Both are mapped here, both are measured where our extract reaches them, and both die in named places. Phase one is one branch of one path — deliberately small, and one unanswered question can dissolve it before we write any code.
flowchart TD IVR["Caller → IVR menu"] MAINT["Maintenance — unchanged"] BIZ["Business hours — no AI"] AH["After hours + weekends"] VM["Today: voicemail → Monday"] CL["Phase one: Clara logs it"] IVR --> MAINT IVR --> BIZ IVR --> AH AH --> VM AH ==> CL classDef grey fill:var(--panel),color:var(--muted),stroke:var(--border) classDef accent fill:var(--accent-soft),stroke:var(--accent) class IVR,MAINT,BIZ,VM grey class CL accent
The phone today: one line, four named functions, two branches that matter
Inbound splits into roughly four functions, not two. The tape names them as leasing, office buildings (commercial), property management, and miscellaneous [T] — it does not name maintenance, which is unmistakably a fifth thing the phone does. That is the whole problem with the sentence: it is garbled, the count and the list do not reconcile, and it is probable, not certain. Office buildings and PM-misc are unmeasured, unowned, and out of scope for everything below. The two branches that carry volume are drawn here.
Two notes the picture cannot carry. Leasing is option 1 on tape; the digit that reaches maintenance is not in the record — what we have is the maintenance line's own menu, which opens with a recording disclosure, a language pick, and "if you're calling regarding a new maintenance request, please press one" [T]. Do not draw a two-key tree from that. And the MCC's own footprint: it is reportedly enabled on all but two Situs properties [?] — a standup parenthetical, never checked against a bill (home) — and its fingerprint in the work-order data is the creator role Customer Service — 155 of the 1,124 detail records captured so far, which is 43% of a 2,588-work-order index still being pulled, so treat the ratio as directional [X].
Its scope is narrow in practice: the agents record the work order, they do not diagnose or resolve it [T]. Whether that narrowness is contractual is not in the record — nobody has read the contract or the script (below). That narrow scope is nonetheless the bar Clara has to clear before anyone talks about replacing it.
The MCC test call is the behaviour spec, not an anecdote
The three failures drawn above came from one live call placed during the session, on tape [T]. Treat them as the specification rather than as colour: two of the three are promoted to permanent regression cases in the gate — 446 Galapago (caller ID must never be the verdict on which property a request belongs to; the number matched a house the caller manages privately, not the property she named twice) and yellow jackets / bees (a semantic duplicate must be caught before a second work order is created). The duplicate matters most: the MCC script does ask whether an open work order exists, and the agent asked the question and still could not answer it. Fuzzy intent matching against open work orders is therefore a phase-one requirement wherever Clara takes maintenance intake. Fede's ask, still unfilled: the MCC intake script itself (person glyph) — we are proposing to displace a scripted process we have never read.
Phase one: after-hours and weekend leasing, and nothing else
The slice agreed in the room: an AI phone system for after-hours and weekend leasing calls, chosen because it displaces nobody, needs no staff behaviour change, and is measurable in one number — incremental guest cards [T]. Separately on tape, the client side rejected AI on the business-hours line. The verbatim rendering is "during the business hours, like, will not happen", spoken inside a passage about recording and vendor pushback — reading it as AI answering during business hours will not happen is the room's interpretation and the one we are building to, but it is an interpretation of an ambiguous sentence, not a clean quote, and the speaker label on that line is machine-reconstructed, so even the who is soft. attribution unverified
The acceptance bar is the client's own and unusually low: "take a shot at it, create a work order, and then we can have somebody follow up" [T] — stated explicitly to avoid a staffer spending twenty minutes on a call. Two fences we set, not the client: callers cannot negotiate anything with the agent (the concessions record shows a verbal ~$1,000 offer later renegotiated to ~$500 with no documentation [T]), and escalation boundaries are explicit and enumerated before the first call.
| Volume that lands when nobody is in | Figure | Mark |
|---|---|---|
| Work orders before 8am or after 6pm | 22% | [X] |
| Work orders on weekends | 10% — the two together ≈ 800 requests YTD | [X] |
| Guest cards created after hours | 13% of 883 | [X] |
| Guest cards created on weekends | 7% of 883 | [X] |
| Work orders per day, all channels | ~20, roughly half by phone (~10) | [T] client-provided, not from our extract |
| Share of inbound that is spam | ~50% | [?] an August-demo figure. No evidence at this account. Do not repeat it as a Situs number. |
The lead path, measured for the first time
Everything in this table is [X] — computed from our own AppFolio extract for 2026 to date, not from any client dashboard and not from anything measured while staff knew they were watched.
| Stage | Measured |
|---|---|
| Guest cards, 2026 YTD | 883 |
| Got an instant auto-reply | 313 |
| First human reply | median 5.1h · p25 6 min · p75 28h · p90 71h |
| Never got a human reply at all | 154 (17%) |
| Cards that reached a showing | 331 (37%) — inquiry→booked median 0h, p75 2.5h, p90 44h |
| Showings scheduled → occurred | 378 → 258 (170 prospect-confirmed) |
| Showings cancelled | 87 — 46 by staff, 41 by prospects |
| Applications | 183 (21% of cards) |
| Move-ins | 137 (16% of cards) |
| Closed Inactive/Cold | 649 by Tenant Turner vs 34 by humans |
| Outbound on those cards | 5,391 texts (40% by bot) · 592 emails · 191 calls · 142 notes · 51% of prospects replied |
Two denominators, easy to conflate: 331 is cards that got a showing, 378 is showings booked. Booking is not the bottleneck — the median inquiry-to-booked is zero hours. The leakage is between booked and held, and staff cancel more often than prospects do.
Under those numbers sits hand work. Every non-syndicated lead is keyed into AppFolio by hand, mostly by one VA who also owns listing creation, listing inquiries and showing booking [T]. Slots are negotiated over Google Chat before anything is entered and clustered by an undocumented geographic heuristic; there is no queryable availability calendar for leasing agents anywhere — only maintenance has on-call calendars, and AppFolio's showing feed is one-way into Google Calendar [T]. Showings get traded mid-day without reassignment, so the covering agent arrives late — and AppFolio's automatic reminder text, which goes out about two hours ahead under the originally assigned agent's name probable, then names whoever is no longer coming.
Where a lead dies, by mechanism
| Mechanism | What the record shows | Mark |
|---|---|---|
| Never answered | 154 cards (17%); p90 first human reply 71h | [X] |
| Staff cancellation | 46 of 87 cancelled showings; plus untracked mid-day trades | [X] / [T] |
| Auto-closed Cold | 649 by Tenant Turner vs 34 by humans — never treat Inactive/Cold as a human judgment signal | [X] |
| Screening abandoned | AppFolio's national criminal search missed Colorado records and people with records were housed; a retry ~2 years later produced no comparison data and lapsed with nobody owning it | [T] |
| Lease handling | Leases exported, filled in PDF readers, re-uploaded — which is why AppFolio's structured lease data is useless to us | [T] |
| Approved, never countersigned | Happens, and nobody verifies | [T] |
| In-person signing | The moment a tenant acquires a staffer's personal cell number. Full fact and the banned-copy list live in cannot-promise | [T] |
| Portal lockout | 168 lead sources, each behind its own login, with MFA recovery unowned; one VA was locked out of Zillow live during the session. Taking over listing management inherits that tax | [T] |
The pre-leasing contradiction, unresolved. The client side wants to pre-lease far earlier than the on-site team will — Barcelona is refinancing and pre-leasing those units is said to move the rate by a few hundred basis points, and big operators list 60–90 days out on generic finish photos — while "ready for showings" dates are set so conservatively that one unit marked ready on the 15th was 70 days out, and the leasing staff refuse to pre-lease anything they cannot show [T]. Both positions sit on the same side of the table, and the blocker named is internal pushback, not tenants and not technology. Any Clara answer about future availability sits directly on top of this contradiction, and it is not ours to resolve.
Kept technical facts an engineer needs before scoping
- Caller-ID passthrough is the go/no-go (flask glyph — one live test). If the new phone system replaces the caller's number with the trunk number on the forwarded leg, every resident collapses into one phantom person and phone-keyed identity is dead. The fallback is caller assertion alone, and it is not a graceful one: the record treats it as forcing a redesign of the identity rung and slipping the work stacked on it. One live call, about fifteen minutes, on the day their DIDs are up. Test on the same call whether the bypass-extension leg is distinguishable from a resident's inbound (loop risk).
- Bind on the same leg for the portfolio number rather than using agent transfer.
- The phone rebuild has no named owner and no named vendor in this record, and the one person holding the phone system, the marketing stack and the process knowledge is leaving mid-flight (see clock). The vendor name that circulated earlier rests on a single transcription artefact and is dropped here.
- The MCC contract term and notice period are unknown. Its ~$800/month is the client side's stated price floor for us, so cancellation timing is a commercial input, not a detail. Ask.
- Recording scope as ruled: VA legs on, on-site staff legs off. Home is trust-ledger.
- Not covered anywhere yet: concurrency and reservation semantics on the answerable inventory (two callers at 9pm on the one turn-ready unit, a third mid-application on it), and what Clara does when AppFolio is unreachable at 2am. Both are ours to write and neither exists in the corpus.
OWNER: Fede (path facts) with Gera (slice spec) · EXPIRES: the day the VA rota is known, or 2026-09-15 · SIGNAL: a week of after-hours calls with zero guest cards written back, or a business-hours call answered by Clara.
How a work order actually moves — ten hops, four systems, three dead ends
Maintenance is the client side's best-run surface — and it still drops money at three specific joints, none of which is the part we would touch. This section is the home for work-order volume, lifecycle timing and the bill-back gap. The after-hours share of this traffic lives in prospect-path; the 2am emergency ladder lives in gate.
flowchart TD
T(("Tenant"))
IN["Phone intake — our one hop"]
subgraph U["unchanged by phase one"]
WO[("AppFolio work order")]
D["Dispatch — VP Ops"]
TECH["Tech — SMS"]
ORCA["Orca — time · cost · GPS"]
AP["Friday AP batch"]
end
T --> IN
IN --> WO
WO --> D
D --> TECH
TECH --> ORCA
ORCA --> AP
classDef accent fill:var(--accent-soft),stroke:var(--accent),stroke-width:2px
class IN accent
style U fill:var(--panel),stroke:var(--border),color:var(--muted)
attribution unverified Person names in this section come from an AI-reconstructed transcript and are unreliable. Read them as roles — dispatcher, tech, VA, AP reviewer — not as identifications.
What the extract measures, and the two numbers the room got wrong
| Measured in our AppFolio extract [X] | Value |
|---|---|
| Work orders created Jan 1 – Sep 1 2026 | 2,588 → ~10.6/day |
| Monthly ramp | Jan 279 · May 311 · Jul 399 · Aug 483 |
| Properties carrying 2026 work orders | 36 · top: Barcelona 380, Lamplighter 281, Carr Street 210, Aspen Leaf 205, Zephyr 198 |
| Status today | Work Done 1,523 · Completed 578 · New 186 · Assigned 185 · Canceled 102 |
| Create → assigned | median 6 min · p75 1.3 h · slowest 10% wait 20+ h |
| Create → work done | median 3.7 d · p75 11.6 d · slowest 10% over 23 d |
| Call-centre fingerprint (creator “Customer Service”) | 155 of the 1,124 detail records — 14% |
Correction one. The room's figure was “about 20 work orders per day, roughly half portal and half phone, so about 10 a day on the phone” [T]. The measured year-to-date total is 10.6/day [X] — the whole portfolio produces about what the room attributed to the phone alone. But the series is rising, so the correction has to be stated against the right denominator: August's 483 is 15.6/day [X], which puts the room's 20 closer to 1.3× high at the current run-rate than to 2× high. Any sizing that multiplies 20/day across the whole year is roughly 2× high; any sizing that assumes today's volume is 10.6/day is low. Size against the ramp, not the average — and note that this is the same intake volume the phone wedge is priced against.
Correction two, softer. If half of intake really arrived by phone through the maintenance call centre, we would expect roughly half of records to carry the “Customer Service” creator. They carry 14% [X]. The scope figure usually quoted next to that — that the call centre is enabled on all but two Situs properties — is [?], and this page has carried it as [T] in error: it is not on the tape and not in our extract. Its only source is a parenthetical in Fede's 1 Sep Slack standup, unverified against any AppFolio configuration screen or invoice — so it cannot be used to rule coverage out. Four readings are live and none is settled: the detail capture is 43% of the index and may not be representative; phone calls that reach the office rather than the call centre are keyed by staff and so carry a staff creator; the call centre's actual property coverage is unmeasured, so coverage remains a live explanation rather than an eliminated one; or the 50/50 split is simply wrong. Reconciling the first three is a query, not a meeting; the fourth needs one look at the MCC configuration.
Measurement caveats before anyone quotes these
The 2,588 index is complete for the window. Every timing above is computed on the 1,124 detail records captured so far (43%), and nothing on record establishes how that subset was selected or that it is representative of the index — so the lifecycle medians are provisional until the pull finishes. Status counts are a snapshot, not a flow: “Work Done 1,523 vs Completed 578” is a two-step close that nobody in the corpus explains, and we have not established what moves a record from the first to the second. Hourly and peak distribution has never been computed at all — we have averages only, which is exactly the wrong instrument for a Denver freeze night or the month-start recurring burst.
Three hops in that chain deserve a sentence the picture cannot carry. There are no appointment windows by choice: techs drive between scattered small buildings and cannot honour a window against traffic, parts runs and emergencies, so the tech texts “on my way” instead and the scheduler goes unused [T]. The field interface is SMS and nothing else — several techs are 1099, invoice by texting a photo of a paper invoice, and say plainly they do not know how to use a computer; one employee tech was set up as a vendor record in AppFolio purely so the VAs could text him rather than email him [T]. And vendor bills land in a human-watched ap@ inbox rather than AppFolio's Smart Bill, which the client side says codes them better than the human did [T].
The three dead ends
| Dead end | What stops | Size | What would settle it |
|---|---|---|---|
| Bill-back flag | Work orders are flagged “this should be billed back to the tenant” and no process consumes the flag. Techs log hours but never parts or POs, so a Home Depot run is invisible [T]. | The client side guesses ~50% should bill back and fewer than 100 a year do — while stating she cannot say what her work-order volume is [E]. The tape reads “probably 50 of them would be billed back”, which is ambiguous between half and fifty records; the percentage reading is the one taken here inferred. On that reading, against 2,588 YTD the gap is on the order of a thousand records a year inferred. Dollar value: unknown. One anecdote sets the scale of a single waiver: a $75 charge forgiven on a mail key whose real cost, two hours of tech time plus drill bits, was about $250 [T]. | Query the extract for the bill-back flag and cross it against the charge ledger. Zero risk, no client dependency, no meeting. |
| Orca completions | Orca went live the day of the session and holds per-job time, cost, entity, responsibility and technician GPS. Completions recorded there flow back to nothing [T]. | Unsized — it is one day old. | Ask the vendor whether an API, webhook or export exists at all, and who owns the contract. Nothing in the corpus establishes that it has an integration surface. |
| Move-out charges | For five years one person eyeballed inspection photos and improvised charges, holding $0 placeholders until the vendor bill arrived; discovered only when she went on maternity leave [T]. A 30-day deadline sits on top of it [T] — the tape names the deadline but not its source, and nothing on record establishes whether that clock is statutory or internal. | Unsized. No baseline exists for how many move-outs miss the window or under-charge. | The move-out ledger is in the extract; the charge-vs-invoice reconciliation is not. Its home is renewal-path. |
The clock nobody is holding, and the queue everyone ignores
Colorado gives a 24-hour cure on a broken stove. The work order pulled up live in session was dated the 14th and still open; the client side's own read was that a complaint to the governing body would carry a hefty penalty and that the only thing standing between the operation and that penalty was a tenant unlikely to litigate [T]. That is not a control. Separately, recurring and seasonal work — filter changes, pulling window ACs into storage — floods the dashboard on the first of the month, 46 of them on the day of the session, and both sides agreed the pattern has trained staff to ignore recurrings entirely [T]. A cure clock riding in a queue people have learned to skip is the failure mode, not either fact alone.
Vendors, materials and appliances — inputs to a model, not features to build
Turns run off a rate card across five or six competing vendors, used aggressively in negotiation: paint quoted at 650, 550, 550, 620 and 290 against a vendor asking a thousand [T]. Cheapest is explicitly not chosen — availability, quality and job severity override price, and a smoker unit needing two coats goes to a dearer vendor on purpose [T]. Materials are bought direct with the vendor installing labour-only, and one vendor is the only one with a facility large enough to receive cabinet boxes and guarantee the install [T]. A new turn GC is bidding 15–20% under on labour and threw in free Matterport scans of two properties to win the book [T]. Any model that ranks vendors by price will be wrong, and will be recognised as wrong on sight by the person who built the card.
Pest is the largest owner-scrutinised cost the session surfaced: four vendors used, all judged bad at admin, ~$20k of treatments at a single building [E], and an owner-partner who reviews financials line by line and comments on individual pest invoices [T]. The incumbent was chosen mainly because his crews speak Spanish — load-bearing with a tenant base that fears an immigration agent at the door more than it fears cockroaches [T]. Dishwasher drain lines were named as the spread vector, because the tenant population does not use dishwashers and stores things in them [T]. Two interns built a spatial adjacency assistant that, asked about an outbreak at one unit, recommended treating both neighbours and watching a third [T] — and it died when they left (see clock).
Appliances are the appliance-matrix contradiction in the register and its home is here: the owners want a proprietary appliance matrix, and a competitor treats theirs as secret sauce, while the operator says roughly 80% of the stock is refurbished with swapped guts so recorded vintage says nothing about remaining life [T]. There is no registry at all — four ACs at one property, type unknown [T]. Both can be true; the resolution is to accumulate the registry as a by-product of work orders and turns rather than to pre-populate one, and to record install date and cost rather than vintage.
Our one hop
Exactly one box in that chain is ours: phone intake — and owning it means displacing a paid incumbent, which the retraction list sequences last, prices separately and gates behind a proven live escalation ladder (gate). Four things have to be true in it, and all four are recorded as platform gaps rather than as things that work today — semantic duplicate detection over open work orders at the unit (the live test call could not match “yellow jackets” to an open “bees” record and created a duplicate), a recurrence-or-reopen link distinct from a new record with recurring separated from the reactive queue, statutory cure clocks keyed to jurisdiction × issue type, and source attribution that distinguishes a Clara-created record from a staff-created one so the after-hours slice can be measured at all. SMS to the field is a constraint, not a feature: it is the only interface the techs will use [T]. That it also has to work in Spanish follows from a bilingual operation rather than from anything on record about the techs themselves inferred. Everything downstream of assignment — dispatch, the VA, Orca, the Friday batch, the allocation review — stays exactly as it is.
The zero-risk move regardless of sequencing: size the bill-back opportunity from the 2,588 work orders and their flags [X]. It needs no client time, no write access and no commitment, and it converts an estimate the buyer herself could not ground into a number. It must be shown in aggregate only — the extract scores named individuals, and the disclosure policy in clock governs anything derived from it.
What we do not know
- The bill-back dollar value. Only counts are estimated, and the tape is genuinely ambiguous about whether “probably 50 of them would be billed back” means 50% or fifty records. Both readings are consistent with “fewer than 100 are.”
- Whether the extract even carries the bill-back flag. The first analysis is proposed, not run; nothing in the evidence confirms the field was captured.
- Orca's boundary. No API, webhook or export is established; who owns the contract is unknown. Sequencing bill-back behind an integration of unestablished feasibility is the live risk.
- Peaks. Averages only. No hourly distribution, no concurrency behaviour, no answer for a freeze night or a boiler failure hitting the same queue as the month-start recurring burst — and no statement of whether the cure clock keeps running while the agent is saturated.
- The cure-clock table. One clock is on record (Colorado, 24 hours, stove). The jurisdiction × issue-type table this hop depends on does not exist in any form here.
- How the 1,124 detail records were selected. Every lifecycle timing on this page rests on them, and the corpus records only that 43% had been pulled — not the ordering, the sampling rule, or whether the subset is representative.
- How many properties the call centre actually covers. The “all but two” figure is [?] — a Slack-standup parenthetical from Fede on 1 Sep, never checked against an AppFolio configuration screen or an invoice. Until it is, coverage stays one of the live explanations for the 14%, not a ruled-out one.
- The call centre's intake script, which is the behaviour spec Clara would be replacing, has been asked for and not produced.
OWNER: Fede · EXPIRES: 2026-10-01, or the day Orca's boundary is defined · SIGNAL: a Clara-created work order duplicates an open one at the same unit, or a work order carrying a cure clock passes it with no alert.
Renewals, notices and move-outs: the buyer's #1, the one bug that gets weaponised, and where a vacancy is born
The buyer side named renewals the single highest-ROI thing PropFlow could do, explicitly because it is the area they can actually control [T]. It is also a workflow where PropFlow already runs a live autonomous product. And it is the workflow with no process to automate, four dates that disagree, and no answer to who sets the price. Everything below is either a build spec or a reason to wait for the GPs.
Today: nagging, and a sheet nobody was told about
Asked what the renewal process is, the client side said that reviewing it is how they found out there isn't one [T]. What runs instead is manual chasing by call, text and email with no defined channel and no record of the attempt.
| Surface | State today | Why it blocks a renewal engine |
|---|---|---|
| Who works it | Nominally three people, actually one [T] attribution unverified | The PMS "assigned to" is wrong. Routing and escalation need observed-actor attribution, not declared ownership. |
| Who sets the price | Ad hoc, sometimes "in a vacuum", against a loosely held building-level owner preference. Asked directly who decides, the answer was that nobody knows [T] | There is no pricing policy to read. Capturing one per building is an onboarding deliverable, not a config default. |
| Concessions | Negotiated verbally in the room before the lease is written; amortised across 12 months; one manually updated sheet, no checks and balances [T] | Face rent in AppFolio is not effective rent. Any offer priced off PMS rent alone is wrong by the concession. |
| Incentive tracker | Discovered roughly six weeks before the session; until then rents the team produced could not be explained [T] | It is the amortisation record. Renewal analytics that skip it mis-state rent growth. |
| Non-renewals | Never entered into the system [T] | Forward availability cannot be derived from the PMS. Intent-to-leave has to be sourced from conversations. |
| Non-renewal spikes | Tracked by hand — Lamplighter cited with six possible non-renewals in September [T] | The needed view is expirations bucketed by property × month, with "possible non-renewal" as a state distinct from "expiring". |
Four dates compete for the last 120 days of a lease. Only one of them is written in the lease.
The date bug, and what it obliges us to do
The consequence is not cosmetic. Tenant-facing renewal communications are currently inconsistent with the lease those tenants signed, and this tenant base has already been observed running a Situs lease through ChatGPT, finding an inconsistency and bringing it back to management [T]. So: PropFlow renewal outreach must suppress or supersede AppFolio's automatic email, and reconfiguring those custom fields is a required onboarding step per property, not an optional one. Outreach timing keys off the lease's notice term. The lease-end date is a display value and never a deadline we quote.
Build order: staged, both sides dated, not reconciled
| Position | Dated | Says |
|---|---|---|
| Previous atlas [F] | Aug 30 | Renewals stay out of phase one; refusing that revenue for a safety reason is the differentiator. Grounds given: a fat-finger fear attributed to a GP at the August demo. |
| This record [T] | Sep 1 session | The buyer names renewals her #1 ROI, has stopped building her own renewal process because she expects PropFlow to deliver it, and wants the recommendation to carry PropFlow's name so the change is not hers politically. |
| PropFlow capability [T] | demonstrated in the room | 90-day autonomous outreach runs at Camellia today: building-level policy, generate and send, ledger holdbacks for eviction and chronic late, re-nag every two weeks. Roughly 12 offers went out during the meeting. |
| PropFlow caveat [T] | same session | The PropFlow side said in the room that this is much easier on one property than across this estate. Camellia → ~21 buildings [E] is not a copy-paste; per-building policy, per-property ledger sync and per-property holdbacks are the actual engineering scope. |
Status: open. The GPs rule (register). Note what is missing from the August position — "fat finger" appears nowhere in this session's transcript, the Slack threads or the 674 findings. It is carried second-hand from an August demo and should be re-verified with the person it is attributed to before it is used again to hold revenue out of phase one.
What she asked for: an offer object, not a rate
| Input | Where it lives today | Status |
|---|---|---|
| Pro-forma target rent | The investor pro forma — an artifact PropFlow does not model at all | Must be ingested; property-level default cascading to unit |
| Market comps | No source named in the record | External source, unbuilt |
| Unit condition | Inspection photos and turn records, unstructured | Unbuilt |
| Term × price matrix — a 12-option menu, short terms priced higher, Nov–Feb expirations penalised [T] | Nothing | The offer is a set of {term, price, expiry-month penalty}, never one rate |
| Ledger holdbacks (eviction, chronic late) | Tenant ledger, per property | Running at Camellia [T]; needs reliable per-property ledger sync before switch-on |
| One forward push: renewal exposure + budget burn + documentation risk [T, probable] | Three separately hand-built views | Requires renewals, turn costs and tenant attributes queryable together per property |
Why correctness here is political, not just technical
The client side predicts staff will cite past automated-rent errors as the reason renewal automation cannot be trusted, then slow-walk increases fifty dollars at a time [T]. The worked example given was an inherited building with twenty-year tenants at $850 against a business plan that says $1,300 [T]. Read plainly: renewal automation at Situs is the enforcement arm of a value-add plan, and the people who must adopt it are the people it overrides. One real pricing bug becomes permanent ammunition. This is why the override object (schema-doors) is a precondition and not a later feature — discretion needs a sanctioned path or it takes a sabotage path.
The two engineering consequences that follow, and the authority question nobody asked
Reconstruct-at-decision-time. If a renewal price is disputed six months later, we must be able to say what the system believed on the day it priced — the rent roll it read, the concession it knew about, the policy version in force. Per-source freshness banners do not give that; record-level effective dating does. Nothing in the corpus asks whether the spine is bitemporal.
Per-property configuration is the cost that never amortises. Renewal policy, term matrix, notice term, ready-for-showings offset and holdback rules are all per building. At ~21 buildings [E] that is roughly 21× the onboarding the record currently scopes as a client-level checklist, and nobody has priced what building #22 costs in engineer-hours.
There is no approval matrix to override. The record contains the incident proving its absence — a staff member granted a tenant roughly $1,000 in concessions verbally off a half-read text thread, renegotiated down to about $500 [T]. Designing an override requires knowing what authority it overrides, and today that appears to be nothing written down. Treat authoring the approval thresholds as an engagement deliverable.
Notice to vacate → the date Clara will be asked about
This is the most concrete Clara job named in the session, and it is a write path, not a read. Today tenants call, staff write it down, and AppFolio is never updated [T]. The client side now forces written notice to a leasing inbox and wants an agent to read it and set the move-out date. Open, and it is a live test, not a question: whether setting that move-out date is one of AppFolio's one-way transitions that cannot be edited afterwards. Nobody knows; run it in the browser agent before we promise the flow.
Ready-for-showings then derives from that date. The default offered was ten business days, and the client side was explicit that this is personal conservatism to avoid blowback [T] — not a rule, not an optimisation. It is a per-property knob, it must be recomputed as maintenance facts land, and it must propagate to the listing. It is also where the money is, and the diagram above measures it.
Move-out charges are the adjacent hole. There was no process at all for five years, discovered only when the single person doing it went on leave; charges are entered against inspection photos by judgment with a $0 placeholder held until the vendor bill lands [T]. What was asked for is narrow and buildable: an AI first pass over the move-out inspection that flags missing information and emails the tech for it ahead of the 30-day clock she cites. The tech is a compliant counterparty; the leasing room is not. Two revenue facts sit beside it, both stated by the client side against themselves — no transfer fee is charged today against a turn cost put at around a thousand, and there is no utility billback at most properties (two or three run a blended-rate program), because Colorado requires per-unit flow metering to bill actual usage [T].
What we have not established, and what would settle it
- Consent to nag. A two-week re-nag cadence across a tenant base our extract counts at ~932 [X] is an outbound messaging programme. Nothing in the record covers 10DLC registration, quiet hours, contact-frequency caps, or where STOP state is stored so it survives one person appearing as both prospect and tenant. 32,309 texts already exist in our extract [X], so a practice exists — no policy is documented. Settle it before scale, not after.
- The renewal baseline is available and unused. Our extract holds 45,960 lease/renewal history entries [X]. Any success metric for a renewals-first engagement should be computed from that, not asserted — an unmeasured pilot at this account dies silently at the three-month mark.
- Statutory basis for the 30-day move-out charge clock. Cited on tape as a known deadline [T]; not verified against Colorado statute anywhere in the corpus. Counsel question.
- Tenant-side reaction is entirely unexamined. No tenant was interviewed. Whether an unfamiliar AI voice or unrecognised number is trust-destroying for a population already described as fearful and under-reporting is the highest-consequence unknown in this section.
- Write-back does not exist for this domain. Renewal calls and texts are not recorded into AppFolio's tenant communication log today — named on the PropFlow side's own post-session gap list, not in the room [T]. If write-back is the client's price of admission, renewals needs its own write target, not a generic conversation sync (
appfolio-seam).
OWNER: Gera (engine) with Fede (Situs policy) · EXPIRES: the day the GPs rule on renewals in phase one, or 2026-09-30 · SIGNAL: a renewal offer leaves without a holdback check, an override row, or a notice-term-keyed date.
The gate: what must be true before the first live Situs call — and, separately, before the first maintenance intake
A gate is a negative test with a named holder, not a milestone. "Isolation done" is a milestone; "a Situs-scoped browser action that reaches for a jpco property id is refused, and the refusal is alerted" is a gate. Milestones get ticked in a standup. Gates fail loudly when someone regresses them six weeks later. Below, every row is written as the thing that must be refused, and every row has one name against it. The rows we do not hold are drawn in a different colour, because those are the ones that will slip. And the section carries two trigger events, not one: the first live after-hours leasing call, and — separately, later — the first call on which Clara takes maintenance intake, which is also the day the MCC can be cut. Every row below says which of the two it hangs on.
flowchart TD
LAD["Emergency ladder"]
PILOT["Leasing pilot — ships now"]
MCC["Cutting the MCC — waits"]
LAD -.->|"does not gate"| PILOT
LAD -->|"gates"| MCC
classDef go fill:var(--accent-soft),stroke:var(--accent),stroke-width:2px;
classDef held stroke:var(--warn),stroke-width:2px;
class PILOT go;
class MCC held;
flowchart TD
subgraph LADDER["The ladder that replaces it · not written down"]
direction TB
R1["Rung 1 · classify the call"]
R25["Rungs 2–5 · on-call rota"]
R6["Rung 6 · voicemail + work order"]
R1 -- "no answer" --> R25
R25 -- "no answer" --> R6
end
MCC["MCC · answers every 2am call today"]
MCC -. "the net under all of it" .-> LADDER
classDef unwritten stroke-dasharray:6 4
class R1,R25,R6 unwritten
The trigger itself is contested, and the register does not yet hold it. Is phase one scoped by hours or by function? The agreed wedge is after-hours and weekend leasing calls [T], and phase-one-slice rules it leasing and nothing else. But the client’s own acceptance bar is work-order-shaped — “take a shot at it, create a work order, and then we can have somebody follow up” [T]; design-brief.json scopes the phase-one voice layer by time of day (“after-hours/weekends only”) with caller classification that includes resident, not by function; and the same brief records that the build order was never reconciled in the room. This page does not settle it, because the record does not. It belongs in the register as a contradiction row — phase one is scoped by hours or by function? — with Fede and Eileen as resolvers, and no such row exists yet [?]. Until it does, the honest register is the one mcc-test-call-as-spec already uses: a maintenance requirement holds wherever Clara takes maintenance intake.
Two labels in the drawing are ours, not the client's. Rung 1's categories (flood · no heat · gas · lockout) are a proposed taxonomy — nothing in the corpus defines an emergency class, and design-brief.json does not contain the word. And "rota UNDOCUMENTED" means undocumented to us: see the row below. Read the drawing by trigger too: the capability ladder on the right and its three negative tests gate the first live leasing call; the six-rung escalation ladder on the left, the MCC hammock under it and the yellow-jackets case gate the second trigger — the first maintenance intake and the cut.
Ours — seventeen refusals before the first live leasing call, owner Gera
Each row is a test that must go red before the code exists and green after. The tag column is what makes cost-to-serve computable: reusable rows are platform we would have built for client three anyway; Situs-only rows are the ones that never amortise. Every row in this table hangs on trigger one; the maintenance-intake refusals have moved to their own table below.
| Must be refused / must exist | Passes when | Tag |
|---|---|---|
A Situs-scoped browser action reaching for a jpco property id | The action is refused and the refusal alerts. Today the browser agent has JP&Co hard-coded throughout and runs on one shared login with a runtime database menu — PropFlow's own side called this "a leak that we have currently that I discovered" [T] | reusable |
A property with capabilityStage unset going live | Absent resolves to OFF; SHADOW is reachable and means decides-but-dials-nothing | reusable |
| A dial with an empty transfer number, or with no recipient resolved | Both refuse before the dial; shadow suppresses all outbound. These three hold every dial rung 2–5 in the ladder above | reusable |
| A settings fold that silently changes an existing client | Resolved-settings snapshot diff across Camellia and Yale is empty before and after (412 → 412) plan-sourced | reusable |
| An untraceable write into the client's system of record | One activity-log entry authored by the Clara identity is visible beside a human row in Situs's AppFolio. Write-back is the stated price of admission and there is no API — this is the only proof that lands | reusable |
| Quoting a unit with no verification timestamp | The answerable inventory refuses to serve a row without verified_at. The real source of truth is a colour-coded whiteboard in the leasing room [T]; rent roll and vacancies are "almost never correct" and the data has surfaced already-sold properties [T] | reusable |
| An outbound message with no recorded language decision | A language audit row exists for every message. 735 of 932 tenants have no language tag [X], and bulk both-languages sends have already drawn complaints [T] | reusable |
| Treating a caller's asserted unit and a phone match as the same fact | The person spine stores asserted and inferred unit separately, each with confidence | reusable |
| Regression case 1 — 446 Galapago. Caller ID selecting the property | A caller saying "1965 South High" twice is filed against 1965 South High even when the number matches a side-managed house sitting in the same system and phone-number namespace [T]. This row stays on trigger one: caller ID must not be the verdict on identity for any caller — the abstract form is the row above it, and the underlying debate on record is a general one about transfers, shared units and changed numbers. Only the anecdote is maintenance-flavoured | reusable |
| Compliance — an outbound SMS sent from a brand/campaign that is not registered | The sender refuses until brand and campaign registration is recorded against the number. Nothing in the corpus touches this: across 674 findings there are zero hits for A2P 10DLC, TCPA, STOP/HELP handling, carrier filtering, spam labelling or STIR/SHAKEN [?] — cannot-promise calls that gap "go-live blocking, not polish" in the page’s own voice, and this row is the mechanical half of it. The counsel half stays C4 | reusable |
| Compliance — a message sent to a number carrying STOP state | The send refuses, and the opt-out store is keyed to the person spine so the state survives one human appearing as both prospect and tenant [T]. 32,309 texts prove a practice exists for the 932 tenants; nothing in the record shows a policy does. Counsel half: C4 | reusable |
| Compliance — a recorded leg with no disclosure played | The leg refuses to record until a disclosure has played. Situs’s own maintenance IVR already opens with one — "This call may be recorded for quality" [T] — so the pattern exists on that line; what does not exist is enforcement on ours. Who may be recorded is ruled elsewhere (VA legs on, on-site off) and this row does not reopen it. Counsel half: C3 | reusable |
| Compliance — an outbound send outside configured quiet hours | The send refuses. The window itself is ours to configure and no hours have been agreed by anyone, here or on tape [?] — the row gates that a window is enforced, not what it contains. Counsel half: C4 | reusable |
| Our own posture — going live in hours nobody on our side is awake for | A PropFlow on-call rota and escalation path exists covering the hours Clara is live. It does not exist today and no holder is named anywhere in the corpus or in this document [?]; naming one is a real-world decision nobody has made, so this row stays open with the name blank rather than inventing it. Pair it with the MCC rule below — we cannot take the hammock away without a rota of our own. No after-hours uptime or answer-rate target is stated here either, because none has been agreed (gate-baselines) | reusable |
| Our own posture — a per-property or per-workload stop that has never been exercised | An outbound issued after a stop is refused, and one stop drill on a live Situs property is recorded. capabilityStage (row 2) is already the mechanism; what is missing is a demonstrated halt after go-live, reachable by the on-call person without a deploy. How fast the halt must take effect is ours to set and no target has been agreed [?] — do not print one | reusable |
| Our own posture — a refusal with nothing to say | A written degraded-mode utterance exists, and has run in shadow, for each of the three named failures: AppFolio unreachable mid-call, an answerable-inventory row past its (still undefined) TTL, and a write-back that never confirmed after the caller hung up. Row 6 already makes the inventory refuse a row without verified_at; what is unwritten is what Clara says when it refuses. prospect-path and trust-ledger both name these as ours to write and neither assigns them — this row is the assignment | reusable |
| Our own posture — our own pipes going dark with nobody paged | The morning report email that never arrives, a browser session that fails auth, and a credential-pool lockout that halts every client at once all raise an alert on our side rather than being inferred later from a client complaint. trust-ledger’s DARK state covers client feeds only; this extends it to ours. Alarm on a run of unconfirmed writes only once a write reports landed or not-landed — appfolio-seam records that the confirmation signal does not exist yet, so a write-back failure-rate threshold would presuppose a mechanism we do not have [?] | reusable |
Deliberately not a row: AI disclosure to the caller. Nobody has asked whether it is required, advisable, or itself a trust event (tenant-trust) [?], so there is nothing yet to refuse — it stays a counsel question rather than becoming a gate we cannot state.
Before Clara takes any maintenance intake — the second trigger
Phase one is after-hours and weekend leasing. These rows hang on a different event: the first call on which Clara takes a maintenance request, and the day the MCC hammock is cut. Filing them here is not a downgrade — it is the trigger being made explicit, so that nobody reads a leasing-only pilot as gated on an emergency ladder that phase one never touches, and nobody cuts the MCC believing these rows were already green.
| Must be refused / must exist | Passes when | Tag |
|---|---|---|
| Regression case 2 — yellow jackets. A synonym opening a second work order | "Yellow jackets" matches the open "bees" work order rather than creating a duplicate [T]. Semantic duplicate detection over open work orders gates this trigger; it is therefore no longer filed under what blocks scale, where it sat as a contradiction of this row | reusable |
| A dial rung firing into a rota nobody has written down | The after-hours emergency protocol exists (theirs, below) and rungs 1–4 have passed live on real calls before the MCC is cut (gate-mcc). Rung 1’s emergency classes are ours and proposed — no source defines an emergency class at all (gate-baselines) [?] — so this row gates the ladder, not the taxonomy | reusable — the rota behind it is Situs-only |
Theirs — the critical path is not code
These rows are the ones that decide the date, and none of them is an engineering task. Only the obligation-schedule row is even partly ours to move, and the person named against six of the eight is leaving Denver. Three rows already have a home in the register and are cited here by row id rather than restated — the fact lives once, and the gate row inherits that row’s deadline instead of copying it. The other five have no register row at all, so they inherit no deadline and cannot trip the register’s own failure signal (“a row past its deadline still reading open”) [?]; each is marked below with the queue it belongs in, and creating those rows is an edit to the register, not to this table.
| Row | Named holder | State |
|---|---|---|
| B1 — caller-ID passthrough survives the phone rebuild (one live call on DID day) | Eileen + Fede, per B1 | Open, event-bound to DID day. Stated in full in the register; not restated here. One caveat that lives only in this table: that the rebuild threatens passthrough is our inference, not something said on tape — nobody in the room raised it |
| A4 — the whiteboard: photograph, colour legend, who writes it and how often | Eileen, per A4 — obtainable only while she is physically in Denver | Open, Queue A expiry 2026-09-12. Stated in full in the register, with the legend itself owned by trust-ledger. The physical constraint is the part that does not travel: get it before she leaves Denver. That date is A1, recorded three incompatible ways and unresolved, so it is deliberately not written here as a calendar date |
| The after-hours emergency protocol — the on-call rota, what she treats as an emergency, and who pays the callout and at what rate. One ask, one conversation, not three | Eileen | Not captured, and not in the register. 44,000 words contain no answer to "who is dialled at 2am"; design-brief.json never uses the word emergency, and rota and callout return zero hits in both evidence files [?]. Raw material exists on their side — she keeps on-call calendars for her maintenance staff [T] — so the rota is an extraction ask. The trigger, the order and who-pays are her operating rule to state and ours to write down. It does not settle the rung-1 classifier: no source defines an emergency class at all, and building a labelled set is our work (gate-baselines). This belongs in Queue A, catcher Eileen, expiry 2026-09-12, and it is the only pure extraction-ask of hers on the critical path with no catcher/deadline pair — until that register row exists it has no deadline anywhere [?] |
| GP sponsorship and a communication plan for the leasing-team demo | Hugo, plus the CFO the transcript renders "Noel" and our plan reads as Noam name AI-reconstructed | Open, and one-shot: the on-site leasing staff are described as the real decision makers — "if they decide that they don't like your tech, that's impossible to come back from" [T]. Not in the register [?]: it belongs in Queue A, catcher Hugo, expiry 2026-09-12. A2 is a different row — successor per duty, not sponsorship of a demo |
| A3 — the VA rota in Denver time, and the staffing-agency relationship | Eileen, per A3 | Open, Queue A expiry 2026-09-12. Stated in full in the register. Two things that do not: the agency name our plan carries returns zero matches in findings.json, design-brief.json, the raw transcript and all six thread files — it is plan-sourced only unverified [?]; and the same unhedged name still appears in register row A3 and in the clock diagram’s VA label, which need this same mark or the name struck. If the VAs already cover Denver after-hours, the wedge evaporates — one ask settles it (decision) |
| A written client-obligation schedule with owners — this is also the “training map” / prep checklist the client asked for by name | Sean drafts the obligation schedule; Fede owes the prep-checklist half — the findings attribute that action item to him, not to Gera attribution unverified | Open and undated: propose a date, or hang it on the Queue A expiry of 2026-09-12. Nothing on tape dates it [?]. Her ask is verbatim [T]: “is there a training mapping … these are the three areas … what we need to do on our end” to get a legit phone system live. Our proposed content is three datasets — a clean rent roll, a verified availability list, and tenant/vendor contact data for caller identification; that trio comes from a session-summary synthesis rather than tape, and only the rent-roll and contact-data halves have verbatim backing [?], so read it as our answer, not as her words. It is a PropFlow-owed deliverable sitting in a table headed “Theirs” because the signature half is theirs; the drafting half belongs with ours. Without the signed half, churn caused by data we do not control is unrebuttable. Not in the register — catcher Sean |
| The list of datasets to pull, plus the low-hanging-fruit candidates drawn from data she knows is already clean — the input both sides agreed would settle build order | Eileen attribution unverified | Open. Committed in the room: “What are some data sets that you want to pull from? Think about this … then let’s talk about what data sets you want to pull and what things you can build as low hanging fruit” [T], to be “meditated on” during next week’s cross-country drive. Expect it on her return from the drive, week of 2026-09-08; no date was set on tape and no drive dates are on record [?]. Not in the register, and it is the one input that unblocks the hours-or-function contradiction at the top of this section |
| Whether the offered weekly on-site session is accepted, and who attends | Eileen | Offered by PropFlow on tape — “I can come in every week … just to go to each area” [F]. Acceptance is not on record [?]. It matters here for scheduling reasons, not sentiment: Queue A’s fourteen person-asks nearly all point at one person who is about to be unreachable, and the agreed post-drive reconvene is the one scheduled slot to spend them in. Book that slot before the drive, and take the Queue A list into it |
Who chases these on our side, and what happens when the holder is gone. PropFlow-side chasing is Fede for the register-backed rows (the register’s own OWNER line for Queues A–B) and Sean for the obligation schedule. There is no fallback name for any row, and that is a stated fact rather than a gap in this table: every successor is produced by register row A2, which is open and names no successor for any duty — and none for the relationship either. A column of six “unknown” cells would dress that up as governance; this sentence is the honest version.
Emergency routing is the one same-day-loss failure — and the cutover trap
This subsection is the second trigger. It gates the day Clara takes maintenance intake and the day the MCC is cut — not the first live leasing call. Everything else on this page fails slowly. A 2am no-heat call in a Denver January at a B/C building fails inside one night, and it is a statutory clock as well as a habitability event: the session surfaced Colorado's 24-hour cure period live, on a broken stove whose work order had been open since the 14th [T]. Volume is not theoretical either — 22% of Situs work orders arrive before 8am or after 6pm and 10% on weekends, roughly 800 requests so far this year arriving outside office hours [X]. Those are not falling on the floor today, and that is precisely the trap: the MCC takes maintenance intake all day, on every Situs property but two [X], so the after-hours number measures a load that something else is currently absorbing.
The trap is sequencing. The MCC is cancelable and was put at roughly $800/month — a second-hand recollection on tape ("I think he said it was like 800 a month or something"), not a figure we have seen billed — and the client side named exactly that as the price floor: "at least we can pay you that" [T]. No pricing was negotiated on site [T]. So the commercial logic and the safety logic point in opposite directions: the cheapest way to fund us is to cut the thing currently catching the 2am maintenance call. Two rules follow. Cut it only after rungs 1–4 pass live, on real calls, not in shadow. And price its displacement separately from anything we sell on the leasing side, so that "we replaced the MCC" is a decision someone signs rather than a side effect of a discount.
What blocks scale rather than the first call
These do not gate the first live call. They gate property #22, and they are listed here only so nobody scopes them into the pilot by accident. Each is stated in full in its home section.
| Block | Home |
|---|---|
| Work-order semantics — creator role, recurrence/reopen links distinct from a new record, and separation of the recurring queue from the reactive one (46 recurrences landed on the first of the month [T]). Semantic duplicate detection is deliberately not in this row: it gates the first maintenance-intake call (second trigger), and filing it here as well made one capability both a gate and a not-a-gate | work-order-path |
| Multi-property renewal engine keyed to notice term; the leasing@ notice agent | renewal-path |
| Scheduling substrate with agent availability and route optimisation; 168-source lead ingestion | prospect-path |
| Freshness metadata and dark-source detection | trust-ledger |
| Alerting as messaging primitives with exactly one named assignee — she is buying push, not another dashboard [T], so alerts belong in a meeting cadence rather than a screen. She says she works in EOS [T], which is the obvious hook; that it lands in an L10 slot is our inference | decision |
| Entity axes | schema-doors |
| Vendor model and the annual operating calendar — capture while Eileen is still reachable | clock |
Situs-only vs reusable, so cost-to-serve is computable. Reusable: isolation, the capability ladder, the answerable inventory, the person spine, the language attribute, the override object, freshness, the four compliance refusals (campaign registration, opt-out state keyed to the spine, recording disclosure, an enforced quiet-hours window), the demonstrated stop control, the degraded-mode scripts, and alerting on our own pipes. Situs-only: the MCC script, the whiteboard cadence, 168-source credential handling, a Colorado clocks table, and the binding to whatever phone system the rebuild lands on. Anything that lands in the second list and is not priced as onboarding is margin we gave away.
Baselines come from our extract, never from hers
Every rollout baseline is re-derived from raw AppFolio extracts [X] — not from her dashboards, which died when the interns left two weeks before the session, and not from anything measured while staff knew they were being watched. Target and window are agreed before anything ships (decision).
The engineer's scoping layer: what the extract can and cannot baseline yet
What it holds today [X]: 2,588 work orders Jan 1 – Sep 1 2026 (~10.6/day, rising Jan 279 → Aug 483); 883 guest cards → 331 showings → 183 applications → 137 move-ins; first human reply to a guest card median 5.1h, p90 71h, with 154 cards (17%) never answered by a human; 13% of cards created after hours and 7% at weekends; 932 tenants, 735 without a language tag; a 209MB tenant corpus of 174,619 timestamped events.
What it cannot baseline yet: work-order lifecycle — that analysis ran on 1,124 detail records out of the 2,588 index, 43%, still being pulled [X]. Any cure-clock or time-to-resolve target derived from it is provisional until the capture completes. The 183 applications figure needs a stated counting rule before it becomes a target: our own screens disagree on whether a couple filing jointly is one application or two, and the ruling on record is one unit equals one application. Emergency-specific volume is also unbaselined: we have after-hours arrival counts, but nothing in the corpus classifies which of those were life-safety — no source defines an emergency class at all — so the rung-1 classifier has neither a labelled set nor an agreed taxonomy. Building both from the extract is a day of work and should happen before, not after, a target is agreed.
Two rows above are stated in the build plan and nowhere in the client corpus: the capabilityStage default and the 412 → 412 settings-snapshot count. Confirm both in the repo before either appears in a client-facing document.
OWNER: Gera · EXPIRES: each row on its passing test; the first-trigger rows on the first live leasing call, the second-trigger rows on the first maintenance intake · SIGNAL: a Situs property reaches live with any first-trigger row above unticked or with capabilityStage unset; or Clara takes a maintenance call before the second-trigger rows are green; or an outbound leaves with no registered campaign, no opt-out check or no enforced quiet-hours window; or Clara is live in an hour for which no PropFlow on-call holder has been named. No after-hours uptime or answer-rate target is stated in this section, because none has been agreed [?].
The register: every contradiction and open question, its resolver, its catcher, its deadline
Thirty-nine queued rows, four weak-provenance rows, and an index of the 21 contradictions and 8 atlas corrections that feed them. Every row names the kind of thing that settles it, the person who can, the day it is due where a deadline applies, and the one section that will state the fact once it lands. Nothing here is silently reconciled: a ruling gets a date and a name, and the row stays.
As of 2026-09-02 — one day after the ~5-hour, ~43,000-word on-site session of 2026-09-01 — every queued row is open except the six in Queue D, which carry a status of ruled, reframed or held-open. Held-open is a standing commitment, not a resolution. That is the honest state, and it is also the point of the register: a row past its deadline still reading “open” with no dated note is the failure signal for this whole document.
Queue A — 👤 free to resolve this week by asking
Catcher does one ask. Two rows are answered by our own extract instead of by a person and are tagged 🗄️. The queue is split into two dated blocks, because clock lays down a scheduling rule this queue used to ignore: capture the in-room artifacts now, in the days that are certain — documents she can send from anywhere can wait for the disputed window. One blanket deadline put the only irreplaceable asks after the window in which they can be made.
The date on Block 1 is an assumption, not a stated fact [?] — the session was Tuesday 2026-09-01, “this is my last week” [T], and the cross-country drive is “next week” [E], so the last certain day of in-Denver presence is taken here as Friday 2026-09-04. Nobody said that date out loud, and the record gives three incompatible end dates. A1 is the row that revises it: when A1 lands, correct this line and Block 1’s deadline together.
Block 1 — in-room, before she leaves Denver. Due 2026-09-04. The four artifacts clock names as physical and in-room. Only A4 is stated anywhere to be unobtainable once she leaves — gate calls the whiteboard photograph “only obtainable while she is physically in Denver”; the other three sit here because the certain window is the cheap one to ask in, not because they become impossible after it. A missed date on this block does not delay A4, it ends it.
| # | What is unknown, or where the two claims collide | HOME | Catcher | Cost | Status |
|---|---|---|---|---|---|
| A4 | Whiteboard: a photograph, the colour legend, who physically writes it, and how often. It is the named source of truth for availability and it was not documented during a full uninterrupted day on site. | trust-ledger | Eileen | 10 min | open |
| A5 | The MCC intake script, the contract term and the cancellation notice. The script is the behaviour spec for Clara’s maintenance line; the term decides when displacement can even be offered. | work-order-path | Eileen | one call | open |
| A8 | The EOS Accountability Chart, the current Rocks and the L10 scorecard. Situs runs on EOS and the exercise was run with the owners more than once; these probably exist, and were never requested. They are also the natural landing place for owner-facing alerts, since the owners will not log into anything and everything they see has to be pushed to them. | clock | Eileen | 10 min | open |
| A18 | The after-hours emergency protocol: the on-call rota, what counts as an emergency, and who pays the callout. It is the fourth artifact clock tells us to collect in the certain days, and the only one of the four with no row in this queue until now. The ~43,000-word session contains no answer to “who is dialled at 2am”; raw material exists on their side — on-call calendars are kept for the maintenance staff [T] — so this is an extraction ask, not a build. | gate | Eileen | one call | open |
Block 2 — sendable from anywhere, or ours to run. Due 2026-09-12. Nothing here is lost when she leaves Denver: each row is a document, a call, or our own extract.
| # | What is unknown, or where the two claims collide | HOME | Catcher | Cost | Status |
|---|---|---|---|---|---|
| A1 | The real end date, the remote authority, and whether she can still decide anything after next week. Stated three incompatible ways: “this is my last week”, “the next four months when I’m leaving”, and a correction that she is not leaving at all but relocating East Coast through December. Only the in-Denver presence unambiguously ends within days. | clock | Eileen | 10 min | open |
| A2 | Successor per duty, not just sponsor: who inherits the absorbed maintenance-manager role, the weekly hygiene sweep across 168 lead sources, the vendor rate card, the in-flight phone/IVR rebuild, the weekly pest plan and the turn-buffer policy. No successor is named for any duty, and none for the relationship either. | clock | Hugo / Noam | one call | open |
| A3 | The VA rota in Denver time, and the HireSmart agency relationship: contract, cost, and whether the arrangement survives her exit. Three ex-call-center VAs (Philippines, one Colombia) are the entire rollout vehicle and are a black box — and Manila daytime overlaps Denver’s after-hours, which is exactly the slice we propose to take. | prospect-path | Eileen | one call | open |
| A6 | Third-party-managed share: “we only use one property that we have an actual third party for. It’s called Fox Street” versus, later the same session, “probably a third of our property, third party property manager, who is going to be doing the accounting of certain things very differently.” Which properties, and which of them account differently. | schema-doors | Eileen / Matt | 10 min | open |
| A7 | Western Slope in or out. 25%-owned, separate legal entity, separate AppFolio instance, separate operator, and a different buyer with different priorities (maintenance and advertising, not the quarterback layer). | schema-doors | Hugo / Jay | one call | open |
| A9 | What staff were actually told about the day on site. The account’s political state at t=0 is unrecorded. | clock | Eileen / Hugo | 10 min | open |
| A10 | Who “Fedo/Feda… he’s just gonna take over doing everything I do himself” refers to — the name is garbled in the transcript — and whether it means the champion’s role is being absorbed by an owner. | clock | Eileen | 10 min | open |
| A11 | The phone rebuild: owner, vendor, configuration, cutover date. It is in flight, it sits on the critical path of the proposed first workload, and it has no named owner in the record. (The old atlas’s “Crexendo” is one mis-rendering of “Crescendo”; the system is unnamed.) | prospect-path | Eileen | one call | open |
| A12 | Where the one hand-tagged property’s per-unit language backfill physically lives — an AppFolio note, a tag field, or the departed interns’ system — and whether it can be imported. | schema-doors | Hugo | 10 min | open |
| A13 | Orca’s boundary against our maintenance layer. It went live the day of the session, owns job-level time, cost, entity attribution and technician GPS, was built by a developer friend of the client’s, and writes completions back to nothing. | work-order-path | Steven, via Eileen | one call | open |
| A14 | Per-property Google Business reviews, as a free tenant-experience baseline. No tenant was interviewed and no external baseline of any kind exists; the review pages are public, free, and were never pulled. | trust-ledger | Gera | 10 min | open |
| A15 | How many maintenance techs there are and what phones they carry. SMS is the only viable field interface (“I don’t know how to use a computer”), and the denominator for every field-facing estimate is unknown. | work-order-path | Eileen | 10 min | open |
| A16 | Real work-order volume and the true billback opportunity, sized from the extract rather than asked: 2,588 work orders Jan 1 – Sep 1, ~10.6/day, rising 279 in January to 483 in August. The client side cannot state the billback number; we can compute it. | work-order-path | Gera | 🗄️ extract | open |
| A17 | The rollout baseline, re-derived from the raw extract and never from a dashboard or anything measured while staff knew they were watched (“she already knows I’m gonna yell about this, so she’s already gone and done it before it’s gonna be posted”). | decision | Gera | 🗄️ extract | open |
| A19 | Whether AI answering during business hours will not happen is the client side’s actual position or only our reading of one garbled sentence — row e below sets out the verbatim, which will not carry the weight. One question settles it, and the answer decides whether phase one is after-hours-only by constraint or by choice. | prospect-path | Eileen | 10 min | open |
Queue B — 🧪 one live test settles it
Not askable. Somebody has to run it once and write down what happened.
| # | The test | Why the answer moves a decision | HOME | Catcher | Due |
|---|---|---|---|---|---|
| B1 | Caller-ID passthrough survives the new phone system — one live call on DID day. | If it does not survive, unit routing loses its only cheap signal on the very day the first workload would go live. | prospect-path | Eileen + Fede | event-bound: DID day |
| B2 | Which pipe delivers what freshness, and whether AppFolio’s unified communications log is writable — not merely readable — through the report-email path or the browser agent. | Write-back is the client’s stated price of admission, and the promise was made before the answer was known. Guest cards write today; transcripts, tour events, guest-card status, work-order notes, labour summaries, photo attachments and renewal logs do not. | appfolio-seam | Fede | 2026-09-15 |
| B3 | Whether the notice-to-vacate → move-out transition is one of the AppFolio step sequences that cannot be edited once completed. | If it is one-way, an email agent that writes a move-out date can produce a record nobody can fix, at the exact point where a vacancy is born. | renewal-path | Fede | 2026-09-15 |
| B4 | Syndication write confirmation. | Submission returns no usable confirmation today, and the “posted to internet” flag mints the integration ID that feeds every ILS — unposting kills the feed. A write we cannot confirm is a write we cannot own. | appfolio-seam | Fede | 2026-09-15 |
Queue C — ⚖️ counsel before it is a feature
Owner: Sean. Each row is due 2026-09-30 or before the feature it gates ships, whichever comes first. None of these is an engineering question and none should be answered by an engineer — one of them already was, in the room, by a non-lawyer.
| # | Question for counsel | What it gates | HOME |
|---|---|---|---|
| C1 | BYOD and personal-phone access. Roughly half of tenant communication runs on two employees’ personal cells under a $50/month allowance, and the company has no right to access or bulk-upload them. | Every plan that assumes we can see tenant conversation history. | cannot-promise |
| C2 | Orca GPS monitoring consent — technician location tracking went live with no consent question recorded. | Any integration that reads or re-exposes tech location. | work-order-path |
| C3 | Call-recording disclosure for the VA queue. Recording on-site staff is off by explicit decision; recording is scoped to the offshore VAs, whose jurisdictions are not Colorado. | The per-leg recording toggles, and the sales proof point. | cannot-promise |
| C4 | SMS consent of record, quiet hours, contact-frequency cap and AI disclosure for 932 tenants. 32,309 texts prove a practice exists; nothing in the record shows a policy does. | Every outbound message, including autonomous renewal nudges. | trust-ledger |
| C5 | The SSN-concentration abandonment signal — a leading indicator the client side believes in, and an immigration- and protected-class-adjacent inference. | Whether it can exist as a score at all. | schema-doors |
| C6 | Performance-data disclosure policy. Our own extract already scores named individual employees — first human reply median 5.1 hours, 17% never. That is the recording taboo arriving through a side door. | Anything we show an owner about a named employee. | trust-ledger |
| C7 | Fair-housing steering audit of the answerable inventory. A human-verified allowlist of what the agent may offer is also a mechanism for showing some people some units. | The answerable-inventory design itself. | prospect-path |
| C8 | AppFolio’s terms versus a browser agent driving a shared human login. The vendor denied API access outright; nobody has asked whether automating the UI is permitted, or what happens when they notice. | The only write path we have. | appfolio-seam |
| C9 | Liability for a missed cure clock or a wrong rent quote. Colorado imposes issue-specific clocks (24 hours for a broken stove) and notice periods up to 60 days. | Contract terms, liability cap, indemnity — none of which exist yet. | cannot-promise |
| C10 | Data rights over the 209MB extract — 174,619 events, 93,656 full-body emails, 32,309 texts, 932 tenants — for training, evals and golden sets. Asserted internally, never negotiated with the client. | The largest non-cash thing we would take out of this account. | decision |
Queue D — ∞ unresolvable by design, held open in the product
Owner: Gera. No deadline; reviewed at each gate. These do not get an answer — they get a mechanism, and the mechanism is the deliverable. A row here that has been “decided” instead of built is a defect.
| # | The permanent tension | The mechanism that holds it open | HOME | Status |
|---|---|---|---|---|
| D1 | Recording is the flagship proof point; at the flagship account “the moment that they find out that it’s going to record them, the whole system would collapse.” | Toggles per leg, per queue, per role — VA queue on, on-site off. “We record everything” becomes banned copy. | cannot-promise | ruled in the room 2026-09-01 (client side, attribution unverified); held open in product |
| D2 | Phone-number match is our safety default; the client rejected it — “in real life it’s not really gonna work, so I would rather trust what the person calling is saying” — because of roommates, relatives, transfers and landlines. | Store {asserted_unit, inferred_unit, confidence}. The client accepts impersonation risk to buy routing accuracy, and the document says so out loud. | schema-doors | ruled 2026-09-01; held open in product |
| D3 | Onboarding wants attributes tagged in custom fields; the buyer wants the opposite — “it just knows the domain so well that it can infer things.” | Graceful degradation when tags are blank, measured against the real denominator: 735 of 932 tenants carry no language tag. | schema-doors | held open |
| D4 | “I don’t need another CRM. I’m already paying an obscene amount of money” versus, the same day, “in the course of us talking, I have opened a hundred tabs.” | A read/alert layer that owns no records. This is the only shape that satisfies both sentences. | decision | reframed; held open |
| D5 | “We pull from AppFolio every five, ten minutes” (said to the client) versus a daily scheduled report email versus an ideal of hourly. | A written freshness contract per pipe, published before any automatic-drop-off promise is repeated. | appfolio-seam | held open — see B2 |
| D6 | Properties that are sold but still present in the data. The extract holds 36 properties with 2026 work orders, including sold assets, houses and commercial. | Time-bounded membership on the ownership edge, so a rollup can be asked “as of when”. | schema-doors | held open |
Index: the 21 contradictions, and where each one lives
Every contradiction from the design brief, compressed to one line, with its HOME section and the queue row that resolves it. Open this when you want to check that a disagreement you remember has not quietly vanished.
The 21 whiteboard contradictions
| # | The disagreement | HOME | Resolver | Status |
|---|---|---|---|---|
| 1 | Departure stated three ways: last week / four months / through December. | clock | 👤 | open — A1 |
| 2 | Third-party-managed share: one property (Fox Street) vs about a third of the portfolio. | schema-doors | 👤 | open — A6 |
| 3 | Ingest cadence: five-to-ten minutes vs a daily report email vs an hourly ideal. | appfolio-seam | 🧪 ∞ | open — B2, D5 |
| 4 | Recording everything is the proof point vs “the whole system would collapse”. | cannot-promise | ∞ | ruled 2026-09-01 (on-site off) — D1 |
| 5 | “They can’t answer because they don’t have anybody” vs “I have an army of them that can answer”. | prospect-path | 👤 | open — A3 |
| 6 | “Does dirty data matter?” vs “that’s where we’re gonna live or die by the sword”. | trust-ledger | 🗄️ | open — A17 |
| 7 | A work order needs a phone match vs “I would rather trust what the person calling is saying”. | schema-doors | ∞ | ruled 2026-09-01 — D2 |
| 8 | Owners want an appliance matrix; ~80% of stock is refurbished with swapped guts, so vintage means nothing. | work-order-path | 👤 | open — the dataset the owners want may not be worth building |
| 9 | Facebook descoped by PropFlow vs her best-converting source, where the fix is organisational, not software. | cannot-promise | 👤 | open — descoping creates a shadow channel |
| 10 | The industry assumes maintenance is the swamp; here work orders are the cleanest surface and leasing is the swamp. | trust-ledger | 🗄️ | open |
| 11 | ICP deliberately avoids third-party managers; the warmest referral out of the session is a third-party manager. | schema-doors | 👤 | open — A7 |
| 12 | ~550 units sits below the stated 1,000–10,000 band, and “we don’t do things correctly as an owner operator” cuts against treating the data as a gold mine. | schema-doors | 👤 ⚖️ | open — A7, C10 |
| 13 | Tag everything in custom fields vs “it just knows the domain so well that it can infer things”. | schema-doors | ∞ | held open — D3 |
| 14 | 90-day pre-leasing vs move-out plus 10 business days and staff who will not pre-lease what they cannot show. | prospect-path | 👤 | open — the buffer is one person’s conservatism, not a rule |
| 15 | “I don’t need another CRM” vs “a hundred tabs”. | decision | ∞ | reframed — D4 |
| 16 | “The operation crumbles when you take two weeks off” — rejected on tape. | decision | — | retired 2026-09-01; depersonalised escalation is the accepted angle |
| 17 | First workload: after-hours phone (PropFlow side) vs renewals, move-outs, billback, dashboards (client side, renewals named highest ROI). | decision | 👤 | open — never reconciled in the room |
| 18 | Any data quality observed during discovery is performed. | trust-ledger | 🗄️ | open — A17 |
| 19 | “No one updates AppFolio appropriately” vs “I’ve spent three years getting the data clean enough”. | trust-ledger | 🗄️ | open — cleanliness is per surface, not per company |
| 20 | Availability MVP proposed on their website (already out of date) vs their proposed Google Doc; the real source is a whiteboard both sides know is wrong. | trust-ledger | 👤 | open — A4 |
| 21 | Speaker attribution is AI-reconstructed and person names are unreliable throughout. | key | — | reframed into the provenance rule; never resolved, only disclosed |
Index: the atlas-vs-room corrections, rows a–h
The full was → is list lives in retractions and now runs to twenty rows. The eight below are the ones where the correction still changes a decision in front of us — that selection is editorial, not something the room ruled. Readers are still carrying the left-hand column.
| Row | The atlas said | The room says | Still owed |
|---|---|---|---|
| a | Nobody answers the phone; the staffed-vs-unstaffed hours bar is the phase-one product. | “I have an army of them that can answer” — three ex-call-center VAs by day plus a paid AppFolio MCC on maintenance intake all day, on all but two properties [?] (scope unverified). Only after-hours leasing goes to voicemail, and the VAs are awake for it. | A3 decides whether even that gap is real. |
| b | We pull every 5–10 minutes, so applied units drop off availability automatically. | API access was denied. “Goes to actual developers” is not on the tape; the nearest line is “we’ve sold that as you will probably be able to get it as, like, an actual developer” [T], and it is garbled — the four-word version is our compression of it, not a quote. paraphrase, not a quote The read path is a daily scheduled report email plus a browser agent. | B2, D5. |
| c | ~1,000 units (quote that number always) / ~2,000 units / forty buildings. | ~550 units and ~21 buildings on the client’s own vendor-negotiation figure; 932 tenants and 36 properties with 2026 work orders in our extract, including sold assets, houses and commercial. | Every sizing line that multiplies by 1,000 is out by roughly 2×. |
| d | Commercial terms locked: $4.50/unit/month, 30% off for three months, ~$10k setup. | No PropFlow pricing was discussed on site. The only figure the room produced is the ~$800/month MCC framed as the floor. | Price basis, legal counterparty and cost-to-serve, all in decision. |
| e | Answering mode decided: human-first, permanent forward, 15-second ring cap, Clara catching business-hours misses. | The tape renders only “during the business hours, like, will not happen”, inside a passage about recording; reading that as AI answering during business hours will not happen is the room’s interpretation, and the speaker label is machine-reconstructed — the same verbatim and the same caveat are set out in prospect-path. Phase one is after-hours and weekends. A19 re-asks the boundary in one question. attribution unverified | The mode enum survives as a gate row; the default does not. |
| f | ~70% of tenants are Spanish-speaking. | There is no language field in AppFolio at all. 735 of 932 tenants carry no tag; 11,382 texts went out bilingual and 3,905 Spanish-only. | D3 — language is captured from explicit signal, never assumed. |
| g | One organization, two brands, one PMS connection — do not split. | Two AppFolio instances. Western Slope is a separate legal entity Situs owns 25% of, a true third-party manager with its own operator. | A7. |
| h | MCC is the incumbent after-hours answering service; retiring it is phase one. | It is all-day offshore maintenance intake at ~$800/month, it is the CFO’s stated price floor, and after-hours leasing goes to voicemail rather than to it. | Cutting it is the act that arms the 2am ring-out defect — see gate. |
Four claims we keep repeating with provenance too weak to survive
Carried forward from the previous atlas. Each is still in circulation internally; none is backed by a document, and two of the four appear nowhere in this corpus except inside the carried-forward note itself.
| Claim | What the evidence actually holds | Settles it | Catcher | Due |
|---|---|---|---|---|
| The $1.50/unit answering-service fee | An Aug 25 note, superseded by the ~$800/month hallway figure, and possibly describing their AppFolio tier rather than a per-unit fee. Neither figure has been checked against an invoice. Do not quote either externally. | One invoice | Fede | 2026-09-12 |
| “Optimal AI” vs “Proper AI” | Two spellings of the failed prior vendor’s name. Neither string occurs anywhere in the ~43,000-word transcript or the 674 findings — only in the carried-forward atlas note. We do not know what the vendor was called or why it failed. | One ask | Eileen | 2026-09-12 |
| “AppFolio write-back works today” | Said in the demo. Guest cards write; conversation transcripts, tour-scheduling events, guest-card activity and status, work-order notes, labour summaries and photo attachments, and renewal call/text logs do not. The client side said she would verify it herself — which means the claim is now being tested by the buyer, not by us. | B2 | Fede | 2026-09-15 |
| L4 as a proven browser-automation pattern | The carried-forward note reads “0.0% on the only benchmark”. Neither that benchmark nor any run of it appears anywhere in this corpus outside the note itself, so it currently survives as a claim about a claim. The browser agent is nevertheless our only write path, which makes an unproduced benchmark the most expensive gap on this page. | Produce the benchmark or strike the line | Gera | 2026-09-15 |
OWNER: Fede (Queues A–B) · Sean (C) · Gera (D); the four weak-provenance rows carry their own catchers · EXPIRES: each row on its own deadline; Queue A Block 1 expires 2026-09-04 — an assumed in-Denver window, revised by A1 — and Block 2 expires 2026-09-12 · SIGNAL: a row past its deadline with status still “open” and no dated note — which is the same unowned-dependency failure this document diagnoses at the client, arriving in our own file.
The episodes
Thirteen sections is not something anyone reads on a Tuesday. These are the same material argued out loud, in three parts, so it can be listened to instead. Each page carries its own source brief — the document the episode is generated from — because that brief is often the more useful artifact of the two.
| # | Episode | What it argues | State |
|---|---|---|---|
| 1 | The Client You Cannot Mandate | What is actually being bought, why our headline pitch is our weakest one here, and the line where this is a bad account. | brief ready · no audio |
| 2 | The System of Record You Cannot Read | A system we must write into and cannot read, a whiteboard that outranks it, and four doors that do not reopen. | brief ready · no audio |
| 3 | Twenty Retractions | What we believed that was not true, the mechanism that produced it, and what survives. | brief ready · no audio |
Why three, and not one
One episode covering thirty thousand words would be a lecture nobody finishes. Split this way each one answers a single question — should we sign this?, what is the system actually like?, what did we get wrong? — and any one of them stands alone for someone who only needs that answer.
How an episode gets made
Open the episode page, take the Source doc tab — copy it or download the .md — and run it through NotebookLM. That produces the audio. The file goes to artifacts/audio/<slug>.m4a, and the transcript, the read-along cue file and the waveform are generated from it in the same pass. The player is the shared component every podcast page on this site uses, so nothing about it is per-episode.
The briefs are the durable half
Audio ages badly and cannot be searched, quoted or corrected. Each brief is written from the evidence base and fact-checked against it — 51 claims were caught and rewritten across the three, most of them repeating something this atlas had already retracted. If the audio and the brief ever disagree, the brief is the one that was checked.