--- phase: 03-project-crud plan: 03 type: execute status: complete completed: 2026-01-16 --- 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. ~/.claude/get-shit-done/workflows/execute-phase.md ~/.claude/get-shit-done/templates/summary.md @.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 Task 1: Add update_models and delete_project to service src/moai/core/services/project.py 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. python -c "from moai.core.services.project import update_project_models, delete_project" Both functions exist and are importable Task 2: Implement /project models and /project delete handlers src/moai/bot/handlers/projects.py 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 : - 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. ruff check src/moai/bot/handlers/projects.py /project models updates models, /project delete removes project, M2 milestone complete 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 - 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) 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).