AUTHOR’S WORD — 2 rows here show a completed status that nothing derived The pill on these rows was typed, not measured: a0-spine, a0-how-chapters. Every other status on this page comes from that row’s own PR, commit or decision links; these name nothing a machine can read, so nothing can contradict them when the work changes. To make the same claim checkable, write one of these on the row and it derives on the next tick: prs (a PR ref — read from GitHub), completion_evidence (owner/repo@<full 40-char sha> — checked against the default branch), shipped_without_pr (why no PR can exist), or decision (the id that settled it). A row that is not owed a build says so with unbuilt; one a decision retired says so with canceled.

Organization architecture — the HOW

Organization architecture · Organization Core. Names updated September 16 to match the existing ORG# boundary. “Portfolio” means a collection of properties. Earlier recordings and quotations retain their wording; existing links and technical IDs remain stable.

The implementation half of the Sep 6 study, drawn for a person first — the rows, the one resolver, the wall, the changes that never migrate, and the road — with the full reference record one click away for an agent.

2026-09-07 · Fable for Gera — the implementation half of the Sep 6 study · status: accepted (ADR-0135, ADR-0136, ADR-0137) and largely built — the Implementation board reads 853 of 1,003 done, as of 14 October 2026 (the board, not this page, is the live tracker) · updated Sep 7 with the Slack decisions and Fede's three-week frame · updated Sep 8 with the founders' standup — the org model, who owns what, and where we are · updated Sep 8 (evening) with Gera's three decisions — the property owner's grant widens to the portfolio set with conversations grantable and off, delegated administration with a privilege ceiling, and "owner" split into org_admin / property owner / PMS credential holder · every section deep-linkable (#/model, #/change, …)

The verdict, in plain English — where we are, and what the design changes

The short version. The system started out working well for one building and badly for a company with many: the phone, the calendar, the mail, the money and the rules were all tied to one building, and companies were kept apart by a rule in our code. This design makes the company the wall, with buildings underneath it, and most of it is now built: the Implementation board reads 853 of 1,003 done, as of 14 October 2026.

The verdict, in plain English. PropFlow began clean for one building and half‑built for a customer with many: the phone line, the calendar, the mailbox, the rents and the settings hung off one building, and a filter in our code was all that kept customers apart. The design keeps what was clean and adds one thing above it: the customer (the company), which is the wall and the bucket everything belongs to, with the building underneath, and every line, calendar, login and rule attached to whichever of the two it belongs to. That is now largely built: every read is checked against the company, one login can hold several companies, and the company picker reads one company at a time (the Implementation board reads 853 of 1,003 done, as of 14 October 2026).

The verdict. PropFlow began clean for one building and half‑built for a customer with many. The design adds the customer above the building as a wall, and attaches every line, calendar, login and rule to whichever of the two it belongs to. Where it stands: the Implementation board reads 853 of 1,003 done, as of 14 October 2026, 31 of them proven in production. Every read path checks the company and an unknown company is refused (the last fail-open check was deleted in #18272); one login holds a membership per company; calendars, lines and settings resolve person → building → company (ADR-0136); the company and building pick is saved to the user’s account, not the address (ADR-0137). Still open: switching every address over to its claim row (p5-flip) and the one-time re-key of the placeholder building’s rows (p6-rekey-run).

The verdict, in plain English. PropFlow is clean for one building and half-built for a client with many. Today a phone line, a calendar, a mailbox, the rents and the settings all hang off one property, and the separation between clients is a filter in code rather than a wall the database enforces — which is how a brand-new org could see every property until Fede's fix. The design on this page keeps what is clean and adds one thing above it: the org, which is the client, the wall and the bucket everything else belongs to, with the building underneath, and every line, calendar, login and rule attached to whichever of the two it belongs to — so a change is a new row next to the old one, never a migration. Where it stands: the Implementation board reads 853 of 1,003 done, as of 14 October 2026 (31 proven in production). The org is an enforced wall on every read path, and an unknown org is refused; one login holds a membership per org and switches between them; calendars, lines and settings resolve person → property → org (ADR-0136); the selection is a per-user setting, not part of the address (ADR-0137); staff may pick All companies, which is the union read one org at a time (ADR-0136 Amendment 2). Still open: the per-address flip to the claim row (p5-flip) and the one-time re-key of the placeholder building’s rows (p6-rekey-run, scripts built, production run awaiting the founders). Chapter 00 is the whole thing in plain words, with eight worked examples; A4 is the plan of attack — what we do, in what order, and what proves each phase. We attacked the one-nameplate-per-number design six ways: the idea held, but its key was one notch too fine and is being repaired at zero migration cost — A2. Chapter 12 is the architecture in the standup's words; chapter 13 is the row-by-row gap between today and the design. The assessment runs A1 what we have · A2 what we want · A3 the gap · A4 the plan · A5 the stress bench · A6 the screens — and every today-claim in this paragraph is cited row by row in A1. For where the work actually stands today, the live board is the Implementation board, which carries A4’s ladder and A6’s UI lanes in one place, grouped by phase.

01 · The problem today

Every phone number in the office is scrawled on one sticky note on the fridge, and whoever wrote on it last wins.

The Sticky Note — five hand-kept guesses between an inbound call and its building WHAT ARRIVES HOW IT IS LOOKED UP TODAY WHAT GOES WRONG five guesses, no owner a number can be in the list twice whichever line loaded lasta stranger's call is answered as ours >1 match= dropped every lead lands in the umbrella A callon +1 000-400-0970 A textsame number An emailto the shared inbox Hand-edited number lista file in the repo Last writer winstwo entries, one map First-match mailboxmore than one → drop Unknown number → guessthe fail-open One umbrella building16 homes as one Two companies, one numbernothing refuses it Wrong building answersand books a tour there Lead dropped silentlyno task, no trace 16 homes in one boxevery lead needs a re-key
Figure 1. The Sticky Note. Today an inbound call, text or email finds its building through five hand-kept guesses, none of which is a database fact — so nothing can refuse a duplicate, name a property owner, or keep sixteen homes apart.
Read it at

Today a call, a text or an email finds its building through five separate hand-kept lists and guesses. Two of those lists can disagree, one silently throws leads away, and an unknown number gets answered as if it were ours. Western Slope's sixteen homes are squeezed into one pretend building because there is nowhere else to put them.

  • Five lookups, five owners, zero database facts — nothing can say "no".
  • The same number can be claimed twice; the winner is whichever file loaded last.
  • Unknown numbers are answered as ours instead of refused.
  • Western Slope's 16 homes are one umbrella building; every lead written there needs a re-key — Sep 12 ships on these rails on purpose, with a counter watching.

Proof: from today a counter shows how many leads were born in the wrong box, and an unknown number is refused instead of guessed — the tests are umbrella-tripwire (a dated count of rows born under the umbrella, from now) and unclaimed-address-refused-zero-reads (red today, closes at 3b/4).

Deeper → What it deletes — every line above by file:line · Honest limits

PropFlow Docs