Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions BUILD_WEEK.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ Work started during the submission period includes:
| Phase 10 | Guarded live k3s detection, chaos, recovery, correlation, and measured evidence | Issue #116 |
| Phase 11 | Judge onboarding doctor, single-path setup, and rehearsal diagnostics | Issue #118 |
| Phase 12 | Canonical resilience lifecycle and unambiguous evidence provenance | Argus #120 / Sentinel #63 |
| Phase 13 | Persistent Phoenix scenarios, approvals, agent runs, and restart history | Phoenix #73 |
| Phase 14 | Judge-facing read-only platform readiness panel | Argus #122 / Sentinel #65 |
| Final video | Two-minute judge story with frame-by-frame screen, action, narration, timing, and fallback plan | Pending |

### Phase 12 — truthful resilience proof timeline
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ claim.
| Phoenix | **http://127.0.0.1:5174** | Resilience outcome and recovery |
| Sentinel | **http://127.0.0.1:5175** | Unified correlated incident and fleet decision |

Sentinel opens with a read-only **Presentation Preflight** panel. It verifies Argus,
Phoenix, Sentinel, SOG, and OpenAI; Kubernetes-only checks are visibly N/A in portable
mode. The demo refuses to report PASS until every required presentation check is ready.

Every synthetic entity has `demo-data=synthetic`; evidence is explicitly labeled
`replayed` or `simulator`. The local demo never claims live Falco detection, live chaos,
or measured production availability. On `Ctrl-C`, it stops its local processes and
Expand Down Expand Up @@ -217,6 +221,8 @@ new replacement pod is Ready, both replicas are Ready, continuous HTTP availabil
measured, and Sentinel exposes the correlated Argus + Phoenix incident. `Ctrl-C` stops
the consoles and deletes only the isolated demo namespace. Evidence is written to
`artifacts/demo-platform/latest-live-demo.{json,md}`.
The same readiness result is visible inside Sentinel with live Kubernetes, Cilium,
Falco, Kyverno, and Chaos Mesh evidence and remediation for any failed component.

## Part of the Sentinel multi-agent platform

Expand Down
5 changes: 4 additions & 1 deletion scripts/demo-platform-local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,14 @@ start_service phoenix-ui 5174 http://127.0.0.1:5174/api/graph/health "${phoenix_
env VITE_ARGUS_URL=http://127.0.0.1:5173 VITE_SENTINEL_URL=http://127.0.0.1:5175 \
npm --prefix dashboard run dev -- --host 127.0.0.1 --port 5174
start_service sentinel-api 8090 http://127.0.0.1:8090/health "${sentinel_root}" \
env WORLD_MODEL_URL=http://127.0.0.1:8010 OPENAI_API_KEY="${OPENAI_API_KEY:-}" \
env WORLD_MODEL_URL=http://127.0.0.1:8010 OPENAI_API_KEY="${OPENAI_API_KEY:-}" SENTINEL_DEMO_MODE=portable \
"${sentinel_root}/.venv/bin/python" -m uvicorn main:app --app-dir backend/src --host 127.0.0.1 --port 8090
start_service sentinel-ui 5175 http://127.0.0.1:5175/api/health "${sentinel_root}" \
env VITE_ARGUS_URL=http://127.0.0.1:5173 VITE_PHOENIX_URL=http://127.0.0.1:5174 \
npm --prefix dashboard run dev -- --host 127.0.0.1 --port 5175
curl --fail --silent --max-time 20 http://127.0.0.1:5175/api/readiness |
jq -e '.ready_to_present == true and .mode == "portable"' >/dev/null ||
fail "Sentinel presentation preflight is not ready. Open http://127.0.0.1:5175 for component remediation."

echo "==> Seeding the synthetic cluster and cross-agent lifecycles"
demo_started_ms="$(now_ms)"
Expand Down
4 changes: 4 additions & 0 deletions scripts/demo-platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,16 @@ start_service "phoenix-ui" 5174 http://127.0.0.1:5174 "${phoenix_root}" \
npm --prefix dashboard run dev -- --host 127.0.0.1 --port 5174
start_service "sentinel-api" 8090 http://127.0.0.1:8090/health "${sentinel_root}" \
env WORLD_MODEL_URL=http://127.0.0.1:8010 OPENAI_API_KEY="${OPENAI_API_KEY:-}" \
SENTINEL_DEMO_MODE=live KUBECTL_CONTEXT="${demo_context}" \
"${sentinel_root}/.venv/bin/python" -m uvicorn main:app --app-dir backend/src --host 127.0.0.1 --port 8090
reclaim_stale_sentinel_ui
start_service "sentinel-ui" 5175 http://127.0.0.1:5175/api/health "${sentinel_root}" \
env VITE_ARGUS_URL=http://127.0.0.1:5173 VITE_PHOENIX_URL=http://127.0.0.1:5174 \
npm --prefix dashboard run dev -- --host 127.0.0.1 --port 5175
sentinel_ui_ok || fail "Sentinel UI proxy did not return orchestrator JSON from /api/health."
curl --fail --silent --max-time 20 http://127.0.0.1:5175/api/readiness |
jq -e '.ready_to_present == true and .mode == "live"' >/dev/null ||
fail "Sentinel live presentation preflight is not ready. Open http://127.0.0.1:5175 for component remediation."

if [[ "${skip_seed}" == "true" ]]; then
echo "Live platform services are ready; waiting for the guarded experiment driver."
Expand Down
6 changes: 6 additions & 0 deletions scripts/tests/test-demo-platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ grep -q 'availability_percent == "not measured"' "${local_script}"
grep -q 'Press Ctrl-C to stop only processes started by this command' "${script}"
grep -q 'PLATFORM RESILIENCE PROOF: PASS' "${script}"
grep -q 'availability percentage not measured' "${script}"
grep -q 'api/readiness' "${script}"
grep -q 'api/readiness' "${local_script}"
grep -q 'ready_to_present == true' "${local_script}"
grep -q 'SENTINEL_DEMO_MODE=portable' "${local_script}"
grep -q 'SENTINEL_DEMO_MODE=live' "${script}"
grep -q 'KUBECTL_CONTEXT="${demo_context}"' "${script}"
grep -q 'sentinel_ui_ok' "${script}"
grep -q 'listener_cwd.*expected_cwd' "${script}"
grep -q '5175/api/health' "${script}"
Expand Down
Loading