# Experiment: Central API Down 30 Minutes
Date: 2026-06-24
Phase: 24 — Climate Resilience Verification

## 1. Hypothesis
If I stop the central API while the ward gateway continues running and replay
`ward-outage-reconnect-01` against the gateway, I expect critical potassium
observations to alert locally on the gateway with zero new rows on central,
because Tier 1 safety is ward-local and sync is deferred until reconnect.

## 2. Baseline
- Encounter: `0f81a139-9f33-47ad-9df9-09c7a6c011c8`
- Gateway status: ONLINE
- Gateway buffer depth: 0
- Central observation count (encounter): 7 (Phase A replay complete)

## 3. Break
```bash
SKIP_DOCKER=1 ./scripts/run-phase24-verification.sh
# Internally: pkill central VigilCareClinicalAPI process, wait ~35s for gateway
# to detect central unreachable, then replay scenario against gateway.
```

Manual equivalent:
```bash
pkill -f VigilCareClinicalAPI
sleep 35
dotnet run --project VigilCare.Simulator -- replay \
  VigilCare.Simulator/Scenarios/List/ward-outage-reconnect-01.json \
  --gateway --encounter-id 0f81a139-9f33-47ad-9df9-09c7a6c011c8 \
  --gateway-token "$GATEWAY_JWT" --speed 0
```

## 4. Observe
- Gateway created `CriticalPotassiumMeqL` alert at scenario T+45 min (K+ 6.8 mEq/L)
- RN-Wu ack recorded locally at T+50 min (`status: Acknowledged`, `acknowledgedBy: RN-Wu`)
- Central API unreachable during outage — no new central observations ingested
- Gateway buffer depth (unsynced `buffered_sync_items`): **10**
- Phase B replay sent 7 observations, 1 critical alert, 1 ack (plus warning-tier alert)
- Gateway local alerts after Phase B:
  - `CriticalPotassiumMeqL` — Acknowledged by RN-Wu
  - `WarningPotassiumMeqL` — Open

## 5. Fix / Outcome
- Bug found? **no** — behavior matches design (local Tier 1 path + deferred sync)
- Fix applied: no fix needed — by design

## 6. Verify
(Post-reconnect results captured in `2026-06-24-central-down-fixed.json`)
