Skip to content

deps(v18): resolve @objectstack/* 18.0.0-next.2 and follow its contract (objectui#12626) - #12648

Merged
objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-12626-objectstack-next-2
Oct 16, 2026
Merged

objectstack-fleet[bot] merged 12 commits into
mainfrom
claude/issue-12626-objectstack-next-2

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #12626
Clause-②: yes
Part of #12592 (items 1 and 2)

Moves objectui's lockfile from @objectstack/* 18.0.0-next.1 to 18.0.0-next.2 (npm next, built from objectstack e5136ff10f; the @objectstack/cli@18.0.0-next.2 tag peels to it) and follows the contract changes that reach objectui. objectui#12592 items 1 and 2 ride here, as the card directs; its item 3 (section density on the page hosts) stays on objectui#12592.

What changed

  • Lockfile. All seven @objectstack/* packages objectui resolves (client, core, formula, lint, sdui-parser, spec, types) were published at 18.0.0-next.2 and now resolve there; none is left at next.1. Regenerated by pnpm only: pnpm -r up --no-save '@objectstack/*', then pnpm dedupe. A plain up resolved @objectstack/core's zod at 4.6.7 next to the tree's 4.6.5 and gave @objectstack/spec two peer contexts; pnpm dedupe collapses that to one spec and one zod 4 (4.6.7). The dedupe also moves eight unrelated transitive patch versions (brace-expansion, bson, dompurify, fast-uri, is-core-module, resolve, seroval with seroval-plugins, use-sync-external-store). check:lockfile-integrity and check:lockfile-dedupe are green.
  • Range floors. Two floors move to ^18.0.0-next.2; all other ranges stay at ^18.0.0-next.1.
    • @object-ui/types: forced. The page node now imports checkPageRegionPlacement and checkPageDefaultPlacement, which next.1 does not export. With the floor put back at next.1, check:spec-floors reports floor-too-low for both symbols.
    • @object-ui/app-shell: objectui#12592. With the interim deleted, the dialog's bound comes from next.2's derivation. On next.1 that derivation answers full.
  • @object-ui/types: next.2's two new PageSchema checks (objectstack a69a40a5, objectstack#23708).
    • checkPageRegionPlacement is attached on PageNodeSchema and PageKindNodeSchema. It reads kind, template and each region's name. objectui's region carries name with the same meaning: page.tsx places a region by its lowercased name, as the check does.
    • checkPageDefaultPlacement judges isDefault by the page's type. On the page node type is the component discriminator, so attached there it would refuse every isDefault. It is attached on the page-kind node, whose type is the page kind, and the census records it as not attachable on the page node.
  • objectui#12592 items 1–2 (objectstack 941c78ae, objectstack#23747).
    • interimBoundedTaskFlowSurface is deleted, and AppContent calls deriveRecordFlowSurface directly at its one call site.
    • AppContent.recordDialogInterimBound-12521.test.tsx is rewritten, not deleted. It pins the installed derivation's bounded answer for all four task flows, with the phone's full as the control, and keeps its real-dialog cells.
    • recordSurface.test.ts follows the spec: heavy task flows get size: 'auto' on desktop, and a new row pins full on mobile.
    • Letter B's item-2 split: the installed derivation reads only the field count and the viewport, so it keeps no full-screen arm for a form with an embedded child or line-items table. Nothing extra is pinned.
  • Mechanical follow-ons.
    • e2e/live/ci/backend.env now names 18.0.0-next.2.
    • The check-lockfile-integrity samples are re-keyed onto the next.2 snapshot keys.
    • The import-boundary census (imported-defaults-8317) names the two new checks.
    • check:installed-pin-claims named 31 stamped sites in 22 files. Each fact was re-measured on next.2, with next.1 as the control, before its stamp moved: a parse probe over both installed spec and lint builds, whose output diff was empty; the green type-check for the type-level readings; and the green test files for the facts they assert. Every reading is the same on both versions.

Reds after the bump → upstream → what this PR did

Measured with the full suite in 16 shards on 56da05c (lockfile only, next.2): 6 red files, plus check:installed-pin-claims.

red upstream commit what this PR did
spec-object-refinements-7715 census (page site 5 → 7 checks; 2 unnamed exports) a69a40a5 (objectstack#23708) contract-following: attached as above; pins added per check, with controls
imported-defaults-8317 (surfaced after the attach) same contract-following: census entries
AppContent.recordDialogInterimBound-12521 exit pin 941c78ae (objectstack#23747) objectui#12592 item 1
recordSurface.test.ts (2 rows) 941c78ae objectui#12592 item 2
ci-cd-pipeline-doc live-e2e pin the bump itself backend.env moved
check-lockfile-integrity samples the bump itself samples re-keyed
check-installed-spec-pin-claims (31 sites) the bump itself re-measured and restamped

Held cards

card reading on next.2 where
objectui#12592 the interim's exit pin went red, as the card said items 1–2 here; item 3 stays on the card
objectui#12406 installed AdminScopeSchema refuses manageBindings and authorEnvironmentSets (invalid_type at each key; next.1 accepts both; objectstack be48c5ec). The anchor pin PermissionAdvancedFacets.adminScopeAnchor.test.tsx stays green and the type-check stays green per the dispatch ruling, not retired here; the card lands after this PR
objectui#12486 installed COMPILED_PAGE_KINDS is ['html'] (objectstack c5dd7fce); the app-shell server double in ResourceEditPage.pageRequiresStamp-11357.test.tsx still accepts jsx and stays green left to the card
objectui#12476 not read here after this PR
objectui#12285 not read here after this PR

Clause-② accept-set moves (@object-ui/types, both faces)

These documents were accepted on next.1 and are refused on next.2, with the spec's own message at the same path:

  • On a kind: 'full' page, a region whose name the template does not place (default template: header, sidebar, main, aside, footer), or a second region for a slot another region already fills. Refused at regions.N.name, on the page node and the page-kind node.
  • isDefault: true on a page-kind node that is not a record page bound to an object. Refused at isDefault.
  • Controls that pass on both: placed regions; any region on the dashboard template; a non-full kind; a bound record page with isDefault; isDefault on a type: 'page' node.

HotCRM's own metadata trips both checks on next.2 (home.page.ts: isDefault on a home page, regions left_sidebar / right_sidebar), and three pages also trip the retired template: 'full-width'. This is a real producer writing what the spec now refuses, read through objectstack dev's compile.

Browser reading (HotCRM Leads → New)

The backend was HotCRM on @objectstack/* 18.0.0-next.2: a scratch copy with its pins moved to next.2; /api/v1/health answered 18.0.0-next.2. To get it to boot, the spec's own remedies were applied to that scratch copy only: full-width → default, isDefault removed from the home page, and its regions renamed sidebar / aside. The console ran from this branch.

The screenshots are on claude/issue-12626-evidence only. This branch adds no PNG.

Test evidence (head 371c3a2)

  • Build: turbo, everything but the site, 43/43 on 56da05c. The changed packages were rebuilt (29/29) after the code commits.
  • Type-check: 81/81 on 56da05c. On the final code, types, app-shell, plugin-view and components with their dependencies: 33/33.
  • Full suite on next.2 (56da05c, 16 shards): 5,223 files. Every red is in the table above.
  • After the fixes (9ab905b), targeted runs, all exit 0:
    • packages/types/ 383/383
    • packages/components/ 388 + 1 skipped
    • packages/cli/ + packages/plugin-view/ 107/107
    • apps/console/ + examples/ 253/253
    • packages/app-shell/ 1,432 + 1 skipped
    • scripts/ 185 + 2 skipped; the one red file there is in Acceptance notes
  • On 371c3a2, after merging main: the 42 test files main brought, 42/42; this PR's pins and ratchets, 10 files, 728/728.
  • Negative control: the branch's code and pins with next.1 installed (BASE lockfile and manifests) are red: recordSurface 2, the 12521 pin 8, and 7715 and 8317 red. On next.2 they are green.
  • Ablations (each mutated, seen red, restored, git diff HEAD empty):
    • AppContent === 'full' → !== 'full': 4 red.
    • Region check removed from PageNodeSchema: 3 red.
    • isDefault check removed from the kind node: 1 red.
    • isDefault check added to PageNodeSchema: 1 red (the control).
  • Gates at exit 0: check:installed-pin-claims, check:lockfile-integrity, check:lockfile-dedupe, check:spec-floors, check:spec-symbols, check:phantom-deps, check:self-import, check:control-bytes, check:new-line-citations, check:doc-json, check:doc-examples, check:doc-snippets, check:skill-examples, check:i18n-keys, check:i18n-drift, check:changeset-claims, check:pending-changeset-literals, node scripts/check-changeset-presence.mjs, check-changeset-no-major, check-changeset-fixed.
  • Lint: eslint --no-inline-config over the 29 touched code files reports 0 errors.

Changeset

.changeset/12626-spec-next-2.md follows the repo's pre mode (tag: next). It bumps every changed released package as minor (never major), says that the console and runner bundle next.2, and lists the dialog change and the two accept-set narrowings.

Acceptance notes

  • scripts/__tests__/date-only-zone-pins-10183.test.ts went red 2 times out of 7 on this branch, both under heavy load: one case in FormulaFunctions.dateOnlyZone-10866 read 11:00 for an expected 03:00, which is another zone's clock. It was green the other 5 times, green 3 of 3 on BASE, and green when the pin file runs alone in a forked child. FormulaFunctions imports nothing from @objectstack, so this is not a next.2 contract change and is left here as a load-order observation.
  • objectui#12406: the Studio facet can still write the two keys next.2 refuses once a business unit is named. Its anchor pin does not cover that write, which is why neither the pin nor the type-check went red.

Generated by Claude Code

Regenerated with `pnpm -r up --no-save '@objectstack/*'` then `pnpm dedupe`,
so @objectstack/spec keeps one peer context and zod 4 stays a single copy.
Workspace ranges are unchanged.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
…fault check on the page-kind node

@objectstack/spec 18.0.0-next.2 adds `checkPageRegionPlacement` and
`checkPageDefaultPlacement` to `PageSchema`. The region check reads `kind`,
`template` and each region's `name`, which the page node carries with the
meaning the renderer places a region by, so both page nodes attach it. The
isDefault check judges the page's `type`; it is attached on the page-kind
node, whose `type` is the page kind, and recorded as not attachable on the
`page` node, whose `type` is the component discriminator.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
…surface directly (objectui#12592 items 1-2)

@objectstack/spec 18.0.0-next.2 derives a bounded modal (`size: 'auto'`)
for a field-heavy create / edit / child task flow on desktop and keeps
`full` for a phone. The objectui#12521 interim that gave the derivation that
shape early is deleted, and `AppContent` calls `deriveRecordFlowSurface`
directly. Its exit pin is rewritten into a pin of the installed derivation's
bounded answer, and `recordSurface.test.ts` follows the spec. The spec keeps
no full-screen split for a form with an embedded child or line-items table.

`@object-ui/app-shell`'s `@objectstack/spec` floor moves to `^18.0.0-next.2`:
on next.1 the derivation answers `full` and the dialog would open at 95vw.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
….0-next.2

The page node now imports `checkPageRegionPlacement` and
`checkPageDefaultPlacement`, which next.1 does not export.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
…es follow next.2

`e2e/live/ci/backend.env` names `18.0.0-next.2` (the `@objectstack/cli`
release tag peels to objectstack `e5136ff10f`), and the lockfile-integrity
samples re-key onto the next.2 snapshot keys.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
…re-measured

`check:installed-pin-claims` named 31 sites in 22 files stamped
`18.0.0-next.1`. Each sentence's fact was re-measured on next.2 with next.1
as the control (a parse probe over the spec and lint builds both versions
install, the green type-check for the type-level readings, and the green
test files for the facts they assert); every reading is the same on both,
so only the stamp moves.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 — ACCEPT · objectui#12626 · head 371c3a2 · 2026-10-16T10:27Z

Seat domain:ui#4, session session_01SJn1GEkrbbBQkhGC26wEDw. Checked against GitHub and the diff, not against the report (relayed on the card, 6213438343). The seat opened this PR from the dev's pr_title_draft and pr_body_draft (degraded channel); the body is the dev's, verbatim.

Checklist

  • Form:

    • Draft → main, assignee os-sales.
    • The first line is Fixes #12626, and the next line is exactly Clause-②: yes, matching the claim 6208172639. The third line, Part of #12592 (items 1 and 2), closes nothing.
    • git merge-tree against current main (608033b) is clean. The head 371c3a2 merges main (no rebase); no PNG on the branch.
  • Sibling: this seat's objectui#12604, Setup: one page header and one list shell for sys_* lists, metadata-type pages and settings pages #12606 and Approvals: Requests and Action History show record names, step labels, submitter and the current approver #12608 are in flight and touch neither the lockfile, a workspace package.json, nor the files here. objectui#12406, components: drop the page renderer's retired 'jsx' kind arm once the resolved @objectstack/spec carries objectstack c5dd7fce30 (half 2 of objectui#12464) #12486, page renderer: retire the stack-the-rest branch for authored regions once the spec declares each template slots (objectstack#23610 Q2 A follow-up) #12476 and console: a member opening an app they may not access at its package-id URL gets "This app can't be opened" instead of the access-denied screen — the access probe asks the by-name route with the package id and reads its 404 as not found #12285 serialise behind this PR, as the card's table says.

  • Diff, 34 files, 431 added and 329 removed:

    • pnpm-lock.yaml: the seven @objectstack/* packages resolve at 18.0.0-next.2. It was regenerated by pnpm (up --no-save, then dedupe), not by hand.
    • Floors: two move to ^18.0.0-next.2. @object-ui/types is forced, because it imports two symbols next.1 lacks; the dev's control (the floor put back gives floor-too-low on both) shows it. @object-ui/app-shell moves for objectui#12592. Every other range stays at next.1, which already admits next.2.
    • packages/types/src/zod/layout.zod.ts:
      • checkPageRegionPlacement is attached on both page nodes.
      • checkPageDefaultPlacement is attached on the page-kind node only, because on the page node type is the discriminator. The node docblocks and the 7715 census say why.
    • packages/app-shell/src/console/AppContent.tsx: interimBoundedTaskFlowSurface is deleted, and deriveRecordFlowSurface is called directly at its one call site, exactly the exit the interim's own docblock named.
    • The 12521 pin is rewritten into a pin of the installed derivation's bounded answer for all four task flows, with the phone's full as the control. recordSurface.test.ts follows the spec.
    • The remaining files are mechanical: backend.env, the lockfile-integrity samples, the 8317 census, and 22 one-line restamps. The seat read a sample of the restamps (plugin-kanban, core/optionRules, types/field-types); each moves a measured version in a comment and nothing else.
  • Tests:

    • The full suite on next.2 at the lockfile-only head 56da05c, in 16 shards: every red is accounted for in the PR's reds table.
    • After the fixes, targeted runs over every package that parses page documents or carries a touched pin: types 383, components 388, cli plus plugin-view 107, console plus examples 253, app-shell 1432 and scripts 185, all exit 0.
    • After merging main at 371c3a2: the 42 test files main brought pass 42/42, and this PR's pins pass 728/728.
    • Negative control: the branch's pins go red with next.1 installed.
    • Four ablations: each went red and was restored.
    • CI on this head runs the full suite and is the check of record.
  • Changeset: nine packages, all minor, in pre mode on tag next. It carries user-facing prose, and the two accept-set narrowings carry their remedies.

  • Contract faces: Clause-②: yes. The @object-ui/types faces (safeValidateSchema, StrictAnyComponentSchema) now refuse what next.2 refuses; the dialog's derived size moves with the spec. There is no packages/spec path; the governed-path reading comes from Governed Surface Queue Guard on this head. The TIER_DEFAULT review is recorded as its own comment.

  • Screenshots: HotCRM Leads → New on a next.2 backend, on the never-merged claude/issue-12626-evidence (303360e). The seat read both:

    • at 1440 the dialog is a bounded 1024 px modal, with the sections and fields legible, Create and Cancel at the foot, and no 95vw canvas;
    • at 390 it is the full-screen sheet, unchanged.

    Sent to the maintainer at 2026-10-16T10:27Z.

  • CI on 371c3a2: running at this record. Landing waits for green.

Rulings on the open questions, deviations and findings

  1. The lockfile shape: (A), pnpm dedupe, accepted. check:lockfile-dedupe demands it, and two physical @objectstack/spec copies is the bundling hazard check:lockfile-integrity guards. The eight transitive patch moves are pnpm's own output, listed in the body.
  2. checkPageDefaultPlacement: (A), the page-kind node only, accepted. On the page node it would refuse every isDefault by reading the discriminator as the page kind: a false refusal. Leaving it off both (B) would let the kind node accept what the spec refuses. HotCRM's own home page is the producer of exactly that.
  3. Degraded channel over the contract's own writes: A, as dispatched.
  4. Deviation 1: the second full pass was replaced by targeted runs: accepted for the report. CI's 16-shard run on this head covers every package, and landing waits for it.
  5. Deviation 3: the HotCRM reading ran on a scratch copy: accepted. The hotcrm clone was not modified, and the remedies applied are the spec's own.
  6. Findings:

Implemented-by: cloud session session_01HcrgxQPr9VQSBrMMCtVswb, branch claude/issue-12626-objectstack-next-2
Reviewed-by: seat domain:ui#4, session_01SJn1GEkrbbBQkhGC26wEDw


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: TIER_DEFAULT
Head-sha: 371c3a26b4ac27c34a7e5f8b5a262e64024a0bef
Local-runs: none

Face: the Clause-②: yes declaration of the claim 6208172639 on objectui#12626. objectui carries no packages/spec/src/**, and the PR's paths are read against the governed list by Governed Surface Queue Guard on this head. So the review is owed by the declaration (TIER_DEFAULT), recorded by the lane seat. Inputs read: the card and its comments, the dev's report (6213438343), the diff at the head above, and the PR body. Nothing was built or run locally.

① Derived judgments

  • @object-ui/types accept sets narrow by two rules, and only those.
    • On a kind: 'full' page, a region whose name the template does not place, or a second region for a filled slot, is refused at regions.N.name. The rule is checkPageRegionPlacement on both page nodes.
    • isDefault: true on a page-kind node that is not a bound record page is refused at isDefault. The rule is checkPageDefaultPlacement on PageKindNodeSchema only.
    • Both are the spec's own checks, attached by reference, with the spec's own messages, so objectui refuses exactly what the protocol refuses on these nodes.
    • The controls in the body pass on both versions: placed regions, the dashboard template, non-full kinds, a bound record page with isDefault, and isDefault on a type: 'page' node.
    • Correct.
  • No false refusal. Not attaching the isDefault check on the page node is right. Its type is the component discriminator, so the check would read 'page' as a page kind and refuse every isDefault. Correct.
  • The published type surface is unchanged. No exported type gains or loses a member: the diff touches zod refinements, a deleted module-private function, tests and comments. The two package.json floors move to ^18.0.0-next.2. @object-ui/types imports two symbols that exist only from next.2, which check:spec-floors confirms. Correct.
  • Runtime behaviour: the record dialog on desktop. It now takes the spec's bounded answer directly, where the interim used to manufacture it. The rendered result is the same 1024 px modal (the browser reading at 1440), and the phone keeps the full-screen sheet. Correct, with no user-visible regression.

② Semver level

Nine packages, all minor, in pre mode on tag next. That matches the repo's rule (check-changeset-no-major: objectui's breaking changes ship as minor with the break spelled out). The two narrowings are spelled out with their remedies. Consistent.

③ Boundary flags

Implemented-by: session_01HcrgxQPr9VQSBrMMCtVswb
Reviewed-by: session_01SJn1GEkrbbBQkhGC26wEDw

VERDICT: PASS


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

❌ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 70 chunks) 3114.6 KB 3119.4 KB
Main entry chunk (gzip) 74.2 KB 350 KB
Entry file index-CnXfPg3d.js —
Status FAIL —

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.

Which half objected:

Eager-closure half Verdict
Aggregate closure ceiling ✅ pass
Per-chunk ceilings ❌ over its ceiling
Per-chunk membership (declared packages) ✅ pass
Ceiling sensitivity (headroom) ✅ pass
Ceiling freshness (checkout vs. base branch) ✅ pass

📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 21.19KB 7.76KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.39KB 6.02KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 597.83KB 144.29KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.20KB 69.22KB
fields (index.js) 290.12KB 74.14KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 40.67KB 11.85KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 54.94KB 16.05KB
plugin-charts (index.js) 84.97KB 23.36KB
plugin-chatbot (index.js) 201.89KB 48.13KB
plugin-dashboard (index.js) 146.15KB 39.55KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 262.91KB 69.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 180.92KB 46.73KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 265.13KB 73.29KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 129.90KB 33.12KB
plugin-map (index.js) 27.07KB 8.96KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 93.43KB 23.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Live E2E (informational) red on 371c3a2 · not this PR's · 2026-10-16T10:34Z

  • What fails: job 116927385035 (run 38887101214). e2e/live/ci/start-backend.sh misses its cache, because this PR moves backend.env to 18.0.0-next.2. The fresh npm install of the showcase app then dies in 12 s with npm error Cannot read properties of null (reading 'edgesOut'). No spec ran.
  • Why it is not this PR's: the seat reproduced it locally, and the CONTROL, main's own pin 18.0.0-next.1 with the showcase at that tag (0c52e43), fails identically on a cold install. The lane is green elsewhere only because those runs reuse the cached backend. It is npm's peer-set resolution (#loadPeerSet) on the published @objectstack/cli graph as the registry resolves it today, not a next.2 contract change and not console code.
  • The fix: none exists yet. It is filed as Live E2E: a cold live-backend install crashes in npm (Cannot read properties of null (reading 'edgesOut')) on next.1 and next.2 alike; the lane is green only from its cache #12649, with a probe: --legacy-peer-deps makes the install exit 0; the backend boot under it is not measured. This PR is not widened for it.
  • The re-run: none is owed. A re-run hits the same cold install, and the lane is informational, so it does not gate the merge.

Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Bundle Analysis red on 371c3a2 · this PR's · fix round sent · 2026-10-16T10:36Z

  • What fails: the per-chunk ceiling on vendor-objectstack, 1519.2 KB gzip against 1500.4 KB, over by 18.8 KB (job 116927384188).
    • The aggregate eager closure passes (3114.6 / 3119.4 KB), and so do the other three per-chunk rows, membership, headroom and freshness.
    • This is the @objectstack/* next.2 growth landing in the chunk the vendor group owns, the same row the 17.1.0 (objectui#5531) and 17.5.0 (objectui#11086) bumps raised.
  • The fix round, sent to the implementing session session_01HcrgxQPr9VQSBrMMCtVswb:
    1. Measure main-vs-branch per chunk, with one instrument.
    2. If the delta is all @objectstack/*, raise that one ceiling and PER_CHUNK_BASELINE by exactly the measured delta, with WHAT THE BYTES ARE and WHAT THEY BUY in the docblock and the PR body.
    3. If any of it is not @objectstack/* (for example the zod dedupe moving bytes between chunks), report that before raising.
  • Landing: waits for that push, a green head, and the contract review moved to the new head.

Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

❌ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 70 chunks) 3114.8 KB 3119.4 KB
Main entry chunk (gzip) 74.2 KB 350 KB
Entry file index-cRCc-5ag.js —
Status FAIL —

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.

Which half objected:

Eager-closure half Verdict
Aggregate closure ceiling ✅ pass
Per-chunk ceilings ❌ over its ceiling
Per-chunk membership (declared packages) ✅ pass
Ceiling sensitivity (headroom) ✅ pass
Ceiling freshness (checkout vs. base branch) ✅ pass

📦 Bundle Size Report

Package Size Gzipped
app-shell (consoleActionDispatch.js) 0.20KB 0.19KB
app-shell (index.js) 21.19KB 7.76KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.39KB 6.02KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 597.83KB 144.29KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.20KB 69.22KB
fields (index.js) 290.12KB 74.14KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 40.67KB 11.85KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 54.94KB 16.05KB
plugin-charts (index.js) 84.97KB 23.36KB
plugin-chatbot (index.js) 201.89KB 48.13KB
plugin-dashboard (index.js) 146.15KB 39.55KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 262.91KB 69.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 180.92KB 46.73KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 265.13KB 73.29KB
plugin-kanban (index.js) 53.23KB 16.71KB
plugin-list (index.js) 129.90KB 33.12KB
plugin-map (index.js) 27.07KB 8.96KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 93.43KB 23.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

…s measured +19,296 gzipped bytes (objectui#12626)

Three console builds, one instrument: main 8a8bcf3 (next.1) 1,536,365, the
branch with zod held at 4.6.5 1,555,533, the branch 1,555,661. +19,168 bytes
are @objectstack/* 18.0.0-next.2 and +128 the zod 4.6.5 -> 4.6.7 patch, in
place. The ceiling and its baseline move by the same delta, keeping main's
44-byte headroom; the aggregate ceiling, BASELINE and the regression
constant do not move.

Claude-Session: https://claude.ai/code/session_01HcrgxQPr9VQSBrMMCtVswb
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: TIER_DEFAULT
Head-sha: cd3a5a0dd3661c174d52f8b9ca95e774c7901843
Local-runs: none

Face: the Clause-②: yes declaration of the claim 6208172639 on objectui#12626. This record supersedes 6213469644 (head 371c3a2). The head moved by two merges of main and one script-only commit, 4db6ad1d5. The PR's file list still carries no packages/spec/src/** path and no governed path. Inputs read: the diff from 371c3a2 to this head, and the dev's fix-round report. Nothing was built or run locally.

① Derived judgments

  • The published type surface and accept sets are unchanged since 371c3a2. 4db6ad1d5 touches only scripts/check-eager-closure-budget.mjs, a CI gate that publishes nothing. The two merges bring main's own landed PRs. Correct.
  • The gate change is the measured raise and nothing else.
    • PER_CHUNK_GZIP_CEILINGS['vendor-objectstack'] moves from 1,536,409 to 1,555,705, and PER_CHUNK_BASELINE['vendor-objectstack'] from 1,512,690 to 1,531,986. Both move by +19,296 gzipped bytes, measured as 19,168 from @objectstack/* next.2 and 128 from the in-place zod 4.6.5 → 4.6.7 patch.
    • The aggregate ceiling, BASELINE and REGRESSION_THIS_GATE_MUST_CATCH_BYTES do not move.
    • The maintainer approved the raise in this seat's chat, verbatim 「上限可以调高」 (2026-10-16).
    • Correct.

② Semver level

Unchanged: nine packages, minor, in pre mode on tag next. A gate-script commit moves no level. Consistent.

③ Boundary flags

  • The 20% across-the-board headroom the maintainer then ruled (「上限同统一调高 20% ,避免类似的问题。」) is objectui#12653. It is filed separately and lands after this PR, so this PR carries only the measured raise.
  • Live E2E (informational) is objectui#12649, not this PR's (6213597650).

Implemented-by: session_01HcrgxQPr9VQSBrMMCtVswb
Reviewed-by: session_01SJn1GEkrbbBQkhGC26wEDw

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Landing · head cd3a5a0 · 2026-10-16T11:02Z

The maintainer asked for this card to be expedited. Auto-merge is enabled now, ahead of this head's checks finishing: the merge queue runs the full CI on the combined tree, and a red check dequeues it.


Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 16, 2026 11:02
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 16, 2026 11:02
@github-actions

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 70 chunks) 3115.1 KB 3119.4 KB
Main entry chunk (gzip) 74.2 KB 350 KB
Entry file index-mXendWYP.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) 21.19KB 7.76KB
app-shell (runtime-config.js) 22.59KB 7.89KB
app-shell (types.js) 0.01KB 0.04KB
app-shell (urlParams.js) 10.11KB 3.87KB
auth (ActiveOrganizationStorage.js) 27.95KB 10.04KB
auth (AuthContext.js) 0.31KB 0.24KB
auth (AuthGuard.js) 2.07KB 1.00KB
auth (AuthProvider.js) 40.22KB 10.61KB
auth (AuthShell.js) 3.49KB 1.40KB
auth (ForgotPasswordForm.js) 12.21KB 3.45KB
auth (LoginForm.js) 20.39KB 6.02KB
auth (PreviewBanner.js) 0.90KB 0.50KB
auth (RegisterForm.js) 6.72KB 2.24KB
auth (SocialSignInButtons.js) 9.70KB 3.93KB
auth (UserMenu.js) 3.39KB 1.21KB
auth (auth-gate-events.js) 1.62KB 0.83KB
auth (authStyles.js) 5.27KB 1.86KB
auth (createAuthClient.js) 41.19KB 11.12KB
auth (createAuthenticatedFetch.js) 8.54KB 3.46KB
auth (index.js) 3.63KB 1.64KB
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) 11.08KB 4.58KB
collaboration (CommentThread.js) 27.26KB 8.03KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (commentAuthorship.js) 1.39KB 0.78KB
collaboration (index.js) 1.93KB 0.85KB
collaboration (useCollaborationTranslation.js) 6.50KB 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) 597.83KB 144.29KB
core (index.js) 10.18KB 4.04KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 248.20KB 69.22KB
fields (index.js) 290.12KB 74.14KB
i18n (LocalizationContext.js) 2.92KB 1.42KB
i18n (builtinAggregateLabels.js) 0.86KB 0.49KB
i18n (currency.js) 2.59KB 1.22KB
i18n (fallbackInterpolation.js) 6.25KB 2.77KB
i18n (i18n.js) 8.87KB 3.64KB
i18n (index.js) 5.52KB 2.39KB
i18n (pickLocalized.js) 9.86KB 3.95KB
i18n (provider.js) 39.35KB 12.88KB
i18n (translateFn.js) 0.20KB 0.18KB
i18n (useDisplayLocale.js) 3.52KB 1.76KB
i18n (useObjectLabel.js) 36.87KB 9.88KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 40.67KB 11.85KB
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) 6.62KB 2.45KB
mobile (useResponsive.js) 0.72KB 0.42KB
mobile (useSpecGesture.js) 5.52KB 2.10KB
mobile (useTouchTarget.js) 1.01KB 0.54KB
permissions (MePermissionsProvider.js) 15.35KB 5.51KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.82KB 2.38KB
permissions (discardProofCache.js) 1.04KB 0.55KB
permissions (evaluator.js) 8.33KB 3.07KB
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) 16.04KB 3.92KB
plugin-calendar (index.js) 54.94KB 16.05KB
plugin-charts (index.js) 84.97KB 23.36KB
plugin-chatbot (index.js) 201.89KB 48.13KB
plugin-dashboard (index.js) 146.15KB 39.55KB
plugin-designer (index.js) 233.95KB 50.08KB
plugin-detail (index.js) 262.91KB 69.49KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 180.92KB 46.73KB
plugin-gantt (index.js) 178.36KB 45.08KB
plugin-grid (index.js) 265.13KB 73.29KB
plugin-kanban (index.js) 59.42KB 18.48KB
plugin-list (index.js) 131.40KB 33.50KB
plugin-map (index.js) 27.07KB 8.96KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 46.66KB 13.13KB
plugin-timeline (index.js) 39.21KB 11.85KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 93.43KB 23.94KB
providers (DataSourceProvider.js) 0.75KB 0.39KB
providers (MetadataProvider.js) 1.37KB 0.59KB
providers (ThemeProvider.js) 1.90KB 0.85KB
providers (UploadProvider.js) 12.07KB 3.68KB
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) 120.63KB 39.56KB
react (data-invalidation.js) 5.05KB 2.08KB
react (index.js) 4.50KB 2.06KB
react (schema-input.js) 4.31KB 2.07KB
react (spec-input.js) 0.20KB 0.18KB
sdui-parser (body-dialect.js) 4.50KB 1.99KB
sdui-parser (codegen.js) 9.45KB 3.76KB
sdui-parser (dashboard-widget-options.js) 3.07KB 1.30KB
sdui-parser (index.js) 7.30KB 3.12KB
sdui-parser (input-type.js) 2.84KB 1.40KB
sdui-parser (parse.js) 25.28KB 7.81KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.29KB 0.24KB
sdui-parser (validate.js) 23.87KB 7.83KB
types (ai.js) 4.39KB 2.17KB
types (api-types.js) 0.20KB 0.18KB
types (app.js) 4.12KB 1.61KB
types (authoring-nodes.js) 0.20KB 0.19KB
types (base.js) 0.20KB 0.18KB
types (blocks.js) 0.20KB 0.18KB
types (cloud.js) 0.20KB 0.18KB
types (complex.js) 4.44KB 2.07KB
types (crud.js) 0.20KB 0.18KB
types (dashboard-filter-alias.js) 6.23KB 2.74KB
types (dashboard-widget-layout.js) 2.06KB 0.96KB
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) 1.13KB 0.65KB
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) 5.78KB 2.70KB
types (layout.js) 0.20KB 0.18KB
types (managed-by.js) 0.19KB 0.18KB
types (mobile.js) 5.00KB 2.39KB
types (navigation.js) 0.20KB 0.18KB
types (node-slots.js) 7.18KB 2.34KB
types (objectql.js) 0.20KB 0.18KB
types (overlay.js) 0.20KB 0.18KB
types (permissions.js) 2.52KB 1.31KB
types (plugin-scope.js) 0.20KB 0.18KB
types (record-approval-decision.js) 0.20KB 0.20KB
types (record-components.js) 0.20KB 0.19KB
types (record-panels.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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.26KB
types (system-fields.js) 3.33KB 1.54KB
types (theme.js) 6.28KB 2.87KB
types (ui-action.js) 8.48KB 3.50KB
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

@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit f62b6ff Oct 16, 2026
38 of 39 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-12626-objectstack-next-2 branch October 16, 2026 11:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

deps(v18): move objectui's @objectstack/* from 18.0.0-next.1 to 18.0.0-next.2 and follow its contract changes

2 participants