Repository navigation
test: pin conditions from the 10-17 night fixes - #2703
Conversation
Rows for a blank reply, a turn completed twice and a terminated process after a network wait; the Pod quota scan keeps going past an unreadable quota, ends the pass on an owner cancellation during either read, and lets a known pending reason lead.
…witch A mode the reader picked, a harness change that hands the mode back to the form, a provider whose credentials need Embedded, and operator-managed Preset credentials without a mode.
… held heading After an admitted deploy, the loading page's heading takes focus only while the held heading still has it.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR adds regression tests for startup-probe results, Pod quota observations, execution-mode selection, and deployment focus. Example: A reader selects Embedded before installation discovery reports Dedicated-only support.
Review scores
ProductKind: Test only · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep open: this PR adds useful coverage for existing contracts, with no introduced defect identified; required CI remains failed for an unclassified runtime-startup failure. Priority: P3 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe console turns installation capabilities and user choices into Agent requests, while Compute observes deployment readiness and the runtime evaluates startup-probe output. flowchart TD
A[CI test selection] --> B[Browser scenarios]
A --> C[Conformance scenarios]
B --> D[Console and API]
C --> E[Kubernetes Compute]
C --> F[Runtime startup parser]
D --> G[Agent choices and focus]
Technical reviewBest possible solution: Retain the focused coverage and resolve the required CI failure according to its demonstrated cause before landing. Do we have a high-confidence way to reproduce the issue? This PR reports coverage gaps rather than a current product bug; its mutation results are author-reported, and no target code was executed during this review. Is this the best way to solve the issue? The tests exercise existing production decisions with independent expected outcomes, and the browser additions cover timing and selection cases absent from neighboring tests. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against cc4699e2860c. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
Review metrics
LabelsLabel changes:
Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 17, 2026, 2:19 AM ET / 06:19 UTC. |
… tests Pick Dedicated before the harness change, label the routed Installation answer, wait for the new heading's focus, and name what the focus test pins.
The custom-provider subagent case took the first native thread/start after each spawn as that child's. Since #1559 every Agent maps to /sandbox/enterprise, so cwd no longer separates a child from other native turns on the parent route. Twice (main 004d658, #2703) the object case picked up a parent-route request that was not its child's (finding 1645). Select the request whose developer instructions carry the child's own subagent prompt line ("- Your session: <childSessionKey>."). The model, cwd, fallback-settlement and four-setup checks are unchanged. Drop the earlier expectsCompletionMessage=false change: a proof run showed the completion handoff sends no native request, so it was not the source.
#2715) * test(runtime): keep requester handoff turns out of the subagent routing proof The custom-provider subagent case attributes the first native thread/start after each spawn to that case's child. sessions_spawn defaults to a completion handoff: when a child fails, the Gateway runs a requester turn on the requester Agent's own model (the parent route) after a 1.5 s reply grace. Since every Agent maps to /sandbox/enterprise, that turn is indistinguishable from the next child by cwd, and the main case's handoff lands near the object case's spawn (finding 1645: object case saw vendor/organization/parent on main 004d658 and on #2703). Spawn with expectsCompletionMessage=false so no requester turn reaches the native peer, and name every observed thread/start model in the assertion. * test(runtime): temporary proof for finding 1645 (to be reverted) Runs the subagent routing case with the default completion handoff and with the fix, observing the native peer for 5 s after the last child settles: the default must send a stray parent-route thread/start, the fix none. A mutated expectation for the object case must still be rejected. * Revert "test(runtime): temporary proof for finding 1645 (to be reverted)" This reverts commit 835b934. * test(runtime): temporary stress probe for finding 1645 (to be reverted) The first proof showed no requester handoff thread/start within 5 s of the last child settling, so the handoff explanation is unconfirmed. Run the routing sequence 164 times across six concurrent Gateways with the default handoff and report the origin of any stray first thread/start: its connection, developer instructions, config keys and nearby Gateway debug lines. The test always fails so the report reaches the diagnostics artifact. * test(runtime): scale the temporary 1645 stress probe (to be reverted) 164 warm cases with the default handoff showed no anomaly. Add 48 fresh Gateways that each run one sequence, like the real test, next to six warm Gateways running 40 sequences each. * test(runtime): bound the 1645 stress probe and attribute every request (to be reverted) Fourteen concurrent Gateways exhausted the 8-CPU runner (exit 137). Run at most six at once: 30 fresh Gateways in batches of three, plus three warm Gateways with 40 sequences each. Attribute every native thread/start to a spawned child through the child session key in its developer instructions, and report any request that names no child (a stray) or lands in another child's window, wherever it falls. * Revert the temporary 1645 stress probes Removes the stress fixture, the stress test and its suite entry. Over about 270 attributed case runs, the probes found no stray native request and no misplaced first request. * test(runtime): attribute each native thread/start to its spawned child The custom-provider subagent case took the first native thread/start after each spawn as that child's. Since #1559 every Agent maps to /sandbox/enterprise, so cwd no longer separates a child from other native turns on the parent route. Twice (main 004d658, #2703) the object case picked up a parent-route request that was not its child's (finding 1645). Select the request whose developer instructions carry the child's own subagent prompt line ("- Your session: <childSessionKey>."). The model, cwd, fallback-settlement and four-setup checks are unchanged. Drop the earlier expectsCompletionMessage=false change: a proof run showed the completion handoff sends no native request, so it was not the source. * test(runtime): temporary attribution and heartbeat proof for 1645 (to be reverted) Before the object spawn, start an unrelated parent-route turn on its requester session and let its native request arrive first. The old first-request selector must report the parent model, as both CI failures did, and child attribution must still report object-child. Also wake a heartbeat and record whether it sends a parent-route native request. * Revert "test(runtime): temporary attribution and heartbeat proof for 1645 (to be reverted)" This reverts commit c7c12bf. * test(runtime): show attribution in subagent routing failures Review nits: list only the thread/starts since this spawn, with cwd and whether each names the child, and name thread/start models when a wait times out, so a reworded upstream marker reads as a marker change.
Problem
A mutation sweep over the 10-17 night fixes (#2672/#2682, #2674/#2686, #2675/#2666, #2676/#2689, #2678, #2663) found conditions that no test pins: 123 hand-made mutants, each run alone against its owning tests with the product file restored after every one. 31 survived on main. The real gaps among them:
Startup probe network wait (fix(runtime): retry only the pinned network wait and pass a recovered one #2682): a network wait followed by a blank reply, by a turn completed twice, or by a reply from a process killed with SIGTERM could pass, or be held under the wrong cause, without any test failing.
Namespace Pod quota (fix(compute): name a full Namespace Pod quota instead of a bare provisioning wait #2674, fix(console): name a sandbox driver outage and confirm a full pod quota #2686):
WORKSPACE_NODE_PENDING.Create Agent execution modes (fix(console): refuse OpenClaw in create agent when no execution mode is admitted #2675): when the Installation answers, the form must switch only a mode it chose itself. Nothing pinned that it keeps:
Nothing pinned either that a harness change hands the mode back to the form.
Focus after an admitted deploy (fix(console): keep keyboard focus while an admitted deploy opens the new version #2689): the loading page's heading could take focus from a reader who had already left the held heading.
Change
Test-only.
codex-native-startup: three rows in the network-wait "still retried" table.kubernetes-compute: four checks in the Pod quota test:console-create-agent-mode-defaultsbrowser test: four cases for which modes discovery may switch.console-agent-deploy-focusbrowser test: a reader who leaves the held heading.checks-browser-2.json.New files rather than additions to the existing browser files, which open drafts are editing.
Verification
codex-native-startup(143 tests), the Pod quota test, and both new browser files passed 20/20 at 2 CPUs.node scripts/ci/run-tests.mjs auditreports no issues. Prettier and eslint are clean on the touched files.Survivors left on purpose:
turn.completed;used:anchor and a prefix match onpods;usedcount, for the statuses the quota controller writes;NativeWorkerSupportErrorcatch while the pinned runtime supports native workers;DEPENDENCY_UNAVAILABLE, which the API never answers;retryat the last attempt, which matches how exhausted retries already log.One small product gap, filed on our tracker and not fixed here: the provision route also answers named 503 refusals with other codes, such as
CHANNEL_CREDENTIAL_UNAVAILABLE. Create Agent shows them as "Outcome unknown" (the C3 mutant). Retry stays safe because it reuses the request ID; the reader just loses the reason.Internal review approved with nits, and all of them are applied.
Risks
Test-only. The browser checks hold requests and sample focus each frame, as the #2689 tests do.