- Task:
tasks/control-plane - Category:
distributed-systems - Tags:
go,distributed-systems,control-plane,controller,reconciliation,event-driven,state-machines,eventual-consistency,optimistic-concurrency,kubernetes-operators,distributed-debugging,fault-recovery,recovery-workflows - Model:
anthropic/claude-sonnet-5 - Pass rate:
0/5
This task drops the agent into a Go control plane that already appears mostly healthy: new resources reconcile, the system stays up, and only a narrow seeded cohort fails to recover after transient interruption. The difficulty is not local syntax repair but reconstructing a recovery pipeline that crosses scheduler wake-up semantics, provisioning recovery semantics, and retry or dependency recovery semantics while preserving controller ownership boundaries. Across five rollouts, Claude Sonnet 5 consistently found and correctly fixed one real bug, validated it locally, and then stopped early. The failures are meaningful because they come from incomplete architectural investigation rather than verifier trickery, prompt ambiguity, or environment instability: no rollout found all three regressions, and none achieved full convergence.
The agent starts inside /workspace/environment, which is a Go module implementing a multi-controller control plane over PostgreSQL-backed durable state including resource state, scheduling history, retry history, and event history used during controller reconciliation. The environment is not empty: the database is seeded with realistic resource cohorts, including healthy resources, newly created resources, interrupted provisioning cohorts, overdue scheduled retries, and dependency-blocked retry cohorts. The agent has source access to the environment code and can build/run it, but does not have access to tests/ or solution/ during normal evaluation.
The system topology is a Docker Compose stack:
postgresstores durable resource state, provider state, and event historyapiexposes the user-facing resource API on port8080controllerruns the scheduler, event bus, worker, and reconciliation controllers, and exposes metrics on port9090mainis a workspace container with Docker CLI + Compose + Go installed so the agent can inspect and run the system
The seeded data is synthetic but intentionally structured to express distinct behavioral cohorts:
- a healthy baseline that should remain healthy
- newly created resources that already succeed
- interrupted resources stuck partway through recovery
- resources with overdue retry work
- resources blocked on dependencies and requiring retry unpark semantics
The agent must preserve:
- controller ownership boundaries
- optimistic concurrency and revision semantics
- event-driven recovery behavior
- steady-state convergence for healthy resources
- architecture and overall system behavior
| File | Purpose | Notes for reviewers |
|---|---|---|
tasks/control-plane/environment/Dockerfile |
Builds the api and controller binaries and packages them into a minimal runtime image |
Multi-stage Go build; runtime image only contains the binaries, not tests or solution payloads |
tasks/control-plane/environment/infra/workspace/Dockerfile |
Builds the agent-facing workspace container | Installs python3, docker.io, docker-compose-v2, and a checksum-verified Go toolchain; mounts Docker socket so the agent can run the stack |
tasks/control-plane/environment/docker-compose.yaml |
Defines the runtime system | Starts main, postgres, api, and controller; seeds Postgres from schema.sql and seed.sql; exposes 8080 and 9090 |
tasks/control-plane/tests/test.sh |
Hidden verifier harness | Starts dockerd, launches the environment via Compose, resolves container IPs, and runs pytest against the live stack |
| Service/container | Image or build source | Network(s) | Ports | Initial state |
|---|---|---|---|---|
main |
infra/workspace/Dockerfile |
compose default bridge | none | running, idle workspace with source mounted at /workspace/environment |
postgres |
postgres:18.4@sha256:3a82e1f56c8f0f5616a11103ac3d47e632c3938698946a7ad26da0df1334744a |
compose default bridge | random host bind to container 5432 |
seeded from schema.sql and seed.sql, healthchecked with pg_isready |
api |
built from environment/Dockerfile |
compose default bridge | 8080 |
starts after Postgres healthy; serves control-plane API |
controller |
built from environment/Dockerfile |
compose default bridge | 9090 |
starts after Postgres healthy; runs controllers, scheduler, queue, worker, provider actor, metrics |
flowchart LR
agent[agent in main workspace] -->|docker compose| api[api<br/>:8080]
agent -->|docker compose| ctrl[controller<br/>:9090]
agent -->|docker compose| pg[(postgres<br/>:5432)]
ctrl --> pg
api --> pg
verifier[hidden verifier] -.-> ctrl
verifier -.-> pg
The runtime services are on the Compose default bridge network. The verifier runs in a separate container and reaches the started environment indirectly through Docker and discovered container IPs. task.toml sets network_mode = "public", but the benchmark does not require internet to solve; no external service is needed once images are available.
Before the agent starts:
- the source tree under
/workspace/environmentis present - no runtime stack is running yet unless the agent starts it
- Postgres seed and schema files are available in the workspace
- the codebase already contains multiple controllers and a working event bus
- the bug is behavioral and cohort-specific: most resources are healthy, only some fail to reconverge
This matters because the environment naturally tempts a shallow conclusion: a single plausible controller-local bug can explain part of the symptoms, and fixing that one bug does improve the system. The challenge is to continue investigating until all recovery invariants are restored. The agent must determine whether recovery is complete by reasoning from the implementation and observed system behavior rather than assuming that a locally successful fix resolves the overall failure.
A distributed control plane at `/workspace/environment/` is not behaving as intended.
The system manages the lifecycle of external resources through multiple cooperating components.
Observed behavior:
- The control plane remains available and continues processing normal workloads.
- Newly created resources complete their lifecycle successfully.
- Most previously managed resources remain healthy.
- A small subset of existing resources fails to fully converge after transient operational interruptions, even though no persistent infrastructure failures remain.
- The affected resources remain stable but do not naturally recover to their expected steady state.
- Individual components appear to behave reasonably when examined on their own, making the underlying behavioral issues difficult to isolate.
Restore the system to its intended behavior while preserving the existing architecture, component responsibilities, reconciliation behavior, correctness guarantees, and overall system behavior.
You have 2700 seconds to complete this task. Do not cheat by using online solutions or hints specific to this task.
The reference solution is intentionally small and copy-based:
- tasks/control-plane/solution/solve.sh
- solution payloads in
tasks/control-plane/solution/files/*.src
It applies three targeted source-file repairs:
-
Scheduler repair
Restore the invariant that overdue scheduled retry work must eventually be republished after restart/interruption rather than trusted forever as “already scheduled.” -
Provision repair
Restore the invariant that interrupted provisioning must safely re-enter the correct provisioning phase instead of taking an invalid shortcut that can strand provider reconciliation. -
Retry repair
Restore the invariant that dependency recovery durably unparks retry-owned state and produces the expected retry transition evidence.
An expert who already understands Kubernetes-style reconciliation, optimistic concurrency, and event-driven controllers could implement this in a few hours, because each fix is local once the real invariant is identified. The hard part is recognizing that full recovery depends on multiple independent recovery invariants rather than a single root cause.
The crux is multi-bug causal reconstruction across ownership boundaries.
This is not “find the broken line in one file.” The control plane is intentionally designed so that:
- each controller mostly looks locally reasonable
- normal operations continue to work
- fixing one subsystem improves some behavior enough to feel satisfying
- but full convergence still requires understanding how scheduler, provision, and retry semantics compose
The tempting shortcut is exactly what the rollouts did: find one plausible root cause, patch it cleanly, run a local proof (go build, go vet, maybe a focused repro), and stop. The verifier punishes that shortcut because integrated recovery still depends on the two untouched regressions.
The verifier is in tasks/control-plane/tests/test_outputs.py. It checks live behavior against the real running system and Postgres state rather than enforcing patch shape.
| Verifier | What it checks | Why it is holistic | Reward-hack resistance |
|---|---|---|---|
test_stage_a_system_health |
controller metrics endpoint is reachable | confirms the stack is alive and the controller process is actually serving | cannot pass without a running controller |
test_stage_b_persistence |
seeded resource corpus exists in Postgres | validates the environment booted with intended seeded state | prevents “empty DB but green” outcomes |
test_stage_c_recovery |
interrupted resources re-enter proper Provision-owned recovery with durable event evidence | checks actual recovery behavior, not just final “Ready” | catches scheduler-only or polling-based bypasses |
test_stage_d_dependency_recovery |
dependency-blocked retry cohort receives Retry-owned unpark evidence | isolates retry/dependency recovery semantics | requires durable retry transition evidence, not just apparent readiness |
test_stage_e_provisioning_convergence |
interrupted provisioning cohort fully reconverges | verifies provider + provision recovery path | catches invalid shortcuts that leave provider/provision state inconsistent |
test_stage_f_regression_safety |
healthy baseline remains healthy | protects against over-fixes that break unrelated resources | blocks brute-force resets or destructive rewrites |
test_stage_g_end_to_end_recovery |
all intended recovery cohorts reach stable steady state | integrated causal-chain check across subsystems | requires whole pipeline convergence, not local subsystem success |
test_independent_scheduler |
overdue scheduled retries get processed and retry activity remains bounded | isolates scheduler wake-up semantics | catches “stuck overdue retry” behavior directly |
test_provision_controller_invariants |
interrupted resources end in fully reconciled provision/provider state | verifies Provision-owned durable outcome | blocks partial or superficial recovery |
test_stage_h_controller_execution |
scheduler/provision/retry revision counters advanced | proves real controllers executed | makes direct DB mutation or fake-final-state cheating harder |
test_immutable_assets |
seed.sql and schema.sql hashes match expected values |
preserves the benchmark workload and schema | blocks seed tampering shortcuts |
test_architecture_exists |
key scheduler/controller files still exist | preserves basic task structure | blocks deletion-based bypasses |
test_controller_ownership |
non-owning controllers do not directly mutate protected fields | enforces architectural boundaries | resists trivial cross-controller cheating by source surgery |
Pass rate across 5 rollouts of claude-code with claude-sonnet-5 in default mode: 0/5.
These are the five trials in submission/job/: every rollout identified and repaired one genuine regression before terminating without restoring full system recovery. All five rollouts voluntarily terminated with substantial time remaining, suggesting that the agents concluded their investigation after resolving one plausible subsystem rather than continuing to validate end-to-end recovery.
| Trial | Reward | Tests failed | Env setup (s) | Agent setup (s) | Rollout (s) |
|---|---|---|---|---|---|
control-plane__4Pp2iTz |
0.0 |
test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_provision_controller_invariants |
3.8 | 51.8 | 558.2 |
control-plane__7LggQ6a |
0.0 |
test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_independent_scheduler, test_provision_controller_invariants |
4.7 | 114.5 | 208.8 |
control-plane__7poPv9G |
0.0 |
test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_provision_controller_invariants |
3.9 | 94.9 | 298.1 |
control-plane__LQshexr |
0.0 |
test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_independent_scheduler, test_provision_controller_invariants |
4.2 | 108.9 | 552.3 |
control-plane__Z2eBQgH |
0.0 |
test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_independent_scheduler, test_provision_controller_invariants |
4.5 | 102.0 | 1418.5 |
The batch exhibits one dominant capability gap: single-bug anchoring followed by premature victory.
| Failure mode | Failed verifier(s) | Trajectory evidence | Explanation |
|---|---|---|---|
| Premature scheduler-only anchoring | test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_provision_controller_invariants |
4Pp2iTz: “The fix is clean and minimal… the scheduler's very first refresh pass after Start() now bypasses scheduleStateCurrent…”; 7poPv9G: “Root cause: scheduleStateCurrent decided whether a resource already had valid pending work purely by comparing two persisted timestamps…” |
Both scheduler-focused rollouts found a real scheduler defect, verified it well, and then stopped. They never broadened the search to provision or retry despite the task symptom only promising that a “small subset” remained broken after interruptions. |
| Premature retry-only anchoring | test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_independent_scheduler, test_provision_controller_invariants |
7LggQ6a: “handleDependencySatisfied had an inverted guard condition…”; LQshexr: “Changed the second guard to reject only the terminal RetryExhausted state…” |
These rollouts correctly reconstructed the retry/dependency bug, even with a local repro. But they treated one correct controller-local fix as task completion and never tested whether scheduler overdue work or interrupted provisioning still failed. |
| Provision-only anchoring after strong dynamic debugging | test_stage_c_recovery, test_stage_d_dependency_recovery, test_stage_e_provisioning_convergence, test_stage_g_end_to_end_recovery, test_independent_scheduler, test_provision_controller_invariants |
Z2eBQgH: “Scheduler.refreshAll… synthesizes EventDesiredSpecChanged… ProvisionController.handleEvent handled that event by unconditionally forcing ProvisionState to Configuring…” |
This rollout went furthest: it built and ran Docker containers, crash-injected the controller, reproduced a real provisioning bug, and verified the fix experimentally. It still failed because it did not continue searching for the separate scheduler and retry regressions. This shows the task resists shallow static analysis, but also that even strong dynamic debugging can underperform if exploration breadth collapses onto one explanation. |
| Premature stop after local validation | all failed rows above, depending on trial | 4Pp2iTz: “go build ./... and go test ./... both pass cleanly.” 7LggQ6a: “Build succeeds cleanly… go vet ./...”; LQshexr: “BUILD_OK” followed by task completion |
The common stopping rule was local confidence: once the agent had a plausible bug, a clean patch, and build/vet success, it declared done instead of running the full environment-level verifier or systematically auditing the remaining controllers. |
Why these failures matter
These are real model capability gaps rather than artifacts of a bad task:
- Not prompt ambiguity: the instruction is intentionally symptom-level, but agents had enough information to correctly diagnose one real bug each. The issue was incomplete search, not missing context.
- Not flaky verification: oracle is known to pass, baseline is known to fail, and the rollout failures consistently map to untouched subsystems.
- Not timeout pressure: all five runs ended voluntarily with significant budget remaining.
- Not reward hacking: every rollout made legitimate source-code changes tied to real logic.
What the task measures well is whether the agent can keep investigating after the first satisfying explanation. On this benchmark, Claude Sonnet 5 usually could not.