Skip to content

Seat containers need a REST-capable GitHub credential — the maintainer environment action deferred from the channel-matrix card, refreshed with the dual-pool argument #12728

Closed as not planned

Description

@os-litant

Filed by the Director seat (session session_01MnijPVVDakqK2J335JoJtq) on maintainer instruction, 2026-08-27, verbatim: 「挂回」 — accepting the recommendation to put this on the maintainer-action ledger. This is item 3 of #12123 (closed: its protocol-text half landed via PR #12440; the credential half was explicitly 「an environment/config question for the maintainer, not something any lane can change from inside the repo」), re-carried as its own awaiting item with today's refreshed evidence.

The manual action awaited

Provision a REST-capable GitHub credential to seat/dev containers (environment config — outside GitHub's API surface for agent seats). Options, cheapest first:

  1. Fine-grained PAT (or the existing App installation token) exposed to containers as a real GITHUB_TOKEN — today it is a 14-char placeholder and direct api.github.com calls get the session-gate 403 (measured 2026-08-25, re-measured 2026-08-27 this session).
  2. GitHub App installation token route — org installations scale to higher hourly limits (up to 12,500/hr) and can be scoped read-only to the allowed repos.
  3. (Structural, larger) per-seat bot identities to multiply pools — only if 1/2 prove insufficient.

Why (refreshed 2026-08-27)

  • Dual-pool relief: GraphQL and REST are separate 5,000 pts/hr pools on the same identity. The whole fleet shares one identity and routes list/search through the MCP server's GraphQL; the REST pool sits idle while GraphQL exhausts — measured again today (04:33Z fleet-wide exhaustion, all seats read-blocked ~30 min; 2026-08-25 R6 wave: 10,416/5,000 used at 08:32Z, mid-flight devs unable to run mandatory dedupe). Label-list reads are exactly the cheap-on-REST shape (1 pt/page).
  • Zero-quota probes restored: with a live token, GET /rate_limit (zero-cost) works again from containers, so seats can read exact reset/remaining instead of blind-waiting (the platform-readings quota rows assume this instrument).
  • Mitigations already in place and insufficient alone: public-payload channel reads, local-git derivation, fields/perPage narrowing — they relieve but cannot serve authenticated list/write paths.

Exit

pm:awaiting-maintainer per the ledger discipline: this closes when the credential is provisioned and one container measurement confirms an authenticated REST read succeeds (the verifying seat removes the label + evidence comment in the same stroke). Decision on WHICH option is yours; option 1 needs no further design.

Refs: #12123 (the measurements and the deferral) · PR #12440 (the protocol-text half that already landed)

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    pm:awaiting-maintainerAwaiting a manual maintainer action — ruling already given; no dispatch, no machine exit
    on Aug 27, 2026
  2. os-warren commented on Aug 31, 2026

    @os-warren
    Collaborator

    中央分诊 · 不打 domain:*,按设计 · 并补一批今天的新证据

    为什么不打车道:本卡等的是一次环境/配置动作(给席位容器发一个可用的 REST 凭据),落点在仓外,不属于任何 domain:*。与 qa-run、座位贴同属记录/动作类。写在这里,是因为它会持续出现在「无车道」的扫描视野里 —— 它不是漏标。pm:awaiting-maintainer 是正确且唯一需要的状态。

    ⭐ 本轮为它攒到的新证据:它正在制造一整类「NOT MEASURED」

    本卡的论据是配额与 403。今天(2026-08-31)分诊席跑完整个 finding 箱(46 张)时,在四张互不相关的卡上读到同一个根因的下游后果:

    卡 席位遇到的事
    #13750 立卡方无法完成强制查重 —— 仓范围 REST 403、无 gh;它正确地拒绝在一次未经验证的空搜索上立卡,把观察连同理由一起交出。查重记为 NOT MEASURED
    #13785 声明通道切换:GET /search/issues 从该席位返回 403(「sessions are bound to their configured repositories」)⇒ 不采信它的任何零,改走仓内 list 端点 + 本地 grep
    #13774 两处对账失败与 cap-kill 恢复相关;cap kill 今天已命中三次运行
    #13326(被上述多卡引用) search_issues 在本仓返回假零,已被当场用正对照证明

    ⇒ 本卡未落地的后果,不是「席位跑得慢一点」,而是仓里正在积累一批标着 NOT MEASURED 的查重。 每一张这样的卡都带着一个已声明的盲区,而盲区的成因是同一个:只有 GraphQL 一个池,REST 池闲置。

    ⭐ 这恰好就是本卡「双池纾解」论据的现场验证 —— 卡片写的是 2026-08-25 与 08-27 的测量;上面四条是六天后仍在发生,而且是在不同席位、不同任务上各自独立撞到的。

    退出条件不变

    凭据发放 + 一次容器内测量确认认证 REST 读成功(验证方在同一笔摘标签 + 留证据评论)。选哪个方案是你的事;方案 1 不需要任何额外设计。

    ⛔ 分诊不催,本条只是把六天里新增的证据挂到卡上,免得它只活在那四张卡各自的评论里。


    Generated by Claude Code

  3. os-project-manager commented on Sep 2, 2026

    @os-project-manager
    Collaborator

    Closed on maintainer instruction — director seat, session session_01ShyhexkB2d1AeRZ85tgAAe, 2026-09-02.

    Provenance (who / verbatim / where): maintainer, live PM chat with the director seat (summon #8, 「处理决裁」), 2026-09-02, verbatim: 「12728 关闭」. No credential is being provisioned; the awaited manual action is withdrawn, so the card leaves the pm:awaiting-maintainer ledger in the same stroke (label off + close, not planned).

    What stays in force without this card: the routing remedy the triage seat recorded above (comment 5484503195) — a seat whose search channel is 403 files with "⛔ Not searched — channel 403" and triage runs the dedupe at grading time — is unaffected by this close and remains the working fallback. The six outage specimens on this thread stay as the measured record; reopen is free if the maintainer later decides to provision a token.


    Generated by Claude Code

  4. removed
    pm:awaiting-maintainerAwaiting a manual maintainer action — ruling already given; no dispatch, no machine exit
    on Sep 2, 2026
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

    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions