**Phase 07 final verification pass — all tasks already in `complete/`; every criterion re-verified live.**
- **Old slot table gone**: no `#slots-card`/`#slots-table`/`renderSlots` in HTML/JS/CSS (only the new grid's `.slots-empty` *class*); pinned by `test_the_broken_slot_table_is_gone_from_html_js_and_css`.
- **`tests/fixtures/slots_gufo.json`**: present; live `GET ${GUFO_BASE_URL}/slots` this pass matches it key-for-key (row + `next_token[0]`), so the capture is reproducible; drift proven to fail (mutation tests + live `test_gufo_slots_answer_the_pinned_shape`, 9 live tests pass).
- **Aggregate block**: live page shows `2 of 2 engines`, running/waiting/prompt/decode/total-tokens straight from `fleet_totals()`, dot `ok`, no verdict colour; on a throwaway single-engine instance (:8091, private temp DB) `#fleet` is `hidden`, one full-width strip card + one panel, zero banners → "one clean half".
- **Strip + slot grid on live data**: 2 `.card.stat` (KV bars `bar ok` 13 %/0 %), gufo grid rendered real cards incl. a busy slot (`#2189`, 67849 prompt tok, 99 % cache share, `processing`), vLLM note-only with no grid; no `NaN`/`undefined` anywhere. Screenshots: `data/logs/llm-phase07-final-live-{two-engines,single-engine}.png`, `ups-charts-aria-labels.png`.
- **Defect found in earlier work and fixed**: `/ups`' four `LineChart`s shipped no `ariaLabel`, violating AGENTS.md's "every chart names itself for assistive tech" (`/system`+`/llm` were pinned, `/ups` wasn't) → added labels to `page-ups.js` and `test_every_ups_chart_names_itself_for_assistive_tech`; browser-verified `role="img"` + label on all four.
- **Gate**: `bash .agents/validate.sh` → **exit 0**; `uv run pytest --cov --cov-fail-under=94` → **604 passed, 9 skipped, coverage 97.91 %**; `uv run ruff check src tests agent` → All checks passed; `uv run pyright` → **0 errors**; `node --check` every page script ok; `uv run pytest -m live --live` → **9 passed**; `uv pip list --outdated` empty.
- **Docs**: README + AGENTS.md reviewed end-to-end; fixed test count (582→604), `/llm` source column + both architecture diagrams now name gufo `/slots`, AGENTS.md agent line gained `GET /schema` + status page, ariaLabel convention now covers all three chart pages, README Testing block now lists `bash .agents/validate.sh`. Env-var table, agent/install flags, Containerfile facts, `/api/*` shapes, range chips, remote URL all verified accurate — no other changes needed.
- **Live-infra**: no fleet/host/config change; the temp :8091 instance, its temp DB and the fake processes are removed; dev server restarted and `/api/health` `ok` (all 6 sources ok). One thing I deliberately did **not** touch: the gitignored local `.env.dev` still carries a comment claiming the NUT `[dashboards]` account has only battery-test `instcmds`, whereas AGENTS.md/README record `instcmds = all` (verified on hardware 2026-10-17) — operator-owned file, flag for the operator to reword.
- **Next pending phase**: `08_events_paging_and_copy`.
80 lines
3.1 KiB
Plaintext
80 lines
3.1 KiB
Plaintext
# Verbatim upsd reply (LIST UPS / LIST VAR / LIST CMD), recorded by
|
|
# ./scripts/capture-fixtures.sh — one `VAR`/`CMD` line per protocol line.
|
|
# Volatile values (ups.load, battery.runtime, the voltages) move every poll,
|
|
# so a diff here on re-capture is expected; the contract asserts shape, units
|
|
# and which variables the drivers omit, never those numbers.
|
|
UPS cyberpower "CyberPower PR1500LCDRT2U (USB)"
|
|
VAR cyberpower battery.charge "100"
|
|
VAR cyberpower battery.charge.low "10"
|
|
VAR cyberpower battery.charge.warning "20"
|
|
VAR cyberpower battery.mfr.date "CPS"
|
|
VAR cyberpower battery.runtime "3350"
|
|
VAR cyberpower battery.runtime.low "300"
|
|
VAR cyberpower battery.status "100%"
|
|
VAR cyberpower battery.type "PbAcid"
|
|
VAR cyberpower battery.voltage "27.2"
|
|
VAR cyberpower battery.voltage.nominal "24"
|
|
VAR cyberpower device.mfr "CPS"
|
|
VAR cyberpower device.model "GX1500U"
|
|
VAR cyberpower device.serial "SCRUBBEDSERIAL1"
|
|
VAR cyberpower device.type "ups"
|
|
VAR cyberpower driver.debug "0"
|
|
VAR cyberpower driver.flag.allow_killpower "0"
|
|
VAR cyberpower driver.name "usbhid-ups"
|
|
VAR cyberpower driver.parameter.interrupt_pipe_no_events_tolerance "-1"
|
|
VAR cyberpower driver.parameter.pollfreq "12"
|
|
VAR cyberpower driver.parameter.pollinterval "2"
|
|
VAR cyberpower driver.parameter.port "auto"
|
|
VAR cyberpower driver.parameter.productid "0601"
|
|
VAR cyberpower driver.parameter.synchronous "auto"
|
|
VAR cyberpower driver.parameter.vendorid "0764"
|
|
VAR cyberpower driver.state "quiet"
|
|
VAR cyberpower driver.version "2.8.5"
|
|
VAR cyberpower driver.version.data "CyberPower HID 0.85"
|
|
VAR cyberpower driver.version.internal "0.71"
|
|
VAR cyberpower driver.version.usb "libusb-1.0.30 (API: 0x0100010C)"
|
|
VAR cyberpower input.sensitivity "normal"
|
|
VAR cyberpower input.transfer.high "139"
|
|
VAR cyberpower input.transfer.low "100"
|
|
VAR cyberpower input.voltage "122.0"
|
|
VAR cyberpower input.voltage.nominal "120"
|
|
VAR cyberpower output.voltage "122.0"
|
|
VAR cyberpower ups.beeper.status "disabled"
|
|
VAR cyberpower ups.delay.shutdown "60"
|
|
VAR cyberpower ups.delay.start "120"
|
|
VAR cyberpower ups.firmware "CR01906AC911"
|
|
VAR cyberpower ups.load "14"
|
|
VAR cyberpower ups.mfr "CPS"
|
|
VAR cyberpower ups.model "GX1500U"
|
|
VAR cyberpower ups.power "132"
|
|
VAR cyberpower ups.power.nominal "1500"
|
|
VAR cyberpower ups.productid "0601"
|
|
VAR cyberpower ups.realpower "129"
|
|
VAR cyberpower ups.realpower.nominal "900"
|
|
VAR cyberpower ups.serial "SCRUBBEDSERIAL1"
|
|
VAR cyberpower ups.status "OL"
|
|
VAR cyberpower ups.test.result "No test initiated"
|
|
VAR cyberpower ups.timer.shutdown "-60"
|
|
VAR cyberpower ups.timer.start "-60"
|
|
VAR cyberpower ups.vendorid "0764"
|
|
CMD cyberpower beeper.disable
|
|
CMD cyberpower beeper.enable
|
|
CMD cyberpower beeper.mute
|
|
CMD cyberpower beeper.off
|
|
CMD cyberpower beeper.on
|
|
CMD cyberpower driver.killpower
|
|
CMD cyberpower driver.reload
|
|
CMD cyberpower driver.reload-or-error
|
|
CMD cyberpower driver.reload-or-exit
|
|
CMD cyberpower load.off
|
|
CMD cyberpower load.off.delay
|
|
CMD cyberpower load.on
|
|
CMD cyberpower load.on.delay
|
|
CMD cyberpower shutdown.default
|
|
CMD cyberpower shutdown.return
|
|
CMD cyberpower shutdown.stayoff
|
|
CMD cyberpower shutdown.stop
|
|
CMD cyberpower test.battery.start.deep
|
|
CMD cyberpower test.battery.start.quick
|
|
CMD cyberpower test.battery.stop
|