Skip to content

yokoten: every gate that judges main's head at read time #5082

Closed as not planned

Description

@noahgift

Poka-yoke 4 (yokoten) from the nightly-train A3.

Defect found: the Nightly Train judged "main's head at the moment of the read", but its producers had run hours earlier on an older commit. Main moves during the night because the queue keeps merging, and the train ran 6–7 h after its 04:45Z cron (runs were created 10:47Z–11:49Z, 10-05 to 10-10). So every row read "no run on C".

Ask:

  1. List every train, gate and release-path script in this repo that reads "the head of main at read time" and then judges results produced earlier, by another workflow, on whatever commit was head then.
  2. For each, record the file:line, what it judges, and whether a merge between the producer and the read can change its verdict.
  3. Fix each hit the same way: judge the producers' own commit, never fall back to main's head, and add a late-start self-test case.
  4. Separately, measure why the scheduled train run is created 6–7 h after its cron, from the run timestamps. Do not guess.

Refs #5079
keep-open: tracks the sweep and one PR per hit

🤖 Generated with Claude Code

Activity

  1. added this to the 0.71.0 milestone on Oct 10, 2026
  2. modified the milestones: 0.71.0, 0.72.0 on Oct 14, 2026
  3. noahgift commented on Oct 14, 2026

    @noahgift
    ContributorAuthor

    Survey for asks 1, 2 and 4, read from main at 8c3b19c. Fixes (ask 3) carry to 0.73, one PR per hit.

    Ask 1–2: readers whose verdict a merge between the producer and the read can still change (3 open hits)

    # file:line judges sha from why a merge changes it
    1 .github/workflows/nightly.yml:101-106 + scripts/nightly_manifest.py:106-157 ci.yml's required check-runs on the sha ref: main checkout, then git rev-parse HEAD a merge just before the gate leaves that sha's CI running, so it reads ci-pending. It retries the same sha for 2 h (#5053), then ends RED; there is no fallback to the newest green commit. This sha also becomes the night's C, so this is the root reader
    2 .github/workflows/readiness-nightly.yml:54-66 dogfood-receipt + models-t1 artifacts at one sha workflow_run.head_sha (on dispatch, github.sha) dogfood measures night C, but models-nightly measures its own GITHUB_SHA from its own cron. After any merge between them, no sha carries both artifacts, so the lane is not_measured
    3 .github/workflows/qwen-story-daily.yml:150-158 coverage-nightly's coverage-json for the sha workflow_run.head_sha; on dispatch, github.sha dispatch path only: coverage gaps go not_measured. The workflow_run path is fixed (#4715)

    Already safe (judge a picked, pinned or own commit): nightly_train.sh night_head (picks C, with late-night self-test cases), t2_preflight.sh, tag_coverage_gate.sh, lanes_pick_c.sh, dogfood_night_sha.sh, rehearse.sh --pick-c/--streak, prepare_bump.sh, autopilot.sh, cascade-publish.sh, ci_mg_reuse.sh / ci_mg_workspace_result.sh. By design: nightly_train.sh:401 (stale-pin check of the judge itself) and rc_cut.sh (release branch; a later push is meant to supersede the cut).

    Producer-side exposure (not a reader, but it causes the train's "no run on C"): deep-, examples-, release-gates-, coverage-, models- and assets-rehearsal-nightly each build their own github.sha from crons between 20:30 and 00:37 UTC, and none picks night C. Only dogfood-nightly and release-lanes-nightly pin to C. The 0.73 fix list should include pinning these, not only the 3 readers.

    Ask 4: why the scheduled train starts 5–8 h late (measured, not guessed)

    nightly-train.yml cron is 45 4 * * *. Scheduled runs, 10-05 to 10-14:

    date created (= started) lag
    10-05 11:49:46Z 7h05m
    10-06 11:29:45Z 6h45m
    10-07 11:19:48Z 6h35m
    10-08 11:36:13Z 6h51m
    10-09 11:30:11Z 6h45m
    10-10 10:47:42Z 6h03m
    10-11 11:00:15Z 6h15m
    10-12 12:25:22Z 7h40m
    10-13 12:09:20Z 7h24m
    10-14 09:43:08Z 4h58m

    createdAt equals startedAt on every run, so the time is not queue wait for a runner: the schedule event itself is delivered late. The delay hits the whole repo, not just this workflow. nightly.yml (cron 23:00) was created at 01:40–03:25Z over 10-09 to 10-14 (2h40m–4h25m late), and dogfood-nightly.yml (23:05) at the same minutes. That is GitHub's scheduled-event delivery, which is outside our control. So the fix is a trigger that does not depend on it: workflow_run on the last producer, or a dispatch from that producer. Either one is a workflow change, so it goes to a quorum first.

  4. noahgift commented on Oct 14, 2026

    @noahgift
    ContributorAuthor

    Folded into #2876 as a checklist row (TRIAGE-100, 2026-10-14): the open-ticket cap is 100, so this ticket is now tracked on that master and closed as not planned. Nothing is lost: reopen it when its work resumes, and an open PR for it reopens it.

    Agent: aprender-clerk

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions