Use this when you want human confirmation without guessing. Automated unit tests cover packs, gate, and lift MCP honesty; this list covers the live Command Center and Cloud Run path.
Surfaces
| Surface | URL |
|---|---|
| Command Center | https://midsphere.vercel.app |
| API | https://midsphere-api-1053689941073.us-central1.run.app |
| Repo | https://github.com/adi-IL/MidSphere |
Expected scenario roots (must match hop-0 graph names):
| Tab | root_urn dataset |
Risk | Quarantine | Open fork |
|---|---|---|---|---|
| Hospital | healthcare.raw_patients |
61 | mart_billing |
mart_demographics |
| Retail | ecommerce.raw_customers |
88 | mart_customer_360 |
mart_product_catalog |
| Taxi | nyctaxi.raw_yellow_trips |
65 | mart_monthly_revenue |
mart_trip_distance_stats |
- Open Command Center.
- Top bar should show GMS (on) when GMS is up, or GMS off.
- Connection labels:
- API · Job if canvas came from
GET /v1/jobs/latestor a live Run/Trip. - API · Sample if you only switched Hospital/Retail/Taxi without Run (demo fixtures).
- Offline if health fails.
- API · Job if canvas came from
- Click Retail without Run: graph hop-0 is
raw_customers(notraw_orders); risk 88. - Click Taxi without Run: hop-0 is
raw_yellow_trips(notraw_trips); risk 65. - Pipeline badge may show Sample while TopBar still shows API up — that is intentional.
- Select Hospital → Run (⌘↵). Wait until stages complete (can be 30–120s with Antigravity + MCP).
- Expect:
- TopBar API · Job, GMS
- Metrics gate BLOCKED (auto_trip)
- Graph:
mart_billingimpacted,mart_demographicsopen
- Open Telemetry. Prefer lines containing
official_mcp okfor real tool names (get_lineage,add_tags, …) when GMS + mutations are live. Pack findings still drive the graph. - Decision → Gate: job view shows BLOCKED for quarantine target.
- Click Lift (enabled when gate is BLOCKED).
- Network:
POST /v1/jobs/{id}/lift→ 200 - Metrics gate → LIFTED
- Lift button disables (“No active quarantine”)
- API body (Network tab) should include
remove_tags official_mcp okandmutations_live=Truewhen mutations are on
- Network:
- Click Trip again.
- Network:
POST /v1/jobs/{id}/trip→ 200 (may take ~60s+) - New job id, gate BLOCKED,
add_tags official_mcp okwhen mutations are on
- Network:
- Optional: Retail or Taxi → Run and confirm root_urn matches the table above (root string equals hop-0 name).
Note: Terminal one-liners after Lift may only say quarantine lift submitted…. Ground truth for live MCP is the job artifact events (remove_tags official_mcp ok), not only the short STATUS log.
API=https://midsphere-api-1053689941073.us-central1.run.app
# Health: GMS reachable; official_mcp.probed is false by default (not ok:false)
curl -fsS "$API/v1/health" | python3 -m json.tool | head -40
# Empty instance after cold deploy: 404 fast (no auto-pipeline)
curl -sS -o /dev/null -w "%{http_code} %{time_total}s\n" "$API/v1/jobs/latest"
# Create + trip (Hospital)
curl -fsS -X POST "$API/v1/jobs" -H 'Content-Type: application/json' \
-d '{"root_urn":"urn:li:dataset:(urn:li:dataPlatform:sqlite,healthcare.raw_patients,PROD)","mode":"full","auto_trip":true}' \
-o /tmp/job.json
python3 -c "import json;d=json.load(open('/tmp/job.json'));print(d['job_id'], d['quarantine']['gateStatus'], d.get('mutations_applied'))"
JID=$(python3 -c "import json;print(json.load(open('/tmp/job.json'))['job_id'])")
# Lift (live remove_tags when GMS + mutations)
curl -fsS -X POST "$API/v1/jobs/$JID/lift" -H 'Content-Type: application/json' -d '{}' -o /tmp/lift.json
python3 -c "import json;d=json.load(open('/tmp/lift.json'));print(d['quarantine']['gateStatus']);print([e['message'] for e in d['events'] if 'remove_tags' in e['message']])"
# gate-default-blocked is healthcare mart_billing only (OPEN after ecommerce latest is correct)
curl -fsS "$API/v1/gate-default-blocked" | python3 -m json.toolRetail / Taxi roots for POST:
urn:li:dataset:(urn:li:dataPlatform:snowflake,ecommerce.raw_customers,PROD)
urn:li:dataset:(urn:li:dataPlatform:bigquery,nyctaxi.raw_yellow_trips,PROD)
cd backend
ANTIGRAVITY_ENABLED=false USE_OFFICIAL_MCP=false python -m pytest tests/ -q
cd ../frontend
npm run buildGET /v1/health→datahub_reachable: trueanddatahubis nothttp://localhost:8080.- If GMS is wrong:
./scripts/gce_datahub_schedule.sh start-now(or re-point env; see scripts/README.md). - Deploy workflow restores a pre-existing non-localhost
DATAHUB_GMS_URLafter--env-vars-file(see.github/DEPLOY.md). - Confirm
cloudrun-env.yamldoes not setDATAHUB_GMS_URLto localhost.
| Check | Pass |
|---|---|
Cold GET /v1/jobs/latest empty |
404 quickly |
| Retail/Taxi sample + Run roots | raw_customers / raw_yellow_trips |
| TopBar data honesty | API · Sample vs API · Job |
| Trip with GMS | gate BLOCKED, optional live add_tags |
| Lift with GMS | gate LIFTED, live remove_tags (or honest sim remove_tags if GMS/mutations off) |
| Health MCP field | official_mcp.probed: false by default (not a false failure) |
| GMS after redeploy | still public GMS URL, reachable |
If GMS is stopped (cost schedule), UI may show GMS off and job-local quarantine; that is expected until start-now.