Fact-check · the contested-evidence ledger

Every disputed number, traced to what its source actually says

Thirteen claims from the inclusionary-zoning hearing, each mapped to the document behind it, what that document supports, and where it stops. Filter by side, search the text, and open any claim for its verdict and a direct link to both the original source and the archived, hashed copy.

The spine. Six years in, the two sides read the same permits and reach opposite conclusions, and the City Controller told council that neither side has definitive proof. The dispute is not arithmetic. It is which units count: completions (35 built) or a pipeline whose usefulness cannot yet be observed (100+ claimed).

Three reconciliations

The income threshold
A draft said $28,500; the published story says $37,600 for an individual at 50% AMI. The published figure ships; the draft appears nowhere.
"Fewer than 40 units"
Accurate as a count of completions: one finished IZ project delivered 35 affordable units. It counts nothing under construction or proposed.
The 30% drop
Real in the study's table, and not statistically significant by the authors' own statement — a 103-project citywide sample.
No claims match that filter.
Check the work. Every claim above resolves to a source archived and hashed in 01-sources-archive/. From the package folder:
python 03-harness/verify.py
It re-hashes each source and fails if any claim cites evidence that is not in the archive.

Reporter: Brian Nuckols · Public Source · story published Sept 10, 2025. Machine-readable source: 02-data/contested_claims.csv. Data CC BY 4.0.