Repository navigation
fix: make checkout-saturation solvable and exclude MCP startup requests from grading - #2
Conversation
…PagerDuty alerts pagerduty-mcp's Incident model drops the incident body, so get_incident never showed the RB-CHK-07 replica count and every arm failed. Put the runbook step on each incident's first Datadog alert (body.details.runbook) and have the oracle read it via list_alerts_from_incident.
|
I'll fix CI failures and address comments that start with 'Devin'.
Original prompt from Luke
|
… after a replica change A scale left status.replicas, observedGeneration and the ReplicaSet at the old count and created no pods, so a careful agent concluded the rollout was stuck and refused to resolve the incident.
…ount readiness from pods Scale-up from zero now creates pods, new pods get fresh container IDs and start times, ready/available counts come from pod readiness, and a change that also edits the pod template is left as an unsimulated rollout. The checkout runbook now ends with resolving once the pods are Ready instead of a p95 check no scenario service can answer.
…dition when reconciling a scale
… as context_overflow MCP startup handshakes always put world requests in the tools journal, so the old 'no tool activity' condition never held and context_overflow never fired.
…ejection as context_overflow" This reverts commit 6aedce3.
There was a problem hiding this comment.
Devin Review found 1 new potential issue.
⚠️ 1 issue in files not directly in the diff
⚠️ Context overflows disappear from trial outcomes
When an agent hits a context-length rejection, grade records a failure instead of ContextOverflow. MCP startup handshakes populate via_tools before the agent's first turn, so outcome_code remains 1 even without agent tool use.
…d the context_overflow check deploy/capture-stack.sh now records the world requests every server makes on its own while sessions are initialized and listed (31 today: k8s discovery, Terraform ping, Okta device flow, ...). Grading subtracts one match per recorded call, so context_overflow can fire and api_calls counts only the agent's calls.
|
Coordination for the broader benchmark-refinement work: I am working in a separate worktree on feat/benchmark-integrity-realism, based on your current head e4ca2a4. Your Kubernetes reconciliation, PagerDuty fixtures/runbook changes, captured startup manifest, and capture script are preserved; I will not duplicate or rewrite those fixes. My work extends evaluator contracts/integrity, semantic evidence, task/profile materialization, and result compatibility. Shared grading/world interfaces will be extended from this pinned base, and tasks/ will only be regenerated from sources. Please flag any further changes planned in those shared interfaces so we can avoid overlapping edits. I will recheck your head before integration; no changes are being pushed to this PR or main. |
|
Coordination update only; no new implementation request. The global clock refinement on feat/benchmark-integrity-realism now defaults scored worlds to a fixed business reference time, with transport ticking retained only as an explicit legacy condition. This requires one mechanical assertion update in crates/services/kubernetes/tests/kubernetes.rs: creationTimestamp 2026-11-03T08:40:07Z becomes 2026-11-03T08:40:00Z. I will make only that test-expectation change on my isolated branch; your Kubernetes production/reconciliation code, fixtures, startup capture, and checkout-saturation scenario remain unchanged. Main and this PR are not being modified or pushed. Your head was rechecked and is still e4ca2a4. |
Summary
ops/multi/checkout-saturation-scale-and-resolvefailed in every arm for both models (docs/research/arms-2026-10-31.md). The scenario was at fault, not the models. Real-model runs hit three blockers, one after another:The runbook was invisible. The target replica count (9) appeared only in the incident's
body.details. pagerduty-mcp 1.1.0'sIncidentmodel has nobody, soget_incidentnever returns it. The runbook step now also sits on each incident's first Datadog alert, whichlist_alerts_from_incidentreturns:PALR001(prod, scale to 9) andPALR003(the staging decoy, scale to 3). The solution reads that alert.Scaling never finished in the mock. A scale only rewrote
spec.replicas, so models sawobservedGenerationlag behind and the ReplicaSet and pods stay at 3, and they refused to resolve. A newKube::reconcile_deploymentruns on a replica-only Deployment change:spec.template(works from 0) or removed.observedGenerationadvances, and ReplicaSet and Deploymentreplicas/ready/available/unavailableare recounted frompod_ready. A pod counts as ready only if it is Running, all its containers are ready, and its Ready condition is not False.pod-template-hashlabel), the change is a rollout. That isn't simulated, so nothing is touched.The runbook asked for a check the world can't answer. "Confirm p95 recovers" sent models to Datadog, which isn't in this world and returns an empty series. The runbook now says "resolve the incident once the new pods are Ready", which the Kubernetes mock can show.
context_overflownever fired andapi_callswas inflated. Every trial journal starts with about 31 requests that MCP servers make on their own at session start: k8s API discovery, the Terraform ping, the Okta device flow, and so on.deploy/capture-stack.shnow records these intocrates/world/startup-calls.json.gradesubtracts one match per recorded call (startup::without_startup), so an agent that repeats a startup request still has it counted.api_callsnow counts only agent calls.context_overflowfires when the logs show a length rejection and the agent made no calls. Checked against the 3 real Haiku trials: every startup request was matched, and 13, 38 and 51 agent calls remain. A second capture produced identical tool lists for all 32 endpoints.Expectations are unchanged. Every edit changes the content-hashed world tag, so
taskgenrewrote every task's compose file.Ran locally:
cargo test --workspace --locked(723 pass) and clippy-D warnings.mock-kubernetespasses 22 tests, including scale to 0 and back, unready pods counted as unavailable, a false Ready condition, and a template change left unreconciled.taskgen --check. All 50 Deployments in the scenario datasets that own ReplicaSets still reconcile under the whole-template comparison.deploy/oracle.sh --allwith locally built images: all 150 tasks score oracle 1.0 and nop 0.0 (300/300).anthropic/claude-haiku-5.5via OpenRouter, k=3): reward 1, 0, 1. Before this PR the same run scored 0/3. The failed trial never calledlist_alerts_from_incident, so it never found the runbook and didn't act. That is a model miss, not a broken task.The images aren't published yet:
tool-bench imagescan't authenticate until openrouter-infra#1116 is applied.Link to Devin session: https://openrouter.devinenterprise.com/sessions/b3c949ac369d4a4bb3b25e1937b2309f
Open in Devin Desktop: https://openrouter.devinenterprise.com/desktop/session/b3c949ac369d4a4bb3b25e1937b2309f?variant=devin
Requested by: @LukasParke