(v0.3.3) Fleet grouping, activity log, topology multi-select
v0.3.3 — Fleet grouping, activity log, topology multi-select
This release turns the dashboard from a list of machines into something you can actually run a fleet on. You can now
organise GPU boxes by role, see every command queued across the fleet in one place, and drive bulk actions visually from
the topology canvas.
Highlights
Group your machines
Tag every machine with a group like training-prod, inference-prod, or dev. Same-group nodes drift together inside
coloured bubbles on the topology canvas; the Fleet table shows a coloured chip in a new Group column; and the
dashboard sidebar exposes a group filter everywhere.
- New
group_namefield onMachine(idempotent SQLite migration on first launch — no manual steps) - New
PATCH /api/machines/{id}to assign / re-assign / clear a machine's group - New
GET /api/groupsreturning member counts and per-status breakdown - New
DELETE /api/machines/{id}for retiring decommissioned hosts (idempotent — clears snapshots and queued commands
too)
Multi-select on the topology canvas
- Shift+click any node to add it to the selection
- Shift+drag an empty area to lasso multiple nodes at once
- Floating action bar appears with
[N selected][Assign group ▾][Ungroup][✕] - Bulk PATCH runs in parallel; the canvas reorganises around the new groups on the next sim tick
- Right-click any single node for a quick group picker at the cursor
Activity page (cross-fleet command log)
Every queued remediation command — across the entire fleet — in one auto-refreshing table. Filter by machine, status, or
time range; expand any row to inspect output.
Fleet-first navigation
The dashboard now lands on the Fleet page instead of Topology, since Fleet is the daily driver. Sidebar order is now
Fleet → Topology → Activity.
Auto-login when local
When you open the dashboard from the same host that's running it, the API token is injected into the page automatically
— no copy-paste from ~/.env-doctor/api-token. Remote browsers still need to enter the token (security unchanged).
Bug fixes
GroupPickerdropdown could be cut off at the bottom of the screen when opened inside the floating selection bar.
Picker now auto-detects available space viagetBoundingClientRecton mount and flips upward when needed.PATCH /api/machines/{id}response was missinglatest_report, so the diagnostics section briefly disappeared
after assigning a group from MachineDetail until you refreshed. Response shape now matchesGET /api/machines/{id}
exactly.
Internals
- New
scripts/seed_demo_fleet.pyfor exercising the dashboard without 16 real GPU boxes — POSTs synthetic reports for
a realistic mid-size fleet (H100 / A100 / L40S / A10G / RTX 4090 / 3090 / 3080 / 5090 / L4) with stableuuid5machine
IDs so re-runs update rather than duplicate. _seconds_sinceand group-name validation extracted with proper handling of naive datetimes (treated as UTC).
Install
# Core CLI (no dashboard)
pip install env-doctor
# With the fleet dashboard
pip install "env-doctor[dashboard]"Upgrading from 0.3.2
No migration steps required — the new group_name column is added automatically on first launch via an idempotent
ALTER TABLE in init_db(). Existing machines simply show as Ungrouped until you tag them.
Full changelog: v0.3.2...v0.3.3