# STATUS — phase pxgate (Builder)

**Phase plan:** `/srv/cc-ci/cc-ci-plan/plan-phase-pxgate-proxy-healthgate.md`
**Phase start:** 2026-06-13

---

## Gate: M1 — PASS @2026-06-13T13:00Z (Adversary cold-verified)

See REVIEW-pxgate.md for full evidence. Summary:
- Code change correct: `health_path="/api/version"`, `health_domain` removed → defaults to `traefik.ci.commoninternet.net`
- Controlled reproduction: dashboard=0 → old probe=404, new probe=200 ✓
- Consumer ordering unchanged ✓; alert dir empty ✓; DEFERRED + DECISIONS updated ✓
- Gate has teeth: `health_code()` returns 0 on curl failure → 0 ∉ `health_ok=(200,)` → rollback triggered

One non-blocking documentation note from Adversary: STATUS claim said "999 error sentinel" — actual code returns 0. No code defect.

---

## Gate: M2 — PASS @2026-06-13T13:44Z (Adversary cold-verified)

See REVIEW-pxgate.md for full evidence. Summary:
- nixos-rebuild at ~13:43 UTC; deploy-proxy re-ran with new nix store path `8qjh8apxcbs85asgizkymjskicf4zmsl`
- New runner `/nix/store/5hic3aba65i88m1ib67b7g6dwzrzd1z2-runner/warm_reconcile.py` confirmed: `health_path="/api/version"`, `health_domain` absent → probe is `traefik.ci.commoninternet.net/api/version`
- deploy-proxy `active (exited)` in 279ms (nixos-rebuild run) and 17ms (cold-boot sim) — no alert, no deadlock
- Cold-boot simulation: dashboard stopped → proxy started → `active (exited)` immediately ✓ → dashboard restored ✓
- All 9 services 1/1 after rebuild and cold-boot sim; `ci.commoninternet.net` → 200; `/api/version` → 200
- Rollback path unchanged: `health_code()` returns 0 on curl failure → 0 ∉ `health_ok=(200,)` → rollback ✓
- A1/DEFERRED entry closed (at M1); consumer ordering unchanged ✓

---

## DONE

Phase pxgate complete. All Definition-of-Done items met and Adversary-verified:

| Item | Status | Evidence |
|---|---|---|
| Cycle broken (deploy-proxy↔dashboard) | ✅ | Cold-boot sim: proxy active (exited) without dashboard |
| Dashboard-independent health gate | ✅ | `traefik.ci.commoninternet.net/api/version` — traefik's own API |
| Rollback intact | ✅ | Gate returns 0 on failure → not in (200,) → rollback triggered |
| No consumer mis-ordered | ✅ | Adversary P3 probe: all After=deploy-proxy consumers unchanged |
| Running server unaffected | ✅ | All 9 services 1/1; ci.commoninternet.net → 200 |
| A1/DEFERRED closed | ✅ | DEFERRED.md entry closed at M1; DECISIONS.md updated |
| M1 Adversary PASS | ✅ | REVIEW-pxgate.md @2026-06-13T13:00Z |
| M2 Adversary PASS | ✅ | REVIEW-pxgate.md @2026-06-13T13:44Z |

Fix commit: `0e9fd38` (`claim(pxgate-M1): change traefik health probe to /api/version`). Live since nixos-rebuild @2026-06-13T13:43Z.
