The engineering track is complete in the sense that matters least and most: everything that could be built without the outside world is built, and nothing that needs the outside world is. Thirty fictional lineages have been through the whole pipeline, six fixture sources have been hauled into a populated registry, and the checks have been checked — all of it on data written by the author.
A gate that is waiting is not a gate that is unbuilt. Each one below names the command that proves its machinery works today, on fixtures. That distinction is the reason to run preflight before the inputs arrive rather than after: it separates "we cannot do this yet" from "we have not built this".
gii preflight and there is deliberately no /api/v1/preflight — the same judgment that keeps outbound fetches CLI-only. The command reports presence and never a value: no credential, no prefix, no length, no hash, because a hash is a value under another name and a length is a hint.The gates #
Connector credentials
Needs: The API keys and tokens named by the connector specs, provisioned into the deployment environment or a secrets manager — never into the repository.
Unblocks: Step 2's live connector shakedown: `gii probe` to confirm each key works without writing anything, then `gii ingest` over the real transport, landing raw pages in the append-only evidence store.
Machinery proven today by gii probe <source>
PEPI premium key
Needs: PEPI_API_KEY, the upstream first-party evidence source's credential.
Unblocks: Pointing the adapter acceptance suite at the live client instead of fixtures. The suite itself already passes.
Machinery proven today by npm test --workspace @gii/adapters
Real 2015–2025 decisions
Needs: Decision events ingested from live sources into the registry, replacing the fictional corpus in the candidate frame.
Unblocks: Step 4's pilot selection against a real frame, and Step 5's walking skeletons on decisions that actually happened.
Machinery proven today by gii rehearse
Blinded human reviewers
Needs: Reviewers scoring real cases independently, so the inter-rater statistics describe people rather than fixtures.
Unblocks: The calibration run, and the anchor revision that follows from its findings (Work Package D).
Machinery proven today by gii calibrate
Phase-1 expert review
Needs: Subject-matter reviewers working from the methodology review packet and filing findings against the definitions and risks.
Unblocks: The Phase-1 exit condition itself. Everything downstream is provisional until it clears.
Machinery proven today by gii traceability --gaps
The credentials, by name #
22 environment-variable names are declared across the connector specs and the PEPI adapter — seven further sources need no key at all. No credential value has ever entered this repository, and the names below come from the specs themselves rather than a second list someone maintains by hand, so a new connector cannot be provisioned against a name nobody wrote down.
Declared credentials by auth class
The class determines how the credential travels — a query parameter, a header, or a bearer token — and therefore what has to be redacted from every surfaced line.
22 credentials in total
| Source | Environment variable | Auth class |
|---|---|---|
| pepi | PEPI_API_KEY | premium-key |
| congress-gov | CONGRESS_GOV_API_KEY | registration-key |
| govinfo | GOVINFO_API_KEY | registration-key |
| regulations-gov | REGULATIONS_GOV_API_KEY | api-key |
| courtlistener | COURTLISTENER_API_TOKEN | token |
| bls | BLS_API_KEY | registration-key |
| bea | BEA_API_KEY | registration-key |
| census | CENSUS_API_KEY | registration-key |
| usitc-dataweb | USITC_DATAWEB_TOKEN | token |
| dol | DOL_API_KEY | registration-key |
| fred | FRED_API_KEY | api-key |
| eia | EIA_API_KEY | registration-key |
| hud | HUD_API_TOKEN | token |
| billing | STRIPE_SECRET_KEY | billing-key |
| billing | STRIPE_WEBHOOK_SECRET | billing-signing |
| billing | STRIPE_PRICE_RESEARCH | billing-price |
| billing | STRIPE_PRICE_COMMERCIAL | billing-price |
| billing | GII_KEY_SIGNING_SECRET | signing-secret |
| SMTP_HOST | smtp | |
| SMTP_USER | smtp | |
| SMTP_PASS | smtp | |
| SMTP_FROM | smtp |
Why the order matters #
The gates are not independent. Credentials unblock the live shakedown, which unblocks a real candidate frame, which unblocks the walking skeletons and then the calibration run. Only the Phase-1 expert review sits outside that chain — it gates the definitions rather than the data, and it can start today. The traceability matrix and the review packet exist so it can.
Provisioning every credential would still not report readiness. Human reviewers and an expert review cannot be supplied by setting a variable, and a preflight that went green on secrets alone would be lying about the thing that actually blocks the pilot. The command asserts that in a test.
The full sequence is docs/pilot-runbook.md in the repository. Run the check with gii preflight or gii preflight --json.