flowchart TD
DEV([👤 Developer]) -->|"/plan_to_build"| CC_PLAN["Claude Code
Planning Session
(local, interactive)"]
CC_PLAN -->|"writes"| SPEC["specs/plan.md
(shared artifact)"]
SPEC -->|"execute plan"| CC_BUILD["Claude Code
Build Session
(subagents/teams)"]
CC_BUILD -->|"fix-validate
cycle ×2"| CC_VAL{Validation
pass?}
CC_VAL -->|"✅ pass"| LOCAL_FILES["Local files
changed"]
CC_VAL -->|"❌ fail after
2 cycles"| DEV_GATE1["⚠ Human Gate
escalate to developer
cycle exhausted"]
DEV_GATE1 -->|"developer
diagnoses"| CC_BUILD
LOCAL_FILES -->|"git commit
open PR"| PR["Pull Request
(GitHub)"]
PR -->|"@copilot review
or issue assign"| CP_AGENT["Copilot Coding
Agent
(GitHub Actions,
async, cloud)"]
CP_AGENT -->|"self-review
before PR update"| CP_SELF{Self-review
pass?}
CP_SELF -->|"✅ iterates
and improves"| CP_SELF
CP_SELF -->|"✅ done
iterated"| PR_UPDATED["PR updated
by Copilot"]
PR_UPDATED -->|"human must
approve CI run"| HUMAN_CI["⚠ Human Gate
approve CI
(required by GitHub)"]
HUMAN_CI -->|"approved"| CI["CI Pipeline
tests + lint
+ security scan"]
CI -->|"✅ pass"| REVIEW["Code Review
(human)"]
REVIEW -->|"✅ approved"| MERGE["Merge to main"]
CI -->|"❌ fail"| CI_FAIL["CI Failure
PR comments
failure logs"]
CI_FAIL -->|"Option A
same session"| CP_RETRY["Copilot retries
(unassign/reassign
or @copilot comment)"]
CP_RETRY --> CP_AGENT
CI_FAIL -->|"Option B
cross-platform
⚡ MISSING SEAM"| SEAM["❌ No native
return-to-source
mechanism"]
SEAM -->|"today: manual"| DEV_GATE2["⚠ Human Gate
developer reads
CI logs manually"]
DEV_GATE2 -->|"invokes Claude Code
with CI failure context"| CC_FIX["Claude Code
Fix Session
(local, targeted)"]
CC_FIX -->|"pushes fix
to same PR branch"| PR
CI_FAIL -->|"Option C
ObservabilityAgent
⚡ FUTURE"| RP_TRIGGER["Observability Plane
detects CI failure
from OTel trace"]
RP_TRIGGER -->|"emits fix event
with full trace context"| CC_FIX
MERGE -->|"OTel trace
complete"| RP["Observability Plane
cost + outcome
per workflow"]
CC_BUILD -->|"metrics + events"| RP
CP_AGENT -->|"session logs
(no traces)"| RP
style DEV fill:#f3f0fa,stroke:#6450b4,color:#1a1a1a
style CC_PLAN fill:#f7ece8,stroke:#c84b2f,color:#1a1a1a
style SPEC fill:#fdf6e3,stroke:#b08a2e,color:#1a1a1a
style CC_BUILD fill:#f7ece8,stroke:#c84b2f,color:#1a1a1a
style CC_VAL fill:#f7ece8,stroke:#c84b2f,color:#1a1a1a
style LOCAL_FILES fill:#f7ece8,stroke:#c84b2f,color:#1a1a1a
style PR fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style CP_AGENT fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style CP_SELF fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style PR_UPDATED fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style CI fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style REVIEW fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style MERGE fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style CI_FAIL fill:#fdf0ec,stroke:#c84b2f,color:#1a1a1a
style CP_RETRY fill:#edf2fb,stroke:#2a5fa5,color:#1a1a1a
style SEAM fill:#fdf0ec,stroke:#c84b2f,color:#b05a18
style DEV_GATE1 fill:#fdf6e3,stroke:#b08a2e,color:#1a1a1a
style DEV_GATE2 fill:#fdf6e3,stroke:#b08a2e,color:#1a1a1a
style HUMAN_CI fill:#fdf6e3,stroke:#b08a2e,color:#1a1a1a
style CC_FIX fill:#f7ece8,stroke:#c84b2f,color:#1a1a1a
style RP fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
style RP_TRIGGER fill:#eef7f1,stroke:#2d7a4f,color:#1a1a1a
Claude Code — self-healing
Your build.md already handles this: max 2 fix-validate cycles per task before escalating to the human. Failure is contained within the agent loop. The developer only sees it if both cycles are exhausted.
Copilot — partial self-heal
Copilot now self-reviews before opening a PR (one pass). But CI after the PR requires a human to approve the workflow run — GitHub's policy, not a Copilot limitation. There is no automatic re-trigger on CI failure.
The missing seam
When Copilot's CI fails, there is no native path back to Claude Code. Today: developer manually reads CI logs, invokes Claude Code, pushes to the same branch. This is the gap — a human becomes the message queue between two platforms.
Observability Plane closes the loop
ObservabilityAgent emits a full OTel trace for every run. When CI fails, Observability Plane has the causal chain: which plan task, which agent, which tool call, what it produced. It can emit a structured fix event back to Claude Code with context — no human copy-paste required.