Skip to content

Landing references: pre-enqueue mergeable_state reading + zero-enqueued-events triage ladder - #9194

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-9178-mergeable-state
Aug 17, 2026
Merged

Landing references: pre-enqueue mergeable_state reading + zero-enqueued-events triage ladder#9194
os-zhuang merged 1 commit into
mainfrom
claude/issue-9178-mergeable-state

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #9178

What

Two references files of the PM dispatch skill, one PR, per the card's deliverable:

  1. .claude/skills/pm-dispatch/references/landing-operations.md (section B) — pre-enqueue reading: before any ready-flip / auto-merge arm, read mergeable_state; dirty means merge origin/main first (section A's os-regen fixed order when generated files are in surface) and only then arm; unknown means re-poll once. Plus the triage ladder as protocol text: ready + all-green does not equal enqueued — the queue never pulls a PR; entry is an explicit act. Zero enqueued events means checking in order: (1) mergeable_state dirty; (2) the enable-auto-merge call never landed (GraphQL, quota-sensitive, echo unreliable both directions per the existing trap row — re-issue once and verify via the timeline event, never by the auto_merge field); (3) the PR touches .github/workflows/** and the token lacks workflows permission.
  2. .claude/skills/pm-dispatch/references/platform-readings.md — one fact row in the queue-membership section: mergeable_state is lazily computed (unknown on first read, re-poll once); dirty is the queue-entry veto (the conflict target is CURRENT main); local trial-merges age with the fetch, the field does not.

Line budget (ratchet)

Both files were already exactly at their ceilings; every added line is funded by same-file compression — no ceiling raised:

  • landing-operations.md: 82 → 82 (ceiling 82; +13 lines of new protocol text funded by tightening sections A, B, D)
  • platform-readings.md: 134 → 134 (ceiling 134; +3-line fact row funded by tightening three existing rows)

Compression is wording-only; no fact, boundary, or maintainer-ruling quote was dropped.

Model tier derivation (quoted verbatim from node scripts/pm/dispatch-gates.mjs --tier on the changed paths)

Model tier — MANDATORY: claude-fable-5 (derived from the file surface, not recalled).
  - .claude/skills/pm-dispatch/references/landing-operations.md ⇢ '.claude/skills/pm-dispatch/**' — clause ① of the model-tiering ruling: a card editing the PM dispatch skill is fable-mandatory, references included — the skill is the lane's own operating protocol and a wrong edit propagates to every later dispatch
  - .claude/skills/pm-dispatch/references/platform-readings.md ⇢ '.claude/skills/pm-dispatch/**' — clause ① of the model-tiering ruling: a card editing the PM dispatch skill is fable-mandatory, references included — the skill is the lane's own operating protocol and a wrong edit propagates to every later dispatch
  The only exit is the measured quota exemption (fable unavailable ⇒ opus, never lower), recorded with its reason in the claim comment's `Container & model` line.
  Clause ② is NOT reachable from paths: a card that changes contract accept/reject behaviour or widens the public surface is fable-mandatory too, judged from the card CONTENT. This line is a FLOOR, never a clearance.

This session ran on claude-fable-5.

Local gates — union re-run AFTER the final commit, at 6e4578d03

Derived via node scripts/pm/dispatch-gates.mjs on the two changed paths (5 matched families), plus check:nul-bytes (any-edit convention):

  • pnpm check:pm-skill-ratchet — green (both files at ceiling, headroom 0)
  • pnpm check:pm-skill-id-lint — green (self-test 10 cases; 9 files clean)
  • pnpm check:skill-frame-sync — green (4 copies isomorphic, 3 axes)
  • pnpm check:doc-authoring — green (376 files clean)
  • pnpm --filter @objectstack/lint run check:doc-formula-expressions — green (self-test 24 cases; built the lint dependency closure first)
  • pnpm check:nul-bytes — green (6023 files, no raw control bytes)

Landing

Skill-surface PR (.claude/skills/** in the path surface): left as draft, awaiting a human merge — not readied, not queued, no auto-merge. .claude/**-only diff releases nothing; skip-changeset applies.

Generated by Claude Code


Generated by Claude Code

…ed-events triage ladder

Add the pre-enqueue mergeable_state discipline and the zero-enqueued-events
triage ladder to references/landing-operations.md, and the mergeable_state
lazy-computation fact row to references/platform-readings.md. Both files
stay at their ratchet ceilings (82 / 134), funded entirely by same-file
compression.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TNzEetykdh7ceZGwuAPLq
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants