104 lines
3.3 KiB
Markdown
104 lines
3.3 KiB
Markdown
---
|
|
phase: 03-project-crud
|
|
plan: 03
|
|
type: execute
|
|
status: complete
|
|
completed: 2026-01-16
|
|
---
|
|
|
|
<objective>
|
|
Implement project model configuration and deletion commands to complete M2 milestone.
|
|
|
|
Purpose: Enable users to configure which AI models a project uses and delete unwanted projects.
|
|
Output: Working /project models and /project delete commands, completing full Project CRUD.
|
|
</objective>
|
|
|
|
<execution_context>
|
|
~/.claude/get-shit-done/workflows/execute-phase.md
|
|
~/.claude/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@.planning/PROJECT.md
|
|
@.planning/ROADMAP.md
|
|
@.planning/STATE.md
|
|
|
|
# Prior plan context
|
|
@.planning/phases/03-project-crud/03-02-SUMMARY.md
|
|
|
|
# Relevant source files
|
|
@src/moai/core/services/project.py
|
|
@src/moai/bot/handlers/projects.py
|
|
|
|
**Established patterns:**
|
|
- Service layer handles database operations
|
|
- Handlers are thin, delegate to services
|
|
- user_data["selected_project_id"] for current project
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Add update_models and delete_project to service</name>
|
|
<files>src/moai/core/services/project.py</files>
|
|
<action>
|
|
Add functions to project service:
|
|
|
|
- update_project_models(project_id: str, models: list[str]) -> Project | None:
|
|
Update project's models list, return updated project or None if not found.
|
|
|
|
- delete_project(project_id: str) -> bool:
|
|
Delete project by ID, return True if deleted, False if not found.
|
|
Cascade delete will handle discussions/rounds/messages via SQLAlchemy relationship config.
|
|
</action>
|
|
<verify>python -c "from moai.core.services.project import update_project_models, delete_project"</verify>
|
|
<done>Both functions exist and are importable</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Implement /project models and /project delete handlers</name>
|
|
<files>src/moai/bot/handlers/projects.py</files>
|
|
<action>
|
|
Extend project_command handler to support:
|
|
|
|
/project models claude,gpt,gemini:
|
|
- Require project to be selected first
|
|
- Parse comma-separated model names from args
|
|
- Update via service, confirm: "Models updated: claude, gpt, gemini"
|
|
- If no args: show current models list
|
|
|
|
/project delete <id>:
|
|
- Require explicit project ID (not name) for safety
|
|
- Delete via service, confirm: "Deleted project: {name}"
|
|
- If deleted project was selected, clear user_data["selected_project_id"]
|
|
- If not found: "Project not found."
|
|
|
|
Update /status handler (if exists) to show selected project info now that project CRUD is complete.
|
|
</action>
|
|
<verify>ruff check src/moai/bot/handlers/projects.py</verify>
|
|
<done>/project models updates models, /project delete removes project, M2 milestone complete</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
Before declaring plan complete:
|
|
- [ ] `ruff check src/moai/core/services/ src/moai/bot/handlers/` passes
|
|
- [ ] All service functions importable
|
|
- [ ] Full CRUD cycle works: new → select → info → models → delete
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
|
|
- All tasks completed
|
|
- All verification checks pass
|
|
- /project models configures AI models for project
|
|
- /project delete removes project with confirmation
|
|
- M2 milestone complete (full project CRUD via Telegram)
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/phases/03-project-crud/03-03-SUMMARY.md`
|
|
|
|
Summary should note M2 milestone completion and readiness for Phase 4 (Single Model Q&A).
|
|
</output>
|