Skip to content

S1: runtime-bound credential isolation - #10

Merged
lbelyaev merged 6 commits into
mainfrom
s1/identity-spine-integration
Jul 28, 2026
Merged

lbelyaev merged 6 commits into
mainfrom
s1/identity-spine-integration

Conversation

@lbelyaev

Copy link
Copy Markdown
Contributor

What changed

  • wire the S1 identity spine from patched OpenShell sandbox SVIDs through Steward's runtime-bound HOP-1 mint into mcp-gw
  • project and reconcile the workspace-scoped gateway provider, including idempotent attach and capability-removal detach
  • fail closed on runtime deletion, authority changes, forged or expired SVIDs, cross-user reuse, and out-of-profile JWT algorithms
  • add the named S1 E2E exit criterion and dedicated upstream-focused G-2 conformance evidence
  • carry the reviewed OpenShell and mcp-gw patches with immutable inputs, upstream attempts, and exit conditions

Why

S1 establishes the identity foundation required before budget exhaustion and later authority work can safely issue or consume workload credentials. The key boundary is that a token is bound to the live runtime, acting user, and declared tools, while provider credentials remain keyed to the verified issuer/subject and cannot cross between users.

Evidence

  • cargo xtask ci
  • cargo xtask e2e-s1 (e2e_s1_tool_call_as_acting_user)
  • cargo xtask conformance --pinned — G-2 green with exactly one executed upstream negative test
  • the G-2 fixture validates Steward's minted sub == email == principal contract, keeps runtime_uid separate, authorizes Bob through policy before proving the broker cannot return Alice's credential, and separately proves a missing tool grant denies before credential resolution

The informational latest-upstream conformance lane correctly remains red while apelogic-ai/mcp-gw#16 is open; the pinned environment carries that patch and records its removal condition.

Impact

This makes S1's credential-isolation claim executable and reproducible at the pinned foundation versions. It also makes removed tool authority converge by detaching the gateway provider rather than leaving stale capability attached.

lbelyaev added 5 commits July 27, 2026 15:11
Exit criteria:
  - acting-user tool call succeeds (e2e_s1_tool_call_as_acting_user)
  - out-of-grant, forged-SVID, and cross-user reuse attempts fail closed

Guarantees re-run: G-2 green against OpenShell v0.0.90 + carried identity patch, SPIRE 1.15.2, and mcp-gw c2af10d9 + #1634acece3
Upstream dependencies recorded: NVIDIA/OpenShell#2012, #2184, #1970; apelogic-ai/mcp-gw#16
Revoke mint authority when deletion begins, provision and reconcile the gateway provider in every OpenShell workspace, and exercise a legitimate second runtime for cross-user isolation.

Add executable pinned G-2 conformance evidence and run it through the aggregate gate.
Reconcile the OpenShell gateway attachment symmetrically so removed tools detach it and unchanged state remains mutation-free. Replace source-shape evidence with one executed upstream-focused G-2 negative test in both pinned and latest lanes, while retaining the separate S1 E2E exit criterion.
Require policy to authorize from normalized HOP-1 identity and runtime tool claims before credential resolution. Count the nested Bun execution exactly and require its validated success sentinel alongside the Rust wrapper result. Latest upstream remains a recorded finding until apelogic-ai/mcp-gw#16 lands; pinned evidence carries that patch.
Use Steward's minted subject contract, keeping acting-user email and runtime UID distinct. Give Bob matching tool authority so his request reaches the real credential broker and proves Alice's token is not returned; retain a separate unauthorized subject to assert policy denial precedes credential resolution.
@lbelyaev
lbelyaev marked this pull request as ready for review July 28, 2026 20:51
Keep the latest-upstream conformance step and logs visibly failed, but tolerate that specific step and record the finding as a workflow warning and job summary. Pinned CI and setup failures remain blocking.
@lbelyaev
lbelyaev merged commit 46a1e5c into main Jul 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant