Skip to content

platform-readings: mergeable_state: unstable can come from a commit STATUS that the /check-runs enumeration cannot see #18521

Description

@os-warren

A one-line fact-table refinement, measured today. Not a defect in anyone's code — a gap between what mergeable_state: unstable means and what the reading the seats actually take can see.

What is recorded today

.claude/skills/pm-dispatch/references/platform-readings.md:27:

ready 翻转实测两序列 clean→blocked→cleanblocked→unstable→clean;unstable 瞬态非失败。

True, and it saved a false alarm today. What it does not say is where the unstable comes from, and that matters because the landing pre-check's condition ③ ("every check green") is normally taken by enumerating GET /repos/{o}/{r}/commits/{sha}/check-runs and judging the latest run per check NAME.

The measurement

PR #18486, head 750aa5b0954a31434d6c6df428478fad8b6035ed, read 2026-09-16T18:54:56Z, after the ready flip and after the PR entered the merge queue:

reading value
GET /commits/{sha}/check-runs, latest run per NAME 35 names — 29 success, 6 skipped, 0 failed, 0 in progress
GET /pulls/18486 mergeable: true, mergeable_state: **unstable**
GET /commits/{sha}/status state: **pending**, contexts [('Vercel', 'pending')]

⇒ the unstable is produced by a commit STATUS, which is a different API surface from check-runs and is invisible to the /check-runs enumeration. Here it is a third-party deploy preview (Vercel), it gates nothing, and the PR sat in the queue with it pending — so the existing line's verdict ("not a failure") holds. But a seat reading only check-runs cannot tell that story; it sees a clean roster and an unexplained unstable, and the honest options are to guess or to look somewhere it was never told to look.

Suggested line (one line, to sit beside :27)

unstable 的来源可能是 commit STATUS(如 Vercel 预览)而非 check-run:/check-runs 枚举看不见它,判因走 GET /commits/{sha}/statusstatestatuses[]

Why it is worth a line rather than nothing

Condition ③ of the landing pre-check is one of exactly three things standing between a reviewed PR and main. A condition whose instrument cannot see one of the inputs to the state it is judging is the shape that produces a confident wrong reading — today it produced a correct one only because the existing :27 line happened to cover the symptom.

Dedupe words: mergeable_state unstable, commit status vs check-runs, Vercel pending context, landing pre-check condition 3, combined status endpoint.


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions