Tier 3 T3-3 Report — Parallel soak + tunnel route¶
Date: 2026-08-28
Status: T3-3 COMPLETE. PAUSED — await upstream product migrations before T3-4. See TIER_3_ADMIN_PAUSED_STATUS.md.
Parent: TIER_3_ADMIN_T3-2_REPORT.md
1. Cloudflare Tunnel route (no DNS change)¶
| Item | Value |
|---|---|
| Tunnel host | lastvet-edge (192.168.1.89) |
| Tunnel name | lastvet-r940 |
| New ingress | admin.last1.enterprises → http://192.168.1.97:5000 |
| Config validated | cloudflared tunnel ingress validate → OK |
| Service | cloudflared restarted, active |
Script: scripts/last1-admin/configure-tunnel-route-r940.sh
Internal reachability (no public DNS cutover)¶
| Test | Result |
|---|---|
lastvet-edge → http://192.168.1.97:5000/ |
HTTP 200 |
admin-r940 → GET /api/auth/user |
HTTP 401 (expected unauthenticated) |
Public https://admin.last1.enterprises/ |
HTTP 200, headers include x-railway-edge: lax1 |
Interpretation: Tunnel ingress is registered on Cloudflare edge. Public DNS/origin routing still sends production traffic to Railway until T3-5. No prod cross-traffic to R940 observed.
T3-3 bind change: Container moved from 127.0.0.1:5000 to 192.168.1.97:5000 so tunnel origin is reachable from lastvet-edge. UFW allows 5000 from 192.168.1.89 only.
2. Parallel soak setup¶
| Stack | Role | Health |
|---|---|---|
Railway (admin.last1.enterprises) |
Production auth/admin | Public 200, Railway headers |
R940 (admin-r940 VM 115) |
Parallel soak (no live prod traffic) | LAN 200 / auth 401 |
30-minute cron probe (VM 115)¶
| Item | Value |
|---|---|
| Script | /opt/last1-admin/soak-health-probe.sh |
| Cron | */30 * * * * |
| Log | /opt/last1-admin/soak/probe.log |
| Checks | GET / → 200, GET /api/auth/user → 401 |
| Metrics | Textfile → admin_r940_probe_* via node_exporter |
Scripts: scripts/last1-admin/soak-health-probe.sh, install-soak-cron-r940.sh
First probe: 2026-08-28T16:59:53Z root=200 auth=401 ok=1
3. Observability + alerts¶
node_exporter (VM 115)¶
Installed on admin-r940; UFW allows :9100 from 192.168.1.93 (observability Prometheus).
Script: scripts/last1-admin/install-node-exporter-r940.sh
Prometheus scrape target added: 192.168.1.97:9100 (job=node). Verified up=1.
Alert rules (observability VM)¶
| Alert | Tier 2 analogue | Severity | Signal |
|---|---|---|---|
| AdminHostDown | N8nHostDown / GoTrueDown | critical | node_exporter on .97 down 3m |
| AdminHealthProbeFailed | — (soak-specific) | warning | admin_r940_probe_success == 0 for 35m |
| AdminAuth5xxRateHigh | Last1idAuth5xxRateHigh | warning | admin_r940_probe_auth_5xx == 1 for 5m |
Runbooks:
docs/observability/runbooks/admin-host-down.mddocs/observability/runbooks/admin-health-probe-failed.mddocs/observability/runbooks/admin-auth-5xx-rate-high.md
PostgresDown equivalent: N/A (admin uses hosted Supabase until Tier 6; no Postgres on VM 115).
4. BWS / env verification (VM 115)¶
| Check | Result |
|---|---|
| Rendered env path | /opt/last1-admin/.env (mode 600) |
| Key count | 42 lines (36 BWS LAST1ADMIN_R940_PROD_* stripped + derived defaults) |
LAST1_ID_API_BASE |
https://auth.last1.id |
| Container env | Loaded via --env-file |
| Docker bind | 192.168.1.97:5000→5000 |
No cross-project BWS inference. Railway production vars unchanged.
5. Cross-traffic check¶
| Signal | Observation |
|---|---|
| Public response headers | Still x-railway-edge, not R940-only stack |
| R940 container logs | Startup + ops-digest scheduler only; no public browser/session traffic pattern |
| Tunnel | Route exists; DNS not cut over |
Conclusion: Railway remains production auth for admin.last1.enterprises. R940 is parallel soak only.
6. Anomalies / follow-ups¶
| Item | Severity | Notes |
|---|---|---|
| T3-2 localhost bind | Fixed in T3-3 | Tunnel origin required LAN bind + UFW from edge |
Soak probe curl -f bug |
Fixed | Auth 401 was concatenating 000 in metrics; script updated |
| VM GitHub deploy key | Low | Still rsync-from-operator pattern (same as n8n Tier 1) |
| Prometheus rules live on VM | Info | Source scripts/runbooks in git; /etc/prometheus/rules/*.yml edited on observability VM (no git mirror yet) |
No blocking anomalies.
Constraints honored¶
| Constraint | Status |
|---|---|
| No DNS changes | OK (public still Railway) |
| No Railway teardown | OK |
| Railway prod auth for admin | OK |
| No Supabase migration | OK |
| STOP before T3-4 browser E2E | OK |
STOP — Next gate¶
| Phase | Status | Ryan action |
|---|---|---|
| T3-3 Parallel soak + tunnel | Done | Approve T3-4 (browser E2E, Ryan present) |
| T3-4 Browser E2E | Blocked | Ryan present for unit switcher matrix |
| T3-5 DNS cutover | Blocked | — |
| T3-7 Railway teardown | Blocked | — |
T3-4 will: browser sign-in, unit switcher, proxy smoke across admin business units on R940 stack (Railway still prod until T3-5).