diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 1407d38..2497a4d 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -72,7 +72,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 |-------|----------------|--------|-----------| | 1. Foundation | 3/3 | Complete | 2026-01-16 | | 2. Bot Core | 2/2 | Complete | 2026-01-16 | -| 3. Project CRUD | 1/3 | In progress | - | +| 3. Project CRUD | 2/3 | In progress | - | | 4. Single Model Q&A | 0/TBD | Not started | - | | 5. Multi-Model Discussions | 0/TBD | Not started | - | | 6. Consensus & Export | 0/TBD | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index 4f9bd20..b1fe201 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -10,18 +10,18 @@ See: .planning/PROJECT.md (updated 2026-01-16) ## Current Position Phase: 3 of 6 (Project CRUD) -Plan: 1 of 3 in current phase +Plan: 2 of 3 in current phase Status: In progress -Last activity: 2026-01-16 — Completed 03-01-PLAN.md (project service & list/create) +Last activity: 2026-01-16 — Completed 03-02-PLAN.md (project select/info) -Progress: ███░░░░░░░ ~33% +Progress: ████░░░░░░ ~40% ## Performance Metrics **Velocity:** -- Total plans completed: 6 +- Total plans completed: 7 - Average duration: 4 min -- Total execution time: 0.37 hours +- Total execution time: 0.42 hours **By Phase:** @@ -29,10 +29,10 @@ Progress: ███░░░░░░░ ~33% |-------|-------|-------|----------| | 01-foundation | 3 | 15 min | 5 min | | 02-bot-core | 2 | 4 min | 2 min | -| 03-project-crud | 1 | 3 min | 3 min | +| 03-project-crud | 2 | 6 min | 3 min | **Recent Trend:** -- Last 5 plans: 01-03 (4 min), 02-01 (2 min), 02-02 (2 min), 03-01 (3 min) +- Last 5 plans: 02-01 (2 min), 02-02 (2 min), 03-01 (3 min), 03-02 (3 min) - Trend: Fast ## Accumulated Context @@ -54,6 +54,8 @@ Recent decisions affecting current work: - **02-02:** Placeholder status until project CRUD in Phase 3 - **03-01:** Service layer pattern (core/services/) for database operations - **03-01:** Single /project handler with subcommand parsing +- **03-02:** Case-insensitive name matching with ilike +- **03-02:** user_data dict for storing selected_project_id ### Deferred Issues @@ -65,6 +67,6 @@ None yet. ## Session Continuity -Last session: 2026-01-16T18:43:00Z -Stopped at: Completed 03-01-PLAN.md (project service & list/create) +Last session: 2026-01-16T18:43:43Z +Stopped at: Completed 03-02-PLAN.md (project select/info) Resume file: None diff --git a/.planning/phases/03-project-crud/03-02-SUMMARY.md b/.planning/phases/03-project-crud/03-02-SUMMARY.md new file mode 100644 index 0000000..ec52ccf --- /dev/null +++ b/.planning/phases/03-project-crud/03-02-SUMMARY.md @@ -0,0 +1,91 @@ +--- +phase: 03-project-crud +plan: 02 +subsystem: bot +tags: [telegram, user-state, project-selection] + +# Dependency graph +requires: + - phase: 03-01 + provides: project service with list/create/get functions +provides: + - get_project_by_name service function + - /project select command with user_data storage + - /project info command with project details display + - get_selected_project helper for retrieving current selection +affects: [discussion-commands, export-commands] + +# Tech tracking +tech-stack: + added: [] + patterns: [user_data for per-user state tracking] + +key-files: + created: [] + modified: + - src/moai/core/services/project.py + - src/moai/bot/handlers/projects.py + +key-decisions: + - "Case-insensitive name matching with ilike" + - "user_data dict for storing selected_project_id" + +patterns-established: + - "get_selected_project(context) pattern for retrieving current project" + +issues-created: [] + +# Metrics +duration: 3min +completed: 2026-01-16 +--- + +# Phase 3 Plan 2: Project Selection & Info Summary + +**Project selection via /project select with user_data storage, /project info displays full details** + +## Performance + +- **Duration:** 3 min +- **Started:** 2026-01-16T18:41:00Z +- **Completed:** 2026-01-16T18:43:43Z +- **Tasks:** 2 +- **Files modified:** 2 + +## Accomplishments +- Added get_project_by_name function with case-insensitive ilike matching +- Implemented /project select command storing selection in context.user_data +- Implemented /project info command showing name, ID, models, created_at, discussion count +- Created get_selected_project helper for future handler use + +## Task Commits + +Each task was committed atomically: + +1. **Task 1: Add get_project_by_name to service** - `70dd517` (feat) +2. **Task 2: Implement /project select and /project info handlers** - `9922c33` (feat) + +**Plan metadata:** `298c8d7` (docs: complete plan) + +## Files Created/Modified +- `src/moai/core/services/project.py` - Added get_project_by_name function +- `src/moai/bot/handlers/projects.py` - Added select/info handlers and get_selected_project helper + +## Decisions Made +- Used ilike for case-insensitive name matching (SQLAlchemy pattern) +- Stored selected_project_id in context.user_data (python-telegram-bot per-user state pattern) + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered +None + +## Next Phase Readiness +- Ready for 03-03-PLAN.md (delete/models commands) +- Project selection foundation established for discussion commands + +--- +*Phase: 03-project-crud* +*Completed: 2026-01-16*