Skip to content

(v0.3.3) Fleet grouping, activity log, topology multi-select

Choose a tag to compare

@mitulgarg mitulgarg released this 13 May 18:36
· 5 commits to main since this release
a74ed0c

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_name field on Machine (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/groups returning 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

  • GroupPicker dropdown could be cut off at the bottom of the screen when opened inside the floating selection bar.
    Picker now auto-detects available space via getBoundingClientRect on mount and flips upward when needed.
  • PATCH /api/machines/{id} response was missing latest_report, so the diagnostics section briefly disappeared
    after assigning a group from MachineDetail until you refreshed. Response shape now matches GET /api/machines/{id}
    exactly.

Internals

  • New scripts/seed_demo_fleet.py for 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 stable uuid5 machine
    IDs so re-runs update rather than duplicate.
  • _seconds_since and 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