pi-dispatch v1.10.2
Configuration you can find without reading the source. pi-dispatch reads 106 environment variables across the worker, the receiver, the panel and the in-container runner. Twenty-six of them appeared in no .env.example, no README and no docs page, so the only way to learn one existed was to hit the refusal that names it.
Nine are now keys in .env.example, which pi-dispatch init copies verbatim into every new deployment:
GITHUB_PAT_VAR, which variable actually holds the PAT. The name you give is read verbatim and checked against nothing, so pointing it at a variable holding something else would send that value to GitHub as a token.GITLAB_AUTH_SOURCE,FORGEJO_AUTH_SOURCE,AZURE_AUTH_SOURCE, one value each,pat, which is also the default. They exist to refuse a wrong assumption of symmetry withGITHUB_AUTH_SOURCErather than to offer a choice, and the refusal needs that forge's token to be set.POLL_REPOSandPOLL_INTERVAL_SECONDS, plusPI_CODING_AGENT_DIR,PI_GRAPH_DIRandPI_DISPATCH_DEPLOYMENT_FILE.
The other seventeen carry a comment at their own read site saying why they cannot be keys, and .env.example closes with the accounting an operator can read: every variable that is not a key, and the reason.
New page: docs/polling.md. The webhook-free ingest path had one paragraph in the README and no reference anywhere, so an operator who chose it had nothing to read next. Both repository discovery modes, both boot refusals, the interval floor and what GitHub's own hint does to it, which endpoint serves which trigger, the closer-authority gate and its two log lines, and five limits worth knowing before relying on it.
New rule, with a check. REQ-DEPLOYMENT-BOOTSTRAP now states that every variable a loader reads is either a key in .env.example or is marked internal beside the read, and worker/test/env-docs.test.mjs enforces it. The gap took a long time to accumulate because nothing was watching; now something is.
Also here: the four run-mirror tests that turned red on main when their fixed 2026-08-30 fixtures aged past a seven day retention window. They pin an instant now rather than a distance from today. Repository health, no behaviour change.
Upgrading: npm install. No service reinstall. init never overwrites an existing .env, so if you want the new commentary in your own file, diff it against the .env.example that ships in the package.
Worth knowing if you run Google models: doctor accepts GOOGLE_API_KEY for PI_PROVIDER=google, and accepts gemini as a provider name. pi reads neither, so both configurations pass the preflight and then refuse every job before spending anything. Tracked as issue #286, not fixed here.
@edgehero/pi-dispatch moves to 1.10.2 and @edgehero/pi-dispatch-admin to 1.10.1, the latter because the setup wizard pins the worker version it installs. @edgehero/pi-dispatch-receiver stays at 1.5.0; nothing in it changed.