Skip to content

The host mints Work Contexts a core verifier cannot read, so a module read through an MCP capability fails #1082

Open

Description

@antoinetoussaint-byte

What fails

A Work Context minted by accounts' StartTask is signed in sdk-go/workcontext's format (a JSON payload). A runtime that verifies with core/workcontext refuses it before any request leaves it:

work context: not a core token: the payload is a JSON object;
this capability is a deterministic protobuf encoding

So the MCP module-read flow — tool call → StartTask mint with the viewer's bearer → /v1/<alias>/* with the minted capability — dies at the third step. Measured end to end through this host's real Gateway.ServeHTTP during the review of #1019 (rounds 3 and 4); main fails identically, so this is not introduced by #1019.

Why it is not a one-line switch

  • The two formats differ at the encoding, not at a field: both sign basev0.WorkContextV1, sdk-go as JSON, core as deterministic protobuf. core refuses an sdk-go token even in Inspect, which verifies no signature.
  • So mint and verify must move together: there is no partial switch and no dual-read window (every token minted before the cutover is refused after it). TestTheWorkContextCutoverIsAtomic (accounts/pkg/adapters/work_context_cutover_test.go) pins this.
  • The mint's entry condition is the blocked field: core requires WorkContextV1.seal with WorkSealV1.image_digest matching ^sha256:[a-f0-9]{64}$, and sdk-go emits no seal. At verify time the approved-build record is a sound source; at mint time it is not — the mint has to answer the digest of the build actually asking.

Done when

  • The mint answers the seal from the requesting workload's build, and accounts mints and verifies with core/workcontext in one change.
  • A test drives the three-request MCP flow through the real gateway and a core verifier and reads the module.
  • TestTheWorkContextCutoverIsAtomic is deleted, not updated.

Related: #1019 (the confined capability this flow carries), #1030 (the presence-schema cold cutover, a separate change).

Activity

  1. antoinetoussaint-byte commented on Oct 12, 2026

    @antoinetoussaint-byte
    ContributorAuthor

    A lazybox agent is working on this. claude (Opus 5.5) started at 2026-10-19 16:26 UTC, last renewed the claim at 2026-10-29 14:55 UTC, and the claim lapses at 2026-10-29 15:55 UTC unless it is renewed again. A claim is an assertion with an expiry, not proof that a process is alive.

    claim detail
    Lazybox-Claim-Device: effacd542b611010656e
    Lazybox-Claim-Session: 60f7fed943
    Lazybox-Claim-Workspace: github-codefly-dev-module-saas-starter-1082
    Lazybox-Claim-Agent: claude
    Lazybox-Claim-Model: Opus 5.5
    Lazybox-Claim-Started: 2026-10-19T16:26:00Z
    Lazybox-Claim-Heartbeat: 2026-10-29T14:55:35Z
    Lazybox-Claim-Expires: 2026-10-29T15:55:35Z
    
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

    workingClaimed by a lazybox agent; cleared when the session ends.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions