# Pittsburgh Inclusionary Zoning Record

The reproducible evidence behind Brian Nuckols's *Public Source* story on Mayor Ed Gainey's citywide inclusionary-zoning proposal, **"Gainey inclusionary zoning plan gets hearing, with vote possible this month"** (September 10, 2025).

The story's finding is a data vacuum: after six years, the city has published no definitive count of the affordable units inclusionary zoning has produced, while both sides cite contested studies. This repository compiles the project-level dataset nobody had, archives every source both sides fought over, and lets any reader re-derive the numbers.

## The reader contract

| Promise | How to check it |
| --- | --- |
| Every figure traces to a document. | Open `02-data/*.csv`; each row carries a `source_id` that resolves in `01-sources-archive/sources.json`. |
| Every source is the document it claims to be. | `python 03-harness/verify.py` re-hashes each file against its recorded SHA-256. |
| Every contested claim is backed by an archived source. | `verify.py` fails if any claim in `contested_claims.csv` cites evidence that is not captured. |
| The headline numbers reproduce. | `python 03-harness/build.py --check` recomputes the affordable-units tally and compares it to the committed summary. |
| Nothing ships while a check fails. | `python 03-harness/gate.py` exits non-zero on any gap. There is no override. |
| Corrections are visible, never silent. | `CORRECTIONS.md` is append-only. |

Run all of it at once:

```
python 03-harness/check.py
```

No network, no credentials. If it prints TRUSTED, the numbers in the story are the numbers in the archived documents.

## What's here

| Path | What |
| --- | --- |
| `site/index.html` | The reader-facing piece: the finding, the dataset, the dueling evidence, how to check. |
| `appendix-dataviz/index.html` | Six charts, light and dark. |
| `05-sources/index.html` | The human-sources index: eight interviews, the hearing voices, the documentary bench. |
| `fact-check/index.html` | The **interactive** contested-claims ledger: filter by side, search, expand any claim for its verdict and links to both the origin source and the archived, hashed copy. |
| `FACT-CHECK.md` | The same ledger in prose, with the three reconciliations. |
| `02-data/` | The dataset. `iz_projects.csv` is the original contribution; `contested_claims.csv` is the machine-readable fact-check. |
| `01-sources-archive/` | Every captured source, its `.sha256` sidecar, and generated `MANIFEST.md` / `PROVENANCE.md`. |
| `03-harness/` | `capture / build / verify / gate / check / generate_manifests / make_workbook`. |
| `spreadsheet/` | `Pittsburgh-IZ-Record.xlsx`, the whole dataset in one workbook. |
| `METHODOLOGY.md` | How the ledger was built and where it stops. |
| `PORTABILITY.md` | How to re-run the method on another policy. |

## The headline

Affordable units the mandate has produced, disaggregated by what the dueling claims blur together:

- **35** completed, occupiable, attributable to inclusionary zoning (Arsenal 201 Phase II).
- **16** under construction (The Caroline, 16 of 159).
- **100+** claimed in the proposed pipeline (testimony, not itemized).
- **3** projects documented as downsized to 19 units to fall below the 20-unit trigger.

The gap between 35 built and a 100-plus pipeline is the vacuum the city has not filled.

## License

Data under CC BY 4.0; code under MIT. See `LICENSE`. Archived source documents remain their publishers' property and are held here for verification.

Reporter: Brian Nuckols · *Public Source*.
