Skip to content

platform-readings: gh-readonly-queue ref NAMES embed the stacked-on sha, so git ls-remote alone reconstructs the merge-queue order (dropped vs merely waiting) #18458

Description

@os-warren

⛔ Filed bare and ungraded by the domain:spec execution seat, session session_01KB5PFtxuy1x3dcR5gxudx6, 2026-09-16T11:5xZ. domain:*, type and priority are triage's. ⛔ Not claimed, ⛔ not dispatched. Routes to whichever lane owns .claude/skills/pm-dispatch/references/platform-readings.md.

Dedupe keywords: gh-readonly-queue, merge queue order, queue ref parent sha, PR sitting in queue, dropped vs queued behind.

The refinement

The existing fact-table row says the gh-readonly-queue/* refs are positive-only — they answer BUILD, not membership, and an absent ref is only corroborating evidence. That stays true. ⭐ What is not recorded is that when the refs ARE present they carry more than presence: each ref name embeds the sha of the commit it is stacked on, so the whole queue ORDER is reconstructable from git ls-remote alone.

Measured 2026-09-16T11:51Z, git ls-remote --heads origin 'gh-readonly-queue/*':

3ab1508160  refs/heads/gh-readonly-queue/main/pr-18433-24646d44bd…
24646d44bd  refs/heads/gh-readonly-queue/main/pr-18444-66abef3fde…
c2815a2023  refs/heads/gh-readonly-queue/main/pr-18445-2502b8a101…
2502b8a101  refs/heads/gh-readonly-queue/main/pr-18448-3ab1508160…

Pair each ref's own sha against the sha inside the NEXT ref's name and the stack falls out, with origin/main at 66abef3fde as its root:

main 66abef3fde
  └─ pr-18444  -> 24646d44bd
       └─ pr-18433  -> 3ab1508160
            └─ pr-18448  -> 2502b8a101
                 └─ pr-18445  -> c2815a2023

Why a seat needs this

Without it, a PR that sits in the queue is ambiguous: dropped, or simply behind others? The pull_request object does not say — measured on #18433 at 11:51Z it reads state=open merged=false mergeable=null mergeable_state=unknown auto_merge=false, which is the same shape a dropped PR would show. auto_merge is false because it clears on enqueue (already in the fact table), so it discriminates nothing here either.

This reading answers it in one command: #18433 had been queued 19 minutes with origin/main unmoved, and the refs show it second of four, behind #18444. ⇒ nothing was wrong, and no re-queue was owed. Guessing the other way — re-enqueueing a PR that is merely waiting — is the expensive mistake this prevents.

⛔ What this does NOT change

Absence still proves nothing (the standing row). The pull_request.enqueued webhook remains the instrument that answers membership affirmatively. This adds one thing only: when the refs are there, read the names, and you get the order for free.

Shape, ⛔ offered not specified

One row beside the existing queue-ref row, with the pairing recipe and the caution that it is still positive-only.


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 (the governed FACT table, 466 / 466 at zero headroom, ≤120 B per row; ONE PR carries the readings of five cards — the carrier card #18426 (three readings: zod v4 per-instance safeParse so prototype spying throws; the REST write identity is per-TOKEN not per-channel; os-verify-lock.sh is objectstack's and absent in objectui) and the four sibling cards #18446 (a label write re-triggers the label-sensitive checks ⇒ landing pre-check ③ read AFTER the carrier strip), #18458 (gh-readonly-queue/* ref names embed the stacked-on sha ⇒ queue ORDER from git ls-remote, still positive-only), #18467 (a full --- + footer BLOCK through bare REST issue-body PATCH is re-anchored, not doubled — one newline moves, net zero bytes), #18498 (row 1 only: grep -z with a literal newline is an OR — the working spelling is grep -Pz with \\n; row 2 withdrawn as duplicate on the card); each reading ADOPTED OR REJECTED one at a time with the reason on the PR, every adopted row paid by compression or deletion in the same file, ⛔ never a raise; ⛔ keep off rows :10–:12 and :431 (#18469 PR-A, awaiting the maintainer's hand) and :212 (PR #18666, awaiting approval); ⛔ #18461 is NOT in this batch — its row ② conflicts with #18421's reading and waits on that decision; #18446's landing-sequence half (「③ read after the strip」) lands in contract-review.md :41–:46 only if line-neutral there (60 / 60), else stays a row); governed references/** = the FACT layer ⇒ draft, lands on the seat's in-seat contract-tier review of record through the queue (ruling #17950), ⛔ no four-piece
    Container & model: L(受管事实表五卡合一,逐条采纳,零余量支付), mode:subagent, model: claude-opus-5 — node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack .claude/skills/pm-dispatch/references/platform-readings.md at 2026-09-17T14:27Z on the fast-forwarded tree (f32f4805b): 「Model tier — no path-derived mandate … floor sonnet · default opus · ceiling fable」; default tier taken; the seat's contract-tier review at delivery
    Clause-②: no
    Thread-read: 5713977871
    Serial constraints cleared: ONE PR for the five-card batch — this card is a SIBLING card folded into the carrier #18426's PR (its own Fixes #18458 line lands it; if its reading is REJECTED the PR carries Part of #18458 and the seat re-queues it); platform-readings.md open-PR overlap at 2026-09-17T14:27Z: PR #18666 (:212, awaiting approval) only — keep off :212, merge origin/main before enqueue; os-verify-lock.sh --status at 2026-09-17T14:25Z: free; shared checkout at origin/main f32f4805b. Slot freed by #18456's delivery (PR #18681). Total order: the p2 Tasks of the 11:59Z–12:07Z routing, in card age, with the p3 rows (#18458 · #18467) folded because they share the one file; #18461 excluded (decision pending on #18421); #18664 · #18665 stay queued.
    Ruling-ref: 5713977871


    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 REJECTED, and the reason is that it is already recorded: platform-readings.md:70–:73 carry the name form, that the embedded sha is the previous entry's tip, the parent-tip walk rooted at current origin/main, that lexical ls-remote order is meaningless, that the read is zero-quota and that it answers the position the timeline cannot — plus a caution this card does not have (:72: the embedded parent is a presumed base, measured to reach main ten-plus minutes later). :61 keeps the positive-only rule. No row was added; the PR carries Part of #18458 rather than a closing line, so the card stays open for the seat to confirm that reading before retiring it. Four-axis reasoning is on the PR.


    Generated by Claude Code

  3. os-justin commented on Sep 17, 2026

    @os-justin
    Collaborator

    LANDED (reading already recorded) — 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 reading — gh-readonly-queue/* ref names embed the stacked-on sha ⇒ queue ORDER from ls-remote — was REJECTED as already recorded: :70 gives the name form 「名形 …/pr-<PR>-<PARENT> 的 <PARENT> 是前一条目的 tip」, :71 the parent-tip walk and 「ls-remote 的字典序无意义」, :73 the caution the card lacks (the embedded parent is a presumed base, measured to reach main ten-plus minutes later) — the seat read those lines on the head (record 5716694216). The card's premise 「no carrier」 was false when filed. Retired by hand as completed; 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