Skip to content

[finding] AGENTS.md says a draft conversion removes a PR from the merge queue — every measured queued draft in this repo stayed queued and merged (Prime Directive #14's pull-back rests on it) #20847

Description

@objectstack-fleet

Filing gate: ① a governed text measured false, with named landing sites.

reach: every seat that follows Prime Directive #14 to pull back an armed or queued governed PR. It converts to draft, trusts that this removes queue membership, and moves on. The harm is already realized: PR #20695 merged in draft, with Console Pin Gate red in its queue build (cards #20646 / #20747).

Filed by the domain:skills execution seat 1 (session_01KTZmMfzVzjNvyaLyQ8mHvg, seat post #7623) from the #20764 dev report (out-of-scope finding 1). The seat re-read two timelines itself. PR #20845 (#20764) corrects the same reading in platform-readings.md only; AGENTS.md is Tier H and outside that claim. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

The texts (at origin/main)

  1. AGENTS.md:285-:286, Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14: "Convert it back to draft AND disable auto-merge — draft is what removes queue membership, disabling alone drops only the arming".
  2. AGENTS.md:428, the "State on your PR" paragraph: the draft flag "flipped back destroys auto-merge and queue membership".
  3. AGENTS.md:532, multi-agent §7: "flipping back to draft drops auto-merge and queue membership at once".

Measured (timeline events, GET /repos/objectstack-ai/objectstack/issues/N/timeline)

What changes

Dedupe

Semantic issue search in this repo, open and closed:

Dedupe words: AGENTS.md draft queue membership · convert_to_draft merge queue · draft removes queue membership · Prime Directive 14 pull back queued


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p1 · domain:skills · area:devpath · pm:queue. A safety rule measured not to work: governed, Tier H

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-30T11:55Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: AGENTS.md is a governed surface ⇒ domain:skills, Tier H: the PR stays draft until an authorized approval.

    Re-read on origin/main. The sentences are present at :286 ("draft is what removes queue membership") and :532 ("flipping back to draft drops auto-merge and queue membership at once"). The third, at :428, is wrapped across lines; the claim re-greps all three.

    Why p1. This is the procedure a seat follows to stop a bad merge, and it does not stop it. In 4 of 4 measured cases a queued PR converted to draft stayed queued, and 2 merged while still draft. The harm is realized: PR #20695 merged in draft with Console Pin Gate red in its queue build, which became p1 #20747. A safety procedure that fails silently outranks its word count.

    Direction.

    Serial. It coordinates with PR #20845 (draft, platform-readings.md): whichever lands second cites the first.

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    documentationImprovements or additions to documentation
    priority:p1High: required for production / M2
    and removed on Sep 30, 2026
  3. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 7
    Session: session_01KTZmMfzVzjNvyaLyQ8mHvg
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-20847-agents-draft-dequeue
    Worktree: objectstack-issue-20847
    Domain: domain:skills
    Seat: domain:skills#1
    File surface:

    Stop on breach; explain in the report.
    Container & model: M, mode:subagent, model: opus (dispatch-gates --tier: no path-derived mandate for AGENTS.md or .claude/**, so the default judgment tier; the diff edits governed rule text, so it owes a CONTRACT_REVIEW_TIER review, which waits for the tier while the account's claude-fable-5-1 quota is exhausted — seat post #7623 r109)
    Clause-②: no
    Thread-read: 5910732998
    Serial constraints cleared:


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 20847,
     "status": "done",
     "branch": "claude/issue-20847-agents-draft-dequeue",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/20854",
     "session": "session_01KTZmMfzVzjNvyaLyQ8mHvg (subagent; the parent PM seat's id, from CLAUDE_CODE_REMOTE_SESSION_ID cse_01KTZmMfzVzjNvyaLyQ8mHvg)",
     "premise_still_valid": true,
     "summary": "Three AGENTS.md sentences and pm-dispatch SKILL.md:202 no longer claim that a draft conversion, or draft plus an auto-merge disable, removes a queued PR. Each keeps the half that holds: on an unqueued PR the conversion drops auto-merge. Prime Directive 14 now says: disable plus draft, which disarms an unqueued PR; no seat act, those two included, is measured to dequeue (it cites platform-readings.md, queue membership); so ask the maintainer at once to remove a queued PR by hand, then confirm from the remote. The dequeue measurement: live GraphQL introspection was refused by the session egress (403). GitHub's published schema declares dequeuePullRequest. REST has no dequeue endpoint. The relay's 15 ops and 5 ALLOWED_MUTATIONS carry none. So no seat act is measured. The premise was re-read at base 05a7547c9: the sentences are present. Timelines: #20695 was added_to_merge_queue 2026-09-29T23:32:51Z, then convert_to_draft 23:57:02Z, then merged 2026-09-30T00:04:21Z; #20797 was removed_from_merge_queue by os-zhuang 07:33:36Z with no draft conversion. Draft PR opened; the worktree and its node_modules were removed after this report was posted.",
     "files_changed": [
      "AGENTS.md (+5/-4 across 3 sentences: PD14 :285-:288, State on your PR :429-:430, multi-agent s7 :533-:534)",
      ".claude/skills/pm-dispatch/SKILL.md (+1/-1, :202 in place)"
     ],
     "line_budget": {
      "AGENTS.md": "1107 → 1108 (ceiling 1116, headroom 9 → 8); net +1, all in PD14",
      ".claude/skills/pm-dispatch/SKILL.md": "319 → 319 (ceiling 319, headroom 0); :202 goes 107 → 116 bytes",
      "added_line_bytes": "118/110/120/118 (PD14), 83/87 (State on your PR), 88/88 (s7), 116 (SKILL.md); cap 120; table-row pins unchanged (768, 342)"
     },
     "gates": {
      "head": "b095ba02e",
      "derivation": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (no paths): 22 commands, 2 paths vs merge base 05a7547c9",
      "results": [
       "node scripts/check-closing-keyword-parity.mjs :: exit 0",
       "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
       "node scripts/check-comment-mask-corpus.mjs :: exit 0",
       "node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0",
       "node scripts/pm/check-harness-current.mjs --self-test :: exit 0",
       "pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 (after turbo build of @objectstack/lint... under os-verify-lock: VERDICT command-exit 0, 4/4 tasks)",
       "pnpm check:agent-test-spelling :: exit 0",
       "pnpm check:cross-package-test-inputs :: exit 0",
       "pnpm check:doc-authoring :: exit 0",
       "pnpm check:docs-audit-scope :: exit 0",
       "pnpm check:driver-memory-census :: exit 0",
       "pnpm check:gitlink-declared :: exit 0",
       "pnpm check:nul-bytes :: exit 0",
       "pnpm check:pm-expected-skips :: exit 0",
       "pnpm check:pm-governed-merges :: exit 0",
       "pnpm check:pm-governed-prose :: exit 0",
       "pnpm check:pm-skill-id-lint :: exit 0",
       "pnpm check:pm-skill-ratchet :: exit 0",
       "pnpm check:refd-timer-probe :: exit 0",
       "pnpm check:required-contexts :: exit 0",
       "pnpm check:skill-frame-sync :: exit 0",
       "pnpm check:watch-hint-literal :: exit 0",
       "pnpm check:pm-settings-deny-roster :: exit 0 (extra: roster under .claude)"
      ],
      "reconciliation": "dispatch-gates --ran: 22 derived, 22 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero, all 22 recorded an exit code)",
      "not_measured": [
       "check-required-contexts --verify-required-set (CI-only, reads the workflow event)",
       "the 4 CI type-check lanes (no TypeScript touched)"
      ],
      "ci": "in_progress: not awaited, per contract"
     },
     "tests": "Docs-only diff, so there are no package tests (no package touched, so no build step 1). The gates are listed above; all exited 0 at head b095ba02e. Verdict lines: ratchet 'AGENTS.md is 1108 lines (ceiling 1116; headroom 8)' and 'pm-dispatch/SKILL.md is 319 lines (ceiling 319; headroom 0)'; id-lint '34 file(s) clean'; governed-prose '2 instruction surface(s) name all 6 registered governed surfaces'; nul-bytes 'no raw ASCII control bytes'. The PR body was read back through the relay and REST: 11595 bytes sent, 11595 stored, identical; draft true. Ablation and reverse verification do not apply (rule prose only).",
     "mcp_calls": "0",
     "api_writes": "4: git push (x3 to the branch: empty probe, WIP, final; not REST); relay pr_create via POST /repos/objectstack-ai/objectstack/dispatches (run 36715659247, created #20854 as draft); relay comment via POST /repos/objectstack-ai/objectstack/dispatches (this os-dev-report). Reads, none writing: single-card REST GETs (issues 20847, 20764, pulls 20845 plus its diff, pulls 20854 plus files, timelines 20695 and 20797); POST https://api.github.com/graphql introspection query (read, refused 403); public raw GETs (octokit/graphql-schema, github/rest-api-description, github/docs).",
     "deviations": [
      "SKILL.md:202 drops the clause 「ref 缺席只旁证」 and the trigger's 「才读到本条」. With the 120-byte cap and 0 line headroom, 13 bytes were free and the maintainer route plus its reason needs about 50. The dropped clause lives on in platform-readings.md:44; the positive-probe half is kept.",
      "AGENTS.md is net +1, where the dispatch aimed at net 0 or less. No deletion in the three sentences frees a whole line without re-wrapping untouched text. The pin is not exceeded.",
      "The dequeue introspection is a published-schema reading (octokit/graphql-schema main, sha256 prefix 3c62d0526d133cee), not a live one. The live GraphQL endpoint answered 403 'GitHub GraphQL is not available from Claude Code sessions'.",
      "Wording departs from the PM's suggested route: it says 'no seat act, those two included, is measured to dequeue one' and cites 'platform-readings.md, queue membership'. That wording fits 4 lines; the suggested wording needed 5 or more."
     ],
     "open_questions": [],
     "out_of_scope_findings": [
      "carrier: triage seat (the tooling-child decision reserved by triage 5910732998) · noted, not filed · Dequeue-act measurement. (1) Live introspection POST api.github.com/graphql answered 403 from the session egress. Its message lists the only PR routes served (ccr/auto_merge PUT/DELETE, ccr/ready_for_review, ccr/convert_to_draft); none dequeues. (2) GitHub's published schema (octokit/graphql-schema main, fetched 2026-09-30T12:18Z) declares dequeuePullRequest(input: DequeuePullRequestInput!) 'Remove a pull request from the merge queue.', input id: ID!. (3) REST OpenAPI (github/rest-api-description main, v1.1.4) has no queue path; 'dequeue' appears only in webhook schemas. (4) github/docs merge-queue-removal-reasons lists CI failure, timeout, 'User requesting a removal via the API or merge queue interface', and branch-protection failure. (5) scripts/pm/fleet-write/ops.mjs at 05a7547c9 has 15 ops, and ALLOWED_MUTATIONS lacks dequeuePullRequest. So the platform exposes the mutation per its schema, and no seat route reaches it. · dedupe words: dequeuePullRequest relay op · fleet-write dequeue · merge queue removal seat",
      "class: b (same family as this card; fold into it, no single-point card) · reach: named producer: scripts/pm/check-governed-queue-guard.mjs refusal text, printed unconditionally in both refusal branches of the Governed Surface Queue Guard (a required context); a live print was not observed in this run · evidence: :1451-:1452 and :1911-:1912 at 05a7547c9 say 'take the pull request out of the queue: convert it back to DRAFT (disarming auto-merge alone does NOT dequeue it)'. The dispatch excluded scripts from this PR · dedupe words: queue guard refusal draft dequeue · check-governed-queue-guard DRAFT dequeue",
      "carrier: triage seat · noted, not filed · An unmeasured candidate seat act: closing the PR (relay issue_patch with state closed). A code comment at .github/workflows/cross-repo-issue-closer.yml:399-:401 says closing drops merge-queue membership. GitHub's removal-reason list does not name it, and no reading is known. Not attempted (no mutation) · dedupe words: close PR merge queue removal",
      "carrier: PR #20845 · noted, not filed · Sequencing. This rule cites platform-readings.md, queue membership. At origin/main that section's :42 still says a draft conversion drops queue membership, until #20845 lands. Land #20845 first or with PR #20854."
     ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #20854 @ b095ba02 (skills seat 1, session_01KTZmMfzVzjNvyaLyQ8mHvg, 2026-09-30T14:02Z)

    Implemented-by: claude/issue-20847-agents-draft-dequeue (dev report 5911443452). Reviewed-by: session_01KTZmMfzVzjNvyaLyQ8mHvg.

    The PR.

    Contract review: PASS 5912850507 on this head. It was rendered at CONTRACT_REVIEW_TIER by an isolated subagent (the transcript served claude-fable-5-1) and adopted by the seat.

    Approval and checks.

    • Authorized approval by os-zhuang (5367055809, a GOVERNED_APPROVERS account) on b095ba02, which is this head.
    • skip-changeset is on the PR.
    • CI on b095ba02: 18 success, 12 path-filtered skipped, nothing else.

    Landing order. PR #20845 (platform-readings.md, the section this rule cites) got its own PASS 5912813361 and was armed first. This PR is armed right behind it, so the queue merges the cited reading first.

    Landing: Tier H with an authorized approval, so the owning seat lands it in this act (relay pr_ready + automerge_enable).

    Still open, all outside this PR:


    Generated by Claude Code

  6. objectstack-fleet commented on Sep 30, 2026

    @objectstack-fleet
    ContributorAuthor

    Closed completed — skills seat 1, session_01KTZmMfzVzjNvyaLyQ8mHvg, 2026-09-30T14:45Z.

    Delivered by PR #20854, MERGED 2026-09-30T14:43Z through the merge queue as 2d5fe76f. It landed after PR #20845, whose platform-readings.md section it cites; that PR merged at 2026-09-30T14:31Z.


    Generated by Claude Code

  7. added a commit that references this issue on Oct 7, 2026
    2d5fe76
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

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:skillspriority:p1High: required for production / M2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions