Skip to content

fix(app-shell): Studio shows the flow state the deployment runs, alike in the rail, the header and Problems (objectui#11779) - #11834

Merged
objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-11779-flow-status-truth
Oct 7, 2026
Merged

objectstack-fleet[bot] merged 5 commits into
mainfrom
claude/issue-11779-flow-status-truth

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #11779

Clause-②: no

Implemented by the os-dev agent dispatched by the seat 3 domain:ui PM under claim comment 6046146169, session https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8.

What an author reads now

Before After
Header Trigger of a record-triggered flow autolaunched (the flow-level type) Record updated · task (the Start node's event and object)
Header Status of a published flow with no status key draft (grey) On, from the engine's runtime row, as in the rail
A schedule flow the deployment does not arm (scheduled work switched off) rail: green On, the reason only on hover; header: active; Problems: "No problems" rail and header: grey Not running here, the platform's reason as hover text; Problems: a note carrying the reason, not counted
A flow that declares no trigger rail On unchanged: On, titled "no trigger (run manually)"
A new flow's switch, under "Off by default · review before enabling" Enabled Disabled (saved with status: 'obsolete')

How

  • One derivation. deriveFlowRunStatus (in flow-problems.ts) maps the engine's runtime row to one of on / manual / not-running / off; with no row it reads unpublished (the host read _status and the engine has no row for the flow) or, with no runtime reading at all, the draft's own switch (enabled / disabled, read the way the engine reads status: obsolete and invalid off, anything else on). describeFlowRunStatus is the one wording of those states. The rail's FlowStatusDot, the header's Status pill and the Problems panel's note all read these two functions.
  • The hand-off. The Automations pillar gives the open flow's _status row to the preview through FlowRuntimeContext (a row, null for no row, nothing while no runtime answer is in). It is a context rather than a MetadataPreviewProps member, so the published preview contract does not change. A host with no provider (the metadata-admin page) gets the draft-switch reading, so a flow with no status key no longer reads draft there either.
  • The Trigger pill. The kind comes from resolveFlowTriggerKind (@objectstack/spec/automation, the authoring-time mirror of the engine's binding resolution, in the engine's precedence). A record kind shows the Start node's triggerType event and its objectName; a time-relative sweep shows its object; schedule and API show their kind; when no kind resolves (a manual or screen flow) the pill falls back to the flow type, as before. The words are the Start node inspector's own option labels (fieldsForNodeType('start') localized by localizeFlowFields), so the header and the inspector name one trigger one way, in en and zh.
  • Not running here. Only an enabled row with a declared triggerType and bound: false reads it: the contract's "declared trigger type has no registered trigger" (or a deployment policy). A flow that declares no trigger runs when invoked and keeps On. The chip is grey; nothing is styled as an error.

Measured: what _status serves on 17.7.0

The published @objectstack/service-automation@17.7.0 engine (installed into a scratch directory), getFlowRuntimeStates() — the rows GET /api/v1/automation/_status passes through — with OS_AUTOMATION_SCHEDULED_WORK_ENABLED unset and the record_change and schedule triggers registered:

Flow Row
record-after-update on task, no status key enabled: true, bound: true, status: "draft", triggerType: "record_change", object: "task"
the same with status: "draft" identical: armed
schedule flow, no status key enabled: true, bound: false, status: "draft", triggerType: "schedule", reason: "disabled by deployment policy — package-authored scheduled work is off on this deployment …"
Start declares nothing (manual) enabled: true, bound: false, status: "draft" — no triggerType, no reason
record flow with status: "obsolete" enabled: false, bound: false, status: "obsolete", triggerType: "record_change", object: "task" — no reason
Studio's new flow (status: "obsolete", no trigger) enabled: false, bound: false, status: "obsolete"
type: "api" with no api trigger registered enabled: true, bound: false, status: "draft", triggerType: "api", reason: "no 'api' trigger is registered — …"

Readings:

  • The header's "draft" was the spec's own default: FlowSchema.status defaults to draft, the engine stores the parsed value, and arms draft exactly like active.
  • The distinction PM hypothesis 3 asked for (no declared trigger versus deployment policy) is on the wire as triggerType: absent on a manual flow, present on every declared trigger. On 17.7.0 every enabled, unbound row with a triggerType also carries a reason; the title falls back to "Enabled, but its trigger is not armed on this deployment" only for an older backend that sends none.

The one fork: the new flow's default — the default follows the bar

A flow created with New is saved with status: 'obsolete'; the bar's copy stays.

  • Real business need. Measured: doCreateFlow is Studio's only flow producer (save('flow' has one non-test call site); it wrote no status; the spec defaults that to draft; the 17.7.0 engine arms draft (rows above). A package publish publishes every draft in the package, so a half-built record-triggered flow was armed on live records the first time anything in its package was published. The bar names that risk.
  • Long-term soundness. The intent is now explicit metadata, in the value the Studio switch already writes for Off, and the one the engine's own boot hint names ("set status: 'active' to make intent explicit, or 'obsolete' to disable"). No new vocabulary, and no reader that interprets an absent key.
  • Preventing AI mistakes. An automation an AI drafts in Studio cannot fire until a person flips it on. Changing the copy instead would have kept "armed on the next publish" as the silent default.
  • Startup focus. One key on one producer, no new surface. The cost: obsolete is a lifecycle word for a flow that was never live; it is the spec's only off value (draft and active both arm).

Problems: a note, not a problem

The not-running state shows in the Problems panel as a note above the list: the label and the reason, grey, dashed border. It is not a problem row: it is not counted in the Problems badge, not styled as an error or a warning, and the structural verdict ("No problems — this flow is structurally valid") stands beneath it. A deployment policy is an operator's fact, not an authoring defect. Off and manual flows get no note.

Tests and gates (head 26ec168)

New pins:

  • StudioDesignSurface.flowStatusTruth-11779.test.tsx, through the real AutomationsPillar and the real registered FlowPreview, with a _status router double: the record flow's Trigger reads Record updated · task; schedule reads Schedule (cron), manual falls back to autolaunched; the no-status published flow reads On in the rail and the header, never draft (the control); the unbound schedule flow reads Not running here in both, titled with the reason, and not On; Problems shows the note with the reason, uncounted, beside "No problems"; the manual flow reads On and gets no note (the control); a flow the engine has no row for reads Unpublished draft; New saves status: obsolete, FlowSchema.safeParse succeeds on the saved body, and the switch reads Disabled under the "Off by default" bar.
  • FlowPreview.headerPills-11779.test.tsx: the pills with no runtime provider (record event and object, the zh inspector words, time-relative with its object, the type fallback; no status and draft read Enabled, obsolete reads Disabled).
  • flow-problems.runStatus-11779.test.ts: the derivation table, including the disabled row, the runtime row outranking the draft, and that no reading is an error tone.

Updated pins: the objectui#11281 cases in FlowStatusDot.test.tsx and StudioDesignSurface.railUnboundReason-11281.test.tsx held a policy-unbound flow at a green On; they now read Not running here (the reason-verbatim and manual-flow controls are kept). The 11124, 11546, 11553 and 11204 pillar suites waited on the raw active Status pill; they now wait on its derived Enabled. The plain-language pin (objectui#11659) covers the three new rows.

Runs, all at 6916515 unless stated, from the worktree root:

  • pnpm exec vitest run packages/app-shell/src/views/studio-design/ packages/app-shell/src/views/metadata-admin/previews/ … (plus src/__tests__/, the console StudioRoute suites and the i18n suites that read the touched modules): Test Files 217 passed (217), Tests 2287 passed.
  • The rest of metadata-admin (__tests__/, datasource/, external/, inspectors/, the 165 root test files): Test Files 303 passed (303), Tests 3597 passed, 1 skipped.
  • pnpm --filter @object-ui/app-shell type-check (tsc --noEmit && tsc -p tsconfig.test.json): exit 0.
  • pnpm exec eslint on the 15 touched files: 0 errors; per-file warning counts equal to the base commit (d53fd02).
  • check:control-bytes, check:test-path-roots, check:changeset-claims, check:pending-changeset-literals, check:i18n-keys, check:i18n-drift, check:i18n-dead-keys, check:i18n-designer-parity, check:new-line-citations, check:vi-mock-specifiers, check:vi-mock-inherit, check:vi-mock-override-shape, check:spec-symbols, scripts/check-changeset-presence.mjs: all exit 0 (verdict lines in the report).
  • Declared narrowing: app-shell has more test files than the foreground cap runs; the files outside studio-design/, metadata-admin/ and src/__tests__/ were not run locally (a git grep for direct imports of the touched modules found none beyond those run). CI's pnpm test runs them.

Ablation

The old Trigger pill source put back (value={translateFlowMeta('type', String(d.type ?? 'autolaunched'), locale)} over value={flowTriggerLabel(d, nodes, locale)}) through ablation-replace.mjs. First leg at cd562f5 (anchor 1 → 0, blob 1404ef239c15 → f12c7b8d4439), running the two 11779 pill files: 5 failed, 10 passed — the record (en and zh), time-relative, record-through-the-pillar and schedule pins red; the type-fallback control and every status pin green. Restore proven: blob back to 1404ef239c15 == HEAD, git diff HEAD empty. Second leg at 26ec168 (blob 172f1cbf7090 → 7bfb27b575ab): the same 5 red / 10 green; restore proven: blob back to 172f1cbf7090 == HEAD, git diff HEAD empty.

Acceptance notes

  • File surface. Every edit is inside the claim's list. FlowRuntimeContext and the derivation sit in flow-problems.ts (listed, and the component-free module the preview and the panel already share); a dedicated module would be a cleaner home but is outside the claimed surface. Its objectui#11772 note said "React-free module"; with createContext imported it now says "component-free". The context first sat in ProblemsPanel.tsx and moved because react-refresh/only-export-components flagged it there.
  • skeletons.ts untouched. status: 'obsolete' is added in doCreateFlow, not in buildFlowSkeleton, to stay inside the surface, so createConformance.test.ts's skeleton gate does not see the key; the new pillar pin parses the body doCreateFlow actually saves with FlowSchema. Moving the key into the skeleton is a one-line follow-up for whoever next touches that file. carrier: none named.
  • Setup's Packaged automation page (objectui#9217) reads the same _status rows through its own projection (packagedFlows.ts); it is not moved onto this derivation here. Noted, not filed.
  • Not measured: the rendered pages in a browser (the DOM is pinned through the real pillar and preview; no screenshot run), and the app-shell test files outside the directories above (CI).

Generated by Claude Code

claude added 4 commits October 7, 2026 20:40
…w header and Problems (objectui#11779)

- The header's Trigger pill reads the Start node through the spec's
  resolveFlowTriggerKind (a record trigger shows its event and object),
  falling back to the flow type only when no trigger resolves.
- deriveFlowRunStatus (flow-problems) is the one derivation the rail's
  FlowStatusDot, the header's Status pill and the Problems panel read; the
  pillar hands the open flow's _status row to the preview through
  FlowRuntimeContext. A published flow with no status key no longer reads
  "draft".
- An enabled flow whose declared trigger is not armed on this deployment
  reads "Not running here" (grey, the platform reason as its title) in the
  rail and the header, with a note in Problems; a manual flow still reads On.
- A new flow is created switched off (status obsolete), as the bar's
  "Off by default" promises.

Claude-Session: https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8
Co-authored-by: Claude <noreply@anthropic.com>
…Problems (objectui#11779)

New pins: a record-triggered flow's header shows its trigger event and
object; a published flow with no status key reads On (runtime) or Enabled
(no runtime), never draft; an unbound schedule flow reads "Not running
here" in the rail and the header with the platform reason, and Problems
notes it without counting it; a manual flow still reads On; a new flow is
saved status obsolete and its switch reads Disabled.

Updated pins: the objectui#11281 cases that held a policy-unbound flow at a
green "On" now read "Not running here"; the pillar suites that waited on the
raw "active" Status pill wait on its derived "Enabled".

Claude-Session: https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8
Co-authored-by: Claude <noreply@anthropic.com>
…t feeds (objectui#11779)

The context moves from ProblemsPanel.tsx into flow-problems.ts, next to
deriveFlowRunStatus: a context exported from a component module is what
react-refresh/only-export-components flags, and the pillar now takes the
context and the derivation from one component-free module.

Claude-Session: https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8
Co-authored-by: Claude <noreply@anthropic.com>
Brings in objectui#11778 (flow designer add-node paths, flow-node-config),
objectui#11784 (package delete confirm, StudioDesignSurface), objectui#11774
and objectui#11809. No textual conflict.

Claude-Session: https://claude.ai/code/session_01CGZy1BGCjdN5cXqL9cnvB8
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 336 chunks) 3521.8 KB 3551.8 KB
Main entry chunk (gzip) 156.9 KB 350 KB
Entry file index-CdCcHDNL.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) 17.82KB 6.58KB
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) 18.15KB 5.40KB
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.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
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.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
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) 579.68KB 139.46KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 235.41KB 65.46KB
fields (index.js) 266.88KB 67.46KB
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) 38.37KB 10.31KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.50KB 11.82KB
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) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
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) 53.39KB 15.52KB
plugin-charts (index.js) 84.26KB 23.05KB
plugin-chatbot (index.js) 199.63KB 47.46KB
plugin-dashboard (index.js) 144.82KB 39.17KB
plugin-designer (index.js) 231.46KB 48.87KB
plugin-detail (index.js) 247.86KB 65.27KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 176.62KB 45.75KB
plugin-gantt (index.js) 179.17KB 45.07KB
plugin-grid (index.js) 239.75KB 65.92KB
plugin-kanban (index.js) 52.17KB 16.37KB
plugin-list (index.js) 116.85KB 29.12KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 39.10KB 11.81KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 91.07KB 22.93KB
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.81KB 3.58KB
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.08KB 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.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
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-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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.25KB
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

1 similar comment
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

✅ Console Performance Budget

Metric Value Budget
Eager closure (gzip, 336 chunks) 3521.8 KB 3551.8 KB
Main entry chunk (gzip) 156.9 KB 350 KB
Entry file index-CdCcHDNL.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) 17.82KB 6.58KB
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) 18.15KB 5.40KB
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.29KB 0.66KB
auth (authStyles.js) 5.04KB 1.72KB
auth (createAuthClient.js) 40.70KB 10.94KB
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.11KB 7.97KB
collaboration (LiveCursors.js) 3.17KB 1.27KB
collaboration (PresenceAvatars.js) 6.28KB 2.60KB
collaboration (PresenceProvider.js) 2.79KB 1.13KB
collaboration (index.js) 1.68KB 0.73KB
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) 579.68KB 139.46KB
core (index.js) 10.00KB 3.96KB
create-plugin (index.js) 27.94KB 9.51KB
data-objectstack (index.js) 235.41KB 65.46KB
fields (index.js) 266.88KB 67.46KB
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) 38.37KB 10.31KB
i18n (useSafeTranslation.js) 7.14KB 2.92KB
layout (index.js) 41.50KB 11.82KB
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) 13.86KB 5.00KB
permissions (PermissionContext.js) 0.31KB 0.25KB
permissions (PermissionGuard.js) 0.89KB 0.45KB
permissions (PermissionProvider.js) 6.52KB 2.26KB
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) 53.39KB 15.52KB
plugin-charts (index.js) 84.26KB 23.05KB
plugin-chatbot (index.js) 199.63KB 47.46KB
plugin-dashboard (index.js) 144.82KB 39.17KB
plugin-designer (index.js) 231.46KB 48.87KB
plugin-detail (index.js) 247.86KB 65.27KB
plugin-editor (index.js) 2.23KB 1.05KB
plugin-form (index.js) 176.62KB 45.75KB
plugin-gantt (index.js) 179.17KB 45.07KB
plugin-grid (index.js) 239.75KB 65.92KB
plugin-kanban (index.js) 52.17KB 16.37KB
plugin-list (index.js) 116.85KB 29.12KB
plugin-map (index.js) 25.60KB 8.62KB
plugin-markdown (index.js) 13.88KB 4.80KB
plugin-report (index.js) 44.12KB 12.29KB
plugin-timeline (index.js) 39.10KB 11.81KB
plugin-tree (index.js) 15.07KB 5.33KB
plugin-view (index.js) 91.07KB 22.93KB
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.81KB 3.58KB
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.08KB 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.80KB
sdui-parser (provenance.js) 3.84KB 1.90KB
sdui-parser (types.js) 0.28KB 0.23KB
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-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) 4.99KB 1.96KB
types (spec-ui-namespace.js) 0.20KB 0.19KB
types (strict-authoring-face.js) 19.93KB 7.25KB
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

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 7, 2026 22:31
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 7, 2026 22:31
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 7, 2026
Merged via the queue into main with commit 16cda0b Oct 7, 2026
45 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-11779-flow-status-truth branch October 7, 2026 22:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

2 participants