chore: release packages#2266
Closed
github-actions[bot] wants to merge 1 commit into
Closed
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
July 5, 2026 08:52
7631964 to
4bb97ff
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
July 5, 2026 09:05
4bb97ff to
c6b796a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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@11.5.0
Minor Changes
544d8eb: Add the app → Studio reverse bridge (ADR-0080): workspace admins see a "Design in Studio" entry in the app top bar that deep-links to the running app's owning package on the Studio design surface (
/studio/:packageId/data). Hidden for non-admins and for apps with no owning package; package writability stays server-side (read-only packages open as browse-only).6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.fbec4e1: feat(studio): pick a connector action from the chosen connector (no more hand-typed action ids)
In a flow's Connector Action node, the
actionIdfield was a free-text box(
sendMessage · sendplaceholder) — a typo silently produced a node that failsat run time. It was left as text because a connector's actions have "no flat
catalog"; but each connector already advertises its actions in the runtime
descriptors (
GET /api/v1/automation/connectors→{ name, actions:[{key,label}] }).actionIdis now a picker of the chosen connector's actions, resolved fromthe sibling
connectorId(mirroring howobject-fieldlists the fields of itsresolved object). New reference kind
connector-action+connectorSourceonFlowReferenceSpec;useConnectorActionOptionsfetches the descriptors andresolveConnectorNamereads the connector from the node'sconnectorConfig. Likeevery reference in the designer it stays an editable combobox — with no
connector chosen (or none installed) it degrades to free text with a hint
("Choose a Connector above to list its actions" / "Actions of .").
Closes the last critical hand-typed-identifier gap in flow-node config (the
object / field / flow / role / connector / template references were already
pickers). Unit-tested (
resolveConnectorName,connectorActionsToOptions).7a6837c: Studio package-create dogfood follow-ups (Studio package-create UX dogfood follow-ups (2026-07 browser walkthrough) objectstack#2615):
field_Nnames, so relabeling "New field" to "Status" yields astatuscolumn instead offield_2forever (objectui#2260).5ed8d2d: feat(studio): automation enable/disable switch + live status in the Automations rail
The Automations pillar showed only an icon + label per flow, and no way to turn a
flow on or off — so an author couldn't tell whether an automation was live, or
stop one without deleting it (the header even said "Off by default · review before
enabling", but nothing reflected or controlled it). UX eval Fix documentation deployment for www.objectui.org #6.
fetched from the engine's
GET /api/v1/automation/_status(persistedstatusis intent; this is what's actually enabled + bound to its trigger). Refetched
after a publish; degrades silently on an older backend. A flow the engine
doesn't know yet (never published) shows no dot — the amber "unpublished draft"
chip already covers that.
status(active ↔ obsolete) and saves the draft immediately; the change goeslive when the package is published (so "review before enabling" is preserved).
Pairs with framework's engine-side gate (
obsolete/invalid→ not bound).New
engine.studio.auto.*i18n keys (en + zh). Unit-tested (FlowStatusDot:enabled→On, disabled→Off, no-state→nothing, bound-vs-unbound tooltip). Verified in
a live browser: the rail shows a green "On" against every showcase flow and the
header switch reads "Enabled".
Patch Changes
ec6bb16: Studio Automations rail now shows authored-but-unpublished (draft) flows.
The Automations pillar loaded its rail with
client.list('flow', …)only, whichreturns published/active metadata — so a flow authored (saved as a draft) but not
yet published was invisible in the rail, even while the "Changes · N" counter
showed a pending draft existed. Every sibling pillar (Data / Interfaces / Access)
already merged
client.listDrafts; Automations was the sole outlier.The published ∪ draft merge is extracted into a shared, unit-tested
loadPackageSurfaceshelper and adopted by the Automations pillar, which also nowre-reads on
publishNonceso drafts that go live collapse back into the publishedrail after a package publish. A draft-only flow now appears in its rail (badged
"Unpublished draft"), is selectable, and loads its draft body for editing —
matching the other pillars. Fixes the empty-rail report for writable-base packages
whose flows are all still drafts.
4fbf910: Stop double-firing action toasts on record-detail script actions and the delete handler.
ActionRunner.handlePostExecutionalready surfaces a result'serroras a toast(and a success toast unless
silent). Two handlers ALSO toasted themselves whilereturning
{success:false, error}(or a non-silentsuccess), so on a runnerseeded with
onToastthe same message fired twice:RecordDetailViewserverActionHandler(script actions): the HTTP/inner-failbranch and the catch branch each called
toast.errorbefore returning the error.fix(app-shell): stop double-toasting failed script/modal action errors #2177 fixed the twin in
useConsoleActionRuntime(interface pages) but not thiscopy, so record-detail script-action failures (e.g. a
RECORD_LOCKEDfrom anapproval-locked record) still showed the error twice for everyone on the published
console bundle. Both branches now return the error and let the runner toast it once.
useObjectActionsdeletehandler (ObjectView list/detail deletes): kept itsricher localized toast (label + description, or the bulk succeeded/failed summary)
and now returns WITHOUT
erroron failure so the runner doesn't re-toast it, andmarks successful deletes
silentso the runner doesn't append a second generic"Action completed successfully" toast.
Adds
useObjectActions.test.tsxasserting exactly one toast on deletesuccess / failure / partial-bulk-failure.
6f15e43: test(studio): extend the create-conformance gate to the inline pillar creators
createConformance.test.tsguards that every authorable type's defaultcreate-form output passes spec validation — catching the recurring "the designer
emits a minimal shape the spec rejects, so create→save 422s" dead-end family. But
it read only the metadata-admin registry, so the Studio's inline "New X"
creators (Data → object, Automations → flow, Interfaces → app, Access →
permission) — which build their skeletons directly in
StudioDesignSurface.tsx,bypassing the registry — were uncovered. A future edit to one of those shapes
could turn its "New" button into a silent dead-end with nothing to catch it.
Extracted the four inline skeletons into pure, exported builders
(
studio-design/skeletons.ts) consumed by BOTH the pillars and a new gate block,so the test can't drift from what the "New" button actually emits. No behavior
change — the builders return the byte-identical skeletons. The gate now covers all
create paths (registry + inline); the four inline skeletons validate clean.
Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
@object-ui/components@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.Patch Changes
@object-ui/i18n@11.5.0
Minor Changes
/studio/:packageId/data). Hidden for non-admins and for apps with no owning package; package writability stays server-side (read-only packages open as browse-only).@object-ui/plugin-detail@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.Patch Changes
@object-ui/plugin-view@11.5.0
Minor Changes
6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.Patch Changes
@object-ui/react@11.5.0
Minor Changes
6fffd3d: Client-side data-invalidation bus — refresh data, don't rebuild UI (objectui#2269 P1).
@object-ui/reactgains the bus:notifyDataChanged({objectName, recordId?}),useDataInvalidation(objectName, recordId?)(reader nonce),subscribeDataChanges, anduseMutationInvalidationBridge(dataSource)which fans every dataSource write (MutationEvent) onto the bus. The bus also dispatches the legacyobjectui:related-changedwindow event, so pre-bus listeners keep working.key={refreshKey}remount ofRecordDetailView(AppContent) and thekey={actionRefreshKey}remount ofDetailView(RecordDetailView) are GONE: record data now refetches in place via the bus — scroll, collapsed sections, tabs and in-progress inline edits survive every save/action/undo. All nine action-success bumps became precisely-scopednotifyDataChangedcalls; undo/redo use the operation's ownobjectName/recordId.RelatedCountStoreis wired to the bus (tab count badges refetch after any change to their object) and itsuseSyncExternalStoresnapshot is now a monotonic version — previously it returned the sameMapreference, soemit()never re-rendered subscribers and invalidations left badges stale;useRelatedCountVersion()is exported and drives the probe effect's re-fetch.urlParams.ts—form/formObject/formLink/tab/recordId/palette/shortcutsconstants replace scattered string literals) and AGENTS.md Commandment feat: add live playground for interactive schema demonstration #8 (UI-state classification: state that must survive a data refresh may never live only in an uncontrolled component).Patch Changes
@object-ui/console@11.5.0
Patch Changes
@object-ui/auth@11.5.0
Patch Changes
@object-ui/cli@11.5.0
Patch Changes
@object-ui/collaboration@11.5.0
Patch Changes
@object-ui/core@11.5.0
Patch Changes
@object-ui/data-objectstack@11.5.0
Patch Changes
@object-ui/fields@11.5.0
Patch Changes
@object-ui/layout@11.5.0
Patch Changes
@object-ui/mobile@11.5.0
Patch Changes
@object-ui/permissions@11.5.0
Patch Changes
@object-ui/plugin-ai@11.5.0
Patch Changes
@object-ui/plugin-calendar@11.5.0
Patch Changes
@object-ui/plugin-charts@11.5.0
Patch Changes
@object-ui/plugin-chatbot@11.5.0
Patch Changes
@object-ui/plugin-dashboard@11.5.0
Patch Changes
@object-ui/plugin-designer@11.5.0
Patch Changes
@object-ui/plugin-editor@11.5.0
Patch Changes
@object-ui/plugin-form@11.5.0
Patch Changes
6c1ad9e: Record task flows open as derived overlays with lossless return (framework#2604, extends framework#2578).
?form=new/?form=<id>): browser Back closes the overlay with the origin (list scroll/filters, detail state) intact; field-heavy objects derive a full-screen modal (modalSize:'full') via the newderiveRecordFlowSurfacemirror in plugin-view, light ones keep the auto-sized modal.editMode:'page'opt-in unchanged.replace:trueso Back skips the transient form entry.?form=…&formObject=<child>&formLink=<fk>:<parentId>; the one global overlay pre-links the parent (refresh-safe), sizes to the CHILD object, and on save stays on the parent while only the child's related lists refetch. ModalForm now forwardsinitialValuesinto its master-detail (subforms) branch so pre-links survive for children with inline line items.Updated dependencies [544d8eb]
Updated dependencies [6fffd3d]
Updated dependencies [9255686]
@object-ui/plugin-gantt@11.5.0
Patch Changes
@object-ui/plugin-grid@11.5.0
Patch Changes
@object-ui/plugin-kanban@11.5.0
Patch Changes
@object-ui/plugin-map@11.5.0
Patch Changes
@object-ui/plugin-markdown@11.5.0
Patch Changes
@object-ui/plugin-report@11.5.0
Patch Changes
@object-ui/plugin-timeline@11.5.0
Patch Changes
@object-ui/plugin-tree@11.5.0
Patch Changes
@object-ui/providers@11.5.0
Patch Changes
@object-ui/runner@11.5.0
Patch Changes
@object-ui/tenant@11.5.0
Patch Changes
@object-ui/types@11.5.0
Patch Changes
9255686: Record detail tabs are URL-addressable (
?tab=) and survive subtree remounts (objectui#2257, ADR-0054 C3).buildDefaultTabsemits STABLE semantic tab values (details/related:<child>/related/activity/history) instead of leaving the renderer to synthesize index-derived ones.PageTabsRendererhonorsitem.value, a host-providedschema.defaultTab(validated against actual tabs) andschema.onTabChange; index fallback kept for authored schemas without values.RecordDetailViewrestores the active tab from?tab=and writes it back withreplace(tab switches never stack history), via the purewithPageTabsUrlSyncpage-tree injector (never mutates authored/memoized page schemas). LegacyDetailView.autoTabswired to the same contract (defaultTab/onTabChange).refreshKey-style) and dev-StrictMode URL churn; enables?tab=deep links; invalid values fall back to Details.@object-ui/create-plugin@11.5.0
@object-ui/plugin-list@11.5.0
@object-ui/react-runtime@11.5.0
@object-ui/sdui-parser@11.5.0
object-ui@11.5.0
Patch Changes