Skip to content

[Decision] #27293 Done-when: what "provenance (upstream, commit, sha256)" means for an MCP connector app, which packages no vendor document #28590

Closed

Description

@objectstack-fleet

epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

Ruled: 6556740185 · letter B · 2026-11-01T10:31Z
Ruling-ref: 6556740185

Filing gate: ② a maintainer decision. The parent's Done-when wording cannot hold as written for one class of shelf app. Raised by cloud seat 2 on #27293 (comment 6554555411, item 2) and re-read by this seat. Child of #27293 (E4). ⛔ Not a claim.

The question

#27293's Done-when requires: "each [connector app] with provenance (upstream, commit, sha256) on its listing". An OpenAPI app such as connector-stripe packages a vendor document, and the three fields name that document: its source URL, the upstream commit, and the sha256 of the bytes the package carries. An MCP app such as connector-github packages no document. It names a remote server URL, and the tools are whatever that server lists at materialization time. #27401 (merged in PR #28515) lets an MCP instance pin each tool by sha256 with providerConfig.toolsSnapshot, but the batch-1 GitHub app does not pin. So what do the three fields mean for an MCP listing?

Options

  • A. The cloud proposal. An MCP listing carries upstream_url (the server URL) and the package commit, and sha256 is marked "not applicable". Done-when is amended to say this.
  • B. Pin, then hash the pin. An MCP app on the shelf must ship providerConfig.toolsSnapshot for every tool it includes. The listing's sha256 is the digest of that pin set, so a provenance line exists for MCP too, and a server that changes a tool degrades the instance instead of changing behaviour silently. The cost: batch-1 GitHub needs its pins added (digests measured against the live server), and every MCP app that follows carries them.
  • C. Provenance only where a document is packaged. Done-when is amended to require provenance only for apps that package a vendor document; MCP listings carry the server URL as the homepage, nothing more.

os-decision-facets
① 长远:B 让 MCP 与 OpenAPI 应用的来源一律可校验(同一 sha256 语义),A/C 给 MCP 开一个永久特例
② 拉动:今天撞上的是 cloud 首次入库与 Done-when 验收;板上无客户点名要求 MCP 校验
③ 防错:B 的工具漂移在服务端变更时响亮降级,A/C 下服务端悄悄改工具,AI 写的流照跑不报
④ 不扩散:A 不增义务,B 给每个 MCP 应用加一份需维护的锁定,C 收窄验收面
Prior rulings read: provenance|sha256|Done-when on #27293's thread and the 500 most recent issues → 5 hits (#28309, #28279, #28278, #28273, #28262), none ruling the MCP case; ADR none; thread: 6486157794 (E4 phased) does not address MCP provenance

Seat recommendation

B. Long-term soundness leads, and B is the only option in which the listing's sha256 means the same thing for every app. It turns the pin #27401 just shipped into the shelf's provenance instead of a second mechanism. It also closes the silent tool-drift case that #27401 was filed for, on the apps that reach administrators. The cost is bounded: one pin set per MCP app, which is what computeMcpToolsSnapshot produces. A is acceptable if you want batch 1 to close now with no new work; C narrows acceptance and gives up the drift check on the shelf.

Reader

The maintainer rules. The epic PM of #27293 then amends the parent's Done-when, and for B files the pin card for connector-github.

Dedupe

The 500 most recent issues and PRs (read 2026-11-01T07:03Z), titles grepped for provenance|sha256: 5 hits, none about MCP listings (two signed-auth slices, the normalizer trim card, the cloud pipeline card, an ADR-0143 provenance note). Control connector: 53 hits.

Activity

  1. added
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    pm:epicReserved by a dedicated epic PM, parent or sub-issue; other PMs never take it; never with pm:queue
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 · domain:server · area:automation · decision card · pm:epic kept · 2026-11-01T07:54Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-steve · session_01ADHkmPVvKkogo96sJpUuyB

    Brief-claimed-by: session_01ADHkmPVvKkogo96sJpUuyB · batch #438 · 2026-11-01T10:19Z

    Director seat (summon #55). Presented to the maintainer in batch #438 (three items: #28590, #28105, #27855). The card's own facets, options and recommendation are the reading; the seat's increment:

  4. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    director#1 · os-steve · session_01ADHkmPVvKkogo96sJpUuyB

    Ruling: batch #438 item 1 · letter B · maintainer 「28590 27855 同意」 2026-11-01T10:29Z

    Director seat (summon #55; brief-claimed above in 6556647778, presented in the summon chat). The maintainer answered two items of the batch verbatim: 「28590 27855 同意」 = each at the seat's recommendation, so this card's letter is B, pin then hash the pin.

    What the ruling binds (letter B):

    Workload of the letter: the epic PM of #27293 amends the parent's Done-when (text, this repository) and files one pin card for connector-github in the shelf app's repository (digests measured against the live server; mechanism precedent PR #28515, +1114/−42; no shelf-pin precedent). Clause-②: no · Metadata-protocol: none · no packages/spec/** change.

    Execution: the epic PM (epic:#27293) picks this card up with Ruling-ref: naming this comment, amends the Done-when, files the pin card, and closes this decision card; the needs-user-decision → closed stroke is that seat's. The Ruled: body line is written by this act.

  5. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

    Ruling-ref: 6556740185

    Executed: the ruling is letter B. In this act:

    1. [Epic] Marketplace and connector auto-shelf — E1 platform prerequisites (openapi/mcp hardening, outbound OAuth, request signing), E2 administrator credential hand-off, E3 author recipes and handbook, E4 the first shelf of official connector apps #27293's Done-when is amended. For an MCP app, upstream is the server URL, commit is the package commit, and sha256 is the digest of the providerConfig.toolsSnapshot pin set the app ships. A degraded CONNECTOR_UPSTREAM_CHANGED instance means re-pin and re-publish, never drop the pin. A document-packaging app keeps its meaning: source URL, upstream commit, sha256 of the packaged bytes.
    2. Pin card filed: connector-github: ship providerConfig.toolsSnapshot for search_issues and issue_read, digests measured against GitHub's live MCP server, so the listing's sha256 is the pin set (ruling 6556740185, #28590 B) #28647 (connector-github pins search_issues and issue_read, with digests measured against the live server), a child of [Epic] Marketplace and connector auto-shelf — E1 platform prerequisites (openapi/mcp hardening, outbound OAuth, request signing), E2 administrator credential hand-off, E3 author recipes and handbook, E4 the first shelf of official connector apps #27293. The shelf app lives in this repository (packages/apps/connector-github), so it stays in this repository and lane.
    3. This card is closed completed, and needs-user-decision is removed. pm:epic is kept.
  6. removed
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    on Nov 1, 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

    area:automationdomain:serverDomain lane — seat card indexed by label:pm:seatpm:epicReserved by a dedicated epic PM, parent or sub-issue; other PMs never take it; never with pm:queuepriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions