Skip to content

docs(plugin-editor): compile the README's snippets against the shipped surface - #8249

Merged
baozhoutao merged 1 commit into
mainfrom
claude/issue-5174-doc-snippets-batch32-plugin-editor
Sep 7, 2026
Merged

docs(plugin-editor): compile the README's snippets against the shipped surface#8249
baozhoutao merged 1 commit into
mainfrom
claude/issue-5174-doc-snippets-batch32-plugin-editor

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Part of #5174 (batch 32: packages/plugin-editor/README.md)

Burns down the page's UNGATED_DOCS entry in scripts/check-doc-snippet-types.mjs: the page now sits in the gate's covered/compiled tier and its ledger row is deleted (6 rows → 5).

Base: origin/main at 885fa71de (carries PR #8245, batch 31). Head: 5e6a3704c. One commit, no amend, no force-push.

Census reading 1 — ledger-literal, on the base

Method: the gate's own exported analyze / scanFences / compileSnippets, with this page removed from UNGATED_DOCS so its fences are collected, against the built --build-filter closure (35/35 turbo tasks successful). No hand-written regex anywhere in the measurement.

The page carries seven fences: four typescript (22, 38, 52, 66), one unlabeled (93), two bash (14, 101). Only the four typescript ones are collected.

Fence Reading on the base
22 semantic phase reached, 0 diagnostics
38 semantic phase reached, 0 diagnostics
52 semantic phase reached, 0 diagnostics
66 PARSE FAILURE, never judged — 6 × TS1109 "Expression expected", at snippet 3:9, 4:12, 5:9, 6:10, 7:12, 8:13 — one per optional member
93, 14, 101 not collected (unlabeled / bash); reported, not relabeled

Blind spot: 1 of 4 collected fences never reached the semantic phase.

The ledger row said 6 parse diagnostic(s) — blocks fenced ts that are bare object literals or elided bodies. Three corrections, all measured:

  1. "blocks", plural — there is exactly one parse-failing block, fence 66. All six diagnostics are its six optional members.
  2. "elided bodies" — the page has none. Nothing on it is written as // ... other methods.
  3. "fenced ts" — all four fences are labelled typescript, not ts.

And the shape the row names as the cause is on the wrong fence: fence 22 is a bare object literal and it parses perfectly. Fence 66 is a type shape written as an object literal (value?: string, and friends), which is why it is the one that will not parse as an expression.

Negative control — the blind spot measured, not argued

Batch 31's control, repeated here on the base page and compiled in memory through the same compileSnippets: a real type error injected into the bare literal at fence 22, height: '400px'height: 400 (a number where the member is string).

A. ledger-literal reading        parse=1 bound=0 semantic=0
                                 TS1109@3:9 TS1109@4:12 TS1109@5:9 TS1109@6:10 TS1109@7:12 TS1109@8:13
B. with the type error injected  parse=1 bound=0 semantic=0
                                 TS1109@3:9 TS1109@4:12 TS1109@5:9 TS1109@6:10 TS1109@7:12 TS1109@8:13
byte-identical readings: true

The base reading is byte-for-byte the same with and without a genuine type error in the page. The binding had no type at all, so there was nothing to check it against — the purest form of the blind spot: a parse-only ledger row is silent about the fences it does not name, and green on the ones it does not annotate.

Census reading 2 — after the minimum in-memory parse repair

Fence 66 given a name in memory only (type SchemaAPI = { … };), nothing else touched:

Fence Reading
22 0 diagnostics
38 0 diagnostics
52 0 diagnostics
66 0 diagnostics

Total: 0 parse, 0 bound, 0 semantic. This zero is not a verification. Two of the four are green because there is nothing to disagree with:

  • fence 22 is an unannotated literal — proven above by the negative control;
  • fence 66 is a private re-declaration of a published type, and a copy cannot disagree with itself;
  • fence 38 compiles because the deprecated two-argument overload still exists;
  • fence 52 alone is genuinely judged: it binds CodeEditorSchema.

A parse-only row hides the semantic phase; this reading is the first real look, and it says the page's teaching was never checked against the shipped surface at all.

Per-fence decision

Fence Decision
22 typed binding — const schema: CodeEditorSchema = { … }, with import type { CodeEditorSchema } from '@object-ui/plugin-editor'; alongside the side-effect import. Same spelling the "TypeScript Support" section already teaches.
38 ComponentRegistry.register(type, component, { namespace: 'plugin-editor' }) — the call this plugin's own registration makes (packages/plugin-editor/src/index.tsx:57-61). The two-argument form compiles, and Registry.register (packages/core/src/registry/Registry.ts:433-450) warns that it is the deprecated pattern.
52 unchanged — already the target idiom.
66 fence replaced by a Markdown members table (route (a)).
93, 14, 101 unchanged, reported not relabeled. check:doc-fences is green on base and head and does not flag fence 93: its content is build output (dist/index.js 0.19 kB …), not TypeScript, so the gate has nothing to say about it, and the page is not in that gate's declared list.

No fragment marker was added, no type was loosened, no @ts-expect-error was needed, and nothing under packages/plugin-editor/src/** or packages/types/src/** was touched.

Fence 66 — route (a), on the four axes

The fence was a type shape, not a value: a member list with ? and type annotations, wrapped in braces. Route (a) is a Markdown members table; (b) is a compilable typescript fence built around a typed value; (c) is a declared fragment marker.

  • Real business need (measured, not assumed). The section is a reference read — which members exist, which are optional, what an omitted one produces. A value expression cannot express optionality or a default at all, and the page already ships that example twice (fences 22 and 52). Nobody copies a "Schema API" block into an app; they look up a member in it.
  • Long-term soundness. CodeEditorSchema is the contract. It is declared once in @object-ui/types (packages/types/src/form.ts:1550) and re-exported by the plugin (packages/plugin-editor/src/types.ts:55), specifically so the type an author reads and the zod mirror that validates their document cannot drift. A fence that re-declares it is a second, private copy of the contract — objectui#7646's shape. Contract-first says point at the declaration, never restate it.
  • Preventing AI authoring error. Route (c) is the worst of the three here: it would park a private copy of a published type permanently outside every gate, and a model reading the page would copy the literal. Route (b) would compile but silently drop ? and the defaults, teaching a narrower surface than the type has. The table leaves nothing copyable that can become a second de-facto contract, and it is where the language nuance below can be stated exactly.
  • Startup-stage scope discipline. The table is the smallest surface of the three: it removes a fence rather than adding one, needs no new import, no stand-in binding and no marker vocabulary, and it lets the page carry the defaults it never documented without adding a single new declared thing.

Route (b) was not taken; route (c) was never a candidate for this fence.

The one contract nuance, stated rather than settled. The page's old comment read language?: string // 'javascript' | 'typescript' | 'python' | 'json' | 'html' | 'css'. The type declares language?: string outright and says why (packages/types/src/form.ts:1560-1572): the renderer forwards the value verbatim to Monaco, which accepts any registered language id. The registration's inputs manifest (src/index.tsx:66) enumerates exactly those six as an enum. So the two are not in conflict — one is the accepted set, the other is the authoring picker. The table says which is which and narrows or widens neither.

Per-key table (the objectui#7927 bound)

CodeEditorSchema extends BaseSchema, and BaseSchema carries an index signature (packages/types/src/base.ts:467), so an annotation checks member types and never keys. Classification is therefore by hand-reading the declaration and the renderer's read sites, not by trusting the compiler.

Key written by an example Declared Read at Verdict
type form.ts:1551 registry lookup; src/index.tsx registers 'code-editor' keep
value form.ts:1559 src/index.tsx:44 (value ?? schema.value) → MonacoImpl.tsx:40 keep
language form.ts:1572 src/index.tsx:45MonacoImpl.tsx:38 keep
theme form.ts:1579 src/index.tsx:46MonacoImpl.tsx:39 keep
height form.ts:1585 src/index.tsx:47MonacoImpl.tsx:37 keep
readOnly form.ts:1591 src/index.tsx:49MonacoImpl.tsx:43 keep (table only)
className base.ts:171 src/index.tsx:50MonacoImpl.tsx:35 keep (table only)

Phantoms (undeclared and never read): none. Undeclared-but-read: none. onChange is declared as a runtime slot (form.ts:1600) and no example writes it, correctly — no JSON document can carry a function.

Defaults check, both directions

Renderer, the authority: packages/plugin-editor/src/MonacoImpl.tsx:26-32.

Member Page, before Type @default Registration defaultProps Renderer Verdict
value not stated none '// Write your code here\nconsole.log("Hello, World!");' '' see the proposal below
language not stated 'javascript' 'javascript' 'javascript' agree
theme not stated 'vs-dark' 'vs-dark' 'vs-dark' agree
height not stated '400px' '400px' '400px' agree
readOnly not stated false false false agree
className not stated none absent '' agree

The page stated no defaults at all before this change — its old comments were descriptions (// Code content, // Editor theme) and one example (// e.g., '400px'). So there was no wrong documented default to repair; the table now carries all six, taken from the renderer.

Proposal for the maintainer, citing objectui#8246 — not edited here, and not a new card. The registration's defaultProps.value (packages/plugin-editor/src/index.tsx:72) records a code sample, while the renderer's own default for an omitted value is ''. That is exactly the shape objectui#8246 already carries for plugin-charts' color: re-verified on this head, the only non-test read of defaultProps anywhere in packages/core/src or packages/react/src is WidgetRegistry.ts:189, which writes manifest defaults into the widget it builds rather than feeding the render path. So the value an author would infer from the manifest is not the value they get. Same contract question, same two ways out (correct the manifest, or make defaultProps reachable); packages/plugin-editor/src/** is out of this PR's surface.

Ledger decision

The page reads zero after the repairs, measured with the same analyzer:

Fence (head) Reading
22 0 diagnostics
39 0 diagnostics
55 0 diagnostics

0 parse, 0 bound, 0 semantic; blind spot 0 of 3. Ruling 6's first branch therefore applies: the UNGATED_DOCS row is deleted, not rewritten. Nothing on this page is parked on a filed defect, so no marker was added. The ledger reads 5 rows on the head. The pin (scripts/__tests__/check-doc-snippet-types.test.ts) enumerates only the root README.md row, so no pin edit was owed — the same finding batches 28-31 recorded.

Strictness region

The region from the Fence scanning banner to EOF, sha256:

  • base 885fa71de: 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b
  • head 5e6a3704c: 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b

Identical. The banner moved from line 790 to 788; the two deleted lines are the ledger row, which sits above it.

Positive control

Against the committed tree at 5e6a3704c, under a trap … EXIT INT TERM with absolute paths.

  • Mutation: readOnly: 'yes', added to the newly typed binding at fence 22.
  • On-disk proof, by anchor counts rather than an editor's exit code: the mutation anchor went 0 → 1; the untouched height: '400px' anchor stayed at 2.
  • HEAD blob: 768ad3b194107fe963119bf6213ae511d5ad9dcf; mutated blob: 2cbcde23c5065e8491c8336e8d4279b5496b57cc (different, checked).
  • Gate: pnpm check:doc-snippets exit 1, printing [semantic] packages/plugin-editor/README.md:30:3 TS2322: Type 'string' is not assignable to type 'boolean | undefined'. and Semantic phase: 617 of 617 block(s) judged, 1 failed.
  • Restore proven by state: git diff HEAD -- PATH empty and git hash-object PATH = 768ad3b194107fe963119bf6213ae511d5ad9dcf = the HEAD blob; anchors back to 0 and 2. Not read from an exit code.

An earlier attempt of this control aborted loudly before writing anything, because its anchor matched two fences (22 and 52 now share the same first two lines). Reported rather than quietly retried: the run was a genuine no-op, git diff HEAD was empty afterwards, and the anchor was made unique before the real run.

Gates — all pinned to head 5e6a3704c, clean tree, exit codes captured by redirect-then-capture

Gate Exit
pnpm check:doc-snippets 0 — 229 documents scanned, 224 covered (121 hold a ts/tsx block), 5 ungated; 617 of 617 blocks judged, 0 failed
pnpm exec vitest run scripts/__tests__/check-doc-snippet-types.test.ts scripts/__tests__/check-doc-fence-languages.test.ts 0 — 2 files, 123 tests
pnpm exec vitest run scripts/__tests__/ 0 — 115 files, 3415 tests
pnpm exec vitest run packages/plugin-editor/ 0 — 1 file, 7 tests
pnpm check:doc-types 0
pnpm check:readme-exports 0 (also green on the base)
pnpm check:doc-fences 0
pnpm type-check:scripts 0
pnpm lint:root 0 — 32 warnings, 0 errors, none in the changed files
pnpm check:control-bytes 0, plus a grep -naP self-scan of both changed paths — no hits
pnpm check:entry-guard 0
node scripts/check-changeset-presence.mjs 0 — no changeset owed (2 files changed, 0 published source, 0 manifest contract), so none added and no label
node scripts/check-governed-queue-guard.mjs --test on both paths NOT GOVERNED

Re-derived against the actual diff (a README plus one scripts/ file), three further gates were run: pnpm check:esm-specifiers 0, pnpm check:doc-example-readers 0, and pnpm check:node-esm-load. The last one exit 1 on its first run for the reason the gate itself prints — turbo shares one cache across worktrees and the build replayed a sibling worktree's entry (objectui-issue-5174-b30) — and exit 0 on --force-build, provenance leg 37 of 37 gradable entries built by this tree, load leg 34 of 39. Nothing in this diff is a built artifact or a manifest, so that gate has no dependency on it either way.

Live E2E (informational) is red on every branch today for an upstream reason (#7990 / objectstack#16186) and is not this PR's.


Generated by Claude Code

…d surface

The page's UNGATED_DOCS row read "6 parse diagnostic(s) — blocks fenced `ts`
that are bare object literals or elided bodies". Measured with the gate's own
analyzer, all six were ONE block: the "Schema API" fence, a TYPE shape written
as an object literal, one TS1109 per optional member. There was no elided body
anywhere on the page, and the four fences are labelled `typescript`, not `ts`.

- The "Schema API" fence becomes a Markdown members table. A fence that
  re-declares a published type is a private copy of the contract; the table
  points at `CodeEditorSchema` instead of restating it, and carries the one
  nuance the old comment blurred — the contract is `language?: string`, and the
  registration's `inputs` manifest narrows the authoring picker to six ids.
- The bare `const schema` literal is bound to `CodeEditorSchema`, with the type
  import the "TypeScript Support" section already teaches. Unannotated, it had
  nothing to check against: a real type error injected into it left the gate's
  reading byte-identical.
- The manual-registration loop passes `{ namespace: 'plugin-editor' }`, the
  third argument this plugin's own registration passes; the two-argument form
  compiles but is the one `Registry.register` warns is deprecated.
- Defaults in the table are the renderer's own destructuring defaults.

The page now reads zero, so its ledger row is deleted (6 rows -> 5). The
strictness region below the `Fence scanning` banner is byte-identical.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
@github-actions github-actions Bot added documentation Improvements or additions to documentation plugin plugin: editor labels Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3191.0 KB 3191.4 KB
Main entry chunk (gzip) 143.9 KB 350 KB
Entry file index-DGTJvZoi.js
Status PASS

The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it.


📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 15.67KB 5.75KB
app-shell (runtime-config.js) 20.68KB 7.36KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.06KB 3.86KB
auth (ActiveOrganizationStorage.js) 25.05KB 9.16KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.18KB 10.59KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 18.15KB 5.39KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.65KB 2.22KB
auth (SocialSignInButtons.js) 9.61KB 3.89KB
auth (UserMenu.js) 3.41KB 1.23KB
auth (auth-gate-events.js) 1.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.21KB 10.80KB
auth (createAuthenticatedFetch.js) 8.46KB 3.43KB
auth (index.js) 3.19KB 1.44KB
auth (invitation-status.js) 1.22KB 0.70KB
auth (org-roles.js) 6.66KB 2.78KB
auth (phone-identifier.js) 1.11KB 0.66KB
auth (types.js) 0.59KB 0.35KB
auth (useAuth.js) 5.30KB 1.02KB
auth (useWorkspaceAdminStatus.js) 5.13KB 2.35KB
collaboration (CommentThread.js) 26.08KB 7.56KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.49KB 2.64KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
collaboration (useCollaborationTranslation.js) 6.05KB 2.52KB
collaboration (useCommentSearch.js) 1.98KB 0.88KB
collaboration (useConflictResolution.js) 7.75KB 1.86KB
collaboration (useMentionNotifications.js) 1.81KB 0.68KB
collaboration (usePresence.js) 6.33KB 1.84KB
collaboration (useRealtimeSubscription.js) 7.91KB 2.01KB
components (index.js) 498.00KB 113.91KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 189.11KB 52.55KB
fields (index.js) 243.04KB 61.36KB
i18n (LocalizationContext.js) 1.76KB 0.96KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 1.22KB 0.64KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 6.57KB 2.76KB
i18n (index.js) 3.65KB 1.47KB
i18n (pickLocalized.js) 7.62KB 3.26KB
i18n (provider.js) 26.89KB 9.04KB
i18n (useDisplayLocale.js) 2.85KB 1.45KB
i18n (useObjectLabel.js) 34.34KB 9.17KB
i18n (useSafeTranslation.js) 5.60KB 2.33KB
layout (index.js) 38.84KB 10.94KB
mobile (MobileProvider.js) 0.92KB 0.49KB
mobile (ResponsiveContainer.js) 0.94KB 0.38KB
mobile (breakpoints.js) 1.51KB 0.70KB
mobile (createOfflineDataSource.js) 5.61KB 1.75KB
mobile (index.js) 1.99KB 0.87KB
mobile (offlineQueue.js) 3.91KB 1.35KB
mobile (pwa.js) 0.97KB 0.49KB
mobile (serviceWorker.js) 1.48KB 0.62KB
mobile (serviceWorkerSource.js) 3.41KB 1.48KB
mobile (useBreakpoint.js) 1.54KB 0.65KB
mobile (useGesture.js) 6.96KB 1.98KB
mobile (useOfflineSync.js) 1.99KB 0.72KB
mobile (usePullToRefresh.js) 2.53KB 0.85KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 4.39KB 1.66KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 11.71KB 4.29KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.24KB 2.16KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 5.12KB 1.74KB
permissions (index.js) 0.93KB 0.41KB
permissions (store.js) 0.91KB 0.42KB
permissions (useFieldPermissions.js) 1.28KB 0.53KB
permissions (usePermissions.js) 4.83KB 2.27KB
plugin-ai (index.js) 15.16KB 3.68KB
plugin-calendar (index.js) 47.67KB 13.25KB
plugin-charts (index.js) 70.62KB 19.71KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 213.21KB 43.63KB
plugin-detail (index.js) 247.68KB 63.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 131.01KB 32.32KB
plugin-gantt (index.js) 167.16KB 40.99KB
plugin-grid (index.js) 208.58KB 56.63KB
plugin-kanban (index.js) 52.83KB 14.63KB
plugin-list (index.js) 113.35KB 27.73KB
plugin-map (index.js) 20.49KB 6.83KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 43.42KB 11.92KB
plugin-timeline (index.js) 30.10KB 8.74KB
plugin-tree (index.js) 9.33KB 3.25KB
plugin-view (index.js) 84.46KB 20.80KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 11.66KB 3.50KB
providers (index.js) 0.45KB 0.23KB
providers (types.js) 0.01KB 0.04KB
react-runtime (index.js) 5.62KB 2.34KB
react (LazyPluginLoader.js) 4.47KB 1.63KB
react (SchemaRenderer.js) 81.07KB 26.86KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.63KB 2.18KB
react (schema-input.js) 2.32KB 1.24KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (codegen.js) 6.58KB 2.74KB
sdui-parser (dashboard-widget-options.js) 3.08KB 1.30KB
sdui-parser (index.js) 5.55KB 2.45KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 20.57KB 5.88KB
sdui-parser (provenance.js) 3.66KB 1.82KB
sdui-parser (types.js) 0.28KB 0.23KB
sdui-parser (validate.js) 13.64KB 4.59KB
types (ai.js) 0.20KB 0.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 2.87KB 1.00KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (complex.js) 2.74KB 1.41KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (data-display.js) 3.75KB 1.85KB
types (data-protocol.js) 0.20KB 0.19KB
types (data.js) 0.20KB 0.18KB
types (designer.js) 1.85KB 0.85KB
types (disclosure.js) 0.20KB 0.18KB
types (error-code.js) 1.54KB 0.88KB
types (expression.js) 0.20KB 0.18KB
types (feedback.js) 0.20KB 0.18KB
types (field-types.js) 0.20KB 0.18KB
types (form.js) 0.20KB 0.18KB
types (http-inflight.js) 8.87KB 3.73KB
types (http-retry.js) 4.32KB 2.02KB
types (icon-key-migration.js) 4.26KB 1.63KB
types (index.js) 4.74KB 2.25KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 4.73KB 2.28KB
types (navigation.js) 0.20KB 0.18KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 0.20KB 0.18KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-components.js) 0.20KB 0.19KB
types (record-semantics.js) 1.28KB 0.67KB
types (registry.js) 0.20KB 0.18KB
types (reports.js) 0.20KB 0.18KB
types (select-option.js) 0.20KB 0.19KB
types (spec-report.js) 5.05KB 1.93KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.11KB 3.32KB
types (views.js) 0.20KB 0.18KB
types (widget.js) 0.20KB 0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

Copy link
Copy Markdown
Contributor

Standing down on Live E2E (informational) for this PR — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, 2026-09-07T04:11Z.

That check is informational (not in the main ruleset's required contexts) and is red on the base branch for an upstream reason anchored on objectui#7990 / objectstack#16186; this PR touches one package README and one ledger row in a gate script, neither of which the Live E2E suite exercises. No re-run is requested. Every required check is judged on its own conclusion; this PR flips to ready only when all of them read completed / success on 5e6a3704c.


Generated by Claude Code

@baozhoutao
baozhoutao marked this pull request as ready for review September 7, 2026 04:21
@baozhoutao
baozhoutao added this pull request to the merge queue Sep 7, 2026

Copy link
Copy Markdown
Contributor

Armed — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

  • CI on 5e6a3704c converged all green at 04:21:40Z (29 checks). Live E2E (informational) is green on this head as well — the first green reading of that row this seat has seen; the standing-down note above stands as written for the base-red period it covered.
  • Ready for review at 04:21:52Z; post-flip Governed Surface Queue Guard completed/success at 04:22:07Z.
  • Auto-merge SQUASH enabled; added_to_merge_queue on the REST timeline at 04:22:17Z (read 04:22:23Z).

Landing stroke follows the merge: content probe on re-fetched origin/main ({ namespace: 'plugin-editor' } in packages/plugin-editor/README.md and the ledger row's absence, with a control), LANDED here and on objectui#5174 (which stays open, Part of), then the batch-33 claim (packages/plugin-tree/README.md).


Generated by Claude Code

Merged via the queue into main with commit 738a209 Sep 7, 2026
32 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-5174-doc-snippets-batch32-plugin-editor branch September 7, 2026 04:37

Copy link
Copy Markdown
Contributor

LANDED — domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

Merged at 2026-09-07T04:37:50Z as 738a20949 (squash). Content probe on re-fetched origin/main at 04:38Z: ComponentRegistry.register(type, component, { namespace: 'plugin-editor' }) at packages/plugin-editor/README.md:47; the 'packages/plugin-editor/README.md' row is absent from UNGATED_DOCS (0 hits) while the control row 'packages/plugin-tree/README.md' is present (1 hit); the ledger reads 5 rows; the strictness region still hashes to 2749d53ae3a8df033a53b8d7a354fa7e22ee2d1a17f6ad0c3d61122e904e084b.

Batch 33 (packages/plugin-tree/README.md) is claimed on objectui#5174 next; the card stays open (Part of).


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation plugin: editor plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants