Safety model
DonkeyFleet treats safety requirements as executable boundaries, not operator reminders.
Non-negotiable invariants
- Source-role clusters are read-only. All mutating clients are guarded by destination role.
- Identity is the volume UUID. A reused name with a new UUID is never treated as the same
volume, and is never auto-remediated. (Automatic
source_replaceddetection is planned, not yet implemented.) - Partial observation stops the run. Failed requests, unfinished pagination, and record-count mismatches produce skipped_observe_incomplete.
- Adopted and suspended relationships are structurally excluded from mutating queries.
- Intent is persisted before ONTAP work. Long-running ONTAP job UUIDs are persisted and polled; unresolved jobs are never blindly re-issued.
- Initializations are serialized. The default concurrent-baseline limit is one, and the bandwidth budget is checked.
- Deletion always requires a person. Orphans never auto-delete.
- Apply is gated by effective dry-run. The one-way kill switch wins over configuration and the UI override.
- Ambiguity is a refusal. Colliding destination names, ambiguous aggregates, and a missing named schedule produce an actionable skip instead of a guess.
Approval is not execution
Approval records authorization and the expected action payload. The reconcile loop re-checks the current volume UUID, policy, destination, and guardrails before executing.
Read the indicators correctly
An initializing baseline can remain uninitialized and unhealthy for many hours. This is expected while the ONTAP job is still active; it is not the same state as suspended.