Skip to content

docs(plugin-kanban): compile every README snippet, leave the UNGATED_DOCS ledger - #8147

Merged
baozhoutao merged 3 commits into
mainfrom
claude/issue-5174-ungated-docs-batch26
Sep 6, 2026
Merged

docs(plugin-kanban): compile every README snippet, leave the UNGATED_DOCS ledger#8147
baozhoutao merged 3 commits into
mainfrom
claude/issue-5174-ungated-docs-batch26

Conversation

@baozhoutao

Copy link
Copy Markdown
Contributor

Part of #5174 — batch 26 of the UNGATED_DOCS burn-down.

packages/plugin-kanban/README.md leaves the ledger and every ts block on the
page now compiles against the built types. The gate file's only change is the
two lines of that one entry.

Notation, read this first

This repository has measured that GitHub's body sanitizer deletes tag-shaped
fragments even inside backticks and fenced blocks. So generic parameters are
spelled out in words below — "an Array of badge objects", "the KanbanColumn
array" — rather than in their real angle-bracket form. The README itself
carries the real spellings; this page does not.

Concurrency

main moved under this batch once, and it was absorbed by merging (never
rebasing, never force-pushing).

535eb224f to 21d7989fb — one PR, #8143, the objectui#6892 slice 6 the
dispatch named: 27 test files, the vi-mock gate and a changeset. It touches no
packages/** source, so the built types this corpus is judged against did not
move; even so the forced build, the census, every gate, every test and the
load-bearing probes were re-run on the merged head, and every reading came back
byte-identical. main was re-checked after the merge and had not moved again at
push time, so no second cycle was needed and no gap is declared.

All 14 open pull requests' file lists were read over the REST files endpoint and
each count reconciled against that PR's own changed_files: 8144/2, 8143/29,
8142/4, 8109/1, 8104/2, 8091/1, 8090/1, 8076/6, 7749/4, 7685/69, 7058/24,
7054/2, 7053/2, 5400/1086. #5400's 1086-file list was paged to exhaustion
because the endpoint pages at 100 and a truncated list renders as a confident
absence. No open PR touches packages/plugin-kanban/README.md or
scripts/check-doc-snippet-types.mjs.
The two open PRs that touch any package
README are both #7685, on packages/auth/README.md and
packages/plugin-list/README.md — the first is exactly the standing exclusion,
so it doubles as the positive control that this grep can find a hit at all.

Live E2E (informational) is red on every branch today for an upstream reason
(objectui#7990 / objectstack#16186), not because of this diff.

Ledger arithmetic

Both rows MEASURED by a real gate run, never computed. Base row at the merged
base 21d7989fb bytes (probe M0, both paths checked out to the main blobs and
proven equal by hash, restored under a trap); branch row at b0ea6a7f8.

reading base 21d7989fb branch b0ea6a7f8
UNGATED_DOCS entries 12 11
covered documents 215 216
…of them holding a ts/tsx block 113 114
covered blocks 730 735
blocks to compile 572 577
declared fragments 158 158 (zero new)
semantic failures 0 0
self-imports judged (check:readme-exports) 499 502
interface-pin keys compared both ways 58 58

That last row is here because it is the one a reader would expect to move and it
does not: this repair adds no documented-type declaration for the pin to
compare (5 documented types in 4 blocks on both sides). What it adds is three
self-import bindings.

Programmatic diff of the two UNGATED_DOCS objects — both parsed as OBJECTS,
never diffed as text: removed = ['packages/plugin-kanban/README.md'],
added = [], reason-changed = [], survivor key order preserved = true.
git diff --numstat on the gate file against the merge base is exactly 0 2.
On the branch: kanban entries 0, packages/NAME/README.md entries 10
(from 11), control 'packages/auth/README.md' 1.

The strictness region — the Fence scanning banner line to EOF, 1720 lines on
both sides — hashes to
5dfcd1b876c044ef33b6b5fed8a57ec719622ddbb20ce0ab539e5c985a233017 on the merge
base and on the branch. Re-measured here on both sides and not inherited, which
mattered this time: objectui#7864 (PR #8138) added a census mode to that region
hours before this batch, so the value batches 15 through 25 recorded
(f46b5662…) is no longer the right one.

The removed entry's reason string was ACCURATE. It claimed "6 parse
diagnostic(s) — blocks fenced ts that are bare object literals or elided
bodies". Measured by probe P2: exactly 6, all of them parse diagnostics, and
both offending blocks are exactly that shape — a bare object literal and an
elided [...].

Census and the rung that decided

Re-taken on this batch's own base through the gate's exported analyze() /
compileSnippets(), one document un-gated at a time, over every non-excluded
ledger candidate.

Rung 1's first term decides outright: packages/plugin-kanban/README.md is
the only remaining candidate with 5 blocks; every other one has 4 or fewer.

Batch 25 predicted exactly this, and the prediction held.

document blocks diagnostics distinct codes codes
packages/plugin-kanban/README.md 5 6 2 TS1109 x5, TS1011 x1
packages/plugin-ai/README.md 4 8 3 TS2304 x4, TS2322 x3, TS2552 x1
packages/providers/README.md 4 8 2 TS2304 x7, TS2741 x1
packages/plugin-charts/README.md 4 6 1 TS1109 x6
packages/plugin-editor/README.md 4 6 1 TS1109 x6
packages/plugin-map/README.md 4 2 2 TS1005 x1, TS2304 x1
packages/plugin-markdown/README.md 4 2 2 TS1005 x1, TS1109 x1
packages/fields/README.md 2 3 2 TS7031 x2, TS2307 x1
packages/plugin-tree/README.md 1 3 2 TS1005 x2, TS1109 x1

Assumption A1 is CONFIRMED — every block total, diagnostic total and
per-code figure matches batch 25's census exactly. Zero bound refusals on this
page.

Exclusions re-verified against GitHub on this base, not inherited: the root
README.md is not a packages/NAME/README.md; packages/auth/README.md is
held by open draft PR #7685; packages/plugin-chatbot/README.md is deferred by
the earlier ruling.

The parse-debt decisions, block by block

This page is the first in the series whose debt is entirely parse debt, so
each block got a decision rather than a repair. Five blocks; three already
compiled and were not touched.

Block at line 105, the Schema API — an interface-shaped props table. This is
the block the ruling anticipated: a bare object literal fenced ts, carrying
? optionality markers and inline comments, that TypeScript cannot parse (4 of
the 5 TS1109 plus the TS1011 come from here). Three shapes were available:

  • Declare it a fragment. Refused. A fragment's reason claims the block
    cannot be checked, and this one can — the page is documenting a type this
    package actually ships.
  • Rewrite it as the interface it pretends to be. Refused, and this is the
    interesting refusal. The only honest name for it is KanbanSchema, which is
    an export of this package — so check-readme-exports's interface pin would
    then compare it against the shipped declaration in both directions and
    report a stale-omission for each of the seventeen members the section does not
    document. Naming it something else instead (KanbanBoardDocument) would dodge
    the pin by teaching readers a type name that does not exist. Either way the
    rewrite buys a worse page.
  • Annotate a real binding against the shipped KanbanSchema. Taken.

So the section is now const board: KanbanSchema = { … } with a real
self-import, and columns is supplied by a declare const stand-in typed
KanbanColumn[] — bound through the page's own KanbanColumn interface,
which is the load-bearing detail. That interface used to be a local declaration
inside a block that never even parsed; it now has to be assignable to the
shipped type or the gate goes red. Probe P6 is what proves that.

The two interface declarations below it (KanbanColumn, KanbanCard) are
untouched and stay in the same fence. They still match the shipped types 7 keys
of 7 each, with 0 fabricated and 0 omitted, and badges keeps the colorClass
and colorStyle members PR #8134 landed there at 18:21Z.

Block at line 185, Example with Callbacks — an elided body. columns: [...]
is a spread with no operand: the sixth TS1109. The ruling's remedy for an elided
body is the smallest real value or a declare const stand-in typed from the
shipped surface; the stand-in is right here, because the point of the example is
that your columns go in that slot. Annotating the binding KanbanSchema does
a second thing worth naming: the four onCardMove parameters used to be
implicit any waiting to become TS7006 the moment the block parsed, and they
are now contextually typed by the shipped callback signature instead.

Fragment count: 158 to 158. No marker was written, so no new reason claims a
block cannot be checked.

What the annotation actually checks — and the claim probe P4 falsified

Probe P4 was predicted to go red and did not, and the correction it forced
is the most useful thing this batch measured.

KanbanSchema extends BaseSchema, which declares [key: string]: any
("This index signature allows type-specific extensions"). So TypeScript's
excess-property check cannot fire on this type family at all
— adding
swimlanes: [], a key the shipped type does not declare, to the annotated board
literal leaves the gate green.

The first commit's comment claimed "an invented or renamed key … fails here".
That was false, and it would have shipped a promise of a check nobody performs
inside the very block this batch was repairing — the exact failure this gate
family exists to prevent. The second commit narrows it to what is measured: the
type of every member the shipped type declares is checked (probes P3, P5, P5b,
P6), and an unknown key is not, with the reason named so a reader knows where
the boundary is.

This bound is not new and nothing is filed for it: check-readme-exports.mjs
already states it in its own docblock — "BaseSchema carries an index signature
and its Zod mirror is passthrough, so no amount of type checking rejects an
invented schema key. That needs a third instrument, not a wider version of this
one."

Probes — a base measurement and eight probes, each predicted in writing first

Predictions were written to the scratchpad before any probe ran and were not
amended: 5174-b26-PREDICTIONS.md (md5 bc4a0250f8e532120ab2cf6b10ff8421) at
implementation commit 4a43188d9 with a clean tree. Every mutation is proven on
disk by occurrence counts of both the injected and the deleted text plus
git hash-object against the HEAD blob; every restore is proven by an empty
git diff HEAD; every leg runs under a trap … EXIT INT TERM with absolute
paths, restoring with git checkout HEAD -- against an absolute path rather
than a bare checkout from the index. No dist preflight is owed, and that is a
measurement rather than an omission:
both mutated paths are read from disk by
the gate itself, so no rebuild sits between a mutation and its reading.

probe mutation predicted observed
M0 both paths at merge-base bytes exit 0; 215 covered / 12 ungated / 730 blocks / 572 to compile; readme-exports 499 exactly that
P1 ledger entry restored ALONE exit 0, coverage falls back to the base row exactly that
P2 README restored ALONE exit 1, exactly 6 diagnostics over exactly 2 codes exactly that — TS1109 x5, TS1011 x1, at lines 108/108/109/109/110/188, matching the census row
P3 delete the Schema-API stand-in exit 1, TS2304 "Cannot find name 'columns'" PREDICTION FALSIFIED IN ITS CODE. exit 1 as predicted, but TS18004 "No value exists in scope for the shorthand property 'columns'" — the binding is written shorthand, so TypeScript reports the shorthand form, not the bare-name form
P4 add swimlanes: [], a key the shipped type lacks exit 1, TS2353 "Object literal may only specify known properties" PREDICTION FALSIFIED IN ITS DIRECTION. exit 0, no diagnostic — BaseSchema's index signature disables excess-property checking. Re-run a second time with a clean anchor to be sure the first was not a no-op; same result. Drove the second commit
P5 retype the callbacks stand-in to a string array exit 1, assignability error naming KanbanColumn exactly that — TS2322 "Type 'string[]' is not assignable to type 'KanbanColumn[]'" at line 203
P5b retype the Schema-API stand-in to a string array exit 1, the same, proving BOTH bindings are live exactly that — the same TS2322 at line 120
P6 rename cards to items in the README's OWN interface KanbanColumn exit 1 on BOTH gates, reporting DIFFERENT things exactly that — see below
P7 fabricate a self-import name readme-exports 1 fabricated, naming this page exactly that — 502 real / 1 fabricated at packages/plugin-kanban/README.md:106

P6 is the load-bearing one for this batch, because it is what makes the
repair shape worth more than a fragment marker. Renaming one key in the README's
own interface turns both gates red, and they say different things:

  • check:doc-snippets exit 1 — TS2322, "Property 'cards' is missing in type
    'KanbanColumn' but required in type … complex.KanbanColumn", at README line
    120. The page's own interface is now checked against the shipped type
    through the annotated binding. Before this batch it was a local declaration
    in a block that did not parse: it compiled green whatever it said.
  • check:readme-exports exit 1 — the interface pin reports the rename as the
    pair its docblock says only the two directions together can see: items as a
    fabricated-key and cards as a stale-omission, both at line 128.

So the two gates now cover this declaration from two angles — names, and types.
That is strictly more than the ungated entry it replaces, which could have lost
either in silence.

Two predictions were falsified, both reported above rather than smoothed, and
P4's falsification is the reason the second commit exists. M0, P1, P2 and P6 were
re-run on the merged head and came back byte-identical.

Gates — all at b0ea6a7f8, clean tree, nothing pushed after

Exit codes captured by redirect-then-capture, before any pipe; each row quotes
the gate's own verdict line. The build was forced first
(pnpm exec turbo run build --filter=./packages/* --concurrency=2 --force,
39 successful / 0 cached) and again inside the provenance gate (43 successful /
0 cached); every dist-sensitive gate was then re-run on that force-built dist.
Note the invocation: bare turbo is not on PATH in this container, so
pnpm exec turbo is what ran.

  • pnpm check:doc-snippets exit 0 — "Scanned 227 document(s): 216 covered (114 of them hold a ts/tsx block), 11 ungated" / "Covered blocks: 735 — 577 to compile, 158 declared fragment(s)" / "Syntax phase: every block parsed, so every one of them reached the semantic phase" / "Root bound: no block imports a specifier that resolves only through this repository's ROOT manifest" / "Semantic phase: 577 of 577 block(s) judged, 0 failed" / "Every covered documentation snippet compiles against the built types."
  • pnpm check:readme-exports exit 0 — "502 of them self-imports judged (502 real, 0 wrong-path, 0 fabricated)" / "58 key(s) compared both ways (0 fabricated, 0 stale omission(s)"
  • pnpm check:doc-fences exit 0 — "every TypeScript block in 227 document(s) is fenced ts/tsx/typescript"
  • pnpm check:doc-types exit 0 — "Every documented component type is registered."
  • node scripts/check-doc-links.mjs exit 0 — "Links are valid across 17 scan roots."
  • pnpm check:doc-example-readers exit 0 — "OK 80 documented symbol(s), 3947 call site(s)"
  • pnpm check:control-bytes exit 0 — "OK (scanned 6509 tracked text file(s); skipped 85 binary)"
  • node scripts/check-node-esm-load.mjs --force-build exit 0 — "Provenance leg: 37 of 37 gradable entries were built by this tree." Green on its first run, so no gate had to be re-run over a replayed sibling cache.
  • pnpm type-check:scripts exit 0
  • node scripts/check-changeset-presence.mjs exit 0 — "2 file(s) changed, 0 of them published source of a package the release covers … no changeset is owed." No skip-changeset label applied: this repository declares with an empty-frontmatter changeset rather than that label, and the presence gate says none is owed, so nothing was labelled at all by this seat.
  • node scripts/check-governed-queue-guard.mjs --test on both paths exit 0 — "NOT GOVERNED — 2 path(s) checked against 5 governed surface(s); none matched"
  • Owning package: pnpm exec vitest run packages/plugin-kanban/ — "Test Files 24 passed (24) / Tests 126 passed (126)"; pnpm --filter @object-ui/plugin-kanban type-check exit 0, its output echoing tsc --noEmit && tsc -p tsconfig.test.json, so A4 is confirmed — the test tsconfig is genuinely included and the script really ran.
  • Beyond the gate, a manual control-byte scan of both changed paths with grep -naP over the C0/DEL ranges found nothing (exit 1, zero output bytes).

Lint, with the narrowing declared and its three evidence items. pnpm lint
here is turbo run lint per package, so the repository-wide sweep is CI's run;
the narrowed run over exactly this diff is
pnpm exec eslint --no-inline-config --format json on both paths — 2 entries,
0 errors. eslint's own answer for the README is "File ignored because no
matching configuration was supplied", so the real lint surface of this diff is
the one .mjs at 0 errors and 0 warnings. (1) The population eslint would
otherwise judge is 4385 files by its own count. (2) That run exits 1 with
94 errors and 12223 warnings, and the touched files carry 0 of them
measured, and reported rather than smoothed, because a reader must not mistake
the narrowing for a green repository. (3) eslint.config.js declares no
project, projectService or parserOptions.project (grep count 0), so
type-aware linting is off and this diff cannot move the verdict on any untouched
file. Both readings were taken on the final commit b0ea6a7f8.

Readers of the changed paths

Derived with git grep -l on both paths on this head, not guessed — 17 test
files, 614 tests, all green
in one run, and the set was identical before and
after the merge.

A2 is CONFIRMED and quantified. The two named readers of the README are
scripts/check-readme-exports.mjs and scripts/__tests__/check-readme-exports.test.ts,
and the pin's own JSON output gives the numbers the assumption asked for:
KanbanColumn at line 125 and KanbanCard at line 136, both verdict matches,
both 7 documented of 7 shipped, 0 fabricated, 0 omitted. A2's warning — that
rewriting a block as an interface may ADD an interface the pin then compares —
is exactly why the rewrite route was refused above; the pin still compares 5
documented types in 4 blocks and 58 keys, unchanged from the base. The remaining
15 readers read the gate file.

Out of scope

Nothing was filed, and that is a finding rather than an omission. The one
candidate is the BaseSchema index signature that falsified probe P4. It is
deliberate and documented at the declaration ("This index signature allows
type-specific extensions"), and check-readme-exports.mjs already records the
consequence in its own docblock as a known bound needing a third instrument. So
this is the same class as batch 25's identity alias — intentional, documented
and already recorded — and filing it would have added noise to triage. It is
reported in the section above instead. No dedup search was run, because a search
with nothing to dedup is not a reading.

This PR is a DRAFT and stays a draft: this seat does not flip ready, does not
enable auto-merge, and touches no labels or assignee.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr


Generated by Claude Code

…DOCS ledger

Batch 26 of the objectui#5174 burn-down. `packages/plugin-kanban/README.md`
leaves `UNGATED_DOCS` and all five of its ts blocks now compile against the
built types.

The page's entire debt was PARSE debt -- 6 diagnostics over 2 codes
(TS1109 x5, TS1011 x1) in exactly two blocks, and the removed ledger entry's
reason string described it accurately.

Schema API block: the leading pseudo-object was an interface-shaped props
table that TypeScript could not parse. It is now a real binding annotated with
the SHIPPED `KanbanSchema`, with `columns` bound through the page's own
`KanbanColumn` interface -- so that interface is load-bearing instead of a
local shape that compiles green whatever it says. The two documented
interfaces are untouched and still match the shipped types 7 keys of 7 each.

Example with Callbacks block: the elided `columns: [...]` becomes a
`declare const` stand-in typed from the shipped surface, and the binding is
annotated `KanbanSchema`, so the four `onCardMove` parameters are now
contextually typed by the shipped signature rather than implicit any.

No fragment marker was added: declared fragments stay at 158. No packages/**
source touched, no public type widened, no gate loosened -- the gate file's
only change is the two lines of that one ledger entry, and the strictness
region hashes identically on both sides.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FhBNJcLRZLe8M87VcUgpKr
…y checks

Probe P4 falsified the claim the previous commit's comment made. Adding a key
the shipped `KanbanSchema` does not declare (`swimlanes: []`) to the annotated
board literal does NOT turn the gate red: `KanbanSchema` extends `BaseSchema`,
which declares `[key: string]: any` ("This index signature allows type-specific
extensions", packages/types base.d.ts), so TypeScript's excess-property check
cannot fire on this type family at all.

What the annotation does check is measured and real -- the type of every member
the shipped type declares. Probe P5 retypes the stand-in to `string[]` and gets
TS2322 "Type 'string[]' is not assignable to type 'KanbanColumn[]'"; probe P3
deletes the stand-in and gets TS18004 on the shorthand property.

So the comment now states the narrower true thing and names the bound, instead
of promising a rejection the compiler will never deliver. A README that claims
a check nobody performs is the failure this gate exists to prevent, and it
would have shipped inside the very block this batch was repairing.

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: kanban labels Sep 6, 2026
@github-actions

github-actions Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 50 chunks) 3186.6 KB 3191.4 KB
Main entry chunk (gzip) 143.6 KB 350 KB
Entry file index-Cs9mOUgK.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.06KB 113.97KB
core (index.js) 6.96KB 2.79KB
create-plugin (index.js) 10.08KB 3.26KB
data-objectstack (index.js) 182.08KB 50.62KB
fields (index.js) 242.43KB 61.25KB
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.29KB 13.18KB
plugin-charts (index.js) 70.35KB 19.68KB
plugin-chatbot (index.js) 193.54KB 46.04KB
plugin-dashboard (index.js) 131.41KB 34.43KB
plugin-designer (index.js) 211.51KB 43.01KB
plugin-detail (index.js) 247.75KB 63.50KB
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.46KB 14.57KB
plugin-list (index.js) 113.34KB 27.72KB
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.48KB 20.81KB
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 Author

Standing down on Live E2E (informational) for this PR, read 2026-09-06T20:28Z.

Every other check on b0ea6a7f8 is judged on its own; this PR flips to ready once the required set converges, then goes to the merge queue by squash.


Generated by Claude Code

Copy link
Copy Markdown
Contributor Author

Armed — squash auto-merge enabled and the PR is in the merge queue, domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

  • Head b0ea6a7f8: 29 non-informational checks completed green at 20:39Z (the ci-wait reading); Live E2E (informational) red per the standing-down note above.
  • ready_for_review at 20:39:54Z; the post-flip Governed Surface Queue Guard run started after that timestamp and completed success at 20:40:17Z.
  • added_to_merge_queue at 20:40:30Z on the REST timeline (read 20:40:37Z). PR test(vi-mock): inherit the real @object-ui/plugin-grid surface in 25 vi.mock factories #8146 is one second ahead of it in the queue.

On MERGED: content probe on re-fetched origin/main (the packages/plugin-kanban/README.md row gone from UNGATED_DOCS, const board: KanbanSchema in the README; control: the packages/auth/README.md row still present), then the LANDED note here and on #5174. #5174 stays open (Part of); objectui#7856 takes the gate file next, then batch 27 (packages/plugin-ai/README.md by the dev's census).


Generated by Claude Code

Merged via the queue into main with commit 571b487 Sep 6, 2026
31 of 32 checks passed
@baozhoutao
baozhoutao deleted the claude/issue-5174-ungated-docs-batch26 branch September 6, 2026 20:55

Copy link
Copy Markdown
Contributor Author

LANDED — merged at 2026-09-06T20:55:56Z as 571b4870d (squash, via the merge queue, same group as PR #8146), domain:devx @ objectui execution seat, PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46.

Content probe on re-fetched origin/main (571b4870d, read 20:56:35Z):

  • The 'packages/plugin-kanban/README.md' row is gone from UNGATED_DOCS (0 hits); package-README rows now 10.
  • const board: KanbanSchema is present in packages/plugin-kanban/README.md (1 hit).
  • Control: the 'packages/auth/README.md' row is still present (1 hit).

#5174 stays open (Part of); the LANDED note goes there in the same stroke. objectui#7856 takes the gate file next; batch 27 follows it.


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: kanban plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants