Files
agentic-mobile-control/packages/cloud-platform/cloud/migrations/versions/0012_task_cancellation.py
T
q792602257 19c6669800 feat(cloud): add durable cancellation support to task repository
- Add nullable cancel_requested_at column (migration 0012)
- Widen ScheduledTaskStatus/TerminalTaskStatus to include cancelled
- Add CancellationRequestStatus + request_task_cancellation() to
  CloudRepository protocol and SQLAlchemy implementation
- renew_lease() now returns LeaseRenewalResult, surfacing whether
  cancellation is pending, instead of a bare status string
- reap_expired_leases() resolves pending-cancellation tasks to
  cancelled instead of requeuing/failing them
- record_task_result() accepts cancelled and clears
  cancel_requested_at on any terminal write

Note: internal_api/api.py's renew_assignment route still compares
renew_lease()'s return value against a bare string; it will be
updated in the next task (Internal Host<->Cloud protocol) to consume
LeaseRenewalResult and populate the new cancel_requested wire field.
2026-07-15 18:08:48 +08:00

23 lines
516 B
Python

"""Add nullable cancel_requested_at column to scheduled_tasks."""
from __future__ import annotations
import sqlalchemy as sa
from alembic import op
revision = "0012_task_cancellation"
down_revision = "0011_planner_decision_log_reflection"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.add_column(
"scheduled_tasks",
sa.Column("cancel_requested_at", sa.String(), nullable=True),
)
def downgrade() -> None:
op.drop_column("scheduled_tasks", "cancel_requested_at")