Центральная машина переходов:
iobackup/internal/storage/lifecycle.go
(TransitionRun, TransitionTask). Статусы в
API/CLI используют те же литералы, что модель хранилища
(internal/storage/models.go).
Разрешённые траектории:
running → success | partial_success | failed | cancelled | timeout.pending сохранено для совместимости и возможных
асинхронных планировщиков (pending → running либо
cancelled).success,
partial_success, failed,
cancelled, timeout) выход запрещён — это
блокируется TransitionRun.Смысл итоговых статусов (агрегируются после задач):
| Статус | Когда используется сегодня |
|---|---|
success |
Нет упавших задач, все задачи считаются успешными циклом оператора backup. |
partial_success |
Есть смесь успеха и ошибок задач без fail-fast. |
failed |
По крайней мере одна обязательная задача упала или fail-fast оборвал цепочку. |
cancelled |
Ручной CancelRun; не используется для «мягкой» ошибки
задачи. |
timeout |
Зарезервирован доменным значением; фактический таймер job см.
дорожную карту
docs/operator/timeouts-and-cancellation.md. |
running → success | failed | cancelled | timeout.pending → running | skipped | cancelled поддерживается
переходным слоем (в MVP большинство записей создаётся уже в
running).Skipped-задача не производит успешный
backup-артефакт при текущих провайдерах backup;
поле сохранено для будущего optional профиля.
Реализующая логика: internal/agent/service.go:
storage.TransitionRun;applyTaskRunStatus + переход на
TransitionTask;