chore: complete v1.0 milestone
Archived: - milestones/v1.0-ROADMAP.md - milestones/v1.0-REQUIREMENTS.md - milestones/v1.0-MILESTONE-AUDIT.md Deleted (fresh for next milestone): - ROADMAP.md Updated: - MILESTONES.md (new entry) - PROJECT.md (requirements → Validated, decisions with outcomes) - STATE.md (reset for next milestone) v1.0 MVP shipped: - 6 phases, 16 plans - 2,732 lines Python - All 9 requirements validated Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
69574c8c6b
commit
3e5e316d24
7 changed files with 403 additions and 166 deletions
31
.planning/MILESTONES.md
Normal file
31
.planning/MILESTONES.md
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Project Milestones: MoAI
|
||||||
|
|
||||||
|
## v1.0 MVP (Shipped: 2026-01-17)
|
||||||
|
|
||||||
|
**Delivered:** A fully functional multi-AI collaborative brainstorming Telegram bot where Claude, GPT, and Gemini discuss topics together and generate consensus.
|
||||||
|
|
||||||
|
**Phases completed:** 1-6 (16 plans total)
|
||||||
|
|
||||||
|
**Key accomplishments:**
|
||||||
|
|
||||||
|
- Complete Python project scaffolding with ruff, pre-commit, pytest, and src layout
|
||||||
|
- Working Telegram bot with /help, /status and full project CRUD commands
|
||||||
|
- AI client abstraction layer supporting Requesty/OpenRouter model routing
|
||||||
|
- Single-model /ask and multi-model discussions (parallel /open, sequential /discuss)
|
||||||
|
- @mention direct messages to specific AI models during discussions
|
||||||
|
- Consensus generation and markdown export of full discussion transcripts
|
||||||
|
|
||||||
|
**Stats:**
|
||||||
|
|
||||||
|
- 21 Python files created
|
||||||
|
- 2,732 lines of Python
|
||||||
|
- 6 phases, 16 plans, ~64 tasks
|
||||||
|
- 1 day from start to ship (2026-01-16 → 2026-01-17)
|
||||||
|
|
||||||
|
**Git range:** `feat(01-01)` → `feat(06-02)`
|
||||||
|
|
||||||
|
**Archive:** [v1.0-ROADMAP.md](milestones/v1.0-ROADMAP.md), [v1.0-REQUIREMENTS.md](milestones/v1.0-REQUIREMENTS.md)
|
||||||
|
|
||||||
|
**What's next:** Define requirements for v1.1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## What This Is
|
## What This Is
|
||||||
|
|
||||||
A multi-AI collaborative brainstorming platform where multiple AI models (Claude, GPT, Gemini) discuss topics together, see each other's responses, and work toward consensus. Phase 1 is a Telegram bot for personal use; Phase 2 adds a web UI; future phases enable lightweight SaaS with multi-user collaboration.
|
A multi-AI collaborative brainstorming Telegram bot where multiple AI models (Claude, GPT, Gemini) discuss topics together, see each other's responses, and work toward consensus. Users can run parallel queries, conduct sequential discussions, @mention specific models, and export conversations with AI-generated consensus summaries.
|
||||||
|
|
||||||
## Core Value
|
## Core Value
|
||||||
|
|
||||||
|
|
@ -12,19 +12,19 @@ Get richer, more diverse AI insights through structured multi-model discussions
|
||||||
|
|
||||||
### Validated
|
### Validated
|
||||||
|
|
||||||
(None yet — ship to validate)
|
- ✓ Project scaffolding (pyproject.toml, ruff, pre-commit, src layout) — v1.0
|
||||||
|
- ✓ M1: Bot responds to /help, /status — v1.0
|
||||||
|
- ✓ M2: Project CRUD (/projects, /project new, select, delete, models, info) — v1.0
|
||||||
|
- ✓ M3: Single model Q&A working (/ask command) — v1.0
|
||||||
|
- ✓ M4: Open mode (parallel) with multiple models — v1.0
|
||||||
|
- ✓ M5: Discuss mode (sequential rounds) — v1.0
|
||||||
|
- ✓ M6: Consensus generation (/consensus) — v1.0
|
||||||
|
- ✓ M7: Export to markdown (/export) — v1.0
|
||||||
|
- ✓ M8: @mention direct messages — v1.0
|
||||||
|
|
||||||
### Active
|
### Active
|
||||||
|
|
||||||
- [ ] Project scaffolding (pyproject.toml, ruff, pre-commit, src layout)
|
(None — define requirements for next milestone)
|
||||||
- [ ] M1: Bot responds to /help, /status
|
|
||||||
- [ ] M2: Project CRUD (/projects, /project new, select, delete, models, info)
|
|
||||||
- [ ] M3: Single model Q&A working
|
|
||||||
- [ ] M4: Open mode (parallel) with multiple models
|
|
||||||
- [ ] M5: Discuss mode (sequential rounds)
|
|
||||||
- [ ] M6: Consensus generation (/consensus)
|
|
||||||
- [ ] M7: Export to markdown (/export)
|
|
||||||
- [ ] M8: @mention direct messages
|
|
||||||
|
|
||||||
### Out of Scope
|
### Out of Scope
|
||||||
|
|
||||||
|
|
@ -38,15 +38,17 @@ Get richer, more diverse AI insights through structured multi-model discussions
|
||||||
|
|
||||||
## Context
|
## Context
|
||||||
|
|
||||||
**SPEC.md contains:**
|
**Current state:** v1.0 shipped. Telegram bot fully functional with 2,732 LOC Python.
|
||||||
- Full architecture diagram (Telegram → Python backend → Requesty/OpenRouter → AI APIs)
|
|
||||||
- Complete data model (Project, Discussion, Round, Message, Consensus)
|
|
||||||
- All Telegram commands with syntax
|
|
||||||
- System prompts for models and consensus detection
|
|
||||||
- Export markdown format
|
|
||||||
- File structure specification
|
|
||||||
|
|
||||||
**Current state:** Greenfield. Only documentation exists (SPEC.md, README.md, CLAUDE.md).
|
**Tech stack:** Python 3.11+, python-telegram-bot, SQLAlchemy + SQLite, OpenAI SDK (Requesty/OpenRouter compatible), pytest, ruff.
|
||||||
|
|
||||||
|
**Architecture:** Telegram command → Handler → Service → Orchestrator → AI Client → Requesty/OpenRouter → AI APIs
|
||||||
|
|
||||||
|
**Known tech debt (from v1.0 audit):**
|
||||||
|
- Missing test coverage for database error paths
|
||||||
|
- Error handling enhancement deferred (comprehensive retry/timeout)
|
||||||
|
- Allowed users middleware not enforced (defined but unchecked)
|
||||||
|
- Minor code patterns: orphaned export, inconsistent get_selected_project, missing re-exports
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
|
|
||||||
|
|
@ -65,9 +67,16 @@ Get richer, more diverse AI insights through structured multi-model discussions
|
||||||
|
|
||||||
| Decision | Rationale | Outcome |
|
| Decision | Rationale | Outcome |
|
||||||
|----------|-----------|---------|
|
|----------|-----------|---------|
|
||||||
| AI client as abstraction layer | Support Requesty, OpenRouter, direct APIs without changing core code | — Pending |
|
| AI client as abstraction layer | Support Requesty, OpenRouter, direct APIs without changing core code | ✓ Good — OpenAI SDK works with both routers |
|
||||||
| Full project scaffolding first | Consistent tooling from day one; prevents tech debt | — Pending |
|
| Full project scaffolding first | Consistent tooling from day one; prevents tech debt | ✓ Good — ruff/pre-commit caught issues early |
|
||||||
| User allowlist auth (Phase 1) | Simple for single-user POC, each user brings own AI credentials later | — Pending |
|
| User allowlist auth (Phase 1) | Simple for single-user POC | ⚠️ Revisit — middleware defined but not enforced |
|
||||||
|
| hatchling as build backend | Explicit src layout config | ✓ Good |
|
||||||
|
| String(36) for UUID storage | SQLite compatibility | ✓ Good |
|
||||||
|
| Module-level singletons | Simple pattern for AI client and database | ✓ Good — consistent access everywhere |
|
||||||
|
| asyncio.gather for parallel | Concurrent model queries in /open | ✓ Good — graceful per-model error handling |
|
||||||
|
| user_data for state | Store discussion context across commands | ✓ Good — clean multi-command flows |
|
||||||
|
| JSON format for consensus | Structured AI output parsing | ✓ Good — reliable extraction |
|
||||||
|
| BytesIO for export | In-memory file generation | ✓ Good — no temp files needed |
|
||||||
|
|
||||||
---
|
---
|
||||||
*Last updated: 2026-01-16 after initialization*
|
*Last updated: 2026-01-17 after v1.0 milestone*
|
||||||
|
|
|
||||||
|
|
@ -1,82 +0,0 @@
|
||||||
# Roadmap: MoAI
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
Build a Telegram bot where multiple AI models (Claude, GPT, Gemini) collaborate on discussions. Start with project scaffolding and tooling, add bot infrastructure, then layer in project management, single-model queries, multi-model discussions, and finally consensus/export features.
|
|
||||||
|
|
||||||
## Domain Expertise
|
|
||||||
|
|
||||||
None
|
|
||||||
|
|
||||||
## Phases
|
|
||||||
|
|
||||||
**Phase Numbering:**
|
|
||||||
- Integer phases (1, 2, 3): Planned milestone work
|
|
||||||
- Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED)
|
|
||||||
|
|
||||||
- [x] **Phase 1: Foundation** - Project scaffolding, tooling, database models
|
|
||||||
- [x] **Phase 2: Bot Core** - Telegram bot setup, /help, /status (M1)
|
|
||||||
- [x] **Phase 3: Project CRUD** - Project management commands (M2)
|
|
||||||
- [x] **Phase 4: Single Model Q&A** - AI client abstraction, basic queries (M3)
|
|
||||||
- [x] **Phase 5: Multi-Model Discussions** - Open mode, discuss mode, @mentions (M4, M5, M8)
|
|
||||||
- [x] **Phase 6: Consensus & Export** - Consensus generation, markdown export (M6, M7)
|
|
||||||
|
|
||||||
## Phase Details
|
|
||||||
|
|
||||||
### Phase 1: Foundation ✓
|
|
||||||
**Goal**: Complete project scaffolding with pyproject.toml, ruff, pre-commit, src layout, and SQLAlchemy models
|
|
||||||
**Depends on**: Nothing (first phase)
|
|
||||||
**Research**: Unlikely (established patterns)
|
|
||||||
**Plans**: 3 (01-01 scaffolding, 01-02 models, 01-03 database & tests)
|
|
||||||
**Completed**: 2026-01-16
|
|
||||||
|
|
||||||
### Phase 2: Bot Core ✓
|
|
||||||
**Goal**: Working Telegram bot responding to /help and /status commands
|
|
||||||
**Depends on**: Phase 1
|
|
||||||
**Research**: Likely (python-telegram-bot async patterns)
|
|
||||||
**Research topics**: python-telegram-bot v20+ async API, Application builder, handler registration
|
|
||||||
**Plans**: 2 (02-01 infrastructure, 02-02 help/status commands)
|
|
||||||
**Completed**: 2026-01-16
|
|
||||||
|
|
||||||
### Phase 3: Project CRUD ✓
|
|
||||||
**Goal**: Full project management via Telegram (/projects, /project new/select/delete/models/info)
|
|
||||||
**Depends on**: Phase 2
|
|
||||||
**Research**: Unlikely (standard CRUD with established patterns)
|
|
||||||
**Plans**: 3 (03-01 service & list/create, 03-02 select/info, 03-03 delete/models)
|
|
||||||
**Completed**: 2026-01-16
|
|
||||||
|
|
||||||
### Phase 4: Single Model Q&A ✓
|
|
||||||
**Goal**: Query a single AI model through the bot with abstracted AI client layer
|
|
||||||
**Depends on**: Phase 3
|
|
||||||
**Research**: Likely (external AI API integration)
|
|
||||||
**Research topics**: Requesty API documentation, OpenRouter API, async HTTP patterns with httpx/aiohttp
|
|
||||||
**Plans**: 2 (04-01 AI client, 04-02 /ask command)
|
|
||||||
**Completed**: 2026-01-16
|
|
||||||
|
|
||||||
### Phase 5: Multi-Model Discussions ✓
|
|
||||||
**Goal**: Open mode (parallel), discuss mode (sequential rounds), and @mention direct messages
|
|
||||||
**Depends on**: Phase 4
|
|
||||||
**Research**: Unlikely (builds on Phase 4 AI client patterns)
|
|
||||||
**Plans**: 4 (05-01 discussion service, 05-02 open mode, 05-03 discuss mode, 05-04 mentions)
|
|
||||||
**Completed**: 2026-01-16
|
|
||||||
|
|
||||||
### Phase 6: Consensus & Export ✓
|
|
||||||
**Goal**: Consensus generation from discussions and markdown export
|
|
||||||
**Depends on**: Phase 5
|
|
||||||
**Research**: Unlikely (internal patterns, markdown generation)
|
|
||||||
**Plans**: 2 (06-01 consensus generation, 06-02 export)
|
|
||||||
**Completed**: 2026-01-17
|
|
||||||
|
|
||||||
## Progress
|
|
||||||
|
|
||||||
**Execution Order:**
|
|
||||||
Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6
|
|
||||||
|
|
||||||
| Phase | Plans Complete | Status | Completed |
|
|
||||||
|-------|----------------|--------|-----------|
|
|
||||||
| 1. Foundation | 3/3 | Complete | 2026-01-16 |
|
|
||||||
| 2. Bot Core | 2/2 | Complete | 2026-01-16 |
|
|
||||||
| 3. Project CRUD | 3/3 | Complete | 2026-01-16 |
|
|
||||||
| 4. Single Model Q&A | 2/2 | Complete | 2026-01-16 |
|
|
||||||
| 5. Multi-Model Discussions | 4/4 | Complete | 2026-01-16 |
|
|
||||||
| 6. Consensus & Export | 2/2 | Complete | 2026-01-17 |
|
|
||||||
|
|
@ -2,91 +2,53 @@
|
||||||
|
|
||||||
## Project Reference
|
## Project Reference
|
||||||
|
|
||||||
See: .planning/PROJECT.md (updated 2026-01-16)
|
See: .planning/PROJECT.md (updated 2026-01-17)
|
||||||
|
|
||||||
**Core value:** Get richer, more diverse AI insights through structured multi-model discussions—ask a team of AIs instead of just one.
|
**Core value:** Get richer, more diverse AI insights through structured multi-model discussions—ask a team of AIs instead of just one.
|
||||||
**Current focus:** Milestone 1 complete — All 6 phases done
|
**Current focus:** Planning next milestone (v1.1)
|
||||||
|
|
||||||
## Current Position
|
## Current Position
|
||||||
|
|
||||||
Phase: 6 of 6 (Consensus & Export)
|
Phase: Planning
|
||||||
Plan: 2 of 2 in current phase
|
Plan: Not started
|
||||||
Status: Phase complete
|
Status: v1.0 complete, ready for next milestone
|
||||||
Last activity: 2026-01-17 — Completed 06-02-PLAN.md (markdown export)
|
Last activity: 2026-01-17 — v1.0 milestone shipped
|
||||||
|
|
||||||
Progress: ██████████ 100%
|
Progress: v1.0 ██████████ 100% shipped
|
||||||
|
|
||||||
## Performance Metrics
|
## Performance Metrics
|
||||||
|
|
||||||
**Velocity:**
|
**v1.0 Summary:**
|
||||||
- Total plans completed: 16
|
- Total plans completed: 16
|
||||||
- Average duration: 4 min
|
- Total phases: 6
|
||||||
- Total execution time: 1.1 hours
|
- Average plan duration: 4 min
|
||||||
|
- Total execution time: ~1.1 hours
|
||||||
**By Phase:**
|
- Lines of code: 2,732 Python
|
||||||
|
|
||||||
| Phase | Plans | Total | Avg/Plan |
|
|
||||||
|-------|-------|-------|----------|
|
|
||||||
| 01-foundation | 3 | 15 min | 5 min |
|
|
||||||
| 02-bot-core | 2 | 4 min | 2 min |
|
|
||||||
| 03-project-crud | 3 | 11 min | 4 min |
|
|
||||||
| 04-single-model-qa | 2 | 10 min | 5 min |
|
|
||||||
| 05-multi-model | 4 | 18 min | 5 min |
|
|
||||||
| 06-consensus-export | 2 | 8 min | 4 min |
|
|
||||||
|
|
||||||
**Recent Trend:**
|
|
||||||
- Last 5 plans: 05-03 (5 min), 05-04 (8 min), 06-01 (5 min), 06-02 (3 min)
|
|
||||||
- Trend: Fast
|
|
||||||
|
|
||||||
## Accumulated Context
|
## Accumulated Context
|
||||||
|
|
||||||
### Decisions
|
### Decisions
|
||||||
|
|
||||||
Decisions are logged in PROJECT.md Key Decisions table.
|
Decisions are logged in PROJECT.md Key Decisions table.
|
||||||
Recent decisions affecting current work:
|
v1.0 decisions archived with outcomes.
|
||||||
|
|
||||||
- **01-01:** hatchling as build backend with explicit src layout config
|
|
||||||
- **01-01:** ruff-pre-commit v0.14.13 with --fix for auto-corrections
|
|
||||||
- **01-02:** String(36) for UUID storage (SQLite compatibility)
|
|
||||||
- **01-02:** JSON type for list/dict fields (no ARRAY for SQLite)
|
|
||||||
- **01-03:** expire_on_commit=False for async session usability
|
|
||||||
- **01-03:** Module-level globals for engine/session factory (simple singleton)
|
|
||||||
- **02-01:** Module-level config reference for post_init callback access
|
|
||||||
- **02-01:** Config stored in bot_data for handler access
|
|
||||||
- **02-02:** Markdown parse_mode for formatted help text
|
|
||||||
- **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
|
|
||||||
- **03-03:** Explicit project ID required for delete (safety)
|
|
||||||
- **03-03:** Comma-separated model list parsing
|
|
||||||
- **04-01:** OpenAI SDK for router abstraction (Requesty/OpenRouter compatible)
|
|
||||||
- **04-01:** Module-level singleton for AI client (matches database pattern)
|
|
||||||
- **04-02:** AI client initialized in post_init alongside database
|
|
||||||
- **04-02:** Typing indicator shown while waiting for AI response
|
|
||||||
- **05-02:** asyncio.gather for parallel model queries with graceful per-model error handling
|
|
||||||
- **05-02:** SYSTEM_PROMPT includes participant list and topic for roundtable context
|
|
||||||
- **05-03:** Sequential model execution with for-loop so each model sees prior responses
|
|
||||||
- **05-03:** Context stored in user_data["discussion_state"] for multi-command flows
|
|
||||||
- **05-04:** Direct messages prefix with "[Direct to you]:" for model awareness
|
|
||||||
- **05-04:** MessageHandler registered AFTER CommandHandlers for correct priority
|
|
||||||
- **05-04:** @mentions persist with is_direct=True in current round
|
|
||||||
- **06-01:** JSON format for consensus output (agreements array, disagreements array)
|
|
||||||
- **06-01:** Graceful error handling returns empty consensus on JSON parse failure
|
|
||||||
- **06-02:** BytesIO for in-memory markdown file generation (no temp files)
|
|
||||||
- **06-02:** Filename sanitization with space→underscore replacement
|
|
||||||
|
|
||||||
### Deferred Issues
|
### Deferred Issues
|
||||||
|
|
||||||
None yet.
|
None active — v1.0 tech debt documented in PROJECT.md Context section.
|
||||||
|
|
||||||
### Blockers/Concerns
|
### Blockers/Concerns
|
||||||
|
|
||||||
None yet.
|
None.
|
||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-01-17
|
Last session: 2026-01-17
|
||||||
Stopped at: Completed 06-02-PLAN.md (markdown export) — Milestone 1 complete
|
Stopped at: v1.0 milestone complete
|
||||||
Resume file: None
|
Resume file: None
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. `/gsd:discuss-milestone` — thinking partner, creates context file
|
||||||
|
2. `/gsd:new-milestone` — update PROJECT.md with new goals
|
||||||
|
3. `/gsd:define-requirements` — scope what to build
|
||||||
|
4. `/gsd:create-roadmap` — plan how to build it
|
||||||
|
|
|
||||||
142
.planning/milestones/v1.0-MILESTONE-AUDIT.md
Normal file
142
.planning/milestones/v1.0-MILESTONE-AUDIT.md
Normal file
|
|
@ -0,0 +1,142 @@
|
||||||
|
---
|
||||||
|
milestone: 1.0
|
||||||
|
audited: 2026-01-17
|
||||||
|
status: passed
|
||||||
|
scores:
|
||||||
|
requirements: 9/9
|
||||||
|
phases: 6/6
|
||||||
|
integration: 24/24
|
||||||
|
flows: 4/4
|
||||||
|
gaps:
|
||||||
|
requirements: []
|
||||||
|
integration: []
|
||||||
|
flows: []
|
||||||
|
tech_debt:
|
||||||
|
- phase: 01-foundation
|
||||||
|
items:
|
||||||
|
- "Missing test coverage for error handling paths in database.py (lines 62, 85, 91-93)"
|
||||||
|
- phase: 04-single-model-qa
|
||||||
|
items:
|
||||||
|
- "Error handling enhancement deferred (original roadmap estimated 04-03 plan)"
|
||||||
|
- phase: general
|
||||||
|
items:
|
||||||
|
- "Orphaned export: get_round_messages defined but unused"
|
||||||
|
- "Inconsistent pattern: export.py has local get_selected_project instead of importing from projects.py"
|
||||||
|
- "Services __init__.py missing re-exports for save_consensus, get_consensus"
|
||||||
|
- "Allowed users middleware not enforced (BotConfig.allowed_users defined but unchecked)"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Milestone v1.0 Audit Report
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
**Status: PASSED**
|
||||||
|
|
||||||
|
All 9 requirements satisfied. All 6 phases complete. All 4 E2E flows verified. Cross-phase integration verified with 24 exports properly wired.
|
||||||
|
|
||||||
|
## Requirements Coverage
|
||||||
|
|
||||||
|
| Requirement | Phase | Status | Evidence |
|
||||||
|
|-------------|-------|--------|----------|
|
||||||
|
| Project scaffolding | Phase 1 | ✓ Satisfied | pyproject.toml, .pre-commit-config.yaml, src/moai/ structure |
|
||||||
|
| M1: /help, /status | Phase 2 | ✓ Satisfied | handlers/commands.py, handlers/status.py |
|
||||||
|
| M2: Project CRUD | Phase 3 | ✓ Satisfied | handlers/projects.py with new/select/delete/models/info |
|
||||||
|
| M3: Single model Q&A | Phase 4 | ✓ Satisfied | /ask command in handlers/discussion.py |
|
||||||
|
| M4: Open mode (parallel) | Phase 5 | ✓ Satisfied | /open command with asyncio.gather |
|
||||||
|
| M5: Discuss mode (sequential) | Phase 5 | ✓ Satisfied | /discuss, /next, /stop commands |
|
||||||
|
| M6: Consensus generation | Phase 6 | ✓ Satisfied | /consensus command |
|
||||||
|
| M7: Export to markdown | Phase 6 | ✓ Satisfied | /export command |
|
||||||
|
| M8: @mention direct messages | Phase 5 | ✓ Satisfied | @mention MessageHandler |
|
||||||
|
|
||||||
|
## Phase Completion
|
||||||
|
|
||||||
|
| Phase | Plans | Status | SUMMARY.md |
|
||||||
|
|-------|-------|--------|------------|
|
||||||
|
| 1. Foundation | 3/3 | Complete | ✓ All present |
|
||||||
|
| 2. Bot Core | 2/2 | Complete | ✓ All present |
|
||||||
|
| 3. Project CRUD | 3/3 | Complete | ✓ All present |
|
||||||
|
| 4. Single Model Q&A | 2/2 | Complete | ✓ All present |
|
||||||
|
| 5. Multi-Model Discussions | 4/4 | Complete | ✓ All present |
|
||||||
|
| 6. Consensus & Export | 2/2 | Complete | ✓ All present |
|
||||||
|
|
||||||
|
**Total:** 16 plans completed, 16 SUMMARY.md files present
|
||||||
|
|
||||||
|
## Cross-Phase Integration
|
||||||
|
|
||||||
|
### Wiring Status
|
||||||
|
|
||||||
|
| From Phase | Export | Used By | Status |
|
||||||
|
|------------|--------|---------|--------|
|
||||||
|
| Phase 1 | SQLAlchemy models | services, handlers, orchestrator, exporter | CONNECTED |
|
||||||
|
| Phase 1 | database.py functions | main.py, services | CONNECTED |
|
||||||
|
| Phase 2 | BotConfig, register_handlers | main.py, ai_client | CONNECTED |
|
||||||
|
| Phase 3 | project service functions | handlers | CONNECTED |
|
||||||
|
| Phase 3 | get_selected_project | discussion.py, status.py | CONNECTED |
|
||||||
|
| Phase 4 | AIClient, MODEL_MAP | main.py, orchestrator, handlers | CONNECTED |
|
||||||
|
| Phase 5 | discussion service | handlers, orchestrator | CONNECTED |
|
||||||
|
| Phase 5 | orchestrator functions | handlers | CONNECTED |
|
||||||
|
| Phase 6 | exporter functions | export handler | CONNECTED |
|
||||||
|
| Phase 6 | consensus service | discussion handler | CONNECTED |
|
||||||
|
|
||||||
|
**Connected:** 24 key exports properly used
|
||||||
|
**Orphaned:** 1 (get_round_messages - low severity)
|
||||||
|
**Missing:** 0
|
||||||
|
|
||||||
|
## E2E Flow Verification
|
||||||
|
|
||||||
|
### Flow 1: Single Model Q&A
|
||||||
|
`/project new → /project select → /ask → response`
|
||||||
|
|
||||||
|
**Status: COMPLETE** - All steps verified functional
|
||||||
|
|
||||||
|
### Flow 2: Open Mode (Parallel)
|
||||||
|
`/project new → /project select → /open → parallel responses`
|
||||||
|
|
||||||
|
**Status: COMPLETE** - asyncio.gather orchestration verified
|
||||||
|
|
||||||
|
### Flow 3: Full Discussion Flow
|
||||||
|
`/project new → /project select → /discuss → /next → /stop → /consensus → /export`
|
||||||
|
|
||||||
|
**Status: COMPLETE** - State management via user_data verified, persistence verified
|
||||||
|
|
||||||
|
### Flow 4: @mention During Discussion
|
||||||
|
`@claude message → direct response (with context if discussion active)`
|
||||||
|
|
||||||
|
**Status: COMPLETE** - MessageHandler regex filter verified, optional context loading verified
|
||||||
|
|
||||||
|
## Tech Debt Summary
|
||||||
|
|
||||||
|
### Phase 1: Foundation
|
||||||
|
- **Coverage gap:** Error handling paths in database.py untested (lines 62, 85, 91-93)
|
||||||
|
- **Severity:** Low - happy path tested, edge cases deferred
|
||||||
|
|
||||||
|
### Phase 4: Single Model Q&A
|
||||||
|
- **Deferred plan:** 04-03 error handling enhancement not implemented
|
||||||
|
- **Severity:** Low - basic error handling exists, comprehensive retry/timeout logic deferred
|
||||||
|
|
||||||
|
### General
|
||||||
|
- **Orphaned export:** `get_round_messages` in discussion service defined but unused
|
||||||
|
- **Pattern inconsistency:** export.py has local `get_selected_project` sync function vs importing async version
|
||||||
|
- **Missing re-exports:** `save_consensus`, `get_consensus` not in services/__init__.py
|
||||||
|
- **Feature gap:** `allowed_users` auth middleware not enforced (defined in config but unchecked)
|
||||||
|
|
||||||
|
### Total Tech Debt: 7 items across 3 categories
|
||||||
|
- Critical blockers: 0
|
||||||
|
- Non-blocking items: 7
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
**READY TO COMPLETE**
|
||||||
|
|
||||||
|
Milestone v1.0 has:
|
||||||
|
- All 9 requirements satisfied
|
||||||
|
- All 6 phases complete with SUMMARY.md files
|
||||||
|
- All 4 E2E user flows verified
|
||||||
|
- Cross-phase integration fully connected
|
||||||
|
- Tech debt documented but non-blocking
|
||||||
|
|
||||||
|
Proceed with `/gsd:complete-milestone v1.0`
|
||||||
|
|
||||||
|
---
|
||||||
|
*Audited: 2026-01-17*
|
||||||
|
*Auditor: gsd-integration-checker*
|
||||||
50
.planning/milestones/v1.0-REQUIREMENTS.md
Normal file
50
.planning/milestones/v1.0-REQUIREMENTS.md
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# Requirements Archive: v1.0 MVP
|
||||||
|
|
||||||
|
**Archived:** 2026-01-17
|
||||||
|
**Status:** ✅ SHIPPED
|
||||||
|
|
||||||
|
This is the archived requirements specification for v1.0.
|
||||||
|
For current requirements, see `.planning/PROJECT.md`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.0 Requirements
|
||||||
|
|
||||||
|
### Core Requirements
|
||||||
|
|
||||||
|
- [x] Project scaffolding (pyproject.toml, ruff, pre-commit, src layout)
|
||||||
|
- [x] M1: Bot responds to /help, /status
|
||||||
|
- [x] M2: Project CRUD (/projects, /project new, select, delete, models, info)
|
||||||
|
- [x] M3: Single model Q&A working
|
||||||
|
- [x] M4: Open mode (parallel) with multiple models
|
||||||
|
- [x] M5: Discuss mode (sequential rounds)
|
||||||
|
- [x] M6: Consensus generation (/consensus)
|
||||||
|
- [x] M7: Export to markdown (/export)
|
||||||
|
- [x] M8: @mention direct messages
|
||||||
|
|
||||||
|
### Traceability
|
||||||
|
|
||||||
|
| Requirement | Phase | Status | Evidence |
|
||||||
|
|-------------|-------|--------|----------|
|
||||||
|
| Project scaffolding | Phase 1 | Complete | pyproject.toml, .pre-commit-config.yaml, src/moai/ |
|
||||||
|
| M1: /help, /status | Phase 2 | Complete | handlers/commands.py, handlers/status.py |
|
||||||
|
| M2: Project CRUD | Phase 3 | Complete | handlers/projects.py |
|
||||||
|
| M3: Single model Q&A | Phase 4 | Complete | /ask in handlers/discussion.py |
|
||||||
|
| M4: Open mode | Phase 5 | Complete | /open with asyncio.gather |
|
||||||
|
| M5: Discuss mode | Phase 5 | Complete | /discuss, /next, /stop commands |
|
||||||
|
| M6: Consensus | Phase 6 | Complete | /consensus command |
|
||||||
|
| M7: Export | Phase 6 | Complete | /export command |
|
||||||
|
| M8: @mentions | Phase 5 | Complete | @mention MessageHandler |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Milestone Summary
|
||||||
|
|
||||||
|
**Shipped:** 9 of 9 v1.0 requirements
|
||||||
|
**Adjusted:** None
|
||||||
|
**Dropped:** None
|
||||||
|
|
||||||
|
All requirements delivered as originally specified. No scope changes during milestone.
|
||||||
|
|
||||||
|
---
|
||||||
|
*Archived: 2026-01-17 as part of v1.0 milestone completion*
|
||||||
125
.planning/milestones/v1.0-ROADMAP.md
Normal file
125
.planning/milestones/v1.0-ROADMAP.md
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
# Milestone v1.0: MVP
|
||||||
|
|
||||||
|
**Status:** ✅ SHIPPED 2026-01-17
|
||||||
|
**Phases:** 1-6
|
||||||
|
**Total Plans:** 16
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Build a Telegram bot where multiple AI models (Claude, GPT, Gemini) collaborate on discussions. Start with project scaffolding and tooling, add bot infrastructure, then layer in project management, single-model queries, multi-model discussions, and finally consensus/export features.
|
||||||
|
|
||||||
|
## Phases
|
||||||
|
|
||||||
|
### Phase 1: Foundation ✓
|
||||||
|
|
||||||
|
**Goal**: Complete project scaffolding with pyproject.toml, ruff, pre-commit, src layout, and SQLAlchemy models
|
||||||
|
**Depends on**: Nothing (first phase)
|
||||||
|
**Plans**: 3 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 01-01: Project scaffolding (pyproject.toml, ruff, pre-commit)
|
||||||
|
- [x] 01-02: SQLAlchemy models (Project, Discussion, Round, Message, Consensus)
|
||||||
|
- [x] 01-03: Database session management and tests
|
||||||
|
|
||||||
|
**Completed:** 2026-01-16
|
||||||
|
|
||||||
|
### Phase 2: Bot Core ✓
|
||||||
|
|
||||||
|
**Goal**: Working Telegram bot responding to /help and /status commands
|
||||||
|
**Depends on**: Phase 1
|
||||||
|
**Plans**: 2 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 02-01: Bot infrastructure (Application, config, lifecycle)
|
||||||
|
- [x] 02-02: /help and /status command handlers
|
||||||
|
|
||||||
|
**Completed:** 2026-01-16
|
||||||
|
|
||||||
|
### Phase 3: Project CRUD ✓
|
||||||
|
|
||||||
|
**Goal**: Full project management via Telegram (/projects, /project new/select/delete/models/info)
|
||||||
|
**Depends on**: Phase 2
|
||||||
|
**Plans**: 3 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 03-01: Project service layer, /projects and /project new
|
||||||
|
- [x] 03-02: /project select and /project info
|
||||||
|
- [x] 03-03: /project delete and /project models
|
||||||
|
|
||||||
|
**Completed:** 2026-01-16
|
||||||
|
|
||||||
|
### Phase 4: Single Model Q&A ✓
|
||||||
|
|
||||||
|
**Goal**: Query a single AI model through the bot with abstracted AI client layer
|
||||||
|
**Depends on**: Phase 3
|
||||||
|
**Plans**: 2 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 04-01: AI client abstraction layer (Requesty/OpenRouter)
|
||||||
|
- [x] 04-02: /ask command handler
|
||||||
|
|
||||||
|
**Completed:** 2026-01-16
|
||||||
|
|
||||||
|
### Phase 5: Multi-Model Discussions ✓
|
||||||
|
|
||||||
|
**Goal**: Open mode (parallel), discuss mode (sequential rounds), and @mention direct messages
|
||||||
|
**Depends on**: Phase 4
|
||||||
|
**Plans**: 4 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 05-01: Discussion service (CRUD operations)
|
||||||
|
- [x] 05-02: /open command (parallel mode)
|
||||||
|
- [x] 05-03: /discuss, /next, /stop commands (sequential mode)
|
||||||
|
- [x] 05-04: @mention message handler
|
||||||
|
|
||||||
|
**Completed:** 2026-01-16
|
||||||
|
|
||||||
|
### Phase 6: Consensus & Export ✓
|
||||||
|
|
||||||
|
**Goal**: Consensus generation from discussions and markdown export
|
||||||
|
**Depends on**: Phase 5
|
||||||
|
**Plans**: 2 plans
|
||||||
|
|
||||||
|
Plans:
|
||||||
|
- [x] 06-01: /consensus command (AI-generated synthesis)
|
||||||
|
- [x] 06-02: /export command (markdown file)
|
||||||
|
|
||||||
|
**Completed:** 2026-01-17
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Milestone Summary
|
||||||
|
|
||||||
|
**Decimal Phases:** None (clean milestone)
|
||||||
|
|
||||||
|
**Key Decisions:**
|
||||||
|
|
||||||
|
- hatchling as build backend with explicit src layout config
|
||||||
|
- String(36) for UUID storage (SQLite compatibility)
|
||||||
|
- Module-level singletons for database and AI client
|
||||||
|
- OpenAI SDK for router abstraction (Requesty/OpenRouter compatible)
|
||||||
|
- Service layer pattern for business logic
|
||||||
|
- asyncio.gather for parallel model queries
|
||||||
|
- user_data dict for discussion state across commands
|
||||||
|
- JSON format for consensus AI output
|
||||||
|
- BytesIO for in-memory markdown export
|
||||||
|
|
||||||
|
**Issues Resolved:**
|
||||||
|
|
||||||
|
- None (greenfield development)
|
||||||
|
|
||||||
|
**Issues Deferred:**
|
||||||
|
|
||||||
|
- Comprehensive error handling (retry/timeout logic)
|
||||||
|
- User allowlist middleware enforcement
|
||||||
|
- Test coverage for database error paths
|
||||||
|
|
||||||
|
**Technical Debt Incurred:**
|
||||||
|
|
||||||
|
- get_round_messages defined but unused
|
||||||
|
- Inconsistent get_selected_project pattern in export.py
|
||||||
|
- Missing re-exports in services/__init__.py
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*For current project status, see .planning/PROJECT.md*
|
||||||
Loading…
Add table
Reference in a new issue