From 2e2d2d42b6b4b59d75cbb170782ac931c89cab14 Mon Sep 17 00:00:00 2001 From: Chaim Date: Tue, 14 Apr 2026 17:05:40 +0000 Subject: [PATCH] Prevent status regression in case_update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CEO agent was reverting case status from "processing" to "new" when updating metadata fields. Added ordered status list — case_update now silently ignores status changes that would move backwards. Co-Authored-By: Claude Opus 4.6 (1M context) --- mcp-server/src/legal_mcp/tools/cases.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mcp-server/src/legal_mcp/tools/cases.py b/mcp-server/src/legal_mcp/tools/cases.py index 3b94b93..f23131d 100644 --- a/mcp-server/src/legal_mcp/tools/cases.py +++ b/mcp-server/src/legal_mcp/tools/cases.py @@ -277,13 +277,27 @@ async def case_update( """ from datetime import date as date_type + # Ordered workflow statuses — regression protection + STATUS_ORDER = [ + "new", "uploading", "processing", "documents_ready", + "analyst_verified", "research_complete", "outcome_set", + "brainstorming", "direction_approved", "analysis_enriched", "ready_for_writing", + "drafting", "qa_review", "drafted", + "exported", "reviewed", "final", + ] + case = await db.get_case_by_number(case_number) if not case: return f"תיק {case_number} לא נמצא." fields = {} if status: - fields["status"] = status + current = case.get("status", "") + cur_idx = STATUS_ORDER.index(current) if current in STATUS_ORDER else -1 + new_idx = STATUS_ORDER.index(status) if status in STATUS_ORDER else -1 + # Only update if advancing or status is unknown to the order + if new_idx >= cur_idx or new_idx == -1: + fields["status"] = status if title: fields["title"] = title if subject: