Skip to content

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

Closed

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→clean 与 blocked→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}/status 的 state 与 statuses[]。

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

  1. os-justin commented on Sep 17, 2026

    @os-justin
    Collaborator

    Claim: PM loop round 1
    Session: session_01Gqi43smmqjJ5sUrhfoPeKu
    Branch: claude/issue-18426-platform-readings-batch
    Worktree: objectstack-issue-18426
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: .claude/skills/pm-dispatch/references/platform-readings.md only (466 / 466, ≤120 B per row) — a SIBLING card ADDED to the five-card batch already in flight on this branch (carrier #18426, claims 5716076148 / 5716077615 / 5716078793 / 5716079980 / 5716081402), on triage's 「强烈建议同派」: its reading — mergeable_state: unstable can come from a commit STATUS the /check-runs enumeration cannot see — landing pre-check ③ reads BOTH /check-runs and /status (or the combined status) before calling a head green — adopted or rejected on its own with the reason on the PR; adopted ⇒ its own Fixes #18521 line, rejected ⇒ Part of #18521 and the seat re-queues it; ⛔ keep off :10–:12 / :431 (#18469 PR-A) and :212 (PR #18666); FACT layer ⇒ lands on the seat's in-seat review of record, ⛔ no four-piece
    Container & model: L(受管事实表批次追加一卡), mode:subagent, model: claude-opus-5 — the batch's tier reading at 2026-09-17T14:27Z (no path-derived mandate; default tier) holds for the same file
    Clause-②: no
    Thread-read: 5715654046
    Serial constraints cleared: same branch as the batch — one PR; the seat re-scoped the running dev by message at 2026-09-17T14:43Z; platform-readings.md open-PR overlap unchanged (PR #18666 :212 only); shared checkout at origin/main 6dfa3ea77. Total order: a p2 Task of the 14:02Z–14:03Z routing, folded because it shares the one file at zero headroom.
    Ruling-ref: 5715654046


    Generated by Claude Code

  2. os-justin commented on Sep 17, 2026

    @os-justin
    Collaborator

    Batched onto PR #18689 (draft, governed FACT layer) — this card's reading is ADOPTED as one row at platform-readings.md:28 (115 B), sitting directly beside the :27 row it refines (「unstable 瞬态非失败」) and not contradicting it, paid by compressing the two CI-log reading rows at :303. Verdicts, payments and gate exit codes are on the PR.


    Generated by Claude Code

  3. os-justin commented on Sep 17, 2026

    @os-justin
    Collaborator

    LANDED — PR #18689 (the seven-card platform-readings batch, carrier #18426) merged through the queue at 2026-09-17T15:59:40Z (merged_at), squash 72dd95fa5 (single parent e75cc3c2f, an ancestor of origin/main; platform-readings.md 466 / 466 on main, +17 / −17). Fact-layer landing on the seat's review of record — ## Contract review 5716694216 on the carrier card and 5717108355 on the PR thread (the Governed Surface Guard's merge_group leg reads the PR thread alone, so the first queue entry at 2026-09-17T15:14:52Z was dequeued CI_FAILURE at 2026-09-17T15:36:18Z; re-queued 2026-09-17T15:38:54Z after the PR-thread record; #18701 filed). Landing criterion per the seat's publication register: MERGED through the queue, read from merged_at.

    This card's row on main at :28: 「- unstable 可源自 check-runs 看不见的 commit STATUS(如 Vercel)⇒ ③ 另读 /commits/{sha}/status。」. The card auto-closed completed on the PR's Fixes; pm:dispatched is stripped in the same act.


    Generated by Claude Code

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