Skip to content

Wait up to 10 minutes for a new public URL in the smoke check - #46

Merged
anurag merged 1 commit into
mainfrom
ag/route-wait
Sep 24, 2026
Merged

anurag merged 1 commit into
mainfrom
ag/route-wait

Conversation

@anurag

@anurag anurag commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Problem

A run of anurag/bloom-and-petal ended as deploy_failed, and its site was live:

https://vibe-anurag-bloom-and-petal-web.onrender.com did not return a successful response (last status 404).

The timeline, from the Render API and HTTP probes on 2026-09-24:

  • 16:41:38 UTC: publish-app pushed 2adc8dd.
  • 16:41:44: the Blueprint sync created the static site and its first deploy.
  • 16:41:56: that deploy was live.
  • About 16:42 to 16:45:00: the smoke check got 404 from the site for all of its 3 minutes, and the run ended as deploy_failed.
  • 16:51:46: the same deploy gave 200 (last-modified 16:41:56).

The name of the app was new, so no earlier service used the hostname. Render can route a new onrender.com hostname some minutes after the first deploy of its service is live. The 404 did not come from the CDN cache: a 404 for an unknown host gives cf-cache-status: DYNAMIC, and a 404 for a missing path gives BYPASS. Only a 200 page is cached, with s-maxage=300.

verify-app already runs the same build command and checks that it gives index.html. So after a live deploy, a 404 from the site means that Render has not routed the hostname yet. It is not a fault in the app.

Change

  • app/deploy.ts: the first check of the site and of the API health endpoint waits up to 10 minutes (ROUTE_TIMEOUT_MS). The data check keeps 3 minutes (DATA_TIMEOUT_MS), because it starts after the health check of the same host passed. So a data endpoint that is broken still fails in 3 minutes.
  • The summary of a failed site or health check now tells how long the check waited.
  • tests/workflow.test.ts: a new awaitDeployment smoke checks block checks the time limit of each wait and the summary of a site that does not answer.
  • docs/README.md and AGENTS.md tell why the first check waits longer.

Verification

  • npm run check passes: lint, typecheck, and 402 tests.
  • The two new tests fail on the old app/deploy.ts, and pass on the new one.

Not in this change

The rerun of the same prompt deployed, but Render made two deploys of its commit 074f292. The commit changed the files of the app and also its build command in the root render.yaml. The commit deploy (new_commit) started 2.6 s before the Blueprint sync deploy (blueprint_sync). It ran the old build command, which copies css and js, on the new files, which have styles.css and script.js. So it ended as build_failed. The sync deploy used the new build command and went live. The run reported deployed correctly, but only because the sync deploy was the newest deploy before the commit deploy failed. A separate change can make one deploy per change.

🤖 Generated with Claude Code

A run of anurag/bloom-and-petal ended as deploy_failed, and its site
was live. The first deploy of the new static site was live at 16:41:56
UTC. Then the smoke check got 404 from the site for all of its 3
minutes. At 16:51:46, the same deploy gave 200. Render can route a new
onrender.com hostname some minutes after the first deploy of its
service is live. The 404 did not come from the CDN cache: the CDN does
not cache a 404 for an unknown host or for a missing path.

The first check of the site and of the API health endpoint now waits
up to 10 minutes (ROUTE_TIMEOUT_MS). The data check keeps 3 minutes
(DATA_TIMEOUT_MS), because it starts after the health check of the
same host passed. The summary of a failed check now tells how long the
check waited.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@anurag
anurag enabled auto-merge (squash) September 24, 2026 17:08
@anurag
anurag merged commit 1ed4a6d into main Sep 24, 2026
3 checks passed
@anurag
anurag deleted the ag/route-wait branch September 24, 2026 17:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant