69 lines
1.9 KiB
Markdown
69 lines
1.9 KiB
Markdown
|
|
# Task State Machine
|
||
|
|
|
||
|
|
## Task Types
|
||
|
|
|
||
|
|
- `scan`
|
||
|
|
- `execute_clean`
|
||
|
|
- `execute_uninstall`
|
||
|
|
- `restore`
|
||
|
|
- `inspect_permissions`
|
||
|
|
- `health_snapshot`
|
||
|
|
|
||
|
|
## Main States
|
||
|
|
|
||
|
|
- `draft`
|
||
|
|
- `submitted`
|
||
|
|
- `validating`
|
||
|
|
- `awaiting_permission`
|
||
|
|
- `queued`
|
||
|
|
- `running`
|
||
|
|
- `cancelling`
|
||
|
|
- `completed`
|
||
|
|
- `partial_failed`
|
||
|
|
- `failed`
|
||
|
|
- `cancelled`
|
||
|
|
- `expired`
|
||
|
|
|
||
|
|
## Terminal States
|
||
|
|
|
||
|
|
- `completed`
|
||
|
|
- `partial_failed`
|
||
|
|
- `failed`
|
||
|
|
- `cancelled`
|
||
|
|
- `expired`
|
||
|
|
|
||
|
|
## Core Transition Rules
|
||
|
|
|
||
|
|
- `draft -> submitted`
|
||
|
|
- `submitted -> validating`
|
||
|
|
- `validating -> awaiting_permission | queued | failed`
|
||
|
|
- `awaiting_permission -> queued | cancelled | failed`
|
||
|
|
- `queued -> running | cancelled`
|
||
|
|
- `running -> cancelling | completed | partial_failed | failed`
|
||
|
|
- `cancelling -> cancelled`
|
||
|
|
|
||
|
|
## Action Item States
|
||
|
|
|
||
|
|
- `pending`
|
||
|
|
- `running`
|
||
|
|
- `succeeded`
|
||
|
|
- `skipped`
|
||
|
|
- `failed`
|
||
|
|
- `cancelled`
|
||
|
|
|
||
|
|
## Guarantees
|
||
|
|
|
||
|
|
- Terminal states are immutable.
|
||
|
|
- Progress must not move backwards.
|
||
|
|
- Destructive tasks must be audited.
|
||
|
|
- Recoverable tasks must leave structured recovery entries until restored or expired.
|
||
|
|
- Repeated write requests must honor idempotency rules when those flows become externally reentrant.
|
||
|
|
|
||
|
|
## Current MVP Notes
|
||
|
|
|
||
|
|
- `scan` emits monotonic progress and finishes with a preview-ready plan when the upstream scan adapter succeeds; otherwise the request should fail rather than silently fabricate findings.
|
||
|
|
- `execute_clean` must not report completion in release-facing flows unless real cleanup side effects have been applied. Unsupported or unstructured targets should fail closed.
|
||
|
|
- `execute_uninstall` removes an app from the current workspace view and creates a recovery entry.
|
||
|
|
- `restore` can physically restore items when structured recovery mappings are present, and can still rehydrate a `Finding` or an `AppFootprint` into Atlas state from the recovery payload.
|
||
|
|
- User-visible task summaries and settings-driven text should reflect the persisted app-language preference when generated.
|