Description
Part of #27108 (M2). Blocked-by: #27123. Filing gate: ③ maintainer-directed — ruling 6461953053 on objectstack#26553 and ADR-0025 v2 §3.4 / §3.5 / §3.7 / §3.8 (PR #27118, merged). Filed by the director seat (session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). ⛔ Not a claim. ⛔ No domain:*: spans cloud service-cloud routes and objectstack core / runtime; triage sets the lane(s), likely one cloud card and one server card.
维护者速读
两件事。① 云端取件:云端补 .osplugin blob 下载路由(带发布者签名 + 平台反签),os plugin install <id>@<version> 走 resolve → 兼容检查 → 授权同意 → 下载 → M1 的本地路径;并排多版本与 yank。② 权限真正拦截:按 §3.5 第 7 步给每个插件包一个按授权集收口的 SecurePluginContext,只拦 services 与 hooks(Q4);同一 PR 删掉 granted-permissions-not-enforced.pin.test.ts 和 PluginDisclosure.tsx:148 那句「runtime does not yet restrict」。M2 落地前不装任何第三方插件。
What lands
- Cloud download route (
cloud/packages/service-cloud/src/routes/marketplace.tsor the artifact route): serve the stored.ospluginblob forartifact_kind: 'plugin'withsignature+platform_signature; todayGET …/artifactreturns the manifest JSON. os plugin install <id>@<version>: resolve onsys_package_version, protocol-first compatibility (v2 §3.8), the consent step reusing the shipped disclosure +granted_permissions(409 re-consent on widening), download, then the M1 verify → materialize → record → load path. Side-by-side versions with an installation pointer swap;yankonsys_package_version.status.- Per-plugin
SecurePluginContext(packages/core/src/security/plugin-permission-enforcer.ts,SecurePluginContext): constructed at §3.5 step 7 for every plugin an artifact carries, scoped to the granted set registered byartifact-granted-permissions.ts;enforceServiceAccessandenforceHookTriggergate the plugin'sPluginContext; denials logged.fs/networkclasses untouched (M3). - Delete
packages/core/src/security/granted-permissions-not-enforced.pin.test.ts, the "NOT ENFORCED: nothing queries that registry" docblock in the enforcer, the "registers the consented set; it does not intercept access" sentence inartifact-granted-permissions.ts, the ADR-0025 §3.7 registration note, and thePluginDisclosure.tsx:148sentence — in the same PR as (3). - Acceptance: the Stripe sample installs from a cloud registry; a plugin whose granted set omits a service it calls is refused at that call and the denial is on the audit log; the tamper cases of M1 hold over the download path.
Not in M2
- T1 / T2 tiers, publish-side scans, secret-refs,
fs/networkenforcement, RLS-scoped grants — M3.
Size: L (cloud route + CLI install · enforcement, two PRs minimum). Clause-②: no. Metadata-protocol: none.
Related
#27108 (epic, Q2, Q4, Q5), ADR-0025 v2 §3.4 / §3.5 / §3.7 / §3.8, ADR-0019 §Out-of-scope (the load-bearing wall), #13457, #27110.
Activity
objectstack-fleet commentedon Oct 28, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Triage: cloud ·
domain:cloud+status:parked· p1 kept · 2026-10-28T07:59Z⛔ Not a claim.
cloud/packages/service-cloud/…, the.ospluginblob download with platform counter-signature), and its install path resolves against cloud'ssys_package_version. A required step lands in objectstack-ai/cloud.domain:cloud+status:parked), never to an objectstack lane #26762, landed in PR docs(pm-dispatch): route any card that involves cloud to the cloud PM, by involvement rather than by where the code lands #26972), the whole card goes to the cloud PM:domain:cloud+status:parkedhere, andpm:queueremoved. Not in flight, so no in-flight exception.os plugin install <id>@<version>,SecurePluginContext) as its rule says.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Frozen (2026-10-28T16:23Z). The maintainer chose 「M1 做完,其余冻结」 on the decision card about #27108 after the bridges ruling. That ruling is recorded on #27108, and the bridges epic is #27314. This card stays parked and is not dispatched. It unfreezes when a paying customer asks for third-party code distribution. ⛔ Not a claim.