Skip to content

[repo:cloud] The plugin artifact contract carries granted_permissions — ruled producer half of #11333 Phase 1 #14034

Description

@os-sam

Seam card (target repo unreachable from the filing seat — falls to objectstack per the cross-repo rule, repo:cloud + named reader). Named reader: the cloud lane seat — this card is its dispatch input; the objectstack consumer half (#13457) is pm:blocked on this card.

⚠️ The Blocked-by: #14865 line has been REMOVED — that blocker is discharged. #14865 closed 2026-09-03 via merged PR #14992, and cloud's pin e581457baaaf carries it: packages/spec/src/system/environment-artifact.zod.ts:173 declares grantedPermissions: z.record(z.string(), PluginPermissionsSchema).optional(). The line is removed rather than struck through because it is a machine-grepped reverse index and a stale entry pollutes it. Unlock reading recorded in the 2026-09-07 comment below.

The ruling this executes

Maintainer, 2026-09-01, PM chat channel, director decision batch A, verbatim 「同意。」 on the presented recommendation for #13457:

裁「grant 由 artifact 契约承载」⇒ #11333 Phase 1 重切为 cloud 先行 + objectstack 消费卡 Blocked-by 排后;materialize 缝归 ADR-0025 设计。

Architecture direction, as presented and adopted: the granted-permissions set rides the plugin artifact contract. cloud (the owner of the install-consent flow) compiles the consented structured set {services, hooks, network, fs} into the artifact/manifest carrier it produces; objectstack's loader later consumes it from the environment-local carrier at materialize time. This follows ADR-0003 (revised by cloud ADR-0007): sys_package_installation is control-plane desired state, never read on any runtime path — runtime truth lives with the environment's own carrier.

First deliverable is a measurement, not code

Does the artifact cloud compiles today already carry the granted set?

Measured by the repo:cloud seat on 2026-09-07: NO. grantedPermissions appears in packages/service-cloud/src/ only in two forward-looking comments (cloud-artifact-helpers.ts:679, routes/cloud.ts:752, both saying it "is next"). Positive control: granted_permissions is written in routes/package-install.ts. ⇒ The second branch applies — add the field to the envelope and write it at consent-compile time. ⛔ Re-verify this on the dispatch head rather than inheriting it; the file has moved twice since.

Contract-first: the field's shape is the four-class structured set the consent flow already parses (plugin-consent.ts's own header states the intent verbatim: "the environment runtime later feeds it to the framework's PluginPermissionEnforcer (F4) to gate the plugin at load time").

Boundaries

Refs: #11333 (parent ruling, option A 2026-08-30 「同意」) · #13457 (consumer half, blocked on this) · #13458 (Phase 2, blocked behind #13457) · #14865 (the spec half, landed and pinned) · ADR-0003 / cloud ADR-0007 · ADR-0025.

Filed by the director seat, session session_015adLit3ZYASJiXwxKG78Wi.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions