LearnNewsExamplesServices
Frontmatter
id15156
titlePush hosted GitHub community batches securely
stateOpen
labels
documentationenhancementaiarchitecturesecurity
assignees[]
createdAt7:31 AM
updatedAt8:29 AM
githubUrlhttps://github.com/neomjs/neo/issues/15156
authorneo-gpt
commentsCount0
parentIssue15145
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[ ] 15151 Admit idempotent community batches into durable history, [ ] 15150 Add tenant-scoped community source registration
blocking[ ] 15162 Prove the community-activity authority chain end to end, [ ] 15160 Calibrate community policy from measured evidence
milestonev13.2

Push hosted GitHub community batches securely

Open Backlog/active-chunk-6 documentationenhancementaiarchitecturesecurity
neo-gpt
neo-gpt commented on 7:31 AM

Context

Option M selects authenticated hosted connector push into the same neutral admission contract as local L. Option W assigns initial hosted source provisioning to deployment operators until a real tenant-membership/source-admin substrate exists.

This is one fully closeable PR leaf under Epic #15145. The live parent-child and blocked-by graph is authoritative; this body owns only this leaf's contract.

The Problem

Caller authentication, MCP tool tier, provider installation identity, and tenant source-admin authority are different axes. A hosted connector that supplies tenant ids or stores its provider secrets in Memory Core can cross tenants or turn transport metadata into authorization.

The Architectural Reality

The server ingress is a thin facade over the neutral admission service, using request-scoped server identity and registered source/epoch. The connector owns GitHub grants/secrets and sends bounded canonical batches. Existing remote KB push work is a pattern for auth, volume bounds, structured errors, redaction, and lost-response retry—not a reusable data contract.

The Agent OS structure map was run on 2026-07-14. New service/script/test placement must use the named sibling-file-lift fast paths; no service logic moves into MCP server entrypoint directories.

The Fix

Add the hosted GitHub connector/client, authenticated bounded batch ingress, operator provision/activate/revoke path, credential-reference/redaction boundary, parity with local batch bytes/receipts, health/readiness fields, and an operator runbook. Tenant self-service and a neutral queue receiver remain unavailable.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
Authenticated ingress Options M/W Server derives tenant and resolves registered source/epoch Wrong tenant/source/epoch fails before admission OpenAPI + runbook Auth and RLS integration tests
Connector grant boundary OQ9 Connector owns provider grants/secrets; registration stores only neutral attestations Secret resolution failure is connector-local and redacted Operator docs Secret-redaction tests
Hosted bootstrap Option W Deployment operator provisions/activates/revokes with audit evidence MCP admin alone grants nothing; no self-service Runbook Authorization matrix tests
Transport parity L/M contract Canonical batch and receipt match local direct path Lost response retries same batchId/digest Client docs Byte-parity and retry tests
Health/readiness OQ10 Per-source state, epoch, last receipt, lag/gaps, and stable error code; no prose/secrets Unavailable connector degrades explicitly Health guide Payload/log tests

Decision Record impact

Depends on ADR 0036, neutral registration, and admission; aligned with ADR 0019; O remains measurement-gated.

Decision Record

Required: ADR 0036. This leaf is not code-ready until the ADR-0036 child of #15145 is accepted at the human merge gate.

Discussion Criteria Mapping

Upstream graduated criterion This leaf's executable contract
OQ9 M/W Implements authenticated hosted connector push and deployment-operator bootstrap.
OQ3 Keeps source, grant, delivery, batch, checkpoint, and occurrence identities separate.
OQ8 Uses server tenant/source predicates and exposes no cross-tenant counts or prose.
OQ10/O Measures backpressure; does not create a queue receiver without evidence.

Source authority: Discussion #15139 body at the version-bound graduation anchor plus Grace's STEP_BACK and GRADUATION_APPROVED.

Acceptance Criteria

  • AC1 — The server derives tenant identity and resolves sourceInstanceId/current epoch; callers cannot stamp either.
  • AC2 — Wrong-tenant, unknown-source, inactive/revoked, and stale-epoch batches fail before mutation.
  • AC3 — Connector-owned provider grants/secrets never enter Memory Core rows, logs, or responses.
  • AC4 — Hosted operator provision/activate/revoke is audited; MCP admin metadata is not authorization.
  • AC5 — Tenant-role and self-service registration remain unavailable with stable errors.
  • AC6 — Local and hosted paths admit byte-equivalent canonical batches and return the same receipts.
  • AC7 — Lost-response retry converges via batch id/digest without duplicate history.
  • AC8 — Ingress enforces explicit work-volume bounds and structured backpressure evidence.
  • AC9 — Health/readiness and the operator runbook cover bootstrap, grant binding, activation, revocation, retry, and credential redaction.
  • AC10 — No neutral HTTP/queue receiver O is added.

Out of Scope

Tenant self-service V/X, provider secrets in Memory Core, queue receiver O, GitLab connector, webhook completeness authority, or threshold selection.

Avoided Traps

Do not confuse authentication with tenant admin, trust tool tier headers, accept caller tenant ids, fork local/hosted contracts, or log provider credentials.

Related

Origin Session ID: 837ad74b-c2d2-413d-9aab-b7165a93a82a

Handoff Retrieval Hints

  • hosted community connector authenticated batch operator bootstrap
  • Discussion 15139 M W O transport registration authority

Creation Freshness

Creation duplicate sweep: immediately before filing at 2026-07-14T05:31:13.977Z, checked the latest 20 open issues and last 30 all-state A2A messages. The independent broader audit at 2026-07-14T05:13:00Z covered open and closed issues, pull requests, A2A, ADRs, and code; no equivalent owner or foreign claim existed.