mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
268 lines
9.7 KiB
Markdown
268 lines
9.7 KiB
Markdown
# MCP Tool Test Matrix
|
|||
|
|
|
||
|
|
Comprehensive test matrix for validating all MCP tools work correctly for each agent role.
|
||
|
|
|
||
|
|
## Test Environment Setup
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Start services
|
||
|
|
docker-compose up -d postgres redis qdrant
|
||
|
|
cd roboco && uv run python -m roboco.api.main
|
||
|
|
|
||
|
|
# Test agent endpoints
|
||
|
|
curl -H "X-Agent-ID: be-dev-1" http://localhost:8000/health
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Task MCP Tools (55 total tools)
|
||
|
|
|
||
|
|
### Core Lifecycle Tools (All Agents)
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_scan` | Y | Y | Y | Y | Y | Scan returns tasks filtered by role/team |
|
||
|
|
| `roboco_task_get` | Y | Y | Y | Y | Y | Fetch task by ID returns full details |
|
||
|
|
| `roboco_task_claim` | Y | Y | Y | Y | N | Only claimable statuses for role |
|
||
|
|
| `roboco_task_plan` | Y | N | Y | N | N | Saves plan, requires claimed status |
|
||
|
|
| `roboco_task_start` | Y | Y | Y | Y | N | Status → in_progress, requires plan |
|
||
|
|
| `roboco_task_progress` | Y | Y | Y | Y | N | Updates percentage (0-100) |
|
||
|
|
| `roboco_task_escalate` | Y | Y | Y | Y | N | Routes to correct manager |
|
||
|
|
| `roboco_task_substitute` | Y | Y | Y | Y | N | Graceful exit with reason |
|
||
|
|
| `roboco_agent_idle` | Y | Y | Y | Y | N | Signals no work available |
|
||
|
|
|
||
|
|
### Blocking Tools (Developer + PM)
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_block` | Y | N | Y | N | N | Status → blocked, records reason |
|
||
|
|
| `roboco_task_unblock` | Y (own) | N | Y (cell) | N | N | Status → in_progress |
|
||
|
|
| `roboco_task_pause` | Y | N | Y | N | N | Status → paused, saves checkpoint |
|
||
|
|
|
||
|
|
### Developer Submit Tools
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_submit_verification` | Y | N | N | N | N | Status → verifying |
|
||
|
|
| `roboco_task_submit_qa` | Y | N | N | N | N | Status → awaiting_qa |
|
||
|
|
| `roboco_task_submit_pm_review` | Y | N | N | N | N | Status → awaiting_pm_review (non-dev tasks) |
|
||
|
|
|
||
|
|
### QA Tools
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_qa_pass` | N | Y | N | N | N | Status → awaiting_documentation |
|
||
|
|
| `roboco_task_qa_fail` | N | Y | N | N | N | Status → needs_revision, records issues |
|
||
|
|
|
||
|
|
### Documenter Tools
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_docs_complete` | N | N | N | Y | N | Status → awaiting_pm_review |
|
||
|
|
|
||
|
|
### PM/Management Tools
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_task_create` | N | N | Y | N | Y | Creates task in backlog |
|
||
|
|
| `roboco_task_assign` | N | N | Y | N | Y | Sets assigned_to field |
|
||
|
|
| `roboco_task_activate` | N | N | Y | N | Y | Status: backlog → pending |
|
||
|
|
| `roboco_task_complete` | N | N | Y | N | Y | Status → completed |
|
||
|
|
| `roboco_task_cancel` | N | N | Y | N | Y | Status → cancelled |
|
||
|
|
|
||
|
|
### Session Tools (PM/Board)
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_session_create_for_tasks` | N | N | Y | N | Y | Creates linked session |
|
||
|
|
| `roboco_session_link_task` | N | N | Y | N | Y | Links existing session to task |
|
||
|
|
| `roboco_session_unlink_task` | N | N | Y | N | Y | Removes task-session link |
|
||
|
|
| `roboco_session_get_for_task` | Y | Y | Y | Y | Y | Returns task's sessions |
|
||
|
|
| `roboco_group_create` | N | N | Main PM | N | Y | Creates work group |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Message MCP Tools
|
||
|
|
|
||
|
|
| Tool | All Agents | Test Case |
|
||
|
|
|------|------------|-----------|
|
||
|
|
| `roboco_channel_list` | Y | Returns readable/writable channels for agent |
|
||
|
|
| `roboco_channel_history` | Y | Returns messages, respects access |
|
||
|
|
| `roboco_message_send` | Y | Requires task_id, routes to session |
|
||
|
|
| `roboco_message_get` | Y | Fetches single message by ID |
|
||
|
|
| `roboco_ask_question` | Y | Wrapper for message_send |
|
||
|
|
| `roboco_report_blocker` | Y | Wrapper for message_send |
|
||
|
|
| `roboco_session_history_for_task` | Y | Returns task session messages |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Notification MCP Tools
|
||
|
|
|
||
|
|
| Tool | Developer | QA | PM | Documenter | Board | Test Case |
|
||
|
|
|------|-----------|----|----|------------|-------|-----------|
|
||
|
|
| `roboco_notify_list` | Y | Y | Y | Y | Y | Returns pending notifications |
|
||
|
|
| `roboco_notify_get` | Y | Y | Y | Y | Y | Fetches single notification |
|
||
|
|
| `roboco_notify_ack` | Y | Y | Y | Y | Y | Marks notification acknowledged |
|
||
|
|
| `roboco_notify_send` | N | N | Y | N | Y | Sends notification to recipient |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Journal MCP Tools
|
||
|
|
|
||
|
|
| Tool | All Agents | Special Access | Test Case |
|
||
|
|
|------|------------|----------------|-----------|
|
||
|
|
| `roboco_journal_entry` | Y | - | Creates generic entry |
|
||
|
|
| `roboco_journal_reflect` | Y | - | Creates reflection for task |
|
||
|
|
| `roboco_journal_decision` | Y | - | Logs decision with rationale |
|
||
|
|
| `roboco_journal_learning` | Y | - | Logs learning |
|
||
|
|
| `roboco_journal_struggle` | Y | - | Logs struggle |
|
||
|
|
| `roboco_journal_search` | Y | - | Semantic search own entries |
|
||
|
|
| `roboco_journal_stats` | Y | - | Returns entry statistics |
|
||
|
|
| `roboco_journal_recent` | Y | - | Returns recent entries |
|
||
|
|
| `roboco_journal_read_team` | Y | Cell reads cell, PM reads all | Reads teammate journals |
|
||
|
|
| `roboco_journal_scope` | Y | - | Shows accessible journals |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Optimal MCP Tools (Knowledge Base)
|
||
|
|
|
||
|
|
| Tool | All Agents | Test Case |
|
||
|
|
|------|------------|-----------|
|
||
|
|
| `roboco_kb_search` | Y | Semantic search knowledge base |
|
||
|
|
| `roboco_rag_query` | Y | RAG query with context |
|
||
|
|
| `roboco_kb_stats` | Y | Returns KB statistics |
|
||
|
|
| `roboco_kb_index_code` | Y | Indexes code files |
|
||
|
|
| `roboco_kb_index_docs` | Y | Indexes documentation |
|
||
|
|
| `roboco_tokens_estimate` | Y | Estimates token usage |
|
||
|
|
| `roboco_escalate` | Y | Escalates to manager |
|
||
|
|
| `roboco_request_approval` | Y | Requests human approval |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Critical Test Scenarios
|
||
|
|
|
||
|
|
### 1. Full Developer Workflow
|
||
|
|
```
|
||
|
|
1. roboco_notify_list() → check for assignments
|
||
|
|
2. roboco_task_scan(team="backend") → find pending task
|
||
|
|
3. roboco_task_claim(task_id) → claim it
|
||
|
|
4. roboco_kb_search("similar work") → research
|
||
|
|
5. roboco_task_plan(task_id, ...) → submit plan
|
||
|
|
6. roboco_task_start(task_id) → begin work
|
||
|
|
7. roboco_message_send(channel, "Starting", task_id) → announce
|
||
|
|
8. roboco_task_progress(task_id, "Working", 50) → update
|
||
|
|
9. roboco_journal_reflect(task_id, ...) → reflect
|
||
|
|
10. roboco_task_submit_verification(task_id) → self-check
|
||
|
|
11. roboco_task_submit_qa(task_id) → submit for QA
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Full QA Workflow
|
||
|
|
```
|
||
|
|
1. roboco_task_scan(team="backend") → find awaiting_qa
|
||
|
|
2. roboco_task_claim(task_id) → claim it
|
||
|
|
3. roboco_task_start(task_id) → begin review
|
||
|
|
4. roboco_journal_read_team(dev_id, task_id) → read dev journey
|
||
|
|
5. roboco_task_progress(task_id, "Reviewing", 50)
|
||
|
|
6. roboco_journal_reflect(task_id, ...)
|
||
|
|
7. roboco_task_qa_pass(task_id) OR roboco_task_qa_fail(task_id, issues)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Full PM Workflow
|
||
|
|
```
|
||
|
|
1. roboco_task_scan() → find pending/escalations
|
||
|
|
2. roboco_task_claim(task_id)
|
||
|
|
3. roboco_task_start(task_id)
|
||
|
|
4. roboco_task_plan(task_id, ...)
|
||
|
|
5. roboco_task_create({parent_task_id, ...}) → create subtask
|
||
|
|
6. roboco_session_create_for_tasks({task_ids}) → create session
|
||
|
|
7. roboco_task_activate(subtask_id) → make visible
|
||
|
|
8. roboco_notify_send({recipient, task_id}) → notify assignee
|
||
|
|
9. roboco_journal_read_team("be-dev-1") → monitor progress
|
||
|
|
10. roboco_task_complete(subtask_id) → after full workflow
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Blocking/Unblocking Flow
|
||
|
|
```
|
||
|
|
Developer:
|
||
|
|
1. roboco_task_block(task_id, reason, what_needed)
|
||
|
|
2. roboco_message_send(channel, "Blocked on X", task_id)
|
||
|
|
3. Wait for resolution...
|
||
|
|
4. roboco_task_unblock(task_id) → resume
|
||
|
|
|
||
|
|
PM:
|
||
|
|
1. roboco_task_scan() → see blocked tasks
|
||
|
|
2. roboco_journal_read_team(dev_id, task_id) → understand context
|
||
|
|
3. Resolve issue...
|
||
|
|
4. roboco_task_unblock(task_id) → unblock for developer
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Escalation Chain
|
||
|
|
```
|
||
|
|
Developer → Cell PM → Main PM → Board
|
||
|
|
be-dev-1 → be-pm → main-pm → product-owner
|
||
|
|
|
||
|
|
Test:
|
||
|
|
1. roboco_task_escalate(task_id, reason) as be-dev-1
|
||
|
|
2. Verify notification goes to be-pm
|
||
|
|
3. roboco_task_escalate(task_id, reason) as be-pm
|
||
|
|
4. Verify notification goes to main-pm
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6. Self-Review Prevention
|
||
|
|
```
|
||
|
|
1. be-dev-1 submits task for QA
|
||
|
|
2. be-qa claims and reviews → OK
|
||
|
|
3. be-dev-1 tries to claim as QA → FORBIDDEN
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7. Session Routing
|
||
|
|
```
|
||
|
|
1. PM creates task with roboco_task_create
|
||
|
|
2. PM creates session with roboco_session_create_for_tasks
|
||
|
|
3. PM activates task with roboco_task_activate
|
||
|
|
4. Developer claims, starts
|
||
|
|
5. Developer sends message with task_id → routes to session
|
||
|
|
6. Subtasks inherit parent's session automatically
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Response Format
|
||
|
|
|
||
|
|
All errors return:
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"error": {
|
||
|
|
"code": "NOT_FOUND",
|
||
|
|
"message": "Task 123 not found",
|
||
|
|
"details": {...}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
Standard error codes:
|
||
|
|
- `NOT_FOUND` - Resource doesn't exist
|
||
|
|
- `ACCESS_DENIED` - Permission denied
|
||
|
|
- `INVALID_INPUT` - Bad request data
|
||
|
|
- `INVALID_STATE` - Wrong status for operation
|
||
|
|
- `NOT_AUTHORIZED` - Auth required
|
||
|
|
- `ALREADY_LINKED` - Duplicate link
|
||
|
|
- `NO_SESSION_FOR_TASK` - Task has no session
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Validation Checklist
|
||
|
|
|
||
|
|
Before declaring ready:
|
||
|
|
|
||
|
|
- [ ] All tools return consistent error format
|
||
|
|
- [ ] All role restrictions enforced at MCP layer
|
||
|
|
- [ ] All role restrictions enforced at API layer
|
||
|
|
- [ ] Session routing works for subtasks (inherits parent session)
|
||
|
|
- [ ] Escalation chain validates correctly
|
||
|
|
- [ ] Self-review prevention works
|
||
|
|
- [ ] Channel access respects permissions
|
||
|
|
- [ ] Journal read_team respects cell boundaries
|
||
|
|
- [ ] Notifications route to correct recipients
|
||
|
|
- [ ] All prompts match available tools
|