- Add MCP server skeleton implementations for all 7 planned servers (llm-gateway, knowledge-base, git, issues, filesystem, code-analysis, cicd) - Add comprehensive DEVELOPMENT.md with setup and usage instructions - Add BACKLOG.md with detailed phase planning - Update docker-compose.dev.yml with Redis and Celery workers - Update CLAUDE.md with Syndarix-specific context Addresses issues #16, #20, #21 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
40 KiB
Syndarix Backlog
Generated: 2025-12-30 Status: Ready for Gitea import
This document contains detailed issues for Phase 0-1 implementation. Each issue is structured for parallel agent work.
Labels
Create these labels in Gitea first:
| Label | Color | Description |
|---|---|---|
phase-0 |
#0052CC | Phase 0: Foundation |
phase-1 |
#00875A | Phase 1: Core Platform |
backend |
#5319E7 | Backend work |
frontend |
#F9A825 | Frontend work |
devops |
#212121 | DevOps/Infrastructure work |
database |
#006B75 | Database/migrations |
design |
#D4388C | UI/UX design work |
blocked |
#B60205 | Blocked by dependency |
epic |
#7057FF | Epic/parent issue |
Phase 0: Foundation
EPIC: Phase 0 - Foundation Infrastructure
Issue #E01: [EPIC] Phase 0 - Foundation Infrastructure
Title: [EPIC] Phase 0 - Foundation Infrastructure
Labels: epic, phase-0, devops
## Overview
Complete the remaining foundation infrastructure setup for Syndarix development.
## Child Issues
- [ ] #01 Configure CI/CD pipelines
- [ ] #02 Set up development environment documentation
- [ ] #03 Configure Redis for cache + pub/sub
- [ ] #04 Set up Celery worker infrastructure
- [ ] #05 Configure pgvector extension
- [ ] #06 Create MCP server directory structure
- [ ] #07 Set up Docker Compose for local development
## Success Criteria
- All developers can run the full stack locally
- CI/CD runs tests on every PR
- All infrastructure components healthy
Issue #01: Configure CI/CD pipelines
Title: Configure CI/CD pipelines for Syndarix
Labels: phase-0, devops
## Description
Set up Gitea Actions CI/CD pipeline for the Syndarix repository.
## Requirements
### Backend Pipeline
- Run `uv run ruff check app` (linting)
- Run `uv run mypy app` (type checking)
- Run `IS_TEST=True uv run pytest --cov=app` (tests with coverage)
- Coverage threshold: 90% for new code
### Frontend Pipeline
- Run `npm run lint` (ESLint)
- Run `npm run type-check` (TypeScript)
- Run `npm test` (Jest unit tests)
### Pipeline Structure
1. `lint` job (fast feedback)
2. `test` job (depends on lint)
3. `build` job (depends on test)
4. `deploy` job (only on main, depends on build)
## Acceptance Criteria
- [ ] `.gitea/workflows/ci.yaml` created
- [ ] Backend linting, typing, and tests pass
- [ ] Frontend linting, typing, and tests pass
- [ ] Coverage reports generated
- [ ] Pipeline fails on any check failure
- [ ] Documentation updated
## Technical Notes
- Use `uv` for Python dependency management
- Reference: ADR-003 (Celery/Redis architecture)
- Celery workers not needed for CI tests
## Assignable To
devops-engineer agent
Issue #02: Development environment documentation
Title: Create development environment setup documentation
Labels: phase-0, devops
## Description
Write comprehensive documentation for setting up the Syndarix development environment.
## Requirements
### Documentation Contents
1. Prerequisites (Python 3.12+, Node 20+, Docker, uv)
2. Repository cloning and setup
3. Environment variables configuration
4. Database setup (PostgreSQL with pgvector)
5. Redis setup
6. Running the backend (`uv run uvicorn`)
7. Running the frontend (`npm run dev`)
8. Running with Docker Compose
9. Running tests
10. Common troubleshooting
### File Structure
- `docs/DEVELOPMENT.md` - Main setup guide
- `docs/TROUBLESHOOTING.md` - Common issues and solutions
## Acceptance Criteria
- [ ] Fresh developer can set up environment following docs only
- [ ] All commands tested and working
- [ ] Environment variable templates provided
- [ ] Troubleshooting section covers common issues
## Technical Notes
- Reference existing README.md but expand significantly
- Include both local and Docker-based setup options
## Assignable To
devops-engineer agent
Issue #03: Configure Redis for cache and pub/sub
Title: Configure Redis for cache and pub/sub
Labels: phase-0, devops, backend
## Description
Set up Redis configuration for caching and real-time event pub/sub.
## Requirements
### Redis Configuration
- Connection pooling
- Health check endpoint
- Separate logical databases or key prefixes for:
- Cache (sessions, API responses)
- Pub/Sub (real-time events)
- Celery broker
### Backend Integration
- Create `app/core/redis.py` with Redis client setup
- Add health check for Redis in `/health` endpoint
- Configure connection string from environment
### Docker Compose
- Add Redis service with health check
- Volume for persistence
- Expose port for local development
## Acceptance Criteria
- [ ] Redis service in Docker Compose
- [ ] Health check endpoint includes Redis status
- [ ] Connection pooling configured
- [ ] Cache operations working (set/get/expire)
- [ ] Pub/sub working (publish/subscribe)
- [ ] Tests for Redis operations
## Technical Notes
- Reference: ADR-003 (Redis for cache/pub-sub)
- Reference: SPIKE-003 (Real-time communication)
- Use `redis.asyncio` for async support
## Assignable To
backend-engineer agent (primary)
devops-engineer agent (Docker Compose)
Issue #04: Set up Celery worker infrastructure
Title: Set up Celery worker infrastructure
Labels: phase-0, devops, backend
## Description
Configure Celery for background task processing with Redis as broker.
## Requirements
### Queue Configuration
Per ADR-003:
| Queue | Workers | Purpose |
|-------|---------|---------|
| agent | 4 | High-priority agent tasks |
| git | 2 | Git operations |
| sync | 2 | Issue synchronization |
| default | 2 | General tasks |
### Backend Integration
- Create `app/core/celery_app.py` with Celery configuration
- Create `app/tasks/` directory structure
- Create sample task for testing
### Docker Compose
- Add Celery worker service per queue
- Add Celery beat for scheduled tasks (optional for Phase 0)
- Health checks for workers
### Monitoring
- Flower for Celery monitoring (optional for Phase 0)
## Acceptance Criteria
- [ ] Celery app configured with Redis broker
- [ ] All 4 queues defined and routable
- [ ] Worker services in Docker Compose
- [ ] Sample task executes successfully
- [ ] Workers restart on failure
- [ ] Health checks pass
## Technical Notes
- Reference: ADR-003 (Celery task queue architecture)
- Reference: SPIKE-002 (Agent orchestration patterns)
- Use `celery[redis]` package
## Assignable To
backend-engineer agent (Celery config)
devops-engineer agent (Docker Compose)
Issue #05: Configure pgvector extension
Title: Configure pgvector extension for PostgreSQL
Labels: phase-0, devops, database
## Description
Set up pgvector extension for vector similarity search (RAG knowledge base).
## Requirements
### Database Configuration
- Use `pgvector/pgvector:pg17` Docker image
- Enable pgvector extension via migration
- Create vector index configuration utilities
### Migration
- Create migration to enable pgvector extension
- Document vector dimension choices (1536 for OpenAI, 1024 for Cohere)
### Testing
- Verify extension loads correctly
- Test basic vector operations
## Acceptance Criteria
- [ ] Docker Compose uses pgvector image
- [ ] Migration enables pgvector extension
- [ ] Vector operations working (cosine similarity)
- [ ] Health check includes pgvector status
- [ ] Documentation for vector dimension choices
## Technical Notes
- Reference: ADR-007 (pgvector for RAG)
- Reference: SPIKE-006 (pgvector RAG research)
- Default to 1536 dimensions (OpenAI embedding size)
## Assignable To
devops-engineer agent (Docker)
backend-engineer agent (migration)
Issue #06: Create MCP server directory structure
Title: Create MCP server directory structure
Labels: phase-0, backend
## Description
Set up the directory structure and base classes for MCP (Model Context Protocol) servers.
## Requirements
### Directory Structure
mcp/ ├── init.py ├── base/ │ ├── init.py │ ├── server.py # Base MCP server class │ └── types.py # Common MCP types ├── llm_gateway/ # Phase 2 ├── knowledge_base/ # Phase 2 ├── git_ops/ # Phase 2 ├── issues/ # Phase 2 └── README.md # MCP development guide
### Base Server Class
- FastMCP-based server template
- Standard tool registration pattern
- Project scoping utilities
- Error handling patterns
### Documentation
- How to create a new MCP server
- Tool naming conventions
- Project scoping requirements
## Acceptance Criteria
- [ ] Directory structure created
- [ ] Base server class with project scoping
- [ ] Type definitions for common patterns
- [ ] README with development guide
- [ ] Example tool registration
## Technical Notes
- Reference: ADR-004 (MCP-first architecture)
- Reference: ADR-005 (LiteLLM integration via MCP)
- All tools must accept `project_id` for scoping
## Assignable To
backend-engineer agent
Issue #07: Set up Docker Compose for local development
Title: Set up complete Docker Compose for local development
Labels: phase-0, devops
## Description
Create comprehensive Docker Compose configuration for running the full Syndarix stack locally.
## Requirements
### Services
1. `db` - PostgreSQL with pgvector
2. `redis` - Cache and message broker
3. `backend` - FastAPI application
4. `frontend` - Next.js application
5. `celery-agent` - Celery worker (agent queue)
6. `celery-git` - Celery worker (git queue)
7. `celery-sync` - Celery worker (sync queue)
8. `celery-default` - Celery worker (default queue)
### Configuration
- Health checks for all services
- Proper dependency ordering (`depends_on` with conditions)
- Volume mounts for development (hot reload)
- Environment variable templates
- Resource limits (optional for dev)
### Files
- `docker-compose.yaml` - Main compose file
- `docker-compose.override.yaml` - Development overrides
- `.env.example` - Environment template
## Acceptance Criteria
- [ ] All services start with `docker compose up`
- [ ] Health checks pass for all services
- [ ] Hot reload works for backend and frontend
- [ ] Database data persists across restarts
- [ ] All services can communicate
- [ ] Documented in DEVELOPMENT.md
## Technical Notes
- Reference: Issue #03 (Redis), #04 (Celery), #05 (pgvector)
- This issue depends on #03, #04, #05 completion
## Dependencies
- Blocked by: #03, #04, #05
## Assignable To
devops-engineer agent
Phase 1: Core Platform
EPIC: Phase 1 - Core Platform
Issue #E02: [EPIC] Phase 1 - Core Platform
Title: [EPIC] Phase 1 - Core Platform
Labels: epic, phase-1
## Overview
Build the basic project and agent management system without LLM integration.
## Child Issues
### Data Model (1.1)
- [ ] #08 Create Project entity and CRUD
- [ ] #09 Create AgentType entity and CRUD
- [ ] #10 Create AgentInstance entity and CRUD
- [ ] #11 Create Issue entity with external tracker fields
- [ ] #12 Create Sprint entity and CRUD
### API Layer (1.2)
- [ ] #13 Project management API endpoints
- [ ] #14 Agent type configuration API endpoints
- [ ] #15 Agent instance management API endpoints
- [ ] #16 Issue CRUD API endpoints
- [ ] #17 Sprint management API endpoints
### Real-time Infrastructure (1.3)
- [ ] #18 Implement EventBus with Redis Pub/Sub
- [ ] #19 Create SSE endpoint for project events
- [ ] #20 Client-side SSE handling
### Frontend Foundation (1.4)
- [ ] #21 [DESIGN] Project dashboard page
- [ ] #22 [DESIGN] Agent configuration UI
- [ ] #23 [DESIGN] Issue list and detail views
- [ ] #24 [DESIGN] Real-time activity feed component
- [ ] #25 Implement project dashboard
- [ ] #26 Implement agent configuration UI
- [ ] #27 Implement issue views
- [ ] #28 Implement activity feed
- [ ] #29 Navigation and layout
## Success Criteria
- CRUD operations for all core entities
- Real-time event streaming working
- Basic admin UI for configuration
Issue #08: Create Project entity and CRUD
Title: Create Project entity and CRUD operations
Labels: phase-1, backend, database
## Description
Implement the Project entity and all CRUD operations.
## Requirements
### Entity Fields
```python
class Project(Base):
id: UUID
name: str
slug: str # URL-friendly identifier
description: Optional[str]
autonomy_level: AutonomyLevel # FULL_CONTROL, MILESTONE, AUTONOMOUS
status: ProjectStatus # ACTIVE, PAUSED, COMPLETED, ARCHIVED
settings: dict # JSON field for project-specific settings
owner_id: UUID # FK to User
# Relationships
sprints: List[Sprint]
agent_instances: List[AgentInstance]
issues: List[Issue]
# Timestamps
created_at: datetime
updated_at: datetime
Enums
class AutonomyLevel(str, Enum):
FULL_CONTROL = "full_control" # Approve every action
MILESTONE = "milestone" # Approve sprint boundaries
AUTONOMOUS = "autonomous" # Only major decisions
class ProjectStatus(str, Enum):
ACTIVE = "active"
PAUSED = "paused"
COMPLETED = "completed"
ARCHIVED = "archived"
CRUD Operations
create(db, obj_in: ProjectCreate) -> Projectget(db, id: UUID) -> Optional[Project]get_by_slug(db, slug: str) -> Optional[Project]get_multi_by_owner(db, owner_id: UUID) -> List[Project]update(db, db_obj: Project, obj_in: ProjectUpdate) -> Projectdelete(db, id: UUID) -> None
Tests
- Unit tests for all CRUD operations
- Test slug uniqueness
- Test owner relationship
- Test status transitions
Acceptance Criteria
- Model defined with all fields
- Migration created and applied
- CRUD class with all methods
- Pydantic schemas (Create, Update, InDB, Response)
- Unit tests with >90% coverage
- Async patterns (SQLAlchemy 2.0 style)
Technical Notes
- Reference: ADR-009 (Issue synchronization architecture)
- Follow existing CRUD patterns from PragmaStack
- Use custom exceptions from
app.core.exceptions
Assignable To
backend-engineer agent
---
### Issue #09: Create AgentType entity and CRUD
Title: Create AgentType entity and CRUD operations Labels: phase-1, backend, database
Description
Implement the AgentType entity representing agent templates.
Requirements
Entity Fields
class AgentType(Base):
id: UUID
name: str # e.g., "Product Owner", "Backend Engineer"
slug: str # URL-friendly
description: str
expertise: List[str] # JSON array of expertise areas
personality_prompt: str # System prompt defining personality
# Model Configuration
primary_model: str # e.g., "claude-opus-4.5"
fallback_models: List[str] # JSON array, in order of preference
model_params: dict # temperature, max_tokens, etc.
# MCP Configuration
mcp_servers: List[str] # Which MCP servers this agent can use
tool_permissions: dict # Tool-level permissions
# Metadata
is_active: bool
created_at: datetime
updated_at: datetime
CRUD Operations
create(db, obj_in: AgentTypeCreate) -> AgentTypeget(db, id: UUID) -> Optional[AgentType]get_by_slug(db, slug: str) -> Optional[AgentType]get_all_active(db) -> List[AgentType]update(db, db_obj: AgentType, obj_in: AgentTypeUpdate) -> AgentTypedelete(db, id: UUID) -> None(soft delete via is_active)
Seed Data
Create initial agent types:
- Product Owner
- Business Analyst
- Solutions Architect
- Backend Engineer
- Frontend Engineer
- QA Engineer
- DevOps Engineer
Tests
- CRUD operations
- Model configuration validation
- MCP server permissions
Acceptance Criteria
- Model defined with all fields
- Migration created
- CRUD operations implemented
- Pydantic schemas
- Seed data script
- Unit tests with >90% coverage
Technical Notes
- Reference: ADR-002 (Agent orchestration)
- Reference: SPIKE-002 (Agent orchestration research)
model_paramsshould be validated against known LLM parameters
Assignable To
backend-engineer agent
---
### Issue #10: Create AgentInstance entity and CRUD
Title: Create AgentInstance entity and CRUD operations Labels: phase-1, backend, database
Description
Implement AgentInstance entity representing spawned agents working on projects.
Requirements
Entity Fields
class AgentInstance(Base):
id: UUID
agent_type_id: UUID # FK to AgentType
project_id: UUID # FK to Project
# Instance State
status: AgentStatus # IDLE, WORKING, WAITING, PAUSED, TERMINATED
current_task: Optional[str] # Description of current work
# Memory (per SPIKE-002)
short_term_memory: dict # Current context, clears between tasks
long_term_memory_ref: Optional[str] # Reference to RAG collection
# Session
session_id: Optional[str] # Current active session
last_activity_at: Optional[datetime]
# Metrics
tasks_completed: int
tokens_used: int
cost_incurred: float
# Timestamps
created_at: datetime
updated_at: datetime
terminated_at: Optional[datetime]
Enums
class AgentStatus(str, Enum):
IDLE = "idle"
WORKING = "working"
WAITING = "waiting" # Waiting for human approval
PAUSED = "paused"
TERMINATED = "terminated"
CRUD Operations
create(db, obj_in) -> AgentInstanceget(db, id: UUID) -> Optional[AgentInstance]get_by_project(db, project_id: UUID) -> List[AgentInstance]get_active_by_project(db, project_id: UUID) -> List[AgentInstance]update_status(db, id: UUID, status: AgentStatus) -> AgentInstanceupdate_metrics(db, id: UUID, tokens: int, cost: float) -> AgentInstanceterminate(db, id: UUID) -> AgentInstance
Tests
- CRUD operations
- Status transitions
- Metrics accumulation
- Project relationship
Acceptance Criteria
- Model with all fields
- Migration created
- CRUD operations
- Status transition validation
- Pydantic schemas
- Unit tests with >90% coverage
Technical Notes
- Reference: ADR-002 (Agent orchestration)
- Reference: SPIKE-007 (Inter-agent communication)
- short_term_memory should be cleared on task completion
Assignable To
backend-engineer agent
---
### Issue #11: Create Issue entity with external tracker fields
Title: Create Issue entity with external tracker fields Labels: phase-1, backend, database
Description
Implement Issue entity that syncs with external trackers (Gitea, GitHub, GitLab).
Requirements
Entity Fields
class Issue(Base):
id: UUID
project_id: UUID # FK to Project
# Local Fields
title: str
body: str
status: IssueStatus
priority: IssuePriority
labels: List[str] # JSON array
# Assignment
assigned_agent_id: Optional[UUID] # FK to AgentInstance
human_assignee: Optional[str]
# Sprint
sprint_id: Optional[UUID] # FK to Sprint
story_points: Optional[int]
# External Tracker Sync (per ADR-009)
external_tracker: Optional[str] # 'gitea', 'github', 'gitlab'
external_id: Optional[str] # Issue ID in external system
external_url: Optional[str] # Direct link
external_number: Optional[int] # Issue number
sync_status: SyncStatus
last_synced_at: Optional[datetime]
external_updated_at: Optional[datetime] # Conflict detection
# Timestamps
created_at: datetime
updated_at: datetime
closed_at: Optional[datetime]
Enums
class IssueStatus(str, Enum):
OPEN = "open"
IN_PROGRESS = "in_progress"
IN_REVIEW = "in_review"
BLOCKED = "blocked"
CLOSED = "closed"
class IssuePriority(str, Enum):
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
CRITICAL = "critical"
class SyncStatus(str, Enum):
SYNCED = "synced"
PENDING = "pending"
CONFLICT = "conflict"
ERROR = "error"
CRUD Operations
- Standard CRUD
get_by_external_id(db, tracker, external_id) -> Optional[Issue]get_pending_sync(db, project_id: UUID) -> List[Issue]get_by_sprint(db, sprint_id: UUID) -> List[Issue]get_assigned_to_agent(db, agent_id: UUID) -> List[Issue]
Tests
- CRUD operations
- External sync field handling
- Sprint assignment
- Agent assignment
Acceptance Criteria
- Model with all fields
- Migration created
- CRUD operations
- Conflict detection logic
- Pydantic schemas
- Unit tests with >90% coverage
Technical Notes
- Reference: ADR-009 (Issue synchronization)
- Reference: SPIKE-009 (Issue synchronization research)
external_updated_atused for conflict detection
Assignable To
backend-engineer agent
---
### Issue #12: Create Sprint entity and CRUD
Title: Create Sprint entity and CRUD operations Labels: phase-1, backend, database
Description
Implement Sprint entity for organizing work into time-boxed iterations.
Requirements
Entity Fields
class Sprint(Base):
id: UUID
project_id: UUID # FK to Project
# Sprint Info
name: str
number: int # Sequential sprint number
goal: Optional[str]
# Dates
start_date: date
end_date: date
# Status
status: SprintStatus
# Velocity
planned_points: Optional[int]
completed_points: Optional[int]
# Relationships
issues: List[Issue]
# Timestamps
created_at: datetime
updated_at: datetime
Enums
class SprintStatus(str, Enum):
PLANNED = "planned"
ACTIVE = "active"
COMPLETED = "completed"
CANCELLED = "cancelled"
CRUD Operations
- Standard CRUD
get_active(db, project_id: UUID) -> Optional[Sprint]get_by_project(db, project_id: UUID) -> List[Sprint]start_sprint(db, id: UUID) -> Sprintcomplete_sprint(db, id: UUID) -> Sprintget_next_number(db, project_id: UUID) -> int
Tests
- CRUD operations
- Status transitions
- Sprint overlap prevention
- Velocity calculation
Acceptance Criteria
- Model with all fields
- Migration created
- CRUD operations
- Business logic (start, complete)
- Pydantic schemas
- Unit tests with >90% coverage
Technical Notes
- Reference: ADR-012 (Client approval flow)
- Only one sprint can be ACTIVE per project
Assignable To
backend-engineer agent
---
### Issue #13: Project management API endpoints
Title: Create Project management API endpoints Labels: phase-1, backend
Description
Implement REST API endpoints for Project CRUD operations.
Requirements
Endpoints
POST /api/v1/projects - Create project
GET /api/v1/projects - List user's projects
GET /api/v1/projects/{id} - Get project details
GET /api/v1/projects/slug/{slug} - Get project by slug
PATCH /api/v1/projects/{id} - Update project
DELETE /api/v1/projects/{id} - Archive project
POST /api/v1/projects/{id}/pause - Pause project
POST /api/v1/projects/{id}/resume - Resume project
Authorization
- Users can only access their own projects
- Superusers can access all projects
- Owner check on all mutations
Response Schema
{
"id": "uuid",
"name": "string",
"slug": "string",
"description": "string",
"autonomy_level": "string",
"status": "string",
"settings": {},
"owner": {...},
"stats": {
"active_agents": 0,
"open_issues": 0,
"current_sprint": null
},
"created_at": "datetime",
"updated_at": "datetime"
}
Tests
- All endpoints with valid data
- Authorization (own projects only)
- Validation errors
- 404 handling
- Status transitions
Acceptance Criteria
- All endpoints implemented
- Authorization enforced
- Proper error responses
- Rate limiting configured
- Integration tests
- OpenAPI schema updated
Dependencies
- Depends on: #08 (Project entity)
Assignable To
backend-engineer agent
---
### Issue #14: Agent type configuration API endpoints
Title: Create Agent type configuration API endpoints Labels: phase-1, backend
Description
Implement REST API endpoints for AgentType management.
Requirements
Endpoints
POST /api/v1/agent-types - Create agent type (admin)
GET /api/v1/agent-types - List all active types
GET /api/v1/agent-types/{id} - Get agent type details
GET /api/v1/agent-types/slug/{slug} - Get by slug
PATCH /api/v1/agent-types/{id} - Update type (admin)
DELETE /api/v1/agent-types/{id} - Deactivate type (admin)
Authorization
- Read endpoints: authenticated users
- Write endpoints: superusers only
Response Schema
Include model configuration, MCP permissions, and instance counts.
Tests
- All endpoints
- Admin-only enforcement
- Validation (model names, MCP servers)
Acceptance Criteria
- All endpoints implemented
- Admin authorization enforced
- Model validation
- Integration tests
- OpenAPI schema updated
Dependencies
- Depends on: #09 (AgentType entity)
Assignable To
backend-engineer agent
---
### Issue #15: Agent instance management API endpoints
Title: Create Agent instance management API endpoints Labels: phase-1, backend
Description
Implement REST API endpoints for AgentInstance lifecycle management.
Requirements
Endpoints
POST /api/v1/projects/{pid}/agents - Spawn agent
GET /api/v1/projects/{pid}/agents - List project agents
GET /api/v1/projects/{pid}/agents/{id} - Get agent details
PATCH /api/v1/projects/{pid}/agents/{id} - Update agent
POST /api/v1/projects/{pid}/agents/{id}/pause - Pause agent
POST /api/v1/projects/{pid}/agents/{id}/resume - Resume agent
DELETE /api/v1/projects/{pid}/agents/{id} - Terminate agent
GET /api/v1/projects/{pid}/agents/{id}/metrics - Get agent metrics
Authorization
- Project owner or superuser only
- Agents scoped to projects
Response Schema
Include status, current task, metrics, and memory summary.
Tests
- All endpoints
- Project ownership check
- Status transitions
- Metrics calculation
Acceptance Criteria
- All endpoints implemented
- Project scoping enforced
- Status transitions validated
- Metrics endpoint accurate
- Integration tests
- OpenAPI schema updated
Dependencies
- Depends on: #08 (Project), #10 (AgentInstance)
Assignable To
backend-engineer agent
---
### Issue #16: Issue CRUD API endpoints
Title: Create Issue CRUD API endpoints Labels: phase-1, backend
Description
Implement REST API endpoints for Issue management.
Requirements
Endpoints
POST /api/v1/projects/{pid}/issues - Create issue
GET /api/v1/projects/{pid}/issues - List issues (filters)
GET /api/v1/projects/{pid}/issues/{id} - Get issue details
PATCH /api/v1/projects/{pid}/issues/{id} - Update issue
DELETE /api/v1/projects/{pid}/issues/{id} - Delete issue
POST /api/v1/projects/{pid}/issues/{id}/assign - Assign to agent
POST /api/v1/projects/{pid}/issues/{id}/sync - Trigger sync
Query Filters
- status, priority, labels, sprint_id, assigned_agent_id
- search (title/body)
- sync_status
Response Schema
Include external tracker info, assignment, sprint.
Tests
- All endpoints
- Filtering and search
- Assignment validation
- Sync trigger
Acceptance Criteria
- All endpoints implemented
- Filtering works correctly
- Assignment validation
- Sync trigger initiates background job
- Integration tests
- OpenAPI schema updated
Dependencies
- Depends on: #08 (Project), #11 (Issue)
Assignable To
backend-engineer agent
---
### Issue #17: Sprint management API endpoints
Title: Create Sprint management API endpoints Labels: phase-1, backend
Description
Implement REST API endpoints for Sprint management.
Requirements
Endpoints
POST /api/v1/projects/{pid}/sprints - Create sprint
GET /api/v1/projects/{pid}/sprints - List sprints
GET /api/v1/projects/{pid}/sprints/active - Get active sprint
GET /api/v1/projects/{pid}/sprints/{id} - Get sprint details
PATCH /api/v1/projects/{pid}/sprints/{id} - Update sprint
POST /api/v1/projects/{pid}/sprints/{id}/start - Start sprint
POST /api/v1/projects/{pid}/sprints/{id}/complete - Complete sprint
GET /api/v1/projects/{pid}/sprints/{id}/issues - Get sprint issues
POST /api/v1/projects/{pid}/sprints/{id}/issues - Add issue to sprint
Business Rules
- Only one active sprint per project
- Cannot modify completed sprints
- Start date validation
Response Schema
Include issues, velocity metrics, progress.
Tests
- All endpoints
- Business rules enforcement
- Velocity calculation
Acceptance Criteria
- All endpoints implemented
- Business rules enforced
- Velocity metrics accurate
- Integration tests
- OpenAPI schema updated
Dependencies
- Depends on: #08 (Project), #11 (Issue), #12 (Sprint)
Assignable To
backend-engineer agent
---
### Issue #18: Implement EventBus with Redis Pub/Sub
Title: Implement EventBus with Redis Pub/Sub Labels: phase-1, backend
Description
Create centralized event bus for real-time notifications using Redis Pub/Sub.
Requirements
EventBus Class
class EventBus:
async def publish(self, channel: str, event: Event) -> None
async def subscribe(self, channels: List[str]) -> AsyncIterator[Event]
def get_project_channel(self, project_id: UUID) -> str
def get_agent_channel(self, agent_id: UUID) -> str
Event Types
class EventType(str, Enum):
# Agent Events
AGENT_SPAWNED = "agent.spawned"
AGENT_STATUS_CHANGED = "agent.status_changed"
AGENT_MESSAGE = "agent.message"
AGENT_TERMINATED = "agent.terminated"
# Issue Events
ISSUE_CREATED = "issue.created"
ISSUE_UPDATED = "issue.updated"
ISSUE_ASSIGNED = "issue.assigned"
ISSUE_CLOSED = "issue.closed"
# Sprint Events
SPRINT_STARTED = "sprint.started"
SPRINT_COMPLETED = "sprint.completed"
# Approval Events
APPROVAL_REQUESTED = "approval.requested"
APPROVAL_GRANTED = "approval.granted"
APPROVAL_DENIED = "approval.denied"
Event Schema
class Event(BaseModel):
id: str
type: EventType
timestamp: datetime
project_id: UUID
actor_id: Optional[UUID] # Agent or user who triggered
actor_type: str # 'agent', 'user', 'system'
payload: dict
Tests
- Publish/subscribe cycle
- Multiple subscribers
- Channel isolation
- Event serialization
Acceptance Criteria
- EventBus class implemented
- All event types defined
- Redis Pub/Sub working
- Project channel isolation
- Unit tests
- Integration tests with real Redis
Technical Notes
- Reference: SPIKE-003 (Real-time communication)
- Reference: ADR-003 (Redis pub/sub)
- Use
redis.asynciofor async support
Assignable To
backend-engineer agent
---
### Issue #19: Create SSE endpoint for project events
Title: Create SSE endpoint for project events Labels: phase-1, backend
Description
Implement Server-Sent Events (SSE) endpoint for real-time project updates.
Requirements
Endpoint
GET /api/v1/projects/{pid}/events/stream
Implementation
@router.get("/projects/{project_id}/events/stream")
async def stream_events(
project_id: UUID,
current_user: User = Depends(get_current_user),
event_bus: EventBus = Depends(get_event_bus)
):
# Authorization check
# Subscribe to project channel
# Yield SSE formatted events
# Keepalive every 30s
SSE Format
event: agent.status_changed
data: {"id": "...", "type": "agent.status_changed", ...}
: keepalive
event: issue.created
data: {...}
Features
- Automatic reconnection support (Last-Event-ID)
- Keepalive every 30 seconds
- Connection cleanup on disconnect
- Rate limiting
Tests
- Event streaming
- Keepalive mechanism
- Authorization
- Reconnection
Acceptance Criteria
- SSE endpoint implemented
- Events stream correctly
- Keepalive working
- Authorization enforced
- Last-Event-ID support
- Integration tests
Dependencies
- Depends on: #18 (EventBus)
Assignable To
backend-engineer agent
---
### Issue #20: Client-side SSE handling
Title: Implement client-side SSE handling Labels: phase-1, frontend
Description
Create React hooks and utilities for consuming SSE events.
Requirements
Hook: useProjectEvents
function useProjectEvents(projectId: string): {
events: ProjectEvent[];
isConnected: boolean;
error: Error | null;
reconnect: () => void;
}
Features
- Automatic reconnection with exponential backoff
- Event parsing and type safety
- Connection state management
- Event buffer (last 100 events)
Event Store
interface EventStore {
events: ProjectEvent[];
addEvent: (event: ProjectEvent) => void;
clearEvents: () => void;
}
Components
- ConnectionStatus indicator
- EventList component (for activity feed)
Tests
- Hook behavior
- Reconnection logic
- Event parsing
- Store management
Acceptance Criteria
- useProjectEvents hook implemented
- Auto-reconnection working
- Type-safe event handling
- Connection status UI
- Unit tests
Dependencies
- Depends on: #19 (SSE endpoint)
Assignable To
frontend-engineer agent
---
### Issue #21: [DESIGN] Project dashboard page
Title: [DESIGN] Project dashboard page Labels: phase-1, frontend, design
Description
Design interactive React prototype for the project dashboard page.
Requirements
Page Sections
- Header: Project name, status badge, autonomy level, quick actions
- Agent Panel: Active agents, their status, current tasks
- Sprint Overview: Current sprint progress, burndown
- Recent Activity: Real-time event feed
- Issue Summary: Open/in-progress/blocked counts
Interactions
- Click agent to view details
- Click sprint to view backlog
- Real-time activity updates
- Status change animations
Responsive Design
- Desktop: Multi-column layout
- Tablet: Stacked sections
- Mobile: Single column, collapsible sections
Deliverables
frontend/prototypes/project-dashboard/page.tsxfrontend/prototypes/project-dashboard/README.md- Screenshots in issue comments
Acceptance Criteria
- Prototype navigable in browser
- All sections represented
- Interactive elements work
- Responsive breakpoints
- Design decisions documented
- User approval obtained
Assignable To
ui-designer agent
---
### Issue #22: [DESIGN] Agent configuration UI
Title: [DESIGN] Agent configuration UI Labels: phase-1, frontend, design
Description
Design interactive React prototype for agent type configuration.
Requirements
Views
- Agent Type List: All available types with status
- Agent Type Detail: Full configuration view
- Agent Type Editor: Form for creating/editing
Configuration Fields
- Name, description, expertise areas
- Model selection (primary + fallbacks)
- Model parameters (temperature, etc.)
- MCP server permissions
- Personality prompt
Interactions
- Create new type
- Edit existing type
- Duplicate type
- Deactivate type
- Test configuration
Deliverables
frontend/prototypes/agent-config/page.tsxfrontend/prototypes/agent-config/README.md- Screenshots in issue comments
Acceptance Criteria
- All views represented
- Form interactions work
- Model selection UI clear
- Permission editor intuitive
- User approval obtained
Assignable To
ui-designer agent
---
### Issue #23: [DESIGN] Issue list and detail views
Title: [DESIGN] Issue list and detail views Labels: phase-1, frontend, design
Description
Design interactive React prototype for issue management views.
Requirements
Issue List View
- Filterable by status, priority, labels, sprint, assignee
- Sortable columns
- Bulk actions (assign, move to sprint, change status)
- Quick status change
- Sync status indicator
Issue Detail View
- Full issue content (markdown)
- Status workflow buttons
- Assignment panel
- Sprint assignment
- External tracker link
- Activity timeline
Interactions
- Filter/sort
- Inline status change
- Assign to agent
- Add to sprint
Deliverables
frontend/prototypes/issues/page.tsxfrontend/prototypes/issues/README.md- Screenshots in issue comments
Acceptance Criteria
- List and detail views
- Filters functional
- Status workflow clear
- Sync status visible
- User approval obtained
Assignable To
ui-designer agent
---
### Issue #24: [DESIGN] Real-time activity feed component
Title: [DESIGN] Real-time activity feed component Labels: phase-1, frontend, design
Description
Design interactive React prototype for the activity feed component.
Requirements
Event Types to Display
- Agent status changes
- Agent messages
- Issue updates
- Sprint events
- Approval requests
Features
- Real-time updates (simulated)
- Event grouping by time
- Event type icons
- Click to expand details
- Connection status indicator
Interactions
- Auto-scroll to new events
- Pause auto-scroll on hover
- Filter by event type
- Mark as read
Deliverables
frontend/prototypes/activity-feed/page.tsxfrontend/prototypes/activity-feed/README.md- Screenshots in issue comments
Acceptance Criteria
- All event types represented
- Real-time feel (simulated)
- Filtering works
- Visual hierarchy clear
- User approval obtained
Assignable To
ui-designer agent
---
### Issues #25-29: Implementation issues
*(These are created after design approval and follow the approved designs)*
Issue #25: Implement project dashboard Labels: phase-1, frontend Dependencies: #13, #18, #19, #20, #21 (approved)
Issue #26: Implement agent configuration UI Labels: phase-1, frontend Dependencies: #14, #22 (approved)
Issue #27: Implement issue views Labels: phase-1, frontend Dependencies: #16, #23 (approved)
Issue #28: Implement activity feed Labels: phase-1, frontend Dependencies: #19, #20, #24 (approved)
Issue #29: Navigation and layout Labels: phase-1, frontend Dependencies: None (can be done in parallel)
---
## Parallel Work Tracks
These issues can be worked on in parallel:
### Track 1: DevOps (Issues #01, #02, #03, #04, #05, #07)
**Agent:** devops-engineer
**Parallelizable:** #01, #02 can run parallel. #03, #04, #05 can run parallel. #07 depends on all.
### Track 2: Backend Data Model (Issues #08, #09, #10, #11, #12)
**Agent:** backend-engineer
**Parallelizable:** #08, #09 can run parallel. #10, #11, #12 can run after.
### Track 3: Backend API (Issues #13-17)
**Agent:** backend-engineer
**Parallelizable:** After data models. Can parallelize API issues once entities exist.
### Track 4: Real-time (Issues #18, #19, #20)
**Agent:** backend-engineer (18, 19), frontend-engineer (20)
**Parallelizable:** Sequential.
### Track 5: UI Design (Issues #21, #22, #23, #24)
**Agent:** ui-designer
**Parallelizable:** All can run in parallel.
### Track 6: Frontend Implementation (Issues #25-29)
**Agent:** frontend-engineer
**Parallelizable:** After design approval. Can parallelize implementations.
---
## Dependency Graph
Phase 0: #01, #02 ─────────────────────┐ #03 ──────────────────────────┼──▶ #07 (Docker Compose) #04 ──────────────────────────┤ #05 ──────────────────────────┤ #06 ──────────────────────────┘
Phase 1 - Data Model: #08 (Project) ────────────────┬──▶ #10 (AgentInstance) #09 (AgentType) ──────────────┤ └──▶ #11 (Issue) ──▶ #12 (Sprint)
Phase 1 - API: #08 ──▶ #13 (Project API) #09 ──▶ #14 (AgentType API) #08, #10 ──▶ #15 (AgentInstance API) #08, #11 ──▶ #16 (Issue API) #08, #11, #12 ──▶ #17 (Sprint API)
Phase 1 - Real-time: #03 ──▶ #18 (EventBus) ──▶ #19 (SSE) ──▶ #20 (Client SSE)
Phase 1 - UI: #21, #22, #23, #24 (Design) ──[approval]──▶ #25, #26, #27, #28, #29 (Implementation)