Sub-roadmap: DAG runtime phase 2 — claim, lease, and stale ownership
Parent roadmap: #167
Related: #168, #185, #186
Runtime-first sequence: phase 2 of 4
MVP inclusion: yes
Summary
Define and implement task ownership semantics: ready tasks can be claimed by workers, active claims have leases, duplicate active ownership is rejected, and stale claims become recoverable.
Goal
Ilchul should behave like a runtime, not a task list. It must prevent duplicate execution and make abandoned work recoverable.
Scope
- ClaimLease model.
- ClaimLease token generation.
- Claim validity checks.
- Lease expiry and renewal behavior.
- Duplicate active claim rejection.
- Task completion requires valid claim token.
- Recovery behavior for expired leases.
- Events for claim-created, lease-renewed, lease-expired, claim-released, claim-recovered.
Non-goals
- No automatic worker launch yet.
- No tmux/worktree dispatch yet.
- No IntegrationCandidate records yet.
- No destructive cleanup.
Acceptance criteria
Verification
- Unit tests for claim success/failure.
- Unit tests for duplicate claim race behavior.
- Unit tests for lease expiry.
- Unit tests for recovery after stale lease.
- Fixture showing claim lifecycle through normal completion and stale recovery.
Sub-roadmap: DAG runtime phase 2 — claim, lease, and stale ownership
Parent roadmap: #167
Related: #168, #185, #186
Runtime-first sequence: phase 2 of 4
MVP inclusion: yes
Summary
Define and implement task ownership semantics: ready tasks can be claimed by workers, active claims have leases, duplicate active ownership is rejected, and stale claims become recoverable.
Goal
Ilchul should behave like a runtime, not a task list. It must prevent duplicate execution and make abandoned work recoverable.
Scope
Non-goals
Acceptance criteria
Verification