Release/2026.11.2 - #25
Open
ConnorHaggerty wants to merge 5 commits into
Open
Conversation
The six list widgets rendered flat rows of text into a scroll box, which read as a wall at any tile size. Each row is now a card with a left edge in the colour of what it is about — severity for alerts and findings, run state for history, up or down for containers and automations — a title, a thin sub-line and a right column. Clicking one goes to the page that owns it, flashing the panel it landed on so the click has somewhere to arrive. The host widget was a dot, a name and an OS string. It now renders the same .host-card templates/_host_card.html defines, so it gets the OS logo, tags, mode badge, the five live metric bars and the detail drawer. Nothing has included that template since the classic dashboard was retired, so this is the only place host cards exist and the widget owns their behaviour: the template's inline onclick handlers become delegated listeners here, because these values are hostnames reported by agents. Three field names were wrong against the API. Alerts carry fired_at, tasks carry completed_at, and automations have always carried last_run — the widget read last_fired_at, so every automation reported "never". refreshHostCards() takes a root to scope to, show_search is implemented rather than merely declared, and the host widget defaults to nine rows because one row of real cards does not fit in five.
The agent only ever sampled the busiest ten processes, so a chart of one named service was full of holes exactly when the service was behaving, and an outage looked the same as a quiet period. process_watch names processes sampled at every scrape regardless of rank; processes sharing a name are summed with the live count beside them, so a watched name that is not running reports zero rather than nothing at all. GPU telemetry from nvidia-smi and rocm-smi, collected only when the tool is present and silent when it is not — a host with no GPU is the ordinary case, not a failure. Utilisation, memory, temperature and power per card, with fan, clocks, PCIe link and ECC counters behind gpu_extended because the wide set is roughly twice the points per GPU per check-in. memory_percent is derived agent-side rather than left for the dashboard to divide two series that may not have arrived together. Three widgets: GPU status, process monitor (one named process charted, and it says outright when the name is not on the watch list, because gaps then mean it dropped out of the ranking rather than stopped), and top processes rebuilt as cards with an inline SVG sparkline each — not Chart.js, which would be a dozen canvases in one tile. Widget settings pick tasks, playbooks and hosts through the searchable picker modal instead of a dropdown, which cannot search and is unusable past a screenful. The host list comes from the site-scoped endpoint the widget itself uses, not the picker's own machine list — that one is admin-only and was not site-scoped at all, which is fixed here too. The widget-defaults guard keyed off a setting named "metric", which caught an ordinary choice field that names no metric. It now keys off the type.
The rebuild ceremony asked every time whether you understood that Vigil was served over plain HTTP. Asked inside the ceremony it read as another box to clear on the way to the button, which is the opposite of what an acknowledgement is for. It is now a standing decision about the instance, recorded in Settings under Transport Security with the admin who made it and when — this is a deliberate downgrade of the instance's posture, and "who agreed to this" is the question asked afterwards. It can be withdrawn, and the pane says whether it is presently doing anything. The per-request flag still works for API callers. The rebuild job no longer asks for a completion tag or a playbook to run afterwards. The install profile already carries completion_tags, and a playbook that should run on a rebuilt machine is what auto-enroll is for — it fires when the machine checks back in carrying the profile's tags, and it keeps working for a machine rebuilt by any other route. Two ways to say the same thing meant the ceremony asked twice and the answers could disagree. The columns stay so existing jobs read back, and a request still carrying either field is ignored rather than refused. The agent: namespace guard the job used to carry is unaffected: it lives on the profile serializer, where tags are actually set, and there is now a test saying so.
Four changes already on this branch, given a version number so an operator can tell this build from 2026.11.1 on the About page. The dashboard's six list widgets became cards, and the host widget renders the real host card again rather than a dot and a name. The agent reads GPUs from nvidia-smi and rocm-smi where either exists, and samples the processes named in process_watch at every check-in instead of only the busiest ten. Plain-text transport is acknowledged once in Settings, by a named admin, rather than inside every rebuild. The rebuild ceremony no longer asks for a completion tag or a post-rebuild playbook, both of which the install profile and auto-enrolment already answer. v2026.11.1 is tagged and pushed, so this is 2026.11.2 rather than an amendment to it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
GPUs, watched processes, and cards for the list widgets
Type
Proposed commit message
GPUs, watched processes with rocm and nvidia smi.
Cards for the list widgets instead of text for better flow and interactivity
Checklist
cd server && USE_SQLITE=true VIGIL_SIGNING_KEY_SEED=<seed> .venv/bin/python manage.py testmakemigrations)settings.py(VIGIL_VERSION) andagent/vigil_agent/__version__.py— those two only; the expected agent version is detected, not configureddocs/pro-extension-points.md):KNOWN_EVENTSstable, no edition imports in coreTesting
Passes all Tests