Turn on Production QA for the Jaah project
## Gap (found by the Finish phase of epic 12247)
All 13 build children merged, but the epic's own ask — "Dogfood on the Jaah project first" and "A failed Jaah Deploy files a task on the Jaah project with no runner watching it" — is not live. Nothing turns it on, by design (D9): `apps/api/app/production_qa/__init__.py:8-11` ("no code, seed or revision turns any of them on"), `gate.py:38-44` (org switch, then project opt-in), migration `202611012000_production_qa.py:384,408-410` (defaults false). The Deploys trigger is created only by Connect deploys (`routes/production_qa.py:746-773`) and the default automations only by `POST /api/projects/{id}/production-qa/default-automations` (`routes/production_qa.py:853-889`). Every live oracle (AC-1, AC-5, AC-15 live, AC-19, AC-27) was deferred because dev.jaah.ai is unreachable from the build nodes (private 10.60.x; the Finish node's HTTPS to dev timed out too). Cause: operator enablement + a tailnet node, not code.
## Do (on a node that reaches https://dev.jaah.ai — confirm with `curl -sS -o /dev/null -w '%{http_code}' https://dev.jaah.ai/api/health` first; if no such node, ASK `Access`)
All changes through the console UI only (CLAUDE.md hard rule), signed in with `org/console/dev-login` (org Admin; operator plane for the org override).
1. Turn `production_qa` ON for the Jaah org (org override) and opt the Jaah project in (Project › Production QA).
2. Project › Production QA › Connect deploys; add the shown webhook(s) on `jaah-ai/jaah` (repo admin: `me/users/roman@gmind.tech/github_admin`) if the console does not register them itself.
3. Click "Create default automations".
4. In `apps/api/app/production_qa/__init__.py` docstring (the router's single home for Production QA) add a short "Turning it on for a project" paragraph naming steps 1–3. This is the only repo change.
5. After step 6 passes, remove the "watch Jaah Deploy of your PR" line from the Jaah project's runner instructions (Project › settings, through the console) — D10.
## Acceptance (each with its oracle)
- AC-1: the next PR merged to develop shows its Jaah Deploy and status on Deployments within 60 s of the GitHub event — screenshot + timestamps (GitHub run `updated_at` vs the row's received time).
- AC-4: that PR's task Outcome panel / ledger row carries `deployed` after the `apply_edges` cron — screenshot.
- AC-19: a FRESH `workflow_dispatch` Jaah Deploy failure (not a redelivery — redelivery is deduped by GUID) files exactly one `triage` task on the Jaah project within 60 s carrying run link, failing job and step, and range/PRs — task link + timing. Use a dispatch that fails before any deploy step changes dev.
- AC-15 live: a signed Sentry sample to a Sentry trigger on a test project with the gate ON files one task; the same body again files none — task link + incident count 2.
- Docstring paragraph merged via the normal PR + merge lane; `./dc check quick` green.
- Deploy-watch line gone from the Jaah project instructions (screenshot), only after AC-19 passed.
Out of scope: no code change beyond the docstring paragraph; do not enable `production_qa` for any other org or on main (app.jaah.ai); do not change gate, filing or ingestion logic — a defect found goes in its own task.
Done means:
- AC-1, AC-4, AC-19, AC-15 live each observed on dev with evidence in the report.
- Jaah org ON, Jaah project opted in, Connect deploys connected, 4 default automations Active — screenshot of Project › Production QA.
- Required checks: ./dc check quick, merge lane full gate.
Outcome
Activity
- Ready
- Runner started
- Awaiting response