Module unit
The deterministic engine behind the seam: an address in, four reports and findings out, fail-soft and reproducible.
Overview · Modules · Analysis Compute Engine
What it is
The analysis compute engine is the deterministic service that turns a verified address into evidence. It sits behind one seam, in its own failure domain, separate from the reactive backend that owns transactional work. The backend dispatches an analysis through one async entry point; the engine resolves the address once into the geographic identities its sources require, queries every data source in its native geography, serves what it can from our pre-cached reference layer, computes meaning in deterministic code, and returns four reports plus structured findings through one signed callback.
We call the governing idea "cache the data, compute the meaning." Reference data is pre-cached nationally and served locally at analysis time, cache-first with freshness tiers that vary by data kind, because a fact drawn from public government and open-data sources ages differently from a fact about the live market. Interpretation is deterministic code throughout. There is no language model anywhere in the data producers. We considered the obvious alternative, generative analysis, and rejected it: a report a customer underwrites against must be reproducible, explainable value by value, and stable under re-run. The agent owns synthesis and grading on top of the engine's output; the engine itself never guesses.
The skeptical reader will ask why this is a separate service at all rather than in-process analysis. Two reasons. First, failure isolation: analysis reaches out to external sources that can be slow, wrong, or down, and none of that may ever degrade the transactional backend a user is clicking on. Second, the work is genuinely different in kind. The backend stays TypeScript and reactive, shaped for transactional work. The engine is a deterministic service in its own failure domain behind the seam, and it offloads the genuinely heavy work, source document retrieval, spatial joins, and document parsing, to a serverless Python tier, since that is Python work and has no business inside a reactive backend. The seam is where the engine meets the transactional backend, and keeping it to one async entry and one signed callback is what keeps the meeting honest.
The questions it answers
This unit answers: what is this property, what is it worth against real comparable sales, what is the market around it doing, what does the zoning actually permit, and how much can each of those answers be trusted. Every value in the four reports carries provenance and confidence, in words, so the reader knows whether a number came from an authoritative record or an inference over coarser geography.
Scope and boundaries
In scope: resolving the address into the geographic identities its sources require, source querying in native geography, the pre-cached reference layer read path, deterministic computation of the four report types (comparable-sales valuation, market read, zoning, property snapshot) plus structured findings, and delivery through the signed callback. External access is rate-gated through one governor, and a failing route degrades the analysis instead of stalling it.
Out of scope: report storage and versioning (the reports unit owns the folder of artifacts), the projection of findings into editable fields (the deal workspace and reports units), underwriting math (the calculator), and agent synthesis (the agent surface). All reference data is reached through one access module; producers never touch storage directly. That boundary is what the designed storage swap counts on: the swap is designed, not yet run in anger, and the boundary is what would keep it a one-module change rather than a rewrite.
It is not a report renderer (it returns structure; presentation lives upstream), not a data warehouse (it reads through the warehouse boundary like everything else), not an AI service (no model in any producer), and not a general job runner (it does one thing: analysis of a verified address).
Withheld by design Tier 3
The identity of any external data source, producer internals, freshness tier values, and per-run economics are held at Tier 3, as is the source-level walkthrough.Withheld by design Tier 2
Deeper interface and controls detail is held at Tier 2.The contract
What it is responsible for, the one door in, the facts it announces, what it guarantees, and what it refuses. No fields, no schemas, no payloads; those live below contract shape and are held at Tier 2.
The seam is the door, and it is deliberately a single async entry point: the backend dispatches a verified address, and the engine acknowledges and works asynchronously.
That the door admits one action is the design, not a simplification for this document. A compute engine that accepts many entry shapes accumulates many failure shapes. Re-runs arrive through this same entry; the reports unit turns each completed run into a new artifact version, so the engine never needs an "update" verb.
The engine announces facts about work it finished. It does not emit progress chatter, and it does not announce into any other module's domain.
What done means
Done for this unit is not "the reports render." Done is that the engine keeps its promises in the cases that would break them: sources down, records wrong, callbacks replayed, geography coarser than the question. Every load-bearing rule below is expressed as code, a typed contract, a server-side check, or a failing test, never as prose discipline; that is one of our two build gates and this unit is where it earns its keep.
The engine's defining quality behavior is that its results tell the truth about themselves. A completed analysis states where each value came from and how much it can be trusted. When a producer failed soft, the report says less and says so, rather than saying the same amount with quiet gaps. When public records are wrong, the platform's correction mechanism (owned by the reports unit) short-circuits downstream reads; the engine's part of that bargain is never to overwrite honesty with confidence it did not earn. And when the reader asks how a number was computed, the answer is deterministic code that gives the same answer tomorrow.
Withheld by design Tier 3
The specific producer test suites, producer computation internals, and freshness tier values behind these gates are held at Tier 3.Where it connects