Authorized: maintainer 2026-08-23, live PM chat, verbatim: 「可走 REST 的操作清单,同意立卡」. Filed by the skills seat (session 5213b871-5164-5bc3-8874-28b336bbcd40), self-triaged under the skills-lane exception. Sibling of the quota trio #11364/#11365/#11366 (one ruling stroke earlier the same day): #11364 flips the POLICY (REST as default read path); this card lands the CONTENT — the concrete operation-to-channel mapping the policy needs to be executable without rediscovery.
What lands
A new small references file (suggested: references/rest-channel.md, own ratchet ceiling at landed count, headroom 0 — same Q1=A precedent as state-machine.md / contract-review.md), carrying the mapping below; platform-readings.md's API-quota section gets a one-line pointer (paid inside #11364's rewrite of the same section — fold candidate, see Serial). Every ✓ row was executed in a real session on 2026-08-23; rows must carry that provenance date per platform-readings conventions.
Read side (all migratable — the MCP list/search family is the GraphQL burner)
- ✓ List by label/state:
GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N — labels= is true AND (MCP list_issues array is OR) - ✓ Card / PR metadata:
GET .../issues/{n} · GET .../pulls/{n} (assignees, labels, body all present) - ✓ Full comment thread:
GET .../issues/{n}/comments?per_page=100 - ✓ Timeline events:
GET .../issues/{n}/timeline (cross-refs, added_to_merge_queue, ready_for_review) - ✓ PR diff / files:
GET .../pulls/{n} with Accept application/vnd.github.diff · .../pulls/{n}/files - ✓ File at ref:
GET .../contents/{path}?ref=... (raw accept) - ✓ Ancestry / compare:
GET .../compare/{base}...{head} - ✓ Checks / workflows:
GET .../commits/{sha}/check-runs · .../actions/runs - ✓ Quota self-read:
GET /rate_limit (zero-cost)
Write side (all migratable)
- ✓ Comments:
POST/PATCH .../issues/{n}/comments - ✓ Labels: additive
POST .../issues/{n}/labels + targeted DELETE .../labels/{name} — safer than MCP issue_write whole-set replace (cannot strip a concurrent seat's labels) - ✓ Create issue with labels:
POST .../issues · edit body/state: PATCH · assign: POST .../assignees - ✓ Request reviewers:
POST .../pulls/{n}/requested_reviewers · open PR: POST .../pulls
NOT migratable (the only four — plan around them)
- Draft → ready flip: GraphQL-only mutation; the egress proxy serves only the pinned PR-review GraphQL set (measured refusal). Outage path: wait for MCP recovery or a human clicks.
- Auto-merge / queue enqueue: GraphQL mutation (MCP
enable_pr_auto_merge). - Semantic search:
/search/* blocked by the egress proxy by design (repo-scoped paths only); fallback = REST list + local grep (existing discipline). - Projects field_values: GraphQL-only — not needed by the fleet; the MCP server's unconditional fetch of it is the leak, not a requirement.
Third bucket — git zero-quota equivalents (ask git before REST)
Branch existence (ls-remote), merge-queue branches, landing-by-content (git grep ... origin/main), squash verification — already doctrine rows in platform-readings; the new file points at them rather than restating.
Boundary
The container curl channel = App installation token (independent 15,000/hr REST bucket); the egress proxy admits repo-scoped paths (/repos/{o}/{r}/...) plus /rate_limit only — org-level endpoints unverified.
Serial constraint & fold
Queues BEHIND the #11086 restructuring PRs (pm-dispatch hot-file chain). Strong fold candidate with #11364 (+#11366): same quota family, same ruling day, overlapping file surface — the claiming seat must answer fold-or-serial per the five-gate test at claim time; folding this card's table with #11364's policy flip into one PR is the likely PASS shape.
Tier: references-only ⇒ opus build + contract-review-tier acceptance.
Generated by Claude Code
Authorized: maintainer 2026-08-23, live PM chat, verbatim: 「可走 REST 的操作清单,同意立卡」. Filed by the skills seat (session
5213b871-5164-5bc3-8874-28b336bbcd40), self-triaged under the skills-lane exception. Sibling of the quota trio #11364/#11365/#11366 (one ruling stroke earlier the same day): #11364 flips the POLICY (REST as default read path); this card lands the CONTENT — the concrete operation-to-channel mapping the policy needs to be executable without rediscovery.What lands
A new small references file (suggested:
references/rest-channel.md, own ratchet ceiling at landed count, headroom 0 — same Q1=A precedent as state-machine.md / contract-review.md), carrying the mapping below;platform-readings.md's API-quota section gets a one-line pointer (paid inside #11364's rewrite of the same section — fold candidate, see Serial). Every ✓ row was executed in a real session on 2026-08-23; rows must carry that provenance date per platform-readings conventions.Read side (all migratable — the MCP list/search family is the GraphQL burner)
GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N—labels=is true AND (MCP list_issues array is OR)GET .../issues/{n}·GET .../pulls/{n}(assignees, labels, body all present)GET .../issues/{n}/comments?per_page=100GET .../issues/{n}/timeline(cross-refs,added_to_merge_queue, ready_for_review)GET .../pulls/{n}with Acceptapplication/vnd.github.diff·.../pulls/{n}/filesGET .../contents/{path}?ref=...(raw accept)GET .../compare/{base}...{head}GET .../commits/{sha}/check-runs·.../actions/runsGET /rate_limit(zero-cost)Write side (all migratable)
POST/PATCH .../issues/{n}/commentsPOST .../issues/{n}/labels+ targetedDELETE .../labels/{name}— safer than MCP issue_write whole-set replace (cannot strip a concurrent seat's labels)POST .../issues· edit body/state:PATCH· assign:POST .../assigneesPOST .../pulls/{n}/requested_reviewers· open PR:POST .../pullsNOT migratable (the only four — plan around them)
enable_pr_auto_merge)./search/*blocked by the egress proxy by design (repo-scoped paths only); fallback = REST list + local grep (existing discipline).Third bucket — git zero-quota equivalents (ask git before REST)
Branch existence (
ls-remote), merge-queue branches, landing-by-content (git grep ... origin/main), squash verification — already doctrine rows in platform-readings; the new file points at them rather than restating.Boundary
The container curl channel = App installation token (independent 15,000/hr REST bucket); the egress proxy admits repo-scoped paths (
/repos/{o}/{r}/...) plus/rate_limitonly — org-level endpoints unverified.Serial constraint & fold
Queues BEHIND the #11086 restructuring PRs (pm-dispatch hot-file chain). Strong fold candidate with #11364 (+#11366): same quota family, same ruling day, overlapping file surface — the claiming seat must answer fold-or-serial per the five-gate test at claim time; folding this card's table with #11364's policy flip into one PR is the likely PASS shape.
Tier: references-only ⇒ opus build + contract-review-tier acceptance.
Generated by Claude Code