The Setup
San Francisco has 318 tracked H3 cells. The development pipeline score aggregates permit velocity, permit type mix, and recent filing patterns into a single 0-to-100 figure. In SF, the distribution has a sharp split.
175 cells score exactly 33. That number is not a score. It is a sentinel — the value assigned when the permit feed returns no data for that cell. 55% of SF's development pipeline map is dark.
The 143 cells with real pipeline data tell a different story. Their scores range from 4 to 68. Only one cell crosses 50. The median sits closer to 15 than 33. The metro average is 24.6 — second lowest of any tracked market, behind only Denver's 15.9.
The Chain
The split between sentinel cells and data cells follows a consistent spatial pattern driven by a single variable: safety_environment score.
The 175 cells with pipeline=33 carry an average safety_environment score of 86.1. The 143 cells with active permit data carry an average safety_environment score of approximately 61 — 25 points lower. High-safety neighborhoods return no permit data. Lower-safety neighborhoods return real data, and that data shows extremely low pipeline activity even where it exists.
High-safety SF cells are the established residential cores: owner-occupied hillside districts, NIMBY-entrenched western neighborhoods, areas where entitlement processes routinely last five or more years. These are also the neighborhoods where institutional CRE due diligence typically begins. They return a sentinel.
The ESGI signal compounds the problem. 310 of 318 SF cells carry an ESGI score of zero. Eight cells have non-zero values, none exceeding 1.0. The gentrification-stage inputs that anchor ESGI are producing no usable signal in SF. The Chicago analysis showed ESGI thresholds above 10 suppressing pipeline scores; in SF, the mechanism is different — ESGI isn't high enough to suppress anything. It simply isn't present.
The Implication
A permit-velocity model that uses permit presence as a proxy for market activity generates a systematic confidence inversion in SF. The cells with the highest safety scores — most likely to attract institutional attention — show no permit data. The cells with active permit data cluster in neighborhoods with safety scores 25 points lower, and even there, pipeline scores rarely exceed 20.
The model is not neutral on this. It produces maximum uncertainty (sentinel) exactly where the question is most likely to be asked. A development analyst looking at Pacific Heights, Noe Valley, or the Sunset sees a 33 and draws one of two conclusions: either the market is genuinely inactive (possibly correct) or the data feed is not covering those neighborhoods (also possibly correct). The model cannot distinguish between those explanations, and neither can anyone reading the output.
The one SF cell scoring 68 is the exception. Its pipeline score is 2.8 standard deviations above the metro mean. What it represents — an actual development corridor, a data artifact, a single large project driving all permit activity in that hex — is not visible from the score alone.
What to Watch
- Whether the SF permit feed is pulling sub-permit records (MEP permits, grading, demolition). Austin's permit corpus was 75.9% MEP — electrical, plumbing, mechanical — masking new construction signals beneath maintenance work. SF may show a similar composition issue in the 143 cells that do return data.
- Civic records for the 175 sentinel cells — specifically hostility_index and litigation_risk_score. If hostility_index is high in those cells, permit absence is a real market signal (entitlements aren't being filed), not a coverage gap. If it is low or absent, the feed is simply not covering those neighborhoods.
- Denver's trajectory as a comparison. Denver has the lowest metro pipeline average at 15.9, with the ESGI signal explicitly absent. SF at 24.6 average with essentially zero ESGI coverage suggests similar dynamics operating in a different cost and regulatory environment.
Limitations
The sentinel value of 33 was established in prior analysis as indicating an empty permit feed. If the pipeline scoring model uses a different sentinel in the SF context — or if 33 reflects a calibrated low-activity score rather than a data absence — the inversion described here would not hold. All 318 SF cells carry needs_refresh = true, meaning the scores are awaiting a re-run; values reflect the most recent computed state as of August 7, 2026. The safety_environment averages cited for sentinel vs. data cells are metro-internal comparisons and should not be compared across markets without normalizing for baseline safety distributions.
Axiom Locus · Cell Scores · August 7, 2026