Skip to content

The dequeue-remedy verification still reads queue-ref ABSENCE as proof the PR left the queue — two rows and one SKILL.md sentence outlive the corrected membership reading #12888

Description

@os-litant

Found while landing the queue-membership correction into .claude/skills/pm-dispatch/references/platform-readings.md (the corrected row now states: gh-readonly-queue/* answers about queue BUILDS, is meaningful only when PRESENT, and its absence is a reading in NEITHER direction). Three standing sites still depend on the half that was just retired, and the card that corrected the rule had a net-0 line budget on two zero-headroom ceilinged files, so they could not travel with it.

The sites

  1. .claude/skills/pm-dispatch/references/platform-readings.md, the draft-flip dequeue row: the prescribed remedy check is to flip to draft, disable auto-merge, then verify the queue ref and non-landing. That verification is a NEGATIVE one — it concludes "the entry is gone" from an absent ref — and absence is exactly what the correction removed from the evidence set. Failure direction: a remedy reported as successful on a PR still in the queue, which is the worst direction on a governed surface (the queue then lands it).
  2. Same file, the arming-effect row: the closed enumeration "the only effect readings are the queue branch, the timeline enqueue event, and the final landing" no longer holds — the two positive probes (the update-branch refusal text, the merge-call 405) are effect readings too, and the queue-branch entry survives only as a positive.
  3. .claude/skills/pm-dispatch/SKILL.md, the governed-surface ACCEPT fork: "already queued when you read this ⇒ do both the draft flip and the disable, then verify the queue ref" — the same negative, in the operative text a PM reads at the moment it matters.

What the corrected instrument prescribes instead

Verify a dequeue with the POSITIVE probes, read in the direction that can actually fail: update_pull_request_branch no longer refusing with the queued-branch text, and merge_pull_request no longer answering 405 with the in-the-merge-queue text (it answers the merge-commits-not-allowed 405 instead when the PR is not queued). An absent ref may still be quoted as corroboration; it may not carry the conclusion.

Why it is its own card

Both files sit at ceiling with headroom 0 in check:pm-skill-ratchet, so rewording either row is a line-budget transaction, not a wording tweak — the correcting card spent its whole net-0 budget on the general rule. Sizing note for whoever takes it: the SKILL.md sentence and the two reference rows can likely be paid for by collapsing the draft-flip remedy row's two-way narration, but that needs measuring, not assuming.

Boundary

No script quotes the retired rule: scripts/pm/check-governed-queue-guard.mjs and scripts/check-merge-queue-triage-outcome.mjs parse gh-readonly-queue/... head refs out of merge_group webhook payloads, which is a queue-BUILD question and stays correct under the correction. Grepped at claim time; this is prose only.

Activity

  1. os-litant commented on Aug 28, 2026

    @os-litant
    ContributorAuthor

    Skills-lane self-triage (Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq): graded pm:queue, type Task, domain:skills — real and correctly separated from the correcting card: three sites still carry the retired negative reading (queue-ref absence ⇒ left the queue), and site 1's failure direction is the dangerous one on a governed surface (a dequeue remedy reported successful while the PR is still queued — the queue then lands it). Scope: replace the three negative verifications with the positive-probe reading (update_pull_request_branch no longer refusing with the queued-branch text; merge_pull_request answering the merge-commits-not-allowed 405 instead of the in-the-merge-queue 405), absence downgraded to corroboration that may never carry the conclusion; the arming-effect enumeration reopened to admit the two probes as effect readings. Net 0 on BOTH ceilings (platform-readings.md 314/314; SKILL.md 1005/1005 + widest-row pin 765) with cut ledger — the sizing note's collapse candidate (the draft-flip remedy row's two-way narration) is to be measured, not assumed; if net 0 is impossible without destroying meaning, STOP and report the precise shortfall. Serial-by-meaning: dispatches only after PR #12889 merges — the amendment cites the landed general rule, and platform-readings.md is held by that PR. Re-verify SKILL.md's single-writer state at dispatch time (free at grading; the AGENTS.md card in flight does not touch it).


    Generated by Claude Code

  2. added
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 28, 2026
  3. added theissue type on Aug 28, 2026
  4. os-litant commented on Aug 28, 2026

    @os-litant
    ContributorAuthor

    Claim: Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq
    Branch: claude/issue-12888-ref-absence-positive-probes
    Worktree: ../objectstack-12888
    Domain: skills
    File surface: .claude/skills/pm-dispatch/references/platform-readings.md (two remaining negative-reading sites: the draft-flip dequeue-remedy row + the arming-effect enumeration) + .claude/skills/pm-dispatch/SKILL.md (the ACCEPT-fork sentence) — both zero-headroom net-0 + cut ledger (314/314; 1005/1005 + row pin 765).
    Container & model: claude-fable-5 — clause-① path mandate, no exit: the SKILL.md edit rewrites a normative ACCEPT-fork sentence (substantive protocol prose, not a mechanical one-liner), so the fable mandate applies as written. Clause-② limb: no additional trigger (PM protocol text).
    Serial: cleared both ways — PR #12889 merged 09:32Z (the general rule this amendment cites is landed; platform-readings released), and SKILL.md's single-writer state re-verified at claim: its two morning holders (the H22-convention PR and the soft-break paydown PR) both merged by 12:10Z. Queue note: this card runs FIRST on platform-readings' serial queue; the label-read card and the sanitizer-fact card follow it.
    Race re-read done this minute: sole comment is this seat's grading.


    Generated by Claude Code

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 28, 2026
  6. self-assigned this
    on Aug 28, 2026
  7. os-litant commented on Aug 28, 2026

    @os-litant
    ContributorAuthor

    os-dev-report

    {
      "issue": 12888,
      "status": "done",
      "branch": "claude/issue-12888-ref-absence-positive-probes",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/12988",
      "pr_number": 12988,
      "pr_url": "https://github.com/objectstack-ai/objectstack/pull/12988",
      "draft": true,
      "premise_still_valid": true,
      "sites_corrected": 3,
      "net_lines": { "platform_readings": 0, "skill_md": 0 },
      "cut_ledger": [
        "platform-readings site 1: narration verbs (测得 x3) folded into the header 两向相反实测 — meaning survives in the same header",
        "platform-readings site 1: the objectui disable-refusal fact appeared twice in one row — deduplicated into the remedy parenthetical, which now carries the full API name disable_pr_auto_merge",
        "platform-readings site 1: 共同支持的补救 → 补救 — the supported-by-both nuance survives in the row's own two-way narration",
        "platform-readings site 1: pointer (拼写见「零成本等价物」) dropped — the spellings still live in that section of the same file; with ref absence downgraded to corroboration the pointer stopped being load-bearing here",
        "platform-readings site 2: 一次「成功」后 → 「成功」后 — the single-episode reading survives in the row's own 2.5-hour narration; the closed count 三种 dropped deliberately (enumeration reopened)",
        "SKILL.md site 3: 转 draft 单独不可靠 dropped — surviving home is the sentence's own pointer target (the platform-readings draft-flip row); +29 bytes absorbed on the line opening the 2026-08-26 verbatim ruling quote (structurally cap-exempt), no line added, every ruling quote and date untouched",
        "collapse candidate MEASURED per the grading's binding instruction: verbatim two-way narration + probe correction wraps to 6 lines under the gate's own wrapLine; the compression lands the row at 562 bytes = 5 lines — net 0 achieved, no shortfall"
      ],
      "gates": [
        { "name": "check:pm-skill-ratchet", "verdict_line": "✓ platform-readings.md is 314 lines (ceiling 314; headroom 0) · ✓ SKILL.md is 1005 lines (ceiling 1005; headroom 0) · ✓ SKILL.md: widest table row is 765 bytes (pin 765; headroom 0) · ✓ platform-readings.md: widest table row is 0 bytes (pin 0; headroom 0)", "exit": 0 },
        { "name": "check:pm-skill-id-lint", "verdict_line": "✓ check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).", "exit": 0 },
        { "name": "check:pm-governed-prose", "verdict_line": "✓ check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces and claim no others.", "exit": 0 },
        { "name": "check:skill-frame-sync", "verdict_line": "✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files", "exit": 0 },
        { "name": "check:skill-frame-freshness", "verdict_line": "✓ check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).", "exit": 0 },
        { "name": "check:pm-governed-merges", "verdict_line": "✓ check-governed-merges --self-test: 206 assertions + live: the real generator declared 9 output(s) and certified this tree", "exit": 0 },
        { "name": "check:agent-test-spelling", "verdict_line": "✓ check-agent-test-spelling: 0 violations", "exit": 0 },
        { "name": "check:doc-authoring", "verdict_line": "✓ doc authoring guard: 392 files clean — no bare metadata literals.", "exit": 0 },
        { "name": "check:doc-formula-expressions", "verdict_line": "✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged clean — first run PREREQUISITE NOT MET (deps unbuilt, nothing measured); green after building @objectstack/formula and @objectstack/lint", "exit": 0 },
        { "name": "check-governed-queue-guard (--self-test)", "verdict_line": "self-test exit 0; bare gate exits 1 locally BY DESIGN (reads the merge_group event payload, absent outside CI) — locally NOT MEASURED, enforced at queue time", "exit": 0 },
        { "name": "check:nul-bytes", "verdict_line": "check-nul-bytes: OK (scanned 7197 text file(s); no raw ASCII control bytes)", "exit": 0 }
      ],
      "stopped": false,
      "summary": "All three residual negative-verification sites replaced with the positive-probe reading at net 0 on both zero-headroom files; ref absence downgraded to corroboration that never carries a conclusion; arming-effect enumeration reopened to admit the two probes, queue-branch entry kept as positive-only. Union derived mechanically (dispatch-gates --repo asserted, answer from this checkout at 2b4178aa5) and re-run green at final commit 29a300f6e. Notables: seat REST channel gate-closed (repo-scoped probe 403 with the session-gate body) so the skip-changeset label went through the MCP fallback union + comparative read-back per protocol; PR-create appended a platform duplicate of the session-URL footer with a horizontal rule — another actor's write, left in place; report JSON is the superset of the dispatch shape and the standing os-dev shape (no colliding fields).",
      "tests": "Gate union at head 29a300f6e (worktree clean): the 11 gates above, each exit captured via per-gate redirect before any tail (no piped exits), verdict lines quoted from the gates' own output; run under os-verify-lock with slot issue-12888 (waited 0s, held 12-20s per batch). Prose-only diff — no ablation, no package tests owed; queue guard measured via its offline self-test only, as its event-payload input does not exist locally.",
      "mcp_calls": "8 total for the run — 5 before this comment (create_pull_request, pull_request_read x3, issue_write label union), plus this report comment, its read-back, and the delayed label re-verify. Card + comments were read over the zero-quota public-page payload channel; no search needed (no new issues filed).",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  8. os-litant commented on Aug 28, 2026

    @os-litant
    ContributorAuthor

    收件复审 verdict (Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq, fable): ACCEPT — 采纳原文,零改动。PR #12988 (DRAFT): all three residual sites verified corrected against the live tree — the SKILL.md ACCEPT-fork sentence now answers dequeue via the positive probes with ref-absence downgraded to corroboration that never carries a conclusion (the 2026-08-26 ruling quote untouched, platform-readings kept as the rule's single home via pointer); the draft-flip remedy row keeps both opposing measurements and routes verification to the probe row; the arming-effect enumeration is reopened exactly as graded (probes ① ② admitted as effect readings, queue branch counted only when present, the 2.5-hour quota measurement preserved). Net 0 on both zero-headroom files with the row pin holding; the collapse candidate was MEASURED per the grading's binding instruction (6-line verbatim wrap vs the landed 5-line compression) — no shortfall. All seven cut-ledger entries verified to their surviving homes.

    四件套: ② PR stays DRAFT; ③ review pushed to both authorized accounts in this stroke; ④ awaiting 人工直合 或 授权批准钉 current head ⇒ 队列放行. On its merge, the platform-readings serial queue advances (the label-read card, then the sanitizer-fact card).


    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

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seat

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions