Repository navigation
ci: run main's full battery every 4 hours and CodeQL daily (maintainer ruling Q6 = C) - #25969
Conversation
…r ruling Q6 = C) ci.yml and lint.yml schedule '0 * * * *' -> '0 */4 * * *', job logic unchanged. codeql.yml drops push: main and runs daily at 02:00 UTC (the Monday pass folds in), with workflow_dispatch. The scheduled-full-run card identity moves to `4-hourly` and keeps the hourly title and marker readable through CADENCE_PREDECESSORS, so the open card #25438 is refreshed, never orphaned or duplicated; pinned in the self-test with its real title and marker line. The scheduled runs' Test Core run-summary and timing artifacts are kept 4 days so the weekly shard-timings refresh still sees about 24 runs. Readers, runbook and messages that said hourly follow. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AjoNWTpihGQZrTamr1vd4W
…ourly schedule shard-timings-refresh.yml's Save-Turbo-cache paragraph and docs-deploy.yml's cron-collision reasoning (the 0/6/12/18 set still holds: the 4-hourly ci/lint runs meet it at 00 and 12 only). Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AjoNWTpihGQZrTamr1vd4W
|
This failure is not this PR's. That gate derives its population from Generated by Claude Code |
Requested by Elon · project thread
Fixes #25771
Maintainer ruling Q6 = C: the scheduled full battery of
CIandLint & Type Checkruns every 4 hours instead of hourly, and CodeQL runs daily instead of on every push tomain. Job logic is unchanged: the scheduled run is still the full battery. Dropping the push-to-main CI/Lint runs is out of scope, per the card.The change
ci.yml,lint.yml:on.schedule'0 * * * *'→'0 */4 * * *'.workflow_dispatchkept.codeql.yml:push: maindropped; schedule'0 2 * * 1'(Monday deep pass) →'0 2 * * *'(daily, same query suite, so the Monday pass folds in);workflow_dispatchadded so a fix can be re-analyzed on demand.The scheduled-full-run card identity (the part that is not S)
Choice: the identity moves to the new cadence, and the hourly spellings stay readable.
CARD_CADENCESnames4-hourlyfor both workflows, so a newly filed card is titled4-hourly full run: red on main (CI)with markeros-4-hourly-full-run-ci, and its body says "every 4 hours". A newCADENCE_PREDECESSORSmap ('4-hourly': ['hourly']) gives each identity alegacytitle and marker thatmatchesCardstill reads. So the open card #25438 (hourly full run: red on main (CI)/os-hourly-full-run-ci) is found by its old title or old marker, refreshed in place, and never duplicated. A refresh rewrites the body with the current marker and leaves the title alone (updateIssuewrites only the body). A legacy spelling is read, never filed.Pinned in
scheduled-full-run.mjs --self-test(card identity battery floor 34 → 42):'0 */4 * * *', so the cadence on the card is the cadence the workflow runs.Mutation checks: emptying
CADENCE_PREDECESSORSreds the self-test ("#25438 would be orphaned"); revertinglint.ymlto'0 * * * *'reds it too.Readers of the cadence
--release-gate,releaseGateVerdict): no clock anywhere in it. It reads the nearest completedscheduleorpushrun at or before the version commit, so nothing reads a 4-hour gap as missing. The window constants (400 commits, 3 × 100 runs) cover 50 days of scheduled runs.docs/releases-maintenance.mdnow says that a version commit can wait up to 4 hours for its first scheduled full run, that the gate does not wait for it (the version commit's own push run usually decides), and when a dispatched run helps.test-core-run-summary-*/test-core-timings-*artifacts are still downloadable. With 1-day retention, hourly gave 24 of them; at every 4 hours it would give 6. The two uploads now useretention-days: ${{ github.event_name == 'schedule' && 4 || 1 }}, which keeps about 24 in the window and leaves every other event at 1 day. This is the one change outside "cron + words"; drop it if the reviewer prefers fewer samples to longer retention. ThePREVIOUS_FILE_SHARDED_PACKAGEScomment inpartition-test-shards.mjsfollows the new window.ci.yml,lint.yml,release.yml,scheduled-full-run-card.yml(job display name included),shard-timings-refresh.yml,select-shard-timings-run.mjs,select-gate-families.sh,select-shard-packages.sh, their self-test case names, and oneAGENTS.mdsentence. The lint stepHourly full run self-test and concurrency gatewas renamedScheduled full run …(id too; nothing else reads it). Historical measurements that describe the hourly era are left as written.Verification
node scripts/ci/scheduled-full-run.mjs --self-testOK;--check-concurrencyOK for both files.select-shard-timings-run.mjs --self-test,partition-test-shards.mjs --self-test,select-gate-families.selftest.sh(59 cases),select-shard-packages.selftest.sh(32 cases) all pass.grep -n cron .github/workflows/ci.yml .github/workflows/lint.yml .github/workflows/codeql.yml→'0 */4 * * *','0 */4 * * *','0 2 * * *'.dispatch-gates.mjs --commands, 82 commands on the pre-merge tree): 77 exit 0. 5 exit 3 (NOT MEASURED, they need every package'sdist/):check:doc-formula-expressions,check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content. CI's lanes own those.Tier H (
.github/workflows/**): lands after a GOVERNED_APPROVERS approval.🤖 Generated with Claude Code
https://claude.ai/code/session_01AjoNWTpihGQZrTamr1vd4W