Repository navigation
fix(console): name an image pull wait on create agent and pin pending-reason precedence - #2854
Conversation
…-reason precedence Create Agent now treats REVISION_IMAGE_PULL_FAILED like a full Pod quota: the deployment's fixed sentence replaces the provisioning line, a fresh deployment read names it before the job does, and it holds through a cancelled or unavailable read (finding 1881). Adds a Storybook scenario for it. Kubernetes Compute conformance now pins that a Pod being deleted names no wait and that a full Pod quota leads an image pull failure (finding 1880).
|
🦞👀 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. |
…ut the pulling fixture Internal review: with both pull polls adjacent, a page that named the pull only from the job's wait gave the same lines. A quota poll between them tells the two apart. The terminating-Pod loop now sets the pull state it relies on.
|
Free’s clanker here. The Create Agent UI and polling change look good at I separately controlled the story’s deployment reads while the job reported only “pending”: a successful read showed the explanation; a temporary 503 retained it; a 403 cleared it; and a later 503 did not bring the detail back. These are UI observations with synthetic responses, not a real cluster image-pull test. I did not review the separate Kubernetes conformance change. Native media for the Verification section, from the unmodified story at 420 px. The video is cropped to the real status region, not reconstructed from screenshots. image-pull-status.webm |
|
Codex review: needs maintainer review before merge. What this changesThis PR makes image-pull failures stand alone during Agent creation and strengthens tests for Kubernetes pending-reason precedence. Example: An Agent deployment reports REVISION_IMAGE_PULL_FAILED while its provisioning job still reports REVISION_INCOMPLETE.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open: it completes a useful console diagnostic, preserves existing wait-handling rules, and adds focused regression coverage; no introduced defect was found. Priority: P3 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherThe console combines provisioning-job status with optional authorized deployment reads to show startup progress; Kubernetes Compute and the worker already supply the failure code and fixed explanation. flowchart LR
A[Kubernetes Pod status] --> B[Compute pending reason]
B --> C[Worker deployment progress]
C --> D[Authorized deployment read]
C --> E[Provisioning job status]
D --> F[Create Agent status line]
E --> F
Technical reviewBest possible solution: Extend the existing named-wait set and retain the focused browser and conformance assertions as this PR does. Do we have a high-confidence way to reproduce the issue? Current-main source excludes REVISION_IMAGE_PULL_FAILED from named deployment waits, and the supplied before screenshots show the prefixed explanation; no reproduction was run during this review. Is this the best way to solve the issue? Adding the existing code to the shared set is the smallest complete fix because deployment-read precedence, retained text, standalone job text, and refusal clearing already consume that set. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 5cc598483c9e. Provenance checked
TestingProof path: shipped entry point. SecurityNone. EvidenceWhat I checked:
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 18, 2026, 10:37 AM ET / 14:37 UTC. |

Problem
Two follow-ups to #2851, which added
REVISION_IMAGE_PULL_FAILED:Finding 1881 (Create Agent): a full Pod quota stands alone on Create Agent in place of the provisioning line (finding 1617). An image the nodes can't pull also needs an administrator, but it is not in
NAMED_DEPLOYMENT_WAITS, so it gets different treatment:Provisioning Agent… Kubernetes cannot pull….(The finding said the page showed the bare provisioning line. Since finding 1690 it adds the job's wait, so it's the treatment above, not a bare line.)
Finding 1880 (test gap): two mutants of the Kubernetes Compute pending-reason precedence pass the whole conformance file:
index.ts:9659);index.ts:5503-5507).Change
console/agents/create.mjs: addsREVISION_IMAGE_PULL_FAILEDtoNAMED_DEPLOYMENT_WAITS. Its fixed sentence, which asks an administrator to check the runtime image reference and the nodes' registry access, now stands alone and follows the same rules as the quota wait. No new copy.console-agents-2, the finding 1690 test): two polls added, with a quota poll between them so each one changes the line.kubernetes-compute): the fixture can mark a role's Pod as being deleted.Verification
index.ts, each run against--test-name-pattern="pending dedicated deploy|quota": all 6 killed, including the 2 that survived on main (no deletion skip; pull before quota). The other 4 (no init containers, early pull return,ImagePullBackOffonly, pull before the deletion skip) are killed too.create.mjs: it fails, because the page writesProvisioning Agent… Kubernetes cannot pull…where the test expects the sentence alone. It also fails when only the job's wait stands alone (the code removed from the read-first set). It passes with this change.node --test tests/conformance/kubernetes-compute.test.mjs: 375/375.node --test tests/browser/console-agents-2.test.mjs: 22/22.taskset -c 0,1), 20/20 each: the two conformance tests and the browser test.eslint --max-warnings 0andprettier --checkon the touched files: clean.Media
These screenshots and recordings show the real console against simulated Storybook reads, captured in headless Chromium. They prove the UI only; the browser test above covers the polling rules. "Before" uses main's console sources (
c359d6cac) with the same story. Media commit:3d970740c. A later commit removes it before the squash.Story: Pages/Create Agent → Initial deployment cannot pull its image. The status line after Create Agent is selected:
Provisioning queued…,Provisioning Agent…,Provisioning Agent… Kubernetes cannot pull…Provisioning queued…,Provisioning Agent…,Kubernetes cannot pull…Desktop (1280 px): before, after. Walkthroughs: 390 px before, after; 1280 px before, after.
Risks
Low. This is a console display change for one more code, plus test-only changes. A member who can't read the deployment still sees only the job's own
PROVISIONING_DEPLOYMENT_PENDING, as before.