Repository navigation
ci(test-sqlite): set the job budget from its measured p90 (#594) - #595
Conversation
|
ZETETIC-REVIEW: REQUEST_CHANGES SummaryThe decision (raise StakesMedium: CI-only change (workflow timeout value), no source/runtime code touched, but it gates every merge via Move 0: ledger / seen-defect checkNo unmapped branches; no "pre-existing/unrelated/out of scope" rationalization. Proceeds normally. (1) Independent re-measurement (
|
The 10-minute budget left 1.7x headroom over this job's p90, and two runs of 2026-09-16 exceeded it: main at a981f93, cancelled at 616s having reached 74% of the suite, which made CI Green fail on test-sqlite='cancelled'; and PR #584's first attempt at 610s. Both passed on a rerun, in 416s and 276s, with no code change. The main run's own tree had taken 266s as the pull request of the commit it squashed. Measured over that day's 21 job executions, every attempt counted: 18 successes from 234s to 416s, median 328s, p90 348s, and three non-successes: the two timeouts above and a 47s cancellation from a superseded push. The budget is now 20 minutes, 3.4x that p90, about twice the point where both timeouts fired, and one eighteenth of GitHub's own ceiling, with the measurement recorded beside the number so suite growth into the new headroom stays visible (ADR-1074). The Windows and matrix budgets are untouched: nothing measured here applies to them. An earlier draft of this commit, its ADR and its CHANGELOG entry cited 29 runs, 27 successes and a second cancellation from a superseded push. That sample crossed several days and counted only each run's latest attempt, so it hid the two reruns and invented the 150s cancellation. The review of PR #595 caught it; the numbers above are the reproducible ones. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH
26eb49d to
120a5ea
Compare
|
Corrected, and the review was right: my sample was wrong, not just imprecise. I had listed the last 30 CI runs regardless of date and read only each run's latest attempt, so the sample crossed several days and hid every first attempt that was rerun. That is where "29 runs, 27 successes, median 321 s, p90 343 s" and the imaginary "150 s cancellation from a superseded push" came from. Re-measured with So the incident rate is two timeouts in 21 executions, and the former budget left 1.7x over the p90 rather than 1.4x. The value stays at 20 minutes, now stated as 3.4x that p90 and about twice the point where both timeouts fired. Corrected in the workflow comment, both ADR-1074 copies, the CHANGELOG entry, the commit message and the PR body. The branch is rebased onto |
|
ZETETIC-REVIEW: REQUEST_CHANGES SummaryRe-verified PR #595 at commit 120a5ea. The measurement correction is real and independently reproducible: my own re-derivation from the raw job timestamps (gathered before this round, from the same public Move 0No seen-defect rationalization anywhere in the PR body or commit message; the commit message states plainly what the earlier draft got wrong, which is the opposite of a bypass. Proceeds normally. Independent re-verification of the corrected measurementRecomputed from the raw
Stale-number sweepGrepped the full tree at 120a5ea for Manifest, parse, gate checks
IssuesBlocking
Non-blockingNone beyond the one blocking item; everything else re-verified clean. VerdictREQUEST_CHANGES. Fix the leftover "1.4x" in both ADR-1074 mirrors to match the corrected 1.7x used everywhere else in this commit. No other change needed: the 21/18/616/610/47 measurement, the manifest resolution, and the 20-minute value all check out against independent re-verification. |
The 10-minute budget left 1.7x headroom over this job's p90, and two runs of 2026-09-16 exceeded it: main at a981f93, cancelled at 616s having reached 74% of the suite, which made CI Green fail on test-sqlite='cancelled'; and PR #584's first attempt at 610s. Both passed on a rerun, in 416s and 276s, with no code change. The main run's own tree had taken 266s as the pull request of the commit it squashed. Measured over that day's 21 job executions, every attempt counted: 18 successes from 234s to 416s, median 328s, p90 348s, and three non-successes: the two timeouts above and a 47s cancellation from a superseded push. The budget is now 20 minutes, 3.4x that p90, about twice the point where both timeouts fired, and one eighteenth of GitHub's own ceiling, with the measurement recorded beside the number so suite growth into the new headroom stays visible (ADR-1074). The Windows and matrix budgets are untouched: nothing measured here applies to them. An earlier draft of this commit, its ADR and its CHANGELOG entry cited 29 runs, 27 successes and a second cancellation from a superseded push. That sample crossed several days and counted only each run's latest attempt, so it hid the two reruns and invented the 150s cancellation. The review of PR #595 caught it; the numbers above are the reproducible ones. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH
120a5ea to
6522f45
Compare
|
ZETETIC-REVIEW: APPROVE SummaryRe-verified PR #595 at commit 6522f45. The diff from 120a5ea is exactly the two-line fix requested: both ADR-1074 mirrors now read "At 1.7x the p90," matching every other surface in the commit. No stale or internally-disagreeing figure remains anywhere in the branch. Move 0No seen-defect rationalization in the PR body or commit history. Proceeds normally. Diff scope
Stale/derived-figure sweepGrepped the full tree at 6522f45 for the raw-count tokens ( Percentile-method noteNo objection to keeping the document's own median/p90 (328s/348s). My earlier 327/346.6 was interpolated; the branch's figures use a different, equally defensible method, and the underlying raw data (21 executions, 18 successes 234-416s, three non-successes at 616s/610s/47s) is what the decision rests on and is unchanged and correct. No reason to prefer one over the other, so no change requested here. Gates (doc-only delta)
IssuesBlockingNone. Non-blockingNone. VerdictAPPROVE. The stale ratio from round 2 is fixed, nothing else in the branch disagrees with the raw measurement, mirrors match, workflow parses, |
Summary
mainwent red ata981f935:Test (SQLite backend)hit itstimeout-minutes: 10after 616 s, at 74 % of the suite, andCI Greenfailed ontest-sqlite='cancelled'(run 35092942280). Re-running the failed jobs turnedmaingreen with no code change, and the same tree had taken 266 s as the pull-request run of33dc284a, the commit that merge squashed. One runner took at least 2.3× another for identical work.Measured over that day's 21 job executions, every attempt counted: 18 successes between 234 s and 416 s, median 328 s, p90 348 s, and three non-successes. Two are real timeouts, confirmed attempt by attempt:
mainat 616 s, passing on its rerun in 416 s, and PR #584's first attempt at 610 s, passing on its rerun in 276 s. The third is a 47 s cancellation from a superseded push. The slowest success used 69 % of the 600 s budget, and two executions in 21 exceeded it.The budget is now 20 minutes, 3.4× that p90, about twice the point where both timeouts fired, and one eighteenth of GitHub's 6-hour ceiling, and the workflow carries the measurement beside the number (ADR-1074). The Windows job at 15 minutes and the Python matrix at 33 to 65 minutes are untouched: they have not been observed to cancel and nothing measured here applies to them.
Closes #594
Type of change
Test plan
Test (SQLite backend)run completing under the new budget..github/workflows/ci.ymlparses (yaml.safe_load).scripts/check_doc_claims.py: OK.scripts/check_craftsmanship.py --base origin/main: OK.scripts/check_project_wiki.py: mirrors match.Audit notes
pytest-xdistis unproven here. That is a measurement, not a timeout decision, and ADR-1074 says so.Coding-standards compliance
Breaking changes
None.
CI Greenstill requires the job to succeed, so a real failure blocks a merge exactly as before; a hung suite now burns 20 minutes instead of 10 before failing.Reviewer checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01Cz7A6goxVzfKL9NT7k4zDH