Add an unclaim timeout action that releases a stale claim
Rounds out the timeout-action set (resume, notify, + unclaim) with the classic claim timeout.
UnclaimTimeoutAction (orchestra_user_task): on timeout, releases a claimed-but-idle task back to its pool (assignee cleared, status back to OPEN, candidates kept). It does not resume, so the sweep re-arms the deadline -- a re-claimed task that goes idle again is released again.- Only the CLAIMED state is released. A task that is IN_PROGRESS (the assignee is at its external handler, awaiting the callback) is left alone -- yanking it there would be disruptive and risk a double-handle. OPEN and terminal tasks are no-ops.
UserTaskManager::release()does the transition (guarded to CLAIMED).- No new dependency: it lives in
orchestra_user_task(already on core) and uses the coreTimeoutActionplugin type -- the reason that type is in core.
Usage: timeout_action: unclaim (+ a timeout) on a user_task node.
Tests: UnclaimTimeoutTest -- claimed -> released (OPEN, no assignee, token still parked); in-progress -> untouched; open -> no-op. 3 tests, 37 assertions, green. phpcs + cspell + mkdocs --strict clean. Docs: human-tasks (claim timeout, state diagram) + timers.