docs: correct two stale gate comments after #2354
`MAX_WAIT_MS` in scripts/gate-lease.mjs said the 45-minute wait only ever expires against a live holder still running after 45 minutes. The budget is measured from the waiter's first `acquireLease` attempt and is not reset when the lease changes hands, so a queue of healthy gates deeper than about ten also exhausts it. The comment now says so, matching docs/quality-gate.md. The "Run cross-client smokes" step in .github/workflows/main.yml pointed at a CI-vs-local table in the root README that the README no longer carries; it now points at docs/quality-gate.md, which declares itself canonical. Comment-only; no behaviour change. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PsmUAZ6aLUAFqenjJKSSRp Signed-off-by: cliffhall <cliff@futurescale.com>
This commit is contained in:
parent
14661b1a94
commit
5705a9e97c
2 changed files with 11 additions and 7 deletions
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
|
|
@ -130,7 +130,7 @@ jobs:
|
||||||
# non-Chromium `SMOKE_BROWSER` to any workflow.
|
# non-Chromium `SMOKE_BROWSER` to any workflow.
|
||||||
# `npm run test:scripts` fails if you do (scripts/lib/workflow-gate.mjs,
|
# `npm run test:scripts` fails if you do (scripts/lib/workflow-gate.mjs,
|
||||||
# #2146). `npm run smoke` and `smoke:web:chromium` belong here and are
|
# #2146). `npm run smoke` and `smoke:web:chromium` belong here and are
|
||||||
# not affected. The canonical CI-vs-local table is in the root README.
|
# not affected. The canonical CI-vs-local split is docs/quality-gate.md.
|
||||||
#
|
#
|
||||||
# End-to-end smokes through the built launcher (--help dispatch + prod
|
# End-to-end smokes through the built launcher (--help dispatch + prod
|
||||||
# CLI/web). Not part of any client's `validate`: it needs the
|
# CLI/web). Not part of any client's `validate`: it needs the
|
||||||
|
|
|
||||||
|
|
@ -106,12 +106,16 @@ export const PROGRESS_MS = 60_000;
|
||||||
/**
|
/**
|
||||||
* How long a waiter waits before giving up.
|
* How long a waiter waits before giving up.
|
||||||
*
|
*
|
||||||
* A dead holder releases within {@link STALE_MS}, so this only ever expires
|
* This is a *total queueing budget*: it counts from the waiter's first attempt
|
||||||
* against a *live* holder that is still running after 45 minutes — four
|
* and is not reset when the holder ahead releases and another queued gate
|
||||||
* queued quiet gates are ~18 minutes, so a holder that long is a hung gate, and
|
* takes the lease. A dead holder releases within {@link STALE_MS}, so it
|
||||||
* the right outcome is a loud failure naming it rather than a fifth process
|
* expires against a live gate that has hung, a dead holder's lock directory
|
||||||
* joining the pile. An unbounded wait would be a task that looks like progress
|
* that could not be removed, or a queue of healthy gates deeper than the
|
||||||
* and can never succeed.
|
* budget covers — about ten at ~4.5 minutes each. The right outcome in every
|
||||||
|
* case is a loud failure naming whichever gate holds the lease at that moment
|
||||||
|
* rather than another process joining the pile; an unbounded wait would be a
|
||||||
|
* task that looks like progress and can never succeed. docs/quality-gate.md
|
||||||
|
* describes the same budget; keep the two in step.
|
||||||
*/
|
*/
|
||||||
export const MAX_WAIT_MS = 45 * 60_000;
|
export const MAX_WAIT_MS = 45 * 60_000;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue