Skip to content

fix(compute): name an image pull failure instead of a bare runtime wait - #2851

Merged
freeqaz merged 2 commits into
mainfrom
lows-1018j-b
Oct 18, 2026
Merged

freeqaz merged 2 commits into
mainfrom
lows-1018j-b

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 18, 2026

Copy link
Copy Markdown
Collaborator

Problem

An Agent whose Harness or gateway image cannot be pulled shows only REVISION_INCOMPLETE "Waiting for the runtime to become ready." while the kubelet retries, flipping between queued and running until the convergence deadline. Pending codes named an unschedulable Pod, a full Pod quota and workspace waits, but not ErrImagePull / ImagePullBackOff (dogfood D474).

Change

  • Kubernetes Compute: the unschedulable observation becomes safePodPendingObservation. It still returns WORKLOAD_UNSCHEDULABLE first. Otherwise it returns the new WORKLOAD_IMAGE_PULL_FAILED when a live Pod's container or init container waits with reason ErrImagePull or ImagePullBackOff. As before, an unavailable observation reports nothing, and a full Pod quota still leads.
  • ComputePendingReason gains WORKLOAD_IMAGE_PULL_FAILED. The worker maps it to REVISION_IMAGE_PULL_FAILED.
  • Deployment progress copy for REVISION_IMAGE_PULL_FAILED is fixed text: "Kubernetes cannot pull a container image for this Agent and keeps retrying. Ask an administrator to check the runtime image reference and that the cluster's nodes can pull from its registry." Like the other pending codes, it never includes the image reference or the registry's response.
  • docs/reference/agents/deployment.md lists the new code. The paragraph was tightened so the page stays at its current word count (2480).
  • The public lastAttempt.code is an open string (OpenAPI: 1-64 characters), and no RFC fixes the pending-code set. This follows fix(compute): name a full Namespace Pod quota instead of a bare provisioning wait #2674, which added NAMESPACE_POD_QUOTA_EXCEEDED the same way.

Verification

  • tsc --build tsconfig.json: clean.
  • node --test tests/conformance/kubernetes-compute.test.mjs: 375/375. The new "a pending dedicated deploy names a container image pull failure" covers agent and gateway Pods, init containers, both reasons, non-pull waits (ContainerCreating, CrashLoopBackOff) and unschedulable precedence. It passes 20/20 on 2 CPUs together with the existing pending-deploy tests.
  • tests/integration/postgres-worker-agent-revision.test.mjs: extended with the new code and copy. It needs PostgreSQL and was skipped locally; CI runs it.
  • No cluster run.

Risks

  • Low. This is a new pending code on an existing path. A client that switches on known codes sees one more value. The Console's Create Agent page does not name this wait yet: it shows the generic provisioning line, as it does for REVISION_UNSCHEDULABLE.

An unpullable Harness or gateway image left deployment progress at
REVISION_INCOMPLETE "Waiting for the runtime to become ready." while the
kubelet retried. Kubernetes Compute now reports WORKLOAD_IMAGE_PULL_FAILED
when a live Pod's container or init container waits on ErrImagePull or
ImagePullBackOff (an unschedulable Pod still leads), and the worker records
it as REVISION_IMAGE_PULL_FAILED with fixed copy that never includes the
image reference or the registry's response.
@freeqaz
freeqaz requested a review from a team as a code owner October 18, 2026 13:29
@clawsweeper

clawsweeper Bot commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 18, 2026 13:41 — with GitHub Actions Inactive
@freeqaz
freeqaz temporarily deployed to integration-qa-pr October 18, 2026 13:41 — with GitHub Actions Inactive
@clawsweeper

clawsweeper Bot commented Oct 18, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(compute): name an image pull failure instead of a bare runtime wait This is item 1/1 in the current shard. Shard 0/1.

This temporary status tracks the active review worker. The completed review will appear in the durable ClawSweeper review comment.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Oct 18, 2026
@freeqaz
freeqaz merged commit c359d6c into main Oct 18, 2026
47 of 48 checks passed
@freeqaz
freeqaz deleted the lows-1018j-b branch October 18, 2026 13:55

This branch was previously deployed

1 inactive deployment
integration-qa-pr — a8d34697 Deployed Oct 18, 2026 by freeqaz via QA advisory (compose) #2218
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant