Skip to main content
  • Kind: Actuation
  • Version: 1
  • Fleet Manager owner: Fleet Manager squad, #fleet-manager-chat (individual claimant pending)
  • Counterpart owner: Fleet Manager squad (UI in nscaledev/nscale-ui); operators from Deployment Engineering, Support and FOE
  • Last reviewed: 2026-09-09

What flows

Operators create jobs from the UI and from fleetctl using the presets in src/fleet_manager/temporal/workflows/presets.yaml, mark devices for triage or standup (which emits the CHAD events only where the matching api.eventing gate is enabled, default off), and run node swap, quarantine, release and image-node workflows. UI sessions are authorised by Django model permissions; fleetctl api authenticates with a per-user login profile (docs/runbooks/fleetctl-api.md); scripts and CI use OAuth clients such as the opt-in e2e-tests client. Agent skills that drive fleetctl on an operator’s behalf, such as the repo’s dc-ops skill, are actuators too and run under that operator’s login. The UI consumes the generated TypeScript client from docs/openapi.yaml.

What breaks if this changes

An OpenAPI shape change breaks the UI build. A preset change alters what every operator dispatches. Manual dispatch and automated dispatch share the same device pool, so any new automated dispatcher changes what operators see in the standup view.

Enforcement

  • Principal: individual users; e2e-tests for the automated suite.
  • Mechanism: Django session for the UI, per-user login profile for fleetctl api, FM OAuth client for e2e-tests.
  • docs/openapi.yaml and the OpenAPI contract lint; .agents/skills/fm-review/api-contract-guidelines.md.
  • Session permissions in src/fleet_manager/api/auth/.

Gaps

  • On-site operators can view Fleet Manager but not act in it; escalation goes through Slack.

Change log

  • 2026-09-09 v1: created; describes present behaviour.