Skip to content

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

Open

Description

@objectstack-fleet

epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

Filing gate: ④ execution of a maintainer ruling. Ruling 6556740185 on #28590 (letter B, maintainer 「28590 27855 同意」 2026-11-01T10:29Z) requires every MCP connector app on the shelf to ship providerConfig.toolsSnapshot for every tool it includes. The listing's sha256 is the digest of that pin set. Child of #27293 (E4). ⛔ Not a claim.

Ruling-ref: 6556740185

Blocked-by: #30116

Work

packages/apps/connector-github/src/connectors/github.connector.ts:39 (read at origin/main) includes ['search_issues', 'issue_read'] and pins nothing. Do the following:

  • Add providerConfig.toolsSnapshot with one sha256 per included tool. Take the digests as computeMcpToolsSnapshot (@objectstack/connector-mcp, PR feat(connector-mcp,spec): toolsSnapshot pins each MCP tool; a mismatch degrades through CONNECTOR_UPSTREAM_CHANGED #28515) computes them over the live tools/list answer of https://api.githubcopilot.com/mcp/, with the headers the app already sends (X-MCP-Readonly: true). Record the date and the measured digests in the app's README, beside the existing provenance section.
  • Add a test in packages/apps/connector-github/test/ that fails when an included tool has no pin or a pin is not 64 lowercase hex. It must stay offline (no live call in CI).
  • Give the listing a provenance line: upstream = the server URL, commit = the package commit, sha256 = the digest of the pin set. The digest is stableStringify of the record, then sha256. Name the exact recipe in the README so cloud's ingestion can recompute it.
  • Re-pinning when GitHub changes a tool is the shelf's routine. The ruling says a degraded instance means re-pin and re-publish, never drop the pin.

Measurement constraint: tools/list on GitHub's server needs a token whose scopes list both tools. A session without one cannot measure the digests. A measurement with no token, or with an under-scoped one, is no measurement: the answer is a 401, or a list missing a tool. If no token is available, the dev reports blocked naming the secret it needs; it must not commit placeholder digests.

Business reason

#27293's Done-when gives each shelf listing a verifiable upstream, commit and sha256. For an MCP app, only the pin set makes sha256 mean something, and it also turns silent tool drift into a named, degraded instance on the app that administrators install.

Reader

The epic PM of #27293 dispatches it (domain:server, packages/apps/*). Cloud seat 2 reads the provenance recipe for its ingestion (#28278).

Dedupe

The 200 most recent issues and PRs (read 2026-11-01T11:05Z), titles grepped for toolsSnapshot|\bpin\b: 3 hits (PR #28515, the mechanism; #28582 and PR #28597, the skills recipe); none pins a shelf app. Control connector: 21 hits.

Activity

  1. added
    enhancementNew feature or request
    pm:epicReserved by a dedicated epic PM, parent or sub-issue; other PMs never take it; never with pm:queue
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 1, 2026
  2. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 发布并装进一个环境 | none | P④

    Triage: p2 · area:automation · pm:epic kept · 2026-11-01T11:55Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Nov 1, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

    Dispatch held: the environment cannot do the measurement. ⛔ Not a claim.

    • Measured at 2026-11-01T12:03Z from this seat's container: a POST to https://api.githubcopilot.com/mcp/ (an MCP initialize, no token) answered curl: (56) CONNECT tunnel failed, response 403. The environment's network policy denies the host before any request reaches GitHub. With a token, the call would still be refused there.
    • This environment also has no dedicated measurement secret. The session's own GitHub credential is the fleet operator's and will not be used to measure a shelf app.
    • Two things unblock the card, both the maintainer's to set in the cloud environment: (1) add api.githubcopilot.com to the environment's allowed network domains; (2) store a read-only GitHub token whose scopes list both search_issues and issue_read, as the environment secret GITHUB_MCP_TOKEN (the app's own credentialRef). Once both are in place, the epic seat claims and dispatches this card. No placeholder digests will be committed.
  4. objectstack-fleet commented on Nov 4, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27293#1 · sunhaolin · session_017xRBcVBKAFk1ntXSjvPt7U

    Parked: pm:blocked on #30116 · 2026-11-04T14:58Z. ⛔ Not a claim.


    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

No one assigned

    Labels

    area:automationdomain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpm:blockedBlocked by another issue/PR — body carries Blocked-by: #Npm: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