From ec8cd57ad58b7165fa2c85f880adc453a122e3cf Mon Sep 17 00:00:00 2001 From: phernandez Date: Thu, 16 Jul 2026 01:37:07 -0500 Subject: [PATCH] fix(mcp): surface cloud project deletion job Signed-off-by: phernandez --- src/basic_memory/mcp/tools/project_management.py | 7 +++++++ src/basic_memory/schemas/project_info.py | 3 +++ tests/mcp/test_tool_project_management.py | 3 +++ 3 files changed, 13 insertions(+) diff --git a/src/basic_memory/mcp/tools/project_management.py b/src/basic_memory/mcp/tools/project_management.py index 81aaac6fd..79b9919da 100644 --- a/src/basic_memory/mcp/tools/project_management.py +++ b/src/basic_memory/mcp/tools/project_management.py @@ -796,6 +796,13 @@ async def delete_project( if hasattr(status_response.old_project, "path"): result += f"• Path: {status_response.old_project.path}\n" + if status_response.deletion_status or status_response.job_id: + result += "\nDeletion tracking:\n" + if status_response.deletion_status: + result += f"• Project deletion status: {status_response.deletion_status}\n" + if status_response.job_id: + result += f"• Deletion job ID: {status_response.job_id}\n" + cloud_routed = _delete_routes_to_cloud(workspace_id) files_location = "in cloud storage" if cloud_routed else "on disk" if delete_notes: diff --git a/src/basic_memory/schemas/project_info.py b/src/basic_memory/schemas/project_info.py index 3db4e9ab4..fe8d3ac6a 100644 --- a/src/basic_memory/schemas/project_info.py +++ b/src/basic_memory/schemas/project_info.py @@ -249,3 +249,6 @@ class ProjectStatusResponse(BaseModel): file_delete_status: Optional[Literal["pending", "skipped", "complete", "failed"]] = Field( None, description="Background note-file deletion status when returned by the backend" ) + job_id: Optional[str] = Field( + None, description="Background project deletion job identifier returned by the backend" + ) diff --git a/tests/mcp/test_tool_project_management.py b/tests/mcp/test_tool_project_management.py index 8664ea26a..88f4e6413 100644 --- a/tests/mcp/test_tool_project_management.py +++ b/tests/mcp/test_tool_project_management.py @@ -410,6 +410,7 @@ async def fake_get_client(*, workspace=None, project_name=None): old_project=target_project, deletion_status="pending", file_delete_status="pending" if delete_notes else "skipped", + job_id="28993", ) with ( @@ -456,6 +457,8 @@ async def fake_get_client(*, workspace=None, project_name=None): assert captured["workspace"] == "tenant-abc-123" mock_delete_project.assert_awaited_once_with("project-uuid", delete_notes=delete_notes) assert result.startswith("✓") + assert "Project deletion status: pending" in result + assert "Deletion job ID: 28993" in result # Cloud-routed delete: result text must not claim "files remain on disk" (#1034). if delete_notes: assert "Note-file deletion in cloud storage was queued and is pending" in result