fix(scripts): give the render-smoke overlap test room for process startup
The test gave itself a 150ms budget that had to cover `script(1)` PTY allocation plus Node boot: `paintAt` is measured from the child's first JS tick, while `renderTimer` is armed in the parent at spawn. Measured idle, that startup is 66-114ms — ~36ms of slack at best — and under the load of a full `local:gate` run it goes over, so the render timer fires before the paint and the run is reported as "did not render", which is precisely the misdiagnosis this test exists to catch. It failed three gate runs in a row while passing standalone every time. The constants are widened rather than the assertion changed: the shape under test is the overlap (paint < timeoutMs < paint + surviveMs), and 1200/1500 keeps it with real margin on both sides. Verified by mutation — removing the `clearTimeout(renderTimer)` this test guards makes it fail at 1204ms, i.e. the timer still fires inside the survival window. Closes #2177 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013hzwzS8UvBsr4yZm7o7sev Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
baff393675
commit
0f845a319a
1 changed files with 21 additions and 4 deletions
|
|
@ -93,10 +93,27 @@ test("a paint landing just under the deadline is not failed by the render timer"
|
|||
`setTimeout(() => { console.log(${JSON.stringify(MARKER)}); ` +
|
||||
`setInterval(() => {}, 1000); }, ${paintAt});`,
|
||||
),
|
||||
// Deliberately tight: the render deadline expires while the survival window
|
||||
// is still open, which is the whole shape of the bug.
|
||||
timeoutMs: paintAt + 150,
|
||||
surviveMs: 400,
|
||||
// The shape being reproduced is an overlap, and only an overlap:
|
||||
//
|
||||
// actual paint < timeoutMs < actual paint + surviveMs
|
||||
//
|
||||
// i.e. the render deadline expires while the survival window is still
|
||||
// open. Both margins are deliberately wide, because `paintAt` is measured
|
||||
// from the child's first JS tick while `renderTimer` is armed in the
|
||||
// parent at spawn — so the left margin has to absorb `script(1)` PTY
|
||||
// allocation plus Node boot, which measured 66-114ms on an *idle* machine
|
||||
// and goes past 150ms under the load of a full `local:gate` run. These
|
||||
// constants used to be `paintAt + 150` / `400`, which left ~36ms of slack
|
||||
// at best and failed deterministically inside the gate (#2177) — with the
|
||||
// "did not render" diagnostic that is exactly the misreport this test
|
||||
// exists to catch.
|
||||
//
|
||||
// Do not tighten these back up to make the test faster: the overlap is the
|
||||
// point, not the tightness. Worst-case paint lands near 365ms, well under
|
||||
// the 1200ms deadline, and 1200ms still falls inside a survival window
|
||||
// that closes no earlier than ~1750ms.
|
||||
timeoutMs: 1200,
|
||||
surviveMs: 1500,
|
||||
});
|
||||
assert.equal(r.code, 0, `expected pass, got: ${r.message}`);
|
||||
assert.doesNotMatch(r.message, /did not render/);
|
||||
|
|
|
|||
Loading…
Reference in a new issue