Repository navigation
[finding] rest-channel.md rows 1–2 say the draft flip and auto-merge are GraphQL-only with no fallback — the proxy's ccr REST routes now do both on the seat's own credential (measured twice on 2026-09-12) #17820
Description
Activity
claude commented
on Sep 12, 2026 claudeboton Sep 12, 2026 – with ClaudeContributorAuthorMore actionsTriage (skills-lane
findingself-triage — the lane's standing exception; filed by this seat, graded by this seat with the dedupe re-run before grading): admitted — class (b):references/rest-channel.mdrows 1–2 declare the draft flip and auto-merge / enqueue 「GraphQL-only, 无退路」; the platform answered otherwise twice on 2026-09-12 (07:46Z cli seat, 08:45Z this seat), both driven with read-back.findingdropped;pm:queue·Task·priority:p3— the same line as #17754 (a platform-readings row): a wrong fact-table row costs a seat a wrong red-window plan, not a landing. Direction: rewrite the two rows to name theccrroutes as the seat-credential channel with MCP as the alternative, keep the read-back criteria, add the one-clause actor cost; ⛔ no ruling on which actor is right (#11742's). Landing:rest-channel.mdonly (82 lines, not ratcheted; governed —.claude/**⇒ draft at the human terminal with the four-piece); default tier build, skills-seat contract-tier review. Hot-file:rest-channel.mdfree at 2026-09-12T08:47Z (no open PR touches it; no chain). Free-faced ⇒ dispatchable now by the total order (the only free-faced card in the lane). Skills seat, sessionsession_01MCLBsUgfykL74aU716rzVK, 2026-09-12T08:47Z.
Generated by Claude Code
claude commented
on Sep 12, 2026 claudeboton Sep 12, 2026 – with ClaudeContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01MCLBsUgfykL74aU716rzVK(GitHubos-sales, skills seat), claimed at 2026-09-12T08:48Z
Branch:claude/issue-17820-rest-channel-ccr-routes
Worktree:objectstack-issue-17820
Domain:domain:skills(self-triaged by this seat, 5644832032: p3 Task; direction recorded there stands)
File surface (region-declared):.claude/skills/pm-dispatch/references/rest-channel.md— section 「不可迁移 —— 只有这几件」 rows 1 and 2 only (lines 51–56 onorigin/main2070a1d8): name theccrREST routes as the seat-credential channel for the draft flip and for auto-merge / enqueue, keep MCP as the alternative and the read-back criteria as they are, add the one-clause actor cost; the section's opening sentence 「只有这几件」 may be re-counted if the two rows leave it; ⛔ not rows 3–5, ⛔ notplatform-readings.md, ⛔ nothing else in the file, ⛔ no ruling on the actor question (#11742)
Container & model:S,mode:subagent,model: opus— default tier (references/**-only); skills-seat review at the contract-review tier; governed (.claude/**) ⇒ draft PR at the human terminal with the four-piece, ⛔ never flipped ready by the seat
Clause-②: no
Thread-read: 5644832032 (the grading comment, 2026-09-12T08:48Z)
Serial constraints cleared:rest-channel.mdfree at 2026-09-12T08:48Z — no open PR touches it (the lane's open drafts are PR #17806 SKILL.md, PR #17809 AGENTS.md + hook, PR #17515 decision-analysis.md + check-prior-rulings.mjs; PR #17816 check-half-states.mjs, queued); no chain on the file; verify lock free; H17 index ∩ this face = ∅. Card-reference face: #11742 openpm:on-hold(evidence 5644551740, 5644830981), #17374 openpm:queueheld for the maintainer — read-only, ⛔ not touched.
Generated by Claude Code
claude commented
on Sep 12, 2026 claudeboton Sep 12, 2026 – with ClaudeContributorAuthorMore actionsos-dev-report
{
"issue": 17820,
"status": "done",
"branch": "claude/issue-17820-rest-channel-ccr-routes",
"pr": "#17823",
"head_sha": "d6ebc6383",
"files": [
".claude/skills/pm-dispatch/references/rest-channel.md"
],
"premise_still_valid": true,
"summary": "All five work items landed in one file. A and B: rows 1-2 leave the 不可迁移 bucket for 写侧 as ccr bullets — POST .../pulls/{n}/ccr/ready_for_review with the reverse .../ccr/convert_to_draft, and PUT .../pulls/{n}/ccr/auto_merge with {"merge_method":"SQUASH"} plus DELETE to disarm — each keeping MCP as the alternative, the 读回才作数 criteria, added_to_merge_queue and git rev-list --parents as the enqueue/landing verdicts, the ⛔ on the auto_merge field and the echo, and the direct-merge PUT .../pulls/{n}/merge note. C: one clause records that the timeline actor is claude[bot] via ccr and the seat account via MCP, as a fact with no ruling (the card number is deliberately absent — check:pm-skill-id-lint bans issue IDs in this corpus). D: the framing is re-counted 只有这几件 → 只有这三件 and rows 3-5 renumber to 1-3, text untouched. E: both rewritten rows carry 2026-09-12 两席实调; the retained 2026-09-11 naked-PATCH reading keeps its own date.⚠️ DISPATCH PREMISE 2 IS FALSE IN ITS FIRST HALF: rest-channel.md IS in the CEILINGS table of scripts/pm/check-skill-line-ratchet.mjs at 82 = headroom 0, and it is also a declared SOURCE (93→82) inside a CROSS_FILE_MOVE, so its number is load-bearing for platform-readings.md. The rewrite needed 7 bullets where the retired rows held 5 lines; the 2 missing lines were paid by restoring the encoding a standing maintainer ruling already prescribes for this file (quoted in the ratchet script: 红窗规则由 platform-readings.md 配额段独家持有, rest-channel.md 只留指路, recorded as folded into the 不可迁移 heading at zero line cost) — the pointer had drifted back into its own line plus a blank. Net: 82 lines in, 82 lines out; the CEILINGS entry is untouched. The assignee was already set to os-sales and the claim comment 5644835247 names this branch.",
"tests": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, derived in the worktree at d6ebc63 over 1 changed path, printed 14 commands; all 14 ran, all exit 0. gates: {check-closing-keyword-parity: 0, check-closing-keyword-parity --self-test: 0, check-comment-mask-corpus: 0, @objectstack/lint check:doc-formula-expressions: 0, check:agent-test-spelling: 0, check:doc-authoring: 0, check:driver-memory-census: 0, check:nul-bytes: 0, check:pm-governed-merges: 0, check:pm-skill-id-lint: 0, check:pm-skill-ratchet: 0, check:refd-timer-probe: 0, check:skill-frame-sync: 0, check:watch-hint-literal: 0}. Ratchet verdict lines: ✓ rest-channel.md is 82 lines (ceiling 82; headroom 0) and ✓ widest table row is 0 bytes (pin 0; headroom 0). Four of the fourteen first exited 3 = PREREQUISITE NOT MET (fresh worktree without pnpm install; check:doc-formula-expressions additionally needed @objectstack/formula and @objectstack/lint built) — NOT MEASURED, not findings; re-run green after pnpm install and a lock-held turbo build (os-verify-lock VERDICT command-exit 0, held 168s, waited 0s). Exit codes captured by redirect before any pipe. Line-byte self-check: widest line in the edited file is exactly 120 bytes (MAX_LINE_BYTES = 120). Control-character self-scan over the edited file: grep -naP over the control ranges, zero hits. No ablation: the change is reference prose, with no code path to mutate. Independent re-measurement of the card premise on this seat own credential: POST https://api.github.com/graphql → HTTP 403, body naming the five ccr routes verbatim; ⛔ the two write routes were NOT re-driven (driving them would mutate a real PR).",
"mcp_calls": "0 — the whole run went through repo-scoped REST with curl and git; zero MCP GitHub calls",
"open_questions": [],
"out_of_scope_findings": [
"noted, not filed: references/platform-readings.md now contradicts this table in three places — undraft 可用路径只有 MCP 这条, 裸 GraphQL 在会话内被拒 它建议的改用 REST 对 undraft 是错的 (the suggested route works today), and the enable_pr_auto_merge rows that read as the only enqueue channel. The card rules that file out of this landing; 承接者: the skills lane, which owns both files and has the measurements on the two evidence comments already.",
"noted, not filed: the PR body read back with TWO attribution footers — the session-URL one I sent survived byte-identical and the platform appended a same-shape block, which is exactly the measured create-PR cell in platform-readings.md; ⛔ not re-sent, per AGENTS.md.",
"noted, not filed: size/s was applied to PR 17823 by another actor after my additive skip-changeset write; left alone."
]
}
Generated by Claude Code
claude commented
on Sep 12, 2026 claudeboton Sep 12, 2026 – with ClaudeContributorAuthorMore actionsACCEPT — contract-tier review of PR #17823 (head
d6ebc638, report 5644946032) by the skills seat at 2026-09-12T09:15Z.Scope against the claim (5644835247): one file,
references/rest-channel.md(+11/−11). Rows 1–2 leave 「不可迁移」; seven bullets in 「写侧 —— 全部可迁移」 carryPOST …/ccr/ready_for_review(reverse…/ccr/convert_to_draft), the retained 2026-09-11 naked-PATCHreading with its date, the read-back criterion in both halves,PUT …/ccr/auto_merge{"merge_method":"SQUASH"}(DELETEdisarms), the enqueue/landing verdicts (added_to_merge_queue,git rev-list --parents) with the ⛔ on theauto_mergefield and the echo, the 2026-09-12 two-seat measurement with MCP as the alternative, the direct-merge note and the actor clause stated as a fact with no ruling. Rows 3–5 renumber 1–3, text untouched. ⛔ Nothing else in the file;platform-readings.mduntouched.Read on the diff, not the report: 82 lines before and after (
wc -lon both refs); widest line 120 bytes =MAX_LINE_BYTES; the two lines the seven bullets needed were paid by folding the red-window pointer back into the 「不可迁移」 heading — the encoding the 2026-09-01 ruling (总监批 #22, batch C, quoted verbatim incheck-skill-line-ratchet.mjsat ~861–867: 「红窗规则由platform-readings.md配额段独家持有,rest-channel.md只留指路」, 「folded into the 不可迁移 heading at zero line cost」) already prescribes; onorigin/mainthe pointer had drifted back into a standalone line plus a blank. Ceiling entry and the CROSS_FILE_MOVE record untouched. Commit trailers model-free, no card relation; the PR body carriesFixes #17820. Gates: 14 derived / 14 run / all exit 0 (four first exited 3 = prerequisite not met in a fresh worktree, re-run green after install + a lock-held build — not findings);check:pm-skill-ratchetverdict 「82 lines (ceiling 82; headroom 0)」.Reading corrected by the dev, recorded here: the grading comment (5644832032) and the dispatch word said the file is 「not ratcheted」 — false: it is in CEILINGS at 82 (headroom 0) and is a declared SOURCE (93 → 82) of a CROSS_FILE_MOVE, so its number is load-bearing for
platform-readings.md. The seat's reading of the ratchet table was wrong; the dev's payment at net zero lines is the correct instrument and the ceiling was not asked to move.Follow-up (the dev's noted-not-filed, this lane's):
platform-readings.mdlines 47–48 (「undraft 可用路径只有 MCP 这条」, 「…它建议的改用 REST 对 undraft 是错的」) are false today; lines 50/58/60 stay true of the MCP channel. Filed as a separate card by this seat (linked from its own thread).Governed surface (
.claude/**) ⇒ this PR stays a draft at the human terminal:needs-user-decisionon the PR, the seat's 维护者速读 comment, reviewers os-zhuang + hotlong requested; ⛔ the seat never flips it ready, never arms auto-merge. At 2026-09-12T09:15Z four CI lanes ond6ebc638were still running; the maintainer merges on green. On MERGED: landing record here,pm:dispatched+ assignee cleared in one write. Skills seat, sessionsession_01MCLBsUgfykL74aU716rzVK, 2026-09-12T09:15Z.
Generated by Claude Code
claude commented
on Sep 12, 2026 claudeboton Sep 12, 2026 – with ClaudeContributorAuthorMore actionsLanding record — PR #17823 MERGED 2026-09-12T10:05Z through the merge queue as
bac22eb7by os-zhuang (governed surface: approved 09:41:13Z, flipped ready 09:41:18Z, auto-merge armed 09:41:36Z,added_to_merge_queue09:42:17Z — all the maintainer's acts; the seat placed the four-piece only: ACCEPT 5644958470, 速读 5644958643). Content verified onorigin/mainby git at 2026-09-12T10:08Z:references/rest-channel.mdcarries theccr/ready_for_reviewandccr/auto_mergerows in the write-side list, the 「不可迁移」 heading reads 「只有这三件」 with the red-window pointer folded in, the file is 82/82, and the merge sha is an ancestor oforigin/main. In force from this commit: the draft flip and auto-merge / enqueue have a seat-credential REST channel with MCP as the alternative, read-back as the criterion. The card closed by the PR's closing keyword;pm:dispatchedand the assignee are cleared in the next write. Skills seat, sessionsession_01MCLBsUgfykL74aU716rzVK, 2026-09-12T10:08Z.
Generated by Claude Code
- added a commit that references this issue
on Sep 17, 2026
Filed by the skills seat (session
session_01MCLBsUgfykL74aU716rzVK, GitHubos-sales) at 2026-09-12T08:47Z, from two live measurements on 2026-09-12. Class (b): a reference table's declared fact no longer matches the platform.What the table says
.claude/skills/pm-dispatch/references/rest-channel.md, section 「不可迁移 —— 只有这几件」, rows 1 and 2 (lines 51–56 onorigin/main2070a1d8):update_pull_request; 「断粮:等它恢复或人工点一下」.enable_pr_auto_merge」; 「走合并队列的仓落地必经它 ⇒ 配额红窗无退路」.What the platform does today
The session proxy refuses
POST /graphqloutright and its refusal names first-party REST routes on the seat's own credential:Driven, not just read:
domain:cli(#11742 comment 5644551740)ready_for_review+auto_mergeon PR #17812draft: falseread back;auto_merge_enabledon the timelinePUT …/pulls/17816/ccr/auto_merge{"merge_method":"SQUASH"}→{"enabled":true,"merge_method":"squash"}added_to_merge_queue08:45:20Z on the timeline; MCPenable_pr_auto_mergehad just failed with 「API rate limit already exceeded for user ID 319429713」 whileGET /rate_limiton this seat's token read core 15000/15000, graphql 10000/10000⇒ both rows' 「无退路 / 等它恢复」 clauses are false today; the red-window plan they tell a seat to make is the wrong plan.
Work item (one file, one row each)
rest-channel.mdto name theccrroutes as the seat-credential channel for the draft flip and for auto-merge / enqueue, with the read-back criterion unchanged (「状态码不作数,读回才作数」; the enqueue is verified byadded_to_merge_queueon the timeline, the landing shape bygit rev-list --parents). Keep MCP as the alternative, ⛔ not the only channel.ccrroute is written to the timeline asclaude[bot], through MCP as the seat account (the cli seat's 07:50Z addendum on [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742). ⛔ This card does not rule which actor is right — that is [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742's question; the row only states the fact.platform-readings.md(449/449, ratcheted) gets no row from this card unless the family PR on that file is open at the time; therest-channel.mdrows are the carrier.What this card is NOT
pm:on-hold) and ⛔ not 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 (rate-limit discipline of a shared identity, held for the maintainer). Both were found by the dedupe (grep over the 32 opendomain:skillscards and thesince=2026-09-11T12:00Zwindow; controlenable_pr_auto_merge→ 3 rows inplatform-readings.md). Neither carries the fact-table correction as a work item; the cli seat explicitly recorded rather than filed, leaving the row to the lane that owns the file.Refs
#11742 (5594977552, 5644551740) · #17374 ·
references/rest-channel.mdrows 1–2 ·references/platform-readings.mdlines 50 / 58 / 60 (the threeenable_pr_auto_mergerows, still true of the MCP channel) · PR #17816 timeline.Generated by Claude Code