WIP Add Critical Carl review report#1334
Conversation
Apply the Critical Carl (subtract-first) lens to the agent-canvas repo and record the strongest structural findings in CRITICAL_CARL_REVIEW.md: the ConversationWebSocketProvider god object, the four-job agent-server-adapter, the utils.ts junk drawer, vendor-specific MCP catalog patches, and the unscheduled legacy/compatibility surface. Note the untracked gaps in AGENTS.md. Co-authored-by: openhands <openhands@all-hands.dev>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
✅ Mock-LLM E2E Tests53/53 passed Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
🔶 Mock-LLM Docker E2E Test Results48/53 passed · 5 skipped Commit:
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
How the 3 follow-up issues were selectedThese follow-up issues were derived by reverse-engineering the methodology that turned OpenHands/integrations-hub#127's Critical Carl review into exactly 3 issues from 6 findings (#134 / #135 / #136), then applying the same filter here. The selection filterA review finding becomes a new issue only if all three hold:
Why integrations-hub got 3, not 6
The big open-ended refactors were left to the existing broad-refactor bucket; the meta finding produced no work item. Only the bounded, untracked subtractions became issues. Applying the same filter to this review (
|
| Finding in this PR | Outcome | Reason |
|---|---|---|
1. ConversationWebSocketProvider god object (1086 LOC) |
❌ skip | open-ended decomposition (mirrors ih #1/#2) |
2. agent-server-adapter.ts doing 4 jobs (988 LOC) |
❌ skip | open-ended split |
3. utils.ts junk drawer (859 LOC) |
❌ skip | open-ended reorg, net-zero deletion |
4. vendor entry.id MCP catalog patches |
✅ #1336 | bounded subtraction (direct analog of ih #134) |
| 5. legacy/compatibility surface (~83 refs) | ✅ #1337 | bounded subtraction (direct analog of ih #136) |
| 6. controllers + duplicated form state | ✅ #1338 | only the bounded dedup slice; the controller decomposition is excluded |
Landing on 3 is a result of the filter, not a forced count. Notably there is no agent-canvas analog of ih #135's "hidden interpolation DSL", so a third issue of that kind doesn't exist — but the duplicated BackendForm/ManualConnectionColumn state block is a clean bounded dedup that qualifies on its own.
The three open-ended decompositions (findings 1–3) intentionally stay documented as structural debt in CRITICAL_CARL_REVIEW.md rather than becoming vague "rewrite this big file" tickets — that's the same choice integrations-hub made for its god-object findings.
Resulting issues
- Remove vendor-specific entry.id transport patches from the generic MCP catalog #1336 — Remove vendor-specific
entry.idtransport patches from the generic MCP catalog - Schedule deletion of the legacy/compatibility surface (drain-once-then-delete) #1337 — Schedule deletion of the legacy/compatibility surface (drain-once-then-delete)
- Delete duplicated backend-form state; reuse a shared form hook #1338 — Delete duplicated backend-form state; reuse a shared form hook
Each ran the required duplicate check (all empty), references this review, and uses existing repo labels.
One deviation from the integrations-hub flow: their follow-ups referenced a parent "run Carl review" issue (#127). Here I referenced this review PR instead of creating a parent tracker, since the request itself played that role. Happy to add a parent tracker issue and link the three under it if that's preferred.
This comment was created by an AI agent (OpenHands) on behalf of the user.
| - the `<RUNTIME_SERVICES>` markdown renderer / DSL (`buildRuntimeServicesSystemSuffix` `:185-272`), | ||
| - tool gating and vendor naming (`getAgentTools` `:488`, `shouldIncludeTool` `:473`, hardcoded tool-name constants `:77-87`), | ||
| - ACP-agent resolution (`isAcpAgent` / `resolveAcpCommand` / `buildConfiguredAcpAgentSettings` `:621-707`). | ||
| - `getDeploymentMode()` (`:173`) is exported from here purely so a generic MCP util can ask "are we in docker?" (see finding 4). |
HUMAN:
AGENT:
Documentation-only change. Applies the Critical Carl subtract-first lens to the
agent-canvasrepo, mirroring OpenHands/integrations-hub#129 but targeted at this codebase. Every finding cites a real file/line and was verified against the working tree (see commands in How to Test).Why
The repo has strong behavior/regression coverage and docs, but no subtract-first review of structural complexity. Carl's rule — delete → simplify → reuse → add — surfaces a few oversized control-plane files, vendor trivia in generic layers, a junk-drawer
utils.ts, and a large legacy/compatibility surface that documentation explains but nothing schedules for deletion.Summary
CRITICAL_CARL_REVIEW.mdwith a repository-wide Critical Carl review pass and concrete file:line evidence.specs/tracking set and call out what is untracked.AGENTS.mdfor future work.Issue Number
How to Test
Documentation-only; no runtime behavior changes. The findings are reproducible from the repo root:
Each command's output matches the numbers cited in
CRITICAL_CARL_REVIEW.md.Video/Screenshots
N/A — no UI change.
Type
Notes
No code paths, dependencies, or tests are touched — only two Markdown files (
CRITICAL_CARL_REVIEW.mdnew,AGENTS.mdone note appended). The review proposes deletion-oriented follow-ups but performs none of them in this PR.This PR was created by an AI agent (OpenHands) on behalf of the user.
@aivong-openhands can click here to continue refining the PR
🐳 Docker images for this PR
• GHCR package: https://github.com/OpenHands/agent-canvas/pkgs/container/agent-canvas
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.28.1-pythonopenhands-automation==1.0.0a9a5b361085eaad76da342e80d9203c656f1755d32Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-a5b3610Run
All tags pushed for this build
About Multi-Architecture Support
sha-a5b3610) is a multi-arch manifest supporting both amd64 and arm64sha-a5b3610-amd64) are also available if needed