# Run & Deploy

## Local run
```
cd delivery-package/us-sled-contact-directory
node src/collect.mjs     # re-fetch the dataset from the public source
node verify.mjs          # 17/17 checks; writes verification-report.*
node build-site.mjs      # writes public/index.html
```
Requirements: Node >= 18. No npm install, no API key. Network is needed only for
`src/collect.mjs` (host: `educationdata.urban.org`); `verify.mjs` is offline.

## Use the data
- Open `dataset/contacts.csv` (full) or `dataset/by-state/<ST>.csv` (per state).
- Or open `public/index.html` in a browser for the searchable, state-grouped view.

## Publish (Forge pipeline)
```
cd ../..
node tools/forge-frontier.mjs --outcome delivery-package/us-sled-contact-directory
node tools/forge-proof.mjs --outcome delivery-package/us-sled-contact-directory --verify "node verify.mjs" --report verification-report.json
node tools/forge-gate.mjs --outcome delivery-package/us-sled-contact-directory --action publish
node delivery-package/us-sled-contact-directory/publish.mjs
node tools/forge-portfolio.mjs
```
The published site lands at `published/us-sled-contact-directory/` and is deployed
to GitHub Pages by `.github/workflows/deploy-pages.yml` on push to `main`.

## Disclosed seams (read before using for outreach)
The `contactName`, `contactTitle`, `email`, and `domain` columns are **empty** —
the source does not publish them (see `proof/LIMITATIONS.md`). Phone + address +
organization name are real. For email/title/domain coverage, follow the v2 sourcing
plan in `design/CAPABILITY_GAP.json`.
