Repository navigation
docs(adr-0026): caption the section 3.1 example as the proposed shape, and spell the design doc's UI plugin type ui - #19862
Merged
os-zhuang merged 1 commit intoSep 24, 2026
Conversation
…; spell the design doc's UI plugin type `ui` ADR-0026 section 3.1: one dated note under the example says it is the proposed shape and names what the current ManifestSchema refuses in it: runtime "ui", engines.objectui / engines.react, the top-level ui block, permissions.data / permissions.navigation, and the omitted required name. The example and the proposal text are unchanged. docs/design/plugin-distribution.md: the two `type: ui-plugin` spellings (section 4.2, worked example C) now read `type: ui`, with one note recording the original spelling, mirroring the ADR's 2026-09-07 note. Claude-Session: https://claude.ai/code/session_013RDBh5DqXd2xnLwvHLgLFr Co-authored-by: Claude <noreply@anthropic.com>
os-zhuang
approved these changes
Sep 24, 2026
os-zhuang
marked this pull request as ready for review
September 24, 2026 15:06
os-zhuang
deleted the
claude/issue-16140-adr-0026-proposed-shape-caption
branch
September 24, 2026 15:32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #16140
Clause-②: no
This PR executes ruling
5793373857(summon 28, class-1 item 2, letter B, director seat, 2026-09-23T10:41Z) and nothing else. It touches two files:docs/adr/0026-client-ui-plugin-distribution.mdanddocs/design/plugin-distribution.md.What changed
ManifestSchema(packages/spec/src/kernel/manifest.zod.ts#ManifestSchema) refuses in it:runtime: "ui"(thePluginRuntimeSchemaenum isnode/sandbox/worker),engines.objectuiandengines.react, the top-leveluiblock, andpermissions.dataandpermissions.navigation. It also saysnameis omitted.5563454219. It is not restated or rewritten here.docs/design/plugin-distribution.md. Its twotype: ui-pluginspellings, in section 4.2 and in worked example C of section 10, now readtype: ui. One note under section 4.2 records the original spelling. It copies the shape PR docs(adr-0026): spell the UI plugin package typeui, note the originalui-plugin#19769 (c118524061) used on the ADR. The rest of the prose is unchanged. This file's diff is +8 / -2.Measurement: every claim in the caption, taken before it was written
The instrument is a throwaway probe and is not committed. It takes the section 3.1 jsonc block from the committed file (
git show REV:docs/adr/0026-client-ui-plugin-distribution.md) and strips the//comments that sit outside strings. It then parses the result withManifestSchema. It ran on one tree through two resolution paths, and they agree line for line:packages/spec/src, throughtsx;packages/spec/dist/kernel/index.mjs, which is the./kernelimport entry in the package'sexports.The spec source is
origin/main8cbc3c0084. This branch changes no file underpackages/.The whole example as written fails against
ManifestSchema(success=false) with five issues:Firing control, on the same instrument. Remove
runtime,engines,uiandpermissionsfrom the example and add aname, and it parses withsuccess=true. So those five issues are the whole refusal. No other part of the example (id,version,type,integrity) is refused, and no refusal hides behind another.Reading against the ruling's list. The two sets are the same. Every item the ruling names is refused, and no refusal falls outside the ruling's list. One detail differs in kind.
runtimeis a declared key, and it is refused withinvalid_valuebecause the value"ui"is outside the enum, not withunrecognized_keys. So the caption writesruntime: "ui"and names the enum, as the ruling does. It does not callruntimean undeclared key.runtime's enum at source.PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker'])inpackages/spec/src/kernel/manifest.zod.ts. The probe readsPluginRuntimeSchema.optionsas["node","sandbox","worker"].The example parses the same way at
8cbc3c0084and at this branch's heade59f601c56. None of the example's bytes changed.The design doc's note, measured with the same instrument:
Why this closes the card rather than saying
Part ofThe card carries two rulings:
5563454219(batch 61, option A) was executed by PR docs(adr-0026): spell the UI plugin package typeui, note the originalui-plugin#19769, which the maintainer merged asc118524061.5793373857(letter B) answers the one residue that round released with (5787494422/5792259933). All three of its items are in this diff: the caption, the reading of the rule, and the design doc.After this lands, the ruling leaves nothing else open on the card. #15638, the runtime tolerance arm in
plugin-hono-server, is a separate card. It remains open and is not addressed here. The card ispm:dispatched, notneeds-user-decision, so a merge cannot close a card that is still waiting for a decision. The merge is also a human act (tier H), so the card closes only when the maintainer lands the caption.Changeset
This PR has no changeset. Measured:
package.jsonmanifests carry 217files[]entries, and none of them reachesdocs/. The repo-rootpackage.jsonis private.com.acme.signature-fieldandfancy gauge, have 0 hits across the builtpackages/spec/distandpackages/spec/json-schema. The positive controlPLUGIN_UI_REQUIRED_KEY_MISSINGhits 83 files there.So the repo's route is the
skip-changesetlabel. AGENTS.md (Post-Task Checklist, step 3) reserves that label for a diff that publishes nothing from any released package, and ruling5563454219named the same route for the first round. This PR neither adds nor edits a.changeset/*.md, so the route-0 exclusion does not apply. The dispatch forbids this seat any label write, so the label is not applied here.Check Changesetstays red until a seat applies it. It is not a required context.Gates (at
e59f601c56)node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsderived 19 commands for this change set: 2 paths against merge base8cbc3c008. All 19 ran, and each exited 0.pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst stopped atPREREQUISITE NOT MET(exit 3, nothing measured). The gate printed its fix,pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint. That is 4 packages, and it ran under the shared verify lock. After it, the gate exited 0.The
--ranreconciliation reads: "19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED (a DERIVED zero — all 19 recorded an exit code and none of them is 3)".Selected verdict lines:
check-adr-links: 690 relative link destination(s) under docs/adr/ resolve.check-adr-symbol-anchors: 2123 anchors across 140 records resolve. The caption's new anchorpackages/spec/src/kernel/manifest.zod.ts#ManifestSchemais one of them. It is extracted from the ADR at head (2 anchors in the file, against 1 at base) and resolves as adeclaration.check:doc-authoring: no growth.check:nul-bytes: OK, no raw ASCII control bytes.This PR touches no package source, so it owes no package test or typecheck. The spec, formula, sdui-parser and lint builds served two things only: the doc-formula gate and the dist leg of the probe.
dispatch-gatesnames some families as outside its 19 commands: the artifact rosters, the wide-population families, the path-scheduledTest Corejob and the type-check lanes. CI runs those, and it runs repo-wide scans such aspnpm lint.Acceptance notes
runtime: 'ui'/runtime: ui, in its section 4.2 heading and in worked example C. That is ADR-0026's proposed tier, and the currentPluginRuntimeSchemarefuses it. It is left alone for two reasons. The ruling limited this file's treatment to its twotype: ui-pluginspellings. And the section 4.2 heading points at ADR-0026 section 3.1, which now carries the caption. Noted, not filed.packages/core/src/plugin-type-closed-set.test.tsandpackages/rest/src/plugin-type-closed-set.pin.test.ts.Governed surface
docs/adr/**is tier H on the governed-surface register. This PR stays draft. It lands only by the maintainer's hand, or by an authorized approval fromGOVERNED_APPROVERS. This seat does not flip it to ready, queue it or arm auto-merge.维护者速读(草稿)
改了什么:ADR-0026 §3.1 的 UI 插件清单示例下面加了一条带日期的说明,写明这是「提议中的形状」。说明点名了当前
ManifestSchema不接受的部分:runtime: "ui"(当前只有node/sandbox/worker)、engines.objectui/react、顶层ui块、permissions.data/navigation,还说明示例缺少必填的name。示例本身和提议正文一字未改。另外,docs/design/plugin-distribution.md里的两处type: ui-plugin改成了type: ui,并加了一条注记说明原来的拼写,做法和上一轮改 ADR 时相同。为什么改:执行裁决
5793373857(字母 B)。上一轮把type改对以后,整个示例仍会被 schema 拒收 5 处。裁决的选择是加一行说明,而不是改写示例。风险与代价(含回滚):纯文档改动,不发布任何包,对运行时零影响。说明里的每一条都先用 schema 实测过,结果与裁决列出的完全一致。回滚方法就是 revert 本 PR。
席位意见:
你要做的:审阅后合并。ADR 属于治理面,需要您本人合并。另外,
Check Changeset要等有人挂上skip-changeset标签才会变绿;它不是必需检查,不会挡住合并。Generated by Claude Code