Gate 0.5 — exit checklist¶
Updated: 2026-07-23
Spec: lastvet-gates/gates/GATE_0.5_hardening_and_proof.md
Gate labels (do not conflate)¶
| Milestone | Status | Date | Meaning |
|---|---|---|---|
| Gate 0 | ✅ EARNED | 2026-07-21 | Production E2E proof on AWS: hardened TestFlight human leg + facilities/ROI/OTP/revoke loop against api.last.vet. Evidence: E2E_RUN_LOG_2026-07-15.md (A1 scripted + human on AWS), E2E_RUN_LOG_2026-07-21_VA_PARALLEL_TRACK_HUMAN.md (P0 parallel-track human). |
| Gate 0.5 exit | ✅ COMPLETE | 2026-07-23 | All twelve Gate 0.5 exit items below satisfied. Hardening, ops, legal prep, and consent revocation client proof closed. Gate 1 sandbox may begin. |
Gate 0 is the product proof. Gate 0.5 exit is the twelve-item hardening checklist that wraps it. Earning Gate 0 did not wait on D11/D12; closing Gate 0.5 did.
Exit items (12/12)¶
| # | Item | Status | Evidence / notes |
|---|---|---|---|
| A1 | Scripted + human E2E run log | ✅ | E2E_RUN_LOG_2026-07-15.md — scripted + Ryan TestFlight on AWS api.last.vet. |
| A2 | Bearer JWT harness | ✅ | e2e-roi-gate0-full.sh pass 2026-07-15 on AWS; CloudWatch OTP; defaults off .railway.app. |
| A3 | Facilities leg (live open-data key) | ✅ | verify-facilities-sd.js → 11 facilities, 0 missing anchors (facilities-sd-verification.log, 2026-07-15). |
| A4 | Grant revocation proof (dual grants) | ✅ | 2026-07-23 TestFlight: Edit Access (grant_amended), Revoke all (no 500 after audit migrations 054–056), single-grant Revoke Access, pull-to-refresh. iOS 21695a7 + prod API 9282ab4. API: 052/053, tests/dual-grant-revocation.test.ts. 409 survivor path untested on prod (single merged grant); primary path Revoke all verified. Spec: docs/api/DUAL_GRANT_SPEC.md. |
| B4 | Build secrets in Bitwarden SM | ✅ | BITWARDEN_AUDIT.md — core LastVet keys present. SENDGRID_API_KEY, GOOGLE_OAUTH_CLIENT_SECRET gaps not Gate 0.5 blockers. |
| B5 | Prod DB migrations 042/043 + 046 batch | ✅ | 042/043 on prod; 046–048 + lastvet_app cutover prod 2026-07-11 (TRACK3_PHI_RLS_PLAN.md). |
| B6 | TestFlight Bearer JWT on device | ✅ | E2E_RUN_LOG_B6_TESTFLIGHT.md — full loop on physical iPhone. |
| B7 | Pentest remediation status note | ✅ | docs/security/SECURITY_PENTEST_STATUS.md (2026-07-11). docs/security/SECURITY_POSTURE_DATABASE_ACCESS.md (2026-07-16). |
| C8 | Remove VA API matrix from veteran onboarding | ✅ | plannedAPICard removed from OnboardingFlowView (2026-07-11). |
| C9 | SMS OTP ship or defer | ✅ | Explicit defer: DECISIONS.md (email OTP is production path). |
| D10 | Hogan Lovells Part 2 copy lock | 🟡 Tracked, not signed | Copy parameterized in app; not counsel-locked. Per spec: flagged-and-tracked satisfies Gate 0.5 exit. Blocks real veteran pilot, not Gate 1 sandbox. HL engagement in flight. |
| D11 | Gate 1 threshold doc | ✅ | Closed 2026-07-16. docs/planning/GATE_1_THRESHOLD.md → canonical lastvet-gates/gates/GATE_1_TRACTION_THRESHOLD.md. |
| D12 | VA production access tracker | ✅ | Closed 2026-07-16. docs/compliance/VA_PRODUCTION_ACCESS_TRACKER.md — case #00015000, timeline, cadence. |
Summary¶
| Bucket | Done | Open |
|---|---|---|
| A — Prove Gate 0 | 4/4 | — |
| B — Ops & security | 4/4 | — |
| C — Veteran IA | 2/2 | — |
| D — Legal & Gate 1 prep | 3/3 | D10 tracked-not-signed (exit OK; pilot blocked) |
Gate 0.5 exit: ✅ Complete (2026-07-23).
Gate 1 sandbox: ENTERABLE (OS mechanics per lastvet-gates/gates/GATE_1_sovereign_profile_and_os.md).
Still blocks real veteran pilot (not Gate 0.5): D10 HL Part 2 copy lock; VA production case #00015000 IN REVIEW.
Infrastructure — Railway LastVet rollback net¶
| Item | Status | Evidence |
|---|---|---|
| Railway prod teardown | ✅ 2026-07-15 | last.vet-api + postgres-lastvet-prod deleted. pg_dump: backups/railway-lastvet-prod-2026-07-15.dump (gitignored, local). |
Parallel track — VA production readiness¶
Not Gate 0.5 exit criteria. Required before Gate 1 production pilot; does not block Gate 0 earn or Gate 1 sandbox OS build.
| Item | Status |
|---|---|
| P0.1–7 + Phase B | ✅ Shipped 2026-07-15–16 |
| Inbox OTP harness (Appendix B) | ✅ Proven prod 2026-07-16 |
SECURE_LINK_E2E_LOG_OTP teardown |
✅ Done 2026-07-16 |
| Scripted parallel leg | ✅ E2E_RUN_LOG_2026-07-16_VA_PARALLEL_TRACK.md |
| Human parallel leg | ✅ E2E_RUN_LOG_2026-07-21_VA_PARALLEL_TRACK_HUMAN.md |
Parallel track exit: ✅ Complete (2026-07-21).
Post–Gate 0.5 (not blocking exit)¶
- RLS batch 2 (plan only —
docs/runbooks/gate-0.5/GATE_0.5_STATUS.md§ below in prior rev; see TRACK3) - Shannon pentest retest (plan only)
- Prod clinic owner MFA before
CLINIC_REQUIRE_OWNER_MFA=trueon prod
RLS batch 2 — PLAN ONLY¶
Scope: veterans, consent_grants, secure_access_links, coordination tables with veteran FK. Effort: ~2–3 days. Does not block Gate 0.5 exit.
Shannon pentest retest — PLAN ONLY¶
Trigger: After RLS batch 2 on staging. Effort: External + ~1 day engineering support.