Files
cc-ci/machine-docs/STATUS-kuma.md
autonomic-bot 85a781368a
Some checks failed
continuous-integration/drone/push Build is failing
machine-docs: move all per-phase coordination files out of repo root
STATUS/BACKLOG/REVIEW/JOURNAL for bsky/conc/dstamp/kuma/lvl5/mailu/rcust/shot
(32 files) were at the repo root; move them into machine-docs/ to match the
mandated file-location rule (DECISIONS/DEFERRED/INBOX + older phases already
live there). AGENTS.md gains an explicit File-location rule. No content change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 20:57:03 +00:00

108 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STATUS — phase `kuma` (uptime-kuma create-a-monitor functional test)
SSOT: `cc-ci-plan/plan-phase-kuma-monitor.md`
## Current state
## DONE
All DoD items satisfied. M1+M2 Adversary PASSes in REVIEW-kuma.md.
- test_monitor_wizard_and_probe: wizard + real probe (Up + Down) in Playwright
- Drone builds #460 + #462 — LEVEL 5, 2× consecutive green (flake check ✓)
- Runtime 2.752.82 s ≪ 90 s budget ✓
- DEFERRED.md "uptime-kuma create-a-monitor" closed ✓
- PARITY.md updated with playwright/ test row ✓
- M1 PASS @2026-06-11T18:26Z, M2 PASS @2026-06-11T18:3xZ
- No standing VETO
## What is claimed
### Approach choice (DECISIONS.md)
Playwright (option b). Justification: python-socketio is NOT available in the cc-ci Nix env
(confirmed: only playwright + pytest in site-packages). Playwright drives the real browser;
Socket.IO is handled transparently. No Nix changes needed.
### Test file
`tests/uptime-kuma/playwright/test_monitor_wizard.py`
### What the test does
1. Completes uptime-kuma 2.2.1 first-run setup wizard (admin create via browser).
2. Creates HTTP monitor targeting the app's own root URL (guaranteed UP at test time).
3. Waits ≤90 s for status badge (`data-testid="monitor-status"`) to show "Up".
4. Asserts important-heartbeat table row exists with a real datetime stamp (proves probe ran).
5. Creates a second monitor targeting `http://127.0.0.1:19999/dead` (dead port → connection refused).
6. Waits ≤60 s for status badge to show "Down" (negative teeth).
### Selectors used (all confirmed in compiled bundle `dist/assets/index-D_mnxLA0.js`)
- Setup: `data-cy="username-input"`, `data-cy="password-input"`, `data-cy="password-repeat-input"`, `data-cy="submit-setup-form"`
- EditMonitor: `data-testid="friendly-name-input"`, `data-testid="url-input"`, `data-testid="save-button"`
- Details: `data-testid="monitor-status"`
- Heartbeat table: `table.table-hover tbody tr` (first row)
### Secret safety
Admin password: 64-char UUID hex, generated per-run. Never printed, never in any assertion error message.
### Probe reality
- "Up" in the status badge comes from `lastHeartbeatList` populated via Socket.IO heartbeat events
(socket.js mixin line 755). Cannot be "Up" unless a real probe completed and the server sent the
heartbeat over the socket.
- Important-heartbeat table row exists: `isFirstBeat` is always `important=true` (server/model/monitor.js
line 1420). Presence of a row with "YYYY-MM-DD HH:mm:ss" timestamp proves the probe ran after monitor
creation.
- Negative teeth: "Down" can only appear after the probe attempted and got connection-refused.
### How to verify (Adversary cold-check)
```bash
# Deploy uptime-kuma against any fresh cc-ci domain, then run:
CCCI_APP_DOMAIN=<domain> RECIPE=uptime-kuma STAGES=custom \
cc-ci-run -m pytest tests/uptime-kuma/playwright/test_monitor_wizard.py -v
# Expected: test_monitor_wizard_and_probe PASSED
# In the Drone-path, it runs under the "custom" tier via run_recipe_ci.py.
```
### Runtime
Local estimate: wizard ~10 s + 2× (navigate+fill+probe) ≤ ~60 s total. Within ≤90 s budget.
### CI evidence (M1)
- Drone build **#460** — uptime-kuma@eb4521cc (PR #3, comment #14349)
- Result: **LEVEL 5** — install/upgrade/backup/restore/custom/lint all PASS
- Custom tier: `functional: 3` (health_check, socketio_handshake, spa_branding) + `playwright: 1` (`test_monitor_wizard`)
- `test_monitor_wizard [pass]` confirmed in stage results
- `flags: {clean_teardown: true, no_secret_leak: true}`
- PR comment posted: git.autonomic.zone/recipe-maintainers/uptime-kuma/pulls/3 shows ✅ passed
- Artifacts: `/var/lib/cc-ci-runs/460/` on cc-ci
### M2 evidence (flake check + DEFERRED closed)
- Drone build **#462** — uptime-kuma@eb4521cc (PR #3, comment #14352)
- Result: **LEVEL 5** — install/upgrade/backup/restore/custom/lint all PASS
- `test_monitor_wizard [pass]` — 2 consecutive green runs (#460 + #462)
- DEFERRED.md entry "2026-05-28 — uptime-kuma create-a-monitor" closed (commit below)
- PARITY.md updated: new row for `tests/uptime-kuma/playwright/test_monitor_wizard.py`
### How to cold-verify M2
```
git pull; cat machine-docs/DEFERRED.md | grep -A2 "uptime-kuma create-a-monitor"
# → "CLOSED @2026-06-11 (Builder, phase kuma)"
cat tests/uptime-kuma/PARITY.md | grep playwright
# → row for test_monitor_wizard.py
cat /var/lib/cc-ci-runs/462/results.json | python3 ...
# → level:5, test_monitor_wizard [pass]
```
### How to cold-verify M1
```
# On Adversary's clone (cc-ci-adv):
git pull; git log --oneline -3 # confirm 8da59cf feat(kuma): implement wizard+monitor Playwright test
# Inspect the test:
cat tests/uptime-kuma/playwright/test_monitor_wizard.py
# Verify CI results:
cat /var/lib/cc-ci-runs/460/results.json | grep -E "level|playwright|wizard|status"
# → level:5, playwright:1, test_monitor_wizard:[pass]
# Check PR comment confirms ✅:
# https://git.autonomic.zone/recipe-maintainers/uptime-kuma/pulls/3
```
## Blocked
(nothing)