From 0cbeb6b7aca00cff325e91b56acb78bd5b3900e0 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sun, 29 Mar 2026 15:19:50 -0400 Subject: [PATCH] fix: honour status param on project and milestone creation create_project and create_milestone hardcoded status="active" and ignored any value passed by the MCP or API callers. Route, service, and model construction now all thread the status field through. Co-Authored-By: Claude Sonnet 4.6 --- src/fabledassistant/routes/milestones.py | 4 ++++ src/fabledassistant/routes/projects.py | 4 ++++ src/fabledassistant/services/milestones.py | 3 ++- src/fabledassistant/services/projects.py | 3 ++- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/fabledassistant/routes/milestones.py b/src/fabledassistant/routes/milestones.py index 565a0e8..d50ddfe 100644 --- a/src/fabledassistant/routes/milestones.py +++ b/src/fabledassistant/routes/milestones.py @@ -50,12 +50,16 @@ async def create_milestone_route(project_id: int): data = await request.get_json() if not data.get("title"): return jsonify({"error": "title is required"}), 400 + status = data.get("status", "active") + if status not in ("active", "done"): + return jsonify({"error": "status must be 'active' or 'done'"}), 400 milestone = await create_milestone( uid, project_id, title=data["title"], description=data.get("description"), order_index=data.get("order_index", 0), + status=status, ) return jsonify(await _milestone_dict(milestone)), 201 diff --git a/src/fabledassistant/routes/projects.py b/src/fabledassistant/routes/projects.py index 60dd547..7bc77e1 100644 --- a/src/fabledassistant/routes/projects.py +++ b/src/fabledassistant/routes/projects.py @@ -38,12 +38,16 @@ async def create_project_route(): data = await request.get_json() if not data.get("title"): return jsonify({"error": "title is required"}), 400 + status = data.get("status", "active") + if status not in ("active", "archived"): + return jsonify({"error": "status must be 'active' or 'archived'"}), 400 project = await create_project( uid, title=data["title"], description=data.get("description", ""), goal=data.get("goal", ""), color=data.get("color"), + status=status, ) return jsonify(project.to_dict()), 201 diff --git a/src/fabledassistant/services/milestones.py b/src/fabledassistant/services/milestones.py index f4d2ebf..59b469c 100644 --- a/src/fabledassistant/services/milestones.py +++ b/src/fabledassistant/services/milestones.py @@ -17,6 +17,7 @@ async def create_milestone( title: str, description: str | None = None, order_index: int = 0, + status: str = "active", ) -> Milestone: async with async_session() as session: milestone = Milestone( @@ -24,7 +25,7 @@ async def create_milestone( project_id=project_id, title=title, description=description, - status="active", + status=status, order_index=order_index, ) session.add(milestone) diff --git a/src/fabledassistant/services/projects.py b/src/fabledassistant/services/projects.py index 8bc1e2c..4e50655 100644 --- a/src/fabledassistant/services/projects.py +++ b/src/fabledassistant/services/projects.py @@ -17,6 +17,7 @@ async def create_project( description: str = "", goal: str = "", color: str | None = None, + status: str = "active", ) -> Project: async with async_session() as session: project = Project( @@ -25,7 +26,7 @@ async def create_project( description=description, goal=goal, color=color, - status="active", + status=status, ) session.add(project) await session.commit()