Files
roboco/docs/workflows/QA.md
T
Renn F 5315e9c72d feat: workflow enforcement, RAG upgrade, and permission fixes
Task Management:
  - Add cancellation safeguards: require valid reason category (duplicate,
    obsolete, blocked_permanently, reassigned, scope_change, stakeholder_request)
  - Protect active work from arbitrary cancellation - must pause/block first
  - Auto-notify PM when task is blocked with ACTION REQUIRED message
  - PM task scan now shows blocked tasks needing their attention

  Permissions:
  - Add VIEW_STATS to Developer, QA, Documenter, Head Marketing KB permissions
  - Aligns code with docs/workflows/PERMISSIONS.md specification

  RAG/Embeddings:
  - Upgrade embedding model from all-MiniLM-L6-v2 to nomic-embed-text-v1.5
  - 768 dimensions with 8K token context (vs 512 tokens)
  - Add per-index chunk sizes: docs=1536, journals=1024, others=512
  - Switch to fixed chunking (semantic chunking loads separate MiniLM model)
  - Add einops dependency required by nomic model
2025-12-29 00:30:18 +01:00

8.8 KiB

QA Workflow

Overview

QA agents (be-qa, fe-qa, ux-qa) verify developer work meets acceptance criteria.

┌─────────────────────────────────────────────────────────────────────────┐
│                           QA WORKFLOW                                   │
└─────────────────────────────────────────────────────────────────────────┘

1. SCAN FOR WORK
   │
   │  roboco_task_scan(team="backend")
   │
   │  Look for:
   │  └── Tasks in "awaiting_qa" status
   │
   ▼
2. CLAIM TASK
   │
   │  roboco_task_claim(task_id)
   │
   │  ┌─────────────────────────────────────────────────────────────────┐
   │  │ QA can ONLY claim tasks in "awaiting_qa"                        │
   │  │                                                                 │
   │  │ BEFORE:                                                         │
   │  │   status: awaiting_qa                                           │
   │  │   assigned_to: original_developer                               │
   │  │                                                                 │
   │  │ AFTER:                                                          │
   │  │   status: claimed                                               │
   │  │   assigned_to: qa_agent                                         │
   │  │   (original_developer stored in quick_context)                  │
   │  └─────────────────────────────────────────────────────────────────┘
   │
   ▼
3. START REVIEW
   │
   │  roboco_task_start(task_id)
   │
   │  # REQUIRED: Announce to cell
   │  roboco_message_send({
   │    channel: "backend-cell",
   │    content: "Starting QA review of [task title]",
   │    task_id: task_id
   │  })
   │
   │  STATUS: claimed → in_progress
   │
   ▼
4. GATHER CONTEXT (before reviewing)
   │
   │  # REQUIRED: Read developer's journey
   │  roboco_journal_read_team(original_developer, task_id=task_id)
   │  roboco_kb_search("similar implementations")
   │  roboco_channel_history("backend-cell")  # Related discussions
   │
   ▼
5. REVIEW WORK
   │
   │  ┌─────────────────────────────────────────────────────────────────┐
   │  │ Review checklist:                                               │
   │  │ ├── Read developer's handoff notes                              │
   │  │ ├── Check acceptance criteria                                   │
   │  │ ├── Run tests                                                   │
   │  │ ├── Verify functionality                                        │
   │  │ └── Check code quality                                          │
   │  │                                                                 │
   │  │ REQUIRED - Progress updates:                                    │
   │  │   roboco_task_progress(task_id, "Reviewing X", 50)              │
   │  │                                                                 │
   │  │ REQUIRED - Journal your review:                                 │
   │  │   roboco_journal_entry({type: "qa_review", ...})                │
   │  │   roboco_journal_decision(...)  # If making judgment calls      │
   │  │   roboco_journal_struggle(...)  # If issues found               │
   │  └─────────────────────────────────────────────────────────────────┘
   │
   ▼
6. REFLECT (before decision)
   │
   │  # REQUIRED before pass/fail
   │  roboco_journal_reflect({
   │    task_id: task_id,
   │    what_done: "Reviewed X, Y, Z",
   │    what_learned: "Discovered patterns...",
   │    what_struggled: "Edge cases were unclear"
   │  })
   │
   ▼
7. DECISION
   │
   ├──── PASS ────────────────────────────────────────────────────────┐
   │                                                                  │
   │     roboco_task_qa_pass(task_id, {                               │
   │       notes: "All acceptance criteria met. Tests pass."          │
   │     })                                                           │
   │                                                                  │
   │     STATUS: in_progress → awaiting_documentation                 │
   │     → Documenter takes over                                      │
   │                                                                  │
   └──── FAIL ────────────────────────────────────────────────────────┐
                                                                      │
         roboco_task_qa_fail(task_id, {                               │
           notes: "Issues found",                                     │
           issues: [                                                  │
             "Bug: X doesn't work",                                   │
             "Missing: Y not implemented"                             │
           ]                                                          │
         })                                                           │
                                                                      │
         STATUS: in_progress → needs_revision                         │
         ASSIGNED_TO: back to original_developer                      │
         → Developer fixes and resubmits                              │
   │
   ▼
   DONE (for QA)

Self-Review Prevention

┌─────────────────────────────────────────────────────────────────────────┐
│ QA CANNOT review tasks they originally developed                        │
│                                                                         │
│ System tracks original_developer in quick_context                       │
│ If QA agent == original_developer → FORBIDDEN                           │
└─────────────────────────────────────────────────────────────────────────┘

Status Transitions (QA perspective)

CAN CLAIM:
  awaiting_qa ──claim──► claimed

AFTER CLAIM:
  claimed ──start──► in_progress

DECISIONS:
  in_progress ──qa_pass──► awaiting_documentation
  in_progress ──qa_fail──► needs_revision

Using Knowledge Base

Before reviewing, search for context:

roboco_kb_search("similar past reviews")       # Find related QA work
roboco_rag_query("what are common issues?")    # AI-generated insights
roboco_journal_search("qa patterns")           # Your past reviews

See KNOWLEDGE_BASE.md for full documentation.

Agent-to-Agent (A2A) Tools

QA can collaborate directly with other agents:

roboco_agent_discover(role, team, skill)     # Find agents who can help
roboco_agent_request(target_agent, skill, message)  # Request work
roboco_agent_request_status(a2a_task_id)     # Check request progress

When to use A2A:

  • Need dev clarification? → roboco_agent_request("be-dev-1", "code_review", "Can you explain...")
  • Need security review? → roboco_agent_discover(skill="security_audit")

Key Rules

  1. Only claim awaiting_qa - Can't claim pending tasks
  2. Cannot self-review - Can't QA your own dev work
  3. MESSAGE when starting - Announce to cell channel
  4. READ dev's journey - roboco_journal_read_team() REQUIRED
  5. JOURNAL your review - Document what was tested and why
  6. REFLECT before decision - roboco_journal_reflect() REQUIRED
  7. Clear fail reasons - Developer needs to know what to fix
  8. Cannot COMPLETE - Only PM completes after docs