mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
9.7 KiB
9.7 KiB
Escalation Guide
Status: Implemented
This document describes the task escalation system and CEO approval workflow.
Escalation Chain
The escalation chain is strictly enforced - you cannot skip levels:
Developer/QA/Documenter
│
▼
Cell PM (be-pm, fe-pm, ux-pm)
│
▼
Main PM (main-pm)
│
▼
Product Owner (product-owner)
│
▼
CEO (ceo)
Detailed Chain
| Agent | Escalates To |
|---|---|
| be-dev-1, be-dev-2 | be-pm |
| be-qa | be-pm |
| be-doc | be-pm |
| fe-dev-1, fe-dev-2 | fe-pm |
| fe-qa | fe-pm |
| fe-doc | fe-pm |
| ux-dev-1, ux-dev-2 | ux-pm |
| ux-qa | ux-pm |
| ux-doc | ux-pm |
| be-pm, fe-pm, ux-pm | main-pm |
| main-pm | product-owner |
| product-owner | ceo |
| head-marketing | ceo |
| auditor | ceo |
Types of Escalation
1. Task Escalation (roboco_task_escalate)
Used when you need help with a specific task. Available to ALL agents.
roboco_task_escalate(
task_id="uuid-here",
reason="Need clarification on API contract - acceptance criteria unclear"
)
Key Points:
- Auto-routes to your escalation target (you cannot specify a different target)
- Creates a high-priority notification requiring acknowledgment
- Task status remains unchanged (you can keep working if possible)
- Escalation is logged in task history
2. CEO Escalation (roboco_task_escalate_to_ceo)
PM-only. Used for major tasks requiring CEO sign-off:
roboco_task_escalate_to_ceo(
task_id="uuid-here",
notes="Major feature ready for final review"
)
Requirements:
- Task must be in
awaiting_pm_reviewstatus - For git tasks, PR must exist (
pr_numbermust be set) - Only PMs (cell_pm, main_pm) can escalate to CEO
Result:
- Status changes to
awaiting_ceo_approval - CEO receives high-priority notification requiring ACK
3. Soft Block Escalation
When blocked by external factors (not another task):
roboco_task_soft_block(
task_id="uuid-here",
reason="Waiting for production API credentials",
blocker_type="external_dependency",
what_needed="AWS credentials for production environment"
)
Result:
- Status changes to
blocked - PM receives notification with ACTION REQUIRED
- PM MUST call
roboco_task_unblock()when resolved - Verbal resolution in chat is NOT enough
When to Escalate
| Situation | Escalate To | Tool |
|---|---|---|
| Need PM decision | Cell PM | roboco_task_escalate |
| Blocked by external factor | Cell PM | roboco_task_soft_block |
| Blocked by another task | Cell PM | roboco_task_block + roboco_task_escalate |
| Cross-cell coordination needed | Cell PM (routes to Main PM) | roboco_task_escalate |
| Scope creep beyond task | Cell PM | roboco_task_escalate |
| Resource/priority conflict | Cell PM | roboco_task_escalate |
| Major feature ready for merge | CEO | roboco_task_escalate_to_ceo (PM only) |
CEO Approval Workflow
For major tasks (parent tasks, high-priority features, breaking changes):
awaiting_pm_review
│
▼
PM reviews and decides to escalate
│
roboco_task_escalate_to_ceo(task_id, notes)
│
▼
awaiting_ceo_approval
│
┌────────────────┴────────────────┐
│ │
CEO APPROVES CEO REJECTS
│ │
roboco_task_ceo_approve() roboco_task_ceo_reject(notes)
│ │
▼ ▼
completed needs_revision
│
(assigned back to
original developer)
CEO Approval Queue
PMs can view tasks awaiting CEO approval:
# Get all tasks awaiting CEO approval (org-wide)
roboco_tasks_awaiting_ceo()
CEO Actions
# Approve and complete
roboco_task_ceo_approve(task_id, notes="Approved. Great work!")
# Reject and send back for revision
roboco_task_ceo_reject(task_id, notes="Need to address X before merge")
Force Completion (CEO Only)
When subtasks are cancelled but parent should complete:
roboco_task_complete(
task_id="uuid-here",
force_with_cancelled=True,
justification="Subtask TASK-123 cancelled - functionality no longer needed"
)
Requirements:
- Only CEO can use
force_with_cancelled - Justification is required
- Does NOT work for pending/in_progress subtasks (only cancelled)
Escalation Reasons by Role
Developer Escalations
| Reason | Example |
|---|---|
| Unclear requirements | "Acceptance criteria doesn't specify error handling" |
| Blocked by other task | "Waiting on auth service from fe-dev-1" |
| Scope question | "Should I also handle edge case X?" |
| Need decision | "Two valid approaches - need PM guidance" |
| Technical blocker | "Can't reproduce bug in dev environment" |
| Low context | "Need more background on why this was designed this way" |
QA Escalations
| Reason | Example |
|---|---|
| Can't reproduce | "Bug not reproducible with given steps" |
| Unclear test criteria | "Don't know what 'acceptable performance' means" |
| Blocking issue found | "Critical security flaw - should we halt?" |
| Test environment issue | "Staging is down, can't proceed" |
Documenter Escalations
| Reason | Example |
|---|---|
| Missing context | "Developer journal doesn't explain design decisions" |
| Scope question | "Should I document internal APIs?" |
| Access needed | "Can't view the code changes" |
Cell PM Escalations
| Reason | Example |
|---|---|
| Cross-cell dependency | "Need frontend to expose new endpoint" |
| Resource conflict | "Both tasks need be-dev-1, can't parallelize" |
| Priority question | "Two P1 tasks - which first?" |
| Scope change | "Requirements changed mid-sprint" |
What Happens When You Escalate
- Escalation notification sent to your escalation target
- Notification is high-priority and requires acknowledgment
- Task status unchanged (you can keep working if possible)
- Target MUST ACK the notification
- Target investigates and responds
- For blocks: PM must call
roboco_task_unblock()when resolved
Escalation vs Block vs Pause vs Substitute
| Action | When | Status Change | Tool |
|---|---|---|---|
| Escalate | Need help/decision | No change | roboco_task_escalate |
| Block (hard) | Waiting on another task | → blocked | roboco_task_block |
| Block (soft) | Waiting on external factor | → blocked | roboco_task_soft_block |
| Pause | Need to stop temporarily | → paused | roboco_task_pause |
| Substitute | Can't continue, release task | → pending/awaiting_pm_review | roboco_task_substitute |
Combining Actions
Often you'll combine:
# Blocked AND need PM help
roboco_task_soft_block(
task_id,
"Waiting for API access",
"external_dependency",
"Need production API keys from DevOps"
)
# PM will be notified automatically
Substitution (Graceful Exit)
When you can't continue a task:
roboco_task_substitute(
task_id="uuid-here",
reason="low_context",
details="Need more background on the authentication system design"
)
Substitution Reasons
| Reason | Result Status | Use When |
|---|---|---|
task_complete |
awaiting_qa | Finished work, releasing for review |
low_context |
pending | Insufficient context to continue |
out_of_scope_team |
pending | Task belongs to different team |
out_of_scope_role |
pending | Task requires different role |
max_retries |
pending | Exceeded retry limit |
blocked_external |
blocked | Need skills outside your capabilities |
Good Escalation Format
roboco_task_escalate(
task_id="uuid-here",
reason="""
ISSUE: API contract unclear
CONTEXT: Implementing user endpoint, acceptance criteria says "return user data"
QUESTION: Should I include sensitive fields (email, phone)? What about nested relations?
ATTEMPTED: Checked existing endpoints, no consistent pattern
BLOCKING: Can't proceed without this decision
"""
)
Include:
- What's the issue
- What context you have
- Specific question
- What you already tried
- How it's affecting work
Responding to Escalations (PM)
When you receive an escalation:
- ACK immediately -
roboco_notify_ack(notification_id) - Investigate - Read task, journals, messages
- Decide - Make the call or escalate further
- Communicate - Message the agent with decision
- Unblock if needed -
roboco_task_unblock(task_id)
CRITICAL: For soft blocks, verbal resolution is NOT enough. You MUST call:
roboco_task_unblock(task_id)
Escalation Anti-Patterns
- Don't escalate without trying first - Check documentation, journals, similar tasks
- Don't escalate vague issues - "I'm stuck" -> Instead: "Stuck on X because Y, tried Z"
- Don't escalate too late - Escalate when you recognize you're blocked, not after hours of spinning
- Don't skip levels - Developer -> Cell PM -> Main PM (can't skip Cell PM)
- Don't escalate resolved issues - Only escalate if you actually need help
- Don't bypass the chain - The
escalate_toparameter is validated against your escalation target