{"record":{"id":"609fd3f6a6bfe802","repo":"shareAI-lab/learn-claude-code","slug":"assignment-for-owner-is-no-longer-active-609fd3","errorCode":null,"errorMessage":"Assignment for {owner} is no longer active","messagePattern":"Assignment for (.+?) is no longer active","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"s15_integrated_harness/code.py","lineNumber":477,"sourceCode":"    path, error = _registered_worktree(task.worktree)\n    return (path or WORKDIR), error\n\n\ndef assignment_cwd(owner: str) -> Path:\n    with task_lock:\n        assignment = teammate_assignments.get(owner)\n        task = _owner_in_progress(owner)\n        if task and (not assignment or assignment.get(\"task_id\") != task.id):\n            cwd, error = task_worktree_cwd(task)\n            if error:\n                raise ValueError(error)\n            assignment = {\"task_id\": task.id, \"cwd\": cwd}\n            teammate_assignments[owner] = assignment\n        elif not assignment:\n            return WORKDIR\n        task = load_task(str(assignment[\"task_id\"]))\n        if task.status not in {\"in_progress\", \"completed\"} or task.owner != owner:\n            raise ValueError(f\"Assignment for {owner} is no longer active\")\n        cwd, error = task_worktree_cwd(task)\n        if error:\n            raise ValueError(error)\n        if cwd.resolve() != Path(assignment[\"cwd\"]).resolve():\n            raise ValueError(f\"Assignment cwd changed for task {task.id}\")\n        return cwd\n\n\ndef release_completed_assignment(owner: str) -> bool:\n    \"\"\"Release a completed cwd lease only at a model turn boundary.\"\"\"\n    with task_lock:\n        assignment = teammate_assignments.get(owner)\n        if not assignment:\n            return False\n        task = load_task(str(assignment[\"task_id\"]))\n        if task.status != \"completed\" or task.owner != owner:\n            return False\n        teammate_assignments.pop(owner, None)","sourceCodeStart":459,"sourceCodeEnd":495,"githubUrl":"https://github.com/shareAI-lab/learn-claude-code/blob/985456f4adea6f4df8fbad4112245dbd97444eae/s15_integrated_harness/code.py#L459-L495","documentation":"The cwd-lease resolver checks the task recorded in a teammate's assignment: it must exist, be in_progress or completed, and still be owned by that owner. If the task was reassigned, reset to pending, or the assignment references a stale/deleted task, the lease is dead and this ValueError propagates (surfaces to the agent as an Error: message from _agent_cwd).","triggerScenarios":"Owner's assigned task got its status flipped to pending or owner changed while the agent held the lease; task file deleted; assignment dict references a task_id that no longer loads; concurrent admin action resetting tasks mid-session.","commonSituations":"Two sessions for the same owner; a task reset/reassign tool used while an agent was mid-turn; leftover in-memory assignments after the tasks directory was wiped.","solutions":["Restart the session so assignments rebuild from current task state (the stale in-memory lease is dropped).","Avoid resetting/reassigning tasks that other sessions actively own; complete or release them first.","If state is inconsistent, remove the stale assignment by restarting or releasing via release_completed_assignment()."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"def assignment_alive(assignment: dict) -> bool:\n    try:\n        task = load_task(str(assignment[\"task_id\"]))\n    except Exception:\n        return False\n    return task.status in {\"in_progress\", \"completed\"} and task.owner is not None","typeGuard":null,"tryCatchPattern":"try:\n    cwd = _agent_cwd_for(owner)\nexcept ValueError as e:\n    if \"no longer active\" in str(e):\n        # session state is stale: restart or re-claim the task; do not retry blindly\n        raise","preventionTips":["Don't reset/reassign tasks owned by live sessions.","Restart sessions after bulk task resets.","Use one session per owner at a time."],"tags":["concurrency","state","assignment","session"],"backgroundTag":null,"analyzedSha":"985456f4adea6f4df8fbad4112245dbd97444eae","analyzedAt":"2026-08-14T22:02:26.028Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}