Skip to content

A confined capability's ceiling should be the modules its consumer declares it consumes, not the installation's audience list #1083

Open

Description

@antoinetoussaint-byte

Today (from #1019)

A resource-confined bearer (an MCP client's token for one installed consumer) may mint at StartTask, and the mint is held to a ceiling read from the consumer's installation: allowed_audiences and allowed_scopes. Because both are optional and the install form leaves them empty, #1019 makes an empty ceiling mean nothing for a confined mint (refused by name, naming the field), while an unconfined mint keeps empty-means-unrestricted.

That is fail-closed, but the authority is an admin's hand-maintained list, which can drift from what the consumer actually needs: too narrow breaks the consumer, too wide lets its token mint for modules it never uses.

What the ceiling should be

The modules the consumer solution declares it consumes. This host cannot answer that today:

  • the delivered presence document carries module pins (ModulePin{Module, Package, Version});
  • a capability's audience is the consumed module's route alias;
  • nothing stored joins the two, and the applied document is kept only as text.

Mapping a pin to an alias here would be a guess at exactly the question the ceiling answers.

Done when

  • The delivered declaration carries the consumption in the terms the mint checks (the consumed module's audience/alias and the scopes it needs) — a change on the delivery side, which this host then stores structurally.
  • A confined mint's ceiling is derived from that record; the installation's lists, if kept, can only narrow it.
  • Tests: a confined mint for an audience the consumer does not declare is refused even when the installation's lists are empty or wider.

Follows #1019.

Activity

  1. antoinetoussaint-byte commented on Oct 12, 2026

    @antoinetoussaint-byte
    ContributorAuthor

    Reopened: #1084 is the host half (the confined ceiling reads the consumer's delivered authority) and codefly-dev/core#784 + codefly-dev/cli#972 the delivery half, but no solution renders a scoped declaration until a released core/CLI understands solution-manifest/v1 and the wiki adopts it. Closes when the wiki's authority document carries its declared scopes.

  2. antoinetoussaint-byte commented on Oct 13, 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-11-01 09:24 UTC, and the claim lapses at 2026-11-01 10:24 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: 47918dc856
    Lazybox-Claim-Workspace: github-codefly-dev-module-saas-starter-1083
    Lazybox-Claim-Agent: claude
    Lazybox-Claim-Model: Opus 5.5
    Lazybox-Claim-Started: 2026-10-19T16:26:00Z
    Lazybox-Claim-Heartbeat: 2026-11-01T09:24:13Z
    Lazybox-Claim-Expires: 2026-11-01T10:24:13Z
    
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