diff --git a/cli/main.py b/cli/main.py index 8e3933a..3395d92 100644 --- a/cli/main.py +++ b/cli/main.py @@ -223,7 +223,7 @@ def task_show(ctx, id): @task.command("update") @click.argument("task_id") @click.option("--status", type=click.Choice( - ["pending", "in_progress", "review", "done", "blocked", "decomposed"]), + ["pending", "in_progress", "review", "done", "blocked", "decomposed", "cancelled"]), default=None, help="New status") @click.option("--priority", type=int, default=None, help="New priority (1-10)") @click.pass_context diff --git a/tests/test_api.py b/tests/test_api.py index 48ce340..d8939d1 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -256,9 +256,9 @@ def test_patch_task_status_persisted(client): assert r.json()["status"] == "blocked" -@pytest.mark.parametrize("status", ["pending", "in_progress", "review", "done", "blocked"]) +@pytest.mark.parametrize("status", ["pending", "in_progress", "review", "done", "blocked", "cancelled"]) def test_patch_task_all_valid_statuses(client, status): - """Все 5 допустимых статусов должны приниматься.""" + """Все 6 допустимых статусов должны приниматься.""" r = client.patch("/api/tasks/P1-001", json={"status": status}) assert r.status_code == 200 assert r.json()["status"] == status diff --git a/web/api.py b/web/api.py index cd38861..52ebbe2 100644 --- a/web/api.py +++ b/web/api.py @@ -141,7 +141,7 @@ class TaskPatch(BaseModel): status: str -VALID_STATUSES = {"pending", "in_progress", "review", "done", "blocked"} +VALID_STATUSES = {"pending", "in_progress", "review", "done", "blocked", "cancelled"} @app.patch("/api/tasks/{task_id}") diff --git a/web/frontend/src/views/ProjectView.vue b/web/frontend/src/views/ProjectView.vue index 13a9ceb..5ceb196 100644 --- a/web/frontend/src/views/ProjectView.vue +++ b/web/frontend/src/views/ProjectView.vue @@ -108,7 +108,7 @@ const filteredDecisions = computed(() => { function taskStatusColor(s: string) { const m: Record = { pending: 'gray', in_progress: 'blue', review: 'purple', - done: 'green', blocked: 'red', decomposed: 'yellow', + done: 'green', blocked: 'red', decomposed: 'yellow', cancelled: 'gray', } return m[s] || 'gray' } diff --git a/web/frontend/src/views/TaskDetail.vue b/web/frontend/src/views/TaskDetail.vue index 8a0ad6b..34aa4af 100644 --- a/web/frontend/src/views/TaskDetail.vue +++ b/web/frontend/src/views/TaskDetail.vue @@ -76,7 +76,7 @@ onUnmounted(stopPolling) function statusColor(s: string) { const m: Record = { pending: 'gray', in_progress: 'blue', review: 'yellow', - done: 'green', blocked: 'red', decomposed: 'purple', + done: 'green', blocked: 'red', decomposed: 'purple', cancelled: 'gray', } return m[s] || 'gray' } @@ -228,6 +228,7 @@ async function changeStatus(newStatus: string) { + pri {{ task.priority }}