You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ADR-0025 SDK contract — the three public seams external plugins build on (messaging channel provider, identity-object writes, PluginContext subset), a conformance testkit, the peer-dependency build check, and the objectstack-ai/plugins repository #27287
Part of #27108 (between M2 and M3). Blocked-by: #27123
Filing gate ③ (maintainer ruling). Ruled on #27108 (the ruling comment of 2026-10-28 by session_01J8VVAjRKqdoEYQ4hXxtBuf, item 3): the maintainer's 「是否建议剩下的非标准协议的都由第三方插件仓库维护。发布为平台插件。」 and 「同意」 on the seat's answer (external repository, conditional on a public SDK contract first). ⛔ Not a claim. ⛔ No domain:*: packages/spec (contract types), packages/core / services (seams), packages/cli (build check), plus a new repository; triage sets lanes.
@objectstack/plugin-sdk (or the equivalent export surface in @objectstack/core / @objectstack/spec): the three seams as typed, versioned contracts with a compatibility statement per minor; everything else on PluginContext is explicitly internal.
@objectstack/plugin-testkit: boots a minimal kernel with the messaging and data services, installs a plugin under test, asserts channel registration, identity writes under the operator gate, and that the plugin touches no internal API (a lint over its imports).
Build check in os plugin build: @objectstack/* externalized as peer deps, refusal otherwise; the native-addon refusal from M1 reused.
The objectstack-ai/plugins repository: template (AGENTS.md, CI against platform next, testkit wiring, changesets), one package plugin-dingtalk scoped to a per-user push channel provider and a sys_user ↔ dingtalk userId mapping object, with the sign-in and in-app silent login explicitly out (identity broker route documented).
Docs: the plugin author handbook section "what you may depend on".
Acceptance
plugin-dingtalk builds in the external repository with the testkit green, installs through M1/M2 on a dedicated-runtime environment, and delivers an approval notification to a mapped DingTalk user with a deep link back to the record.
A plugin importing an internal path fails the testkit lint with the public alternative named.
Frozen (2026-10-28T16:25Z). 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.
Activity
objectstack-fleet commentedon Oct 28, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 可对外的 API | none | P④
Triage: p1 ·
domain:cloud·area:devpath· parked for the cloud PM · 2026-10-28T15:06Z⛔ Not a claim.
objectstack-ai/pluginsrepository withplugin-dingtalkas its first package. It publishes a new public contract, so p1.triage-duties.md: 「涉 cloud 任一即算」, 「被其阻」): Its acceptance installsplugin-dingtalk"through M1/M2 on a dedicated-runtime environment", and M2 is ADR-0025 M2 — cloud fetch + per-plugin permission enforcement: artifact download route, os plugin install <id>@<version>, SecurePluginContext scoped to the granted set (services, hooks), side-by-side versions / yank, delete the enforcement pin #27124 (domain:cloud). So the card goes to the cloud PM whole, withdomain:cloudandstatus:parked, and it is not dispatched from this repository. It is not split by lane here: the cloud PM orders it against the rest of [Epic] ADR-0025 plugin package distribution — the next development phase: M0 record v2, M1 local T0 install loop (first-party, self-signed), M2 cloud fetch + per-plugin permission enforcement, M3 third-party sandbox tier #27108.Generated by Claude Code
objectstack-fleet commentedon Oct 28, 2026
Frozen (2026-10-28T16:25Z). 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.