Skip to content

chore: release packages - #2011

Merged
os-zhuang merged 1 commit into
mainfrom
changeset-release/main
Jun 26, 2026
Merged

chore: release packages#2011
os-zhuang merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@object-ui/app-shell@7.2.0

Minor Changes

  • 88a3e39: feat(console): born-with-env eager provisioning for multi-org workspace create

    ObjectStack runs a 1-production-environment-per-organization model: a user who wants
    another production space creates another organization, and each org is born with its
    production environment. The self-service "create workspace" flow now delivers that
    without an onboarding-wizard detour.

    After createOrganization succeeds (which already switches the active org),
    CreateWorkspaceDialog eagerly POSTs /api/v1/cloud/environments with the new org as
    target so its first environment is provisioned as a production env (allowed on every plan,
    including free), then hands off to the existing switch-and-navigate-home path. The
    provision is best-effort: on failure the onboarding gate provisions the env lazily on
    first navigation, so multi-org still works. The multiOrgEnabled enable-gate is unchanged
    (already wired end-to-end via the auth /configfeatures.multiOrgEnabled flag).

    Adds a gated "Create workspace" entry to the org switcher (avatar dropdown) that
    opens the dialog directly — previously a single-org user could never reach it, because
    the only path (/organizations) auto-skips to home when you belong to exactly one org.
    The eager provision is idempotent: a control plane that auto-provisions the production
    env on org create resolves it to "already provisioned" rather than erroring.

    Also removes the unreferenced apps/consoleCreateWorkspaceDialog duplicate; the live
    component is the app-shell copy used by OrganizationsPage.

  • e301475: feat(console): hide the AI surface at runtime when the server serves no AI agent (Community Edition)

    A self-host Community Edition runtime (framework + this MIT console, without the
    cloud @objectstack/service-ai-studio package) serves no ask/build agent.
    The console now hides every AI entry point via runtime, server-pushed gating —
    no build-time edition flag, no tree-shake.

    Crucially, gating is driven off the agent catalog (GET /api/v1/ai/agents),
    not the discovery services.ai flag: the open-source framework keeps a headless
    @objectstack/service-ai that still reports services.ai as available, so a CE
    runtime can report AI "available" while serving zero agents. The catalog is the
    real "is there an agent to answer?" signal.

    • New useAiSurfaceEnabled() hook + RequireAiSurface route guard (exported).
    • /ai* routes redirect to home when no agent is served; the FAB, top-bar AI
      link and the metadata designers' "Ask AI" buttons hide; AiChatPage shows a
      graceful "AI unavailable" state instead of an agent-less echo chat.
    • Fully additive for cloud installs — when an agent is served, every AI surface
      renders and works as before.
  • 616157a: feat(studio): multi-hop relationship fields in the dataset designer (ADR-0071)

    The dataset designer's field catalog and Included-relationships picker now
    support multi-hop relationship paths (account.owner.region), matching the
    framework's multi-hop join support (ADR-0071 P2):

    • useDatasetFieldCatalog walks each included path hop-by-hop, fetching every
      object along the chain, so path.field options surface for fields two–three
      to-one hops deep (grouped under a chained Account → Owner → User heading).
    • The Included-relationships combo offers one level deeper along each
      already-included path (drill accountaccount.owner), capped at 3 hops.
    • The author-time "relationship not in Included" warning generalizes to the full
      relationship path (account.owner), with one-click "Add it".

    Single-hop datasets are unchanged.

  • 6668759: feat(console): entitlement- & state-aware environment actions

    The sys_environment list now presents the right create affordance for the
    org's state (born-with-env) instead of POST-then-error:

    • No production env (historical orgs) → "Set up your production environment";
      the create POST provisions the org's one production env — this path never errors.
    • Has prod env, free plan → an "Add environment" button that opens a friendly
      upgrade prompt (CTA to billing) instead of POSTing into a 403.
    • Has prod env, paid plan → "Add development environment" creates a dev env.

    The action runtime's apiHandler now also turns the cloud env-create entitlement
    403s (DEV_ENV_PLAN_LOCKED / DEV_ENV_LIMIT / PRODUCTION_ENV_LIMIT) into a
    friendly upgrade/limit dialog with a CTA rather than a red error toast — a safety
    net that covers any path. State is resolved from the new org-scoped
    GET /cloud/environment-entitlements summary, with a row-derived hasProductionEnv
    fallback so the production-setup path works even against an older control plane.

  • 41c60c4: Flow builder: variable data-picker for expression / template config fields. Expression and template surfaces (decision Branches, edge Condition, Assignment values, Screen description, CRUD field values / filter, subflow / script inputs) now show a "{x}" picker listing the references in scope at that node — flow variables, upstream node outputs, the trigger record's fields, and any enclosing loop item — resolved graph-aware by walking the flow back from the node. Selecting a reference inserts the correctly-braced token at the cursor (bare CEL in expression fields, {var} in template fields), handling the ADR-0032 brace-in-CEL trap for the author. Free-text typing is unchanged and an empty scope degrades to a plain input.

  • d23db5c: feat(detail): related-list add-by-picker (generic m2m/junction) + a generic "Assigned Users" management UI on permission sets (assign ai_seat and any role with zero bespoke CRUD; server-side cap errors surface inline).

Patch Changes

  • 81ad9aa: feat(studio): package lifecycle UI — Duplicate base, Adopt loose items, structure-only delete (ADR-0070 D4/D5/D6)

    PackageDetailSheet gains the user-facing affordances for the package-as-
    lifecycle-unit work:

    • DuplicatePOST /packages/:id/duplicate (clone a base into a new
      writable package; D4).
    • Adopt loose itemsPOST /packages/:id/adopt-orphans (migrate every
      package-less orphan into this base; D5).
    • Delete now asks whether to drop records too (?keepData) — structure-only
      vs everything (D4 Q3).

    D6 guardrail test: the scope selector never defaults to the package-less
    Local / Custom sentinel (writableBaseOptions excludes it; real bases sort
    first).

  • 4b1cb7a: feat(studio): package-first create flow — prompt or redirect to a writable base (ADR-0070 D3)

    Studio's create entry points no longer let a new metadata item land in a code
    package or the package-less "Local / Custom" bucket. ResourceListPage's create
    gate (handleCreate) now: opens the create-base dialog when no writable base
    exists; redirects into the first base when the active scope is Local/none but
    bases exist; otherwise proceeds normally. Adds package-scope helpers
    (isLocalScope / writableBaseOptions) with tests, surfaces the kernel's
    writable_package_required (422) as an actionable error in ResourceEditPage,
    and exports CreatePackageDialog from PackagesPage for reuse.

  • 8c2191d: fix(console): polished, localized "Assigned Users" management for permission sets — resolves users to name/email (no raw id), zh/en localized, friendly inline cap message (drops the dev [Tag] prefix), people-rows with visible remove + add-via-picker.

  • 6028192: fix(console): gate the AI surface on the access-filtered agent catalog (per-user), not the deployment-wide service-ai capability

    useAiSurfaceEnabled keys off GET /api/v1/ai/agents again (>= 1 agent → AI shows), reverting objectui#1992. The agent-catalog route is now access-filtered server-side (ADR-0049 / ADR-0068): it returns only the agents the caller may chat, so a user WITHOUT the per-user AI seat (ai_seat) gets an empty catalog and the whole AI surface (FAB, /ai routes, top-bar + designer "Ask AI") hides for them — instead of showing a control that 403s on click. The discovery services.ai flag is deployment-wide and cannot express per-user seating, so it is the wrong signal for the AI-seat gate. Community-Edition gating is unaffected: no service-ai → no agents → empty catalog → hidden.

  • e575da0: fix(ai): stop the AI composer placeholder doubling to "Ask Ask…" for the Ask agent

    The composer placeholder is Ask {agent}…, which reads fine for most agents
    ("Ask Build…") but doubles to "Ask Ask…" for the data-query agent whose label is
    literally "Ask". The Ask agent now uses its purpose-built placeholder
    (console.ai.askAnything → "Ask anything…", already localized) instead. Found
    dogfooding the AI Ask flow.

  • cde7502: fix(form): create/edit record modal now honors the object's default form view

    The "New " modal (and the modal edit form) rendered every field from
    the raw object schema, in schema order — ignoring the curated sections + field
    selection/order defined in the object's default FORM VIEW. Customizing the form
    view (section grouping, field selection/order) had no effect on the create
    modal; only tabbed views were partially honored, while a simple view with
    curated sections was dropped entirely.

    New resolveFormViewLayout(objectDef) helper resolves the default form view
    (objectDef.form ?? formViews.default) into the modal's layout props (curated
    sections, contentLayout: 'tabbed', and master-detail subforms), mirroring
    the full-screen RecordFormPage. It is wired into:

    • the global New/Edit ModalForm in AppContent (replacing the tabbed-only
      inline logic so simple sectioned views are honored too), and
    • useActionModal (action-opened forms), which previously passed no
      fields/sections and so fell back to the whole object schema.

    When the object declares no form view — or one without sections — the modal
    keeps its prior flat-field behavior. Frontend-only.

  • 0d8dbda: fix(metadata-admin): dataset filter builder ignores incomplete conditions

    groupToCondition emitted a condition for any row that had a field, even when
    its value was still blank — producing a silently-wrong filter like
    { organization_id: { $eq: "" } } (matches only empty → excludes everything)
    instead of "no filter". Now rows with an empty/undefined/[] value are skipped
    (value-less operators like is-empty / is-not-empty are still kept). Applies to both
    the dataset Scope filter and per-measure filters. Found by dogfooding.

  • e8c1c85: fix(metadata-admin): re-base a dataset when its base object changes

    A dataset's joins (include), dimensions, measures, and filter all reference the
    base object's fields. Changing the base object left those referencing the OLD
    object — stale field refs that silently produce broken/ambiguous queries. Now a
    real object change clears the object-dependent config (selecting the same object
    is a no-op), and a heads-up note appears while there is config that a change would
    clear. Found by dogfooding (G1).

  • 0119ff4: Designer derives create defaults from the spec's create seed (/meta/types)

    The metadata create flow now builds a new item's body from the server's authoritative createSeed (delivered per type on the /meta/types registry entry — the single source of truth in @objectstack/spec) instead of the locally hardcoded createDefaults, falling back to createDefaults when the server provides no seed (older server, or canvas-create types). This closes the drift loop behind the "designer emits a minimal shape the spec rejects → create→save 422" family (dashboard layout, action body): the structural create defaults now come from the same place the spec validates against, so they cannot diverge. Extracted as the pure, unit-tested buildCreateModeBody.

  • 8e7c1da: fix(preview): draft-preview bar no longer demands a redundant Publish when nothing is pending

    Under the auto-publish posture an AI build leaves zero pending drafts, yet opening a
    draft preview still showed "Draft preview — Nothing here is live until you publish."
    alongside "Changes (0)" and a Publish button — a self-contradicting, no-op call to
    action. DraftPreviewBar now reflects the real pending-draft count: when it is
    known to be zero the bar softens to a neutral preview indicator and drops the
    Publish/Changes affordances; an unknown count (still loading / fetch failed) keeps
    the publish path. HomePage (count-gated) and RuntimeDraftBar (draft-gated)
    already behaved this way — this aligns the third surface.

  • 522a54c: feat(studio): make the flow-canvas error banner clickable

    The inline structural-error banner (ADR-0044 cycle surfacing) is now driven by
    the unified problems list, and each row with a concrete target is clickable —
    clicking it selects and pans-to-reveal the offending node/edge (the same reveal
    the Problems panel performs). So the always-visible banner is actionable without
    opening the panel. Drops the now-redundant validationErrors string prop: the
    banner, the Problems panel, and the on-canvas badges all share one source.

  • cdc6246: Flow builder (Flow builder: variable data-picker (autocomplete) for expression / template fields #1934): expression problems — ADR-0032 brace/shape errors and scope-aware "unknown reference" warnings — now also surface in the flow Problems panel and as on-canvas node/edge badges (feat(studio): on-canvas validation badges + Problems panel for the flow builder #1972), not just inline in the inspector. A {record.x} brace-in-CEL mistake or a typo'd variable is now visible at the flow level without opening each node. The start node's bare trigger-record fields are excluded from the ref check to avoid false positives (the inline inspector check still covers them).

  • 7fe2735: Flow builder data-picker (Flow builder: variable data-picker (autocomplete) for expression / template fields #1934): the cursor-insertion math is extracted into a pure insertToken helper with unit tests (alongside formatToken) — bare CEL vs {var} template insertion, append / mid-string / selection-replace, and clamping a reversed or out-of-range selection. Pure refactor, no behavior change.

  • 3f529a8: refactor(studio): derive the flow red-error highlight from the unified problem list (one validateFlowDraft pass)

    Follow-up to feat(studio): on-canvas validation badges + Problems panel for the flow builder #1972 (Problems panel + badges) and feat(studio): make the flow-canvas error banner clickable (reveal on click) #1976 (clickable banner). The
    flow preview still ran validateFlowDraft twice per render — once in
    buildFlowProblems (badges / banner / panel) and again in a separate memo that
    derived the red node/edge ring/stroke — with the cycle-highlight logic duplicated
    between them.

    buildFlowProblems is now the single validation pass: a new
    deriveInvalidElements(problems) produces the red error set (errors only; a
    cycle paints its whole loop via a per-problem highlight set while its badge +
    reveal stay on the closing edge). The preview drops its second validateFlowDraft
    call. The clickable banner (feat(studio): make the flow-canvas error banner clickable (reveal on click) #1976), badges, and panel are unchanged — all four
    surfaces now derive from one list, so they cannot drift.

  • 0b9c96c: Flow builder data-picker follow-ups (Flow builder: variable data-picker (autocomplete) for expression / template fields #1934): (1) a scope-aware "unknown reference" warning pairs the picker with inline validation — a typed reference whose root isn't in scope at the node is flagged with a nearest-match "did you mean?" hint (conservative: root-only, skips function calls / string literals / runtime globals; non-blocking amber). (2) Assignment values authored in the array form [{ variable, value }] now render in the key/value editor (and get the picker) instead of falling back to Advanced JSON; the editor reads both the object-map and array shapes and preserves whichever was authored. (3) A script code body (JS/TS, not a {var} template) now inserts bare references via a refMode field override — {x} is a syntax error in a script.

  • 47537fe: Flow builder data-picker (Flow builder: variable data-picker (autocomplete) for expression / template fields #1934): inline validation now also shows on the repeater surfaces that carry the picker — decision Branches expressions, screen field "visible when", and key/value values — not just single fields. Each shows the ADR-0032 brace error (red) or a scope-aware "unknown reference" warning (amber) via a shared FlowExprIssue line. The trigger-record picker also offers previous.<field> references on update / change / before-update triggers.

  • 17ba30d: feat(studio): on-canvas validation badges + a Problems panel for the flow builder

    Flow validation only surfaced as a top banner ("…N error(s)") that didn't point
    to the offending element — in a non-trivial flow you couldn't tell which node
    or edge was wrong. The simulator's validateFlowDraft already detected the
    structural problems (no resolvable entry, unreachable nodes, a decision with no
    default branch, duplicate node ids, dangling edges, un-declared cycles); they
    just weren't shown on the canvas. This was a surfacing gap, not a detection one.

    The flow preview now:

    • renders an error / warning badge on each offending node and edge, with the
      issue message(s) as its tooltip;
    • adds a Problems panel listing every issue (structural + the server
      _diagnostics already attached to the layered record); clicking a row selects
      and reveals (pans to) the node/edge;
    • clears badges + rows as issues are resolved (everything derives from the live
      draft).

    validateFlowDraft now tags dangling-edge errors with their endpoints so they
    key to the offending connection, and a new flow-problems module maps both
    sources onto concrete canvas elements (node id / stable edge key). Server
    diagnostics reach the preview through a new optional diagnostics prop on
    MetadataPreviewProps.

  • 104d181: fix(studio): flow wait-node inspector tolerates the loose config shape

    The wait-node property form read only the spec-canonical
    waitEventConfig.{eventType,signalName,…}, but the engine also accepts a looser
    config.{eventType,…} shape — which the canonical showcase_budget_approval
    (and AI-authored flows) use. So a showcase-shaped wait node opened in the
    designer showed blank "Wait for" / "Signal name" fields.

    Flow config fields gain an optional fallbackPath: reads fall back to it (so
    loose-shape wait nodes display, and dependent fields reveal), writes target the
    canonical path and prune the fallback (migrate-on-edit), and the fallback's
    config key is suppressed from the Advanced block. The wait fields now fall
    back to config.*, so the designer matches the engine's tolerance. Pairs with
    the ADR-0044 revise-loop authoring (feat(studio): author the approval revise loop in the flow designer (ADR-0044) #1954).

  • 1fa5982: fix(studio): preview joined reports in the report editor (was "design blind")

    Found dogfooding report design in Studio as a business user. The report editor's
    live preview only rendered single dataset-bound reports — a joined report
    (which carries its data on blocks, with no top-level dataset) fell through to
    the "Bind a dataset to preview this report" empty state, so an author building a
    joined report saw nothing and designed blind.

    ReportPreview now renders a joined report (≥1 dataset-bound block) through the
    same runtime ReportRenderer (→ DatasetReportRenderer, which already stacks
    the blocks), keeping the preview pixel-equal with the runtime, and shows a
    joined-aware empty state ("Add a block…") when no block is bound yet.

  • Updated dependencies [8e7c1da]

  • Updated dependencies [cf746c9]

  • Updated dependencies [d23db5c]

    • @object-ui/i18n@7.2.0
    • @object-ui/auth@7.2.0
    • @object-ui/types@7.2.0
    • @object-ui/components@7.2.0
    • @object-ui/fields@7.2.0
    • @object-ui/react@7.2.0
    • @object-ui/collaboration@7.2.0
    • @object-ui/core@7.2.0
    • @object-ui/data-objectstack@7.2.0
    • @object-ui/layout@7.2.0
    • @object-ui/permissions@7.2.0
    • @object-ui/plugin-editor@7.2.0
    • @object-ui/providers@7.2.0
  • @object-ui/plugin-detail@7.2.0

    Minor Changes

    • d23db5c: feat(detail): related-list add-by-picker (generic m2m/junction) + a generic "Assigned Users" management UI on permission sets (assign ai_seat and any role with zero bespoke CRUD; server-side cap errors surface inline).

    Patch Changes

    • Updated dependencies [8e7c1da]
      • @object-ui/i18n@7.2.0

    @object-ui/types@7.2.0

    Minor Changes

    • d23db5c: feat(detail): related-list add-by-picker (generic m2m/junction) + a generic "Assigned Users" management UI on permission sets (assign ai_seat and any role with zero bespoke CRUD; server-side cap errors surface inline).

    @object-ui/auth@7.2.0

    Patch Changes

    • cf746c9: fix(auth): only render the "Sign in with SSO" button when the server reports it

      LoginForm rendered the SSO button unconditionally, so a deployment without
      enterprise SSO wired (the default for self-hosted / os dev local runs) showed
      a button whose POST /sign-in/sso route isn't mounted — clicking it surfaced
      the misleading "No SSO provider is configured for this email domain." only at
      click time.

      The button is now gated on features.sso from GET /auth/config, mirroring how
      SocialSignInButtons already gates social providers. It defaults to hidden, so a
      failed config fetch or an older server that doesn't report the flag simply omits
      the button rather than offering a dead end. Requires the matching
      @objectstack/plugin-auth change that surfaces features.sso.

    • Updated dependencies [d23db5c]

      • @object-ui/types@7.2.0

    @object-ui/cli@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0

    @object-ui/collaboration@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/components@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/core@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/data-objectstack@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/fields@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/providers@7.2.0

    @object-ui/i18n@7.2.0

    Patch Changes

    • 8e7c1da: fix(preview): draft-preview bar no longer demands a redundant Publish when nothing is pending

      Under the auto-publish posture an AI build leaves zero pending drafts, yet opening a
      draft preview still showed "Draft preview — Nothing here is live until you publish."
      alongside "Changes (0)" and a Publish button — a self-contradicting, no-op call to
      action. DraftPreviewBar now reflects the real pending-draft count: when it is
      known to be zero the bar softens to a neutral preview indicator and drops the
      Publish/Changes affordances; an unknown count (still loading / fetch failed) keeps
      the publish path. HomePage (count-gated) and RuntimeDraftBar (draft-gated)
      already behaved this way — this aligns the third surface.

    @object-ui/layout@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/mobile@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/permissions@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/plugin-ai@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-calendar@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/plugin-detail@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/mobile@7.2.0

    @object-ui/plugin-charts@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-chatbot@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-dashboard@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-designer@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [0caea33]
    • Updated dependencies [4aa8b84]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/plugin-grid@7.2.0
      • @object-ui/plugin-form@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/data-objectstack@7.2.0

    @object-ui/plugin-editor@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-form@7.2.0

    Patch Changes

    • 4aa8b84: fix(plugin-form): call useRecordContext unconditionally; drop impure render-time Date.now()

      LineItemsPanel wrapped useRecordContext() in a try/catch, which ESLint flagged
      as react-hooks/rules-of-hooks ("React Hook is called conditionally") — a genuine
      hook-order hazard if the catch ever fired part-way through render. useRecordContext
      returns null outside a <RecordContextProvider> and never throws, so the guard was
      dead code; it's now called unconditionally at the top level and the null case is
      handled by the existing optional chaining.

      Also clears a second pre-existing lint error: EmbeddableForm now seeds mountedAtRef
      from 0 instead of calling the impure Date.now() during render (the mount effect
      already overwrites it before any submit, so the anti-bot min-fill check is unchanged),
      fixing the react-compiler "Cannot call impure function during render" error. No
      behavior change.

    • Updated dependencies [d23db5c]

      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/permissions@7.2.0

    @object-ui/plugin-gantt@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/plugin-detail@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-grid@7.2.0

    Patch Changes

    • 0caea33: fix(grid): list column headers fall back to the field's label, not the prettified machine name

      A view column declared as a bare { field: 'request_title' } (no explicit label) rendered
      its header from the prettified machine name ("Request title") even when the field had a
      localized label ("申请标题"). On a non-English app that surfaced English column headers despite
      fully-localized field labels. ObjectGrid now resolves the header as
      column.label → schema field label → prettified name, matching the other header-resolution
      sites in the same file. Found dogfooding AI-built Chinese apps.

    • Updated dependencies [8e7c1da]

    • Updated dependencies [d23db5c]

      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/mobile@7.2.0

    @object-ui/plugin-kanban@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/plugin-detail@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-map@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-markdown@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-report@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [0caea33]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/plugin-grid@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/fields@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-timeline@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/mobile@7.2.0

    @object-ui/plugin-tree@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/plugin-view@7.2.0

    Patch Changes

    • Updated dependencies [0caea33]
    • Updated dependencies [4aa8b84]
    • Updated dependencies [d23db5c]
      • @object-ui/plugin-grid@7.2.0
      • @object-ui/plugin-form@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/providers@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/react@7.2.0

    Patch Changes

    • Updated dependencies [8e7c1da]
    • Updated dependencies [d23db5c]
      • @object-ui/i18n@7.2.0
      • @object-ui/types@7.2.0
      • @object-ui/core@7.2.0
      • @object-ui/data-objectstack@7.2.0

    @object-ui/runner@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/components@7.2.0
      • @object-ui/plugin-charts@7.2.0
      • @object-ui/plugin-kanban@7.2.0
      • @object-ui/react@7.2.0
      • @object-ui/core@7.2.0

    @object-ui/tenant@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0

    @object-ui/console@7.2.0

    @object-ui/create-plugin@7.2.0

    @object-ui/plugin-list@7.2.0

    object-ui@7.2.0

    Patch Changes

    • Updated dependencies [d23db5c]
      • @object-ui/types@7.2.0
      • @object-ui/core@7.2.0

@vercel

vercelBot commented Jun 26, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectuiIgnoredIgnoredJun 26, 2026 11:43am

Request Review

@os-zhuang
os-zhuang merged commit 097acaa into mainJun 26, 2026
2 checks passed
@os-zhuang
os-zhuang deleted the changeset-release/main branch June 26, 2026 13:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@os-zhuang