Repository navigation
test(k8s-compat): size the docker smoke watchdog for a wedge, not a stopwatch - #715
Merged
Merged
Conversation
…topwatch The docker smoke run watchdog was 15s while the slowest scenario's own run window measures about 10s on an idle machine, leaving roughly 1.5x headroom. Every simulated `docker`/`curl` call in these scenarios boots a fresh Node process, so a run's wall-clock cost tracks how contended process creation is on the host rather than how much work the script did. A full repository suite spawning processes on every core erases that margin, and the watchdog fires on runs that are healthy but merely slow. Reproduced deterministically by running one scenario under ten concurrent process-spawn loops: it failed at 15,397ms with the old budget and passes at 15,224ms with the new one, the duration being essentially unchanged. Raises the watchdog to 60s so it still bounds a genuinely hung script while clearing any legitimate run, and adds a guard that asserts the slowest run the file actually observed stays within half the budget, so the margin cannot erode silently again. The failure message also said "ten-second" while the constant had been 15s since #523, which misdirected diagnosis; it now reports the real budget. Refs #535 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
blove
temporarily deployed
to
vercel-preview
September 17, 2026 20:55 — with
GitHub Actions
Inactive
blove
added a commit
that referenced
this pull request
Sep 17, 2026
None of the three touches this page: verify registry error codes, body-less middleware reject status, and a k8s smoke watchdog. Only the generated SEO manifest conflicted, resolved by regenerating per the procedure #712 added to AGENTS.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #535. Addresses one specific manifestation of that issue's ownership flake and leaves the rest of its investigation track alone.
The manifestation this fixes
A different failure mode from the
expected undefined to be definedsignature already recorded on #535:I hit this twice locally during an unrelated full-suite run, on
removes a renamed owned app but preserves its same-name replacementandallows runs/wait to use its longer command budget. Both pass 94/94 in isolation.Root cause
The run watchdog was 15s. The slowest scenario's own run window measures 9,719ms on an idle machine, so the margin was about 1.5x.
Every simulated
docker/curlcall is a symlink to a Node script with a#!nodeshebang, so each one boots a fresh Node process. A run's wall-clock cost therefore tracks how contended process creation is on the host, not how much work the script did. When the whole repository suite runs, that contention is real and 1.5x is not enough.Worth noting for the issue's record: pure CPU spin does not reproduce this. Ten busy arithmetic loops left the test passing. Only process-spawn contention reproduces it, which is consistent with the September 15 reassessment that ruled out real Docker resource contention.
Deterministic reproduction
One scenario, ten concurrent
node -e ""spawn loops, nothing else varied:The duration is essentially identical. Only the budget decided the outcome.
The change
setTimeout, the failure message, andelapsedMsassertions, so it cannot alter any scenario's behavior.Deliberately not touched
The 2,000ms
ROUTINE_FAKE_COMMAND_TIMEOUT_MSis the mechanism behind the other signature, the one #535 reproduced by delaying a listing 2,100ms. That issue records "no deadline was changed" as a deliberate choice and #669 added diagnostics instead, so I left it and itsINTENTIONALtwin alone. This PR changes one budget.The sibling
runSupervisorwatchdog is 5s against a 1,961ms worst case, about 2.5x. Thinner than ideal but far better than 1.5x, and I have no failure evidence for it, so it is unchanged.Verification
tsc -p test/k8s-compat/tsconfig.jsonand scoped Biome both clean. Test-only change undertest/, socheck-changesets.mjsreports no changeset needed, and it confirms that.Full-file local runs are not trustworthy evidence right now: this machine sat at a 15-minute load average above 25 from concurrent work, and under that I saw two other tests in this file fail and then pass in isolation, which is the same load-sensitivity family and not something this constant can cause. CI is the honest arbiter for the full file.
🤖 Generated with Claude Code