chore: version packages#2685
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
63e0d44 to
ce06c58
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
@objectstack/core@12.6.0
Minor Changes
21420d9: Seed loader and data-import now route bulk writes through the engine's array-form
insert()(one round-trip per batch, with parent-deduplicated summary recompute) instead of oneinsert()/createData()call per record, and both retry transient driver errors instead of silently dropping the row (perf/reliability: seed + data-import bypass the engine's bulk-insert path → N round-trips, N summary recomputes, no transient retry #2678).A new shared helper,
bulkWrite(@objectstack/core), batches rows through a caller-supplied batch-write function, retries a whole-batch transient failure (network blip / timeout) with exponential backoff, and degrades to per-row writes (each itself retried) when a batch fails for a non-transient reason — so one bad row can't drop the other N-1.withTransientRetrywraps a single write (e.g. an update) with the same retry behavior.SeedLoaderService.loadDataset()(@objectstack/metadata-protocol) buffers insert-mode records and flushes them in batches of 200 via the engine's arrayinsert(). Datasets with a self-referencing field (e.g.employee.manager_id -> employee) keep the historical per-record write path, since a later record may need an earlier one's freshly-assigned id.runImport()(@objectstack/rest) buffers create-resolved rows and flushes them viaprotocol.createManyData()when the protocol supports it, falling back to the original per-rowcreateData()call otherwise.Protocol.createManyData(@objectstack/metadata-protocol) now forwardscontexttoengine.insert()likecreateDataalready did, so tenant-scoped bulk creates work correctly.Previously, a 1000-row seed or import into an object with a rollup summary issued 1000+ round-trips and up to 1000 summary recomputes; a single transient network error on any one row silently dropped it with no retry (the 2026-07-06 HotCRM first-boot incident). A
bulkCreate-capable driver now sees roughlyceil(N/batch)writes, and a transient error is retried before a row is ever reported as failed.Fix (
@objectstack/driver-sql):SqlDriver.bulkCreate()never generated a client-side id for a row missing one, unlikecreate()— a latent gap that this change is the first to exercise at scale (a bulk-inserted row without a driver-native id default silently landed withid: NULL).bulkCreate()now mirrorscreate()'s id/_idnormalization per row.Patch Changes
@objectstack/metadata-protocol@12.6.0
Minor Changes
21420d9: Seed loader and data-import now route bulk writes through the engine's array-form
insert()(one round-trip per batch, with parent-deduplicated summary recompute) instead of oneinsert()/createData()call per record, and both retry transient driver errors instead of silently dropping the row (perf/reliability: seed + data-import bypass the engine's bulk-insert path → N round-trips, N summary recomputes, no transient retry #2678).A new shared helper,
bulkWrite(@objectstack/core), batches rows through a caller-supplied batch-write function, retries a whole-batch transient failure (network blip / timeout) with exponential backoff, and degrades to per-row writes (each itself retried) when a batch fails for a non-transient reason — so one bad row can't drop the other N-1.withTransientRetrywraps a single write (e.g. an update) with the same retry behavior.SeedLoaderService.loadDataset()(@objectstack/metadata-protocol) buffers insert-mode records and flushes them in batches of 200 via the engine's arrayinsert(). Datasets with a self-referencing field (e.g.employee.manager_id -> employee) keep the historical per-record write path, since a later record may need an earlier one's freshly-assigned id.runImport()(@objectstack/rest) buffers create-resolved rows and flushes them viaprotocol.createManyData()when the protocol supports it, falling back to the original per-rowcreateData()call otherwise.Protocol.createManyData(@objectstack/metadata-protocol) now forwardscontexttoengine.insert()likecreateDataalready did, so tenant-scoped bulk creates work correctly.Previously, a 1000-row seed or import into an object with a rollup summary issued 1000+ round-trips and up to 1000 summary recomputes; a single transient network error on any one row silently dropped it with no retry (the 2026-07-06 HotCRM first-boot incident). A
bulkCreate-capable driver now sees roughlyceil(N/batch)writes, and a transient error is retried before a row is ever reported as failed.Fix (
@objectstack/driver-sql):SqlDriver.bulkCreate()never generated a client-side id for a row missing one, unlikecreate()— a latent gap that this change is the first to exercise at scale (a bulk-inserted row without a driver-native id default silently landed withid: NULL).bulkCreate()now mirrorscreate()'s id/_idnormalization per row.Patch Changes
@objectstack/rest@12.6.0
Minor Changes
21420d9: Seed loader and data-import now route bulk writes through the engine's array-form
insert()(one round-trip per batch, with parent-deduplicated summary recompute) instead of oneinsert()/createData()call per record, and both retry transient driver errors instead of silently dropping the row (perf/reliability: seed + data-import bypass the engine's bulk-insert path → N round-trips, N summary recomputes, no transient retry #2678).A new shared helper,
bulkWrite(@objectstack/core), batches rows through a caller-supplied batch-write function, retries a whole-batch transient failure (network blip / timeout) with exponential backoff, and degrades to per-row writes (each itself retried) when a batch fails for a non-transient reason — so one bad row can't drop the other N-1.withTransientRetrywraps a single write (e.g. an update) with the same retry behavior.SeedLoaderService.loadDataset()(@objectstack/metadata-protocol) buffers insert-mode records and flushes them in batches of 200 via the engine's arrayinsert(). Datasets with a self-referencing field (e.g.employee.manager_id -> employee) keep the historical per-record write path, since a later record may need an earlier one's freshly-assigned id.runImport()(@objectstack/rest) buffers create-resolved rows and flushes them viaprotocol.createManyData()when the protocol supports it, falling back to the original per-rowcreateData()call otherwise.Protocol.createManyData(@objectstack/metadata-protocol) now forwardscontexttoengine.insert()likecreateDataalready did, so tenant-scoped bulk creates work correctly.Previously, a 1000-row seed or import into an object with a rollup summary issued 1000+ round-trips and up to 1000 summary recomputes; a single transient network error on any one row silently dropped it with no retry (the 2026-07-06 HotCRM first-boot incident). A
bulkCreate-capable driver now sees roughlyceil(N/batch)writes, and a transient error is retried before a row is ever reported as failed.Fix (
@objectstack/driver-sql):SqlDriver.bulkCreate()never generated a client-side id for a row missing one, unlikecreate()— a latent gap that this change is the first to exercise at scale (a bulk-inserted row without a driver-native id default silently landed withid: NULL).bulkCreate()now mirrorscreate()'s id/_idnormalization per row.Patch Changes
@objectstack/service-automation@12.6.0
Minor Changes
0adcc1c: Flow
notifynode: support a click-through target so inbox notifications can be clicked into the related record (flow notify 节点无法给通知附带点击跳转目标(source_object/source_id)——inbox 通知点不进对应记录 #2675).The
notifynode now readssourceObject/sourceId(or the nestedsource: { object, id }form) andactorIdfrom its config and forwards them to the messaging service, which persistssys_notification.source_object/source_id/actor_idand synthesizes a/{object}/{id}inbox deep-link. Both keys interpolate flow variables (e.g.sourceId: '{new_quotation.id}'), and a half-specified target (object without id, or vice versa) is dropped so the inbox never renders a dead link.urlis now accepted as an alias foractionUrl(an explicit URL still overrides the synthesized link). The node also publishes aconfigSchemadocumenting all accepted keys for the Studio form.Previously the node consumed only
recipients/title/message/channels, so every notification it emitted hadsource_object/source_id=nulland could not be clicked through to a record.Patch Changes
@objectstack/service-settings@12.6.0
Minor Changes
c4fd39f: Localization: drop the hard-coded
USDplatform default for the workspace Default currency setting.Previously the
localization.currencysetting defaulted to'USD', and that value was applied to anycurrency-typed field that omits its own code — so every code-less amount surfaced a$/US$symbol even when nothing (field, measure, or workspace) actually named a currency. The setting now has no platform default: a code-less currency amount renders as a plain number unless the workspace explicitly picks a default currency (or the field declares its own).Migration: a workspace that relied on the implicit USD default and wants to keep showing
$should set Settings → Localization → Default currency toUSDexplicitly. Fields/measures that declare their own currency code are unaffected.Patch Changes
@objectstack/spec@12.6.0
Minor Changes
6cebf22:
Action: add an explicitorderfield so authors and plugins can decide which action holds the record-header primary-button slot, instead of depending on fragile cross-filedefineStack({ actions })registration order (记录页头审批决策按钮(Approve/Reject)被 app 动作挤进溢出菜单;建议审批动作可优先渲染 + Action 增加显式排序 #2670).orderis an optional number, lower = higher / more prominent, defaulting to0.mergeActionsIntoObjects()now stable-sorts every action group — each object'sactionsand the top-levelactions— byorderat bothdefineStack()andcomposeStacks()time. Inrecord_headerthe first visible action becomes the primary button, so a negativeorderpromotes an action into the primary slot and a positiveorderdemotes it toward the⋯overflow menu. This is the declarative lever a plugin such as plugin-approvals uses to make anApprove/Rejectdecision stably outrank app actions, rather than hiding the other actions to "make room".Fully backward compatible: the sort is stable and treats unset
orderas0, so action groups where nobody setsorderkeep their exact registration order (and array reference). The record-header renderer (objectui) may additionally prefer avariant: 'primary'action when two actions tie onorder.@objectstack/verify@12.6.0
Minor Changes
checkReadCoercion— a reusable, driver-agnostic read-coercion conformancehelper (a stored value must read back as its declared type: boolean as boolean,
json as object, integer as number). Mirrors
checkLedger: returns a list ofproblems (empty = conformant) with no test-runner dependency, so any driver —
including out-of-tree ones like cloud's driver-turso — can run the identical
contract against itself. This is the invariant behind the case_escalation
1 != trueincident.Patch Changes
@objectstack/hono@12.6.0
Patch Changes
@objectstack/account@12.6.0
Patch Changes
@objectstack/setup@12.6.0
Patch Changes
@objectstack/studio@12.6.0
Patch Changes
@objectstack/cli@12.6.0
Patch Changes
@objectstack/client@12.6.0
Patch Changes
@objectstack/client-react@12.6.0
Patch Changes
@objectstack/cloud-connection@12.6.0
Patch Changes
@objectstack/connector-mcp@12.6.0
Patch Changes
@objectstack/connector-openapi@12.6.0
Patch Changes
@objectstack/connector-rest@12.6.0
Patch Changes
@objectstack/connector-slack@12.6.0
Patch Changes
@objectstack/formula@12.6.0
Patch Changes
@objectstack/lint@12.6.0
Patch Changes
@objectstack/mcp@12.6.0
Patch Changes
@objectstack/metadata@12.6.0
Patch Changes
@objectstack/metadata-core@12.6.0
Patch Changes
@objectstack/metadata-fs@12.6.0
Patch Changes
@objectstack/objectql@12.6.0
Patch Changes
@objectstack/observability@12.6.0
Patch Changes
@objectstack/platform-objects@12.6.0
Patch Changes
@objectstack/driver-memory@12.6.0
Patch Changes
@objectstack/driver-mongodb@12.6.0
Patch Changes
@objectstack/driver-sql@12.6.0
Patch Changes
21420d9: Seed loader and data-import now route bulk writes through the engine's array-form
insert()(one round-trip per batch, with parent-deduplicated summary recompute) instead of oneinsert()/createData()call per record, and both retry transient driver errors instead of silently dropping the row (perf/reliability: seed + data-import bypass the engine's bulk-insert path → N round-trips, N summary recomputes, no transient retry #2678).A new shared helper,
bulkWrite(@objectstack/core), batches rows through a caller-supplied batch-write function, retries a whole-batch transient failure (network blip / timeout) with exponential backoff, and degrades to per-row writes (each itself retried) when a batch fails for a non-transient reason — so one bad row can't drop the other N-1.withTransientRetrywraps a single write (e.g. an update) with the same retry behavior.SeedLoaderService.loadDataset()(@objectstack/metadata-protocol) buffers insert-mode records and flushes them in batches of 200 via the engine's arrayinsert(). Datasets with a self-referencing field (e.g.employee.manager_id -> employee) keep the historical per-record write path, since a later record may need an earlier one's freshly-assigned id.runImport()(@objectstack/rest) buffers create-resolved rows and flushes them viaprotocol.createManyData()when the protocol supports it, falling back to the original per-rowcreateData()call otherwise.Protocol.createManyData(@objectstack/metadata-protocol) now forwardscontexttoengine.insert()likecreateDataalready did, so tenant-scoped bulk creates work correctly.Previously, a 1000-row seed or import into an object with a rollup summary issued 1000+ round-trips and up to 1000 summary recomputes; a single transient network error on any one row silently dropped it with no retry (the 2026-07-06 HotCRM first-boot incident). A
bulkCreate-capable driver now sees roughlyceil(N/batch)writes, and a transient error is retried before a row is ever reported as failed.Fix (
@objectstack/driver-sql):SqlDriver.bulkCreate()never generated a client-side id for a row missing one, unlikecreate()— a latent gap that this change is the first to exercise at scale (a bulk-inserted row without a driver-native id default silently landed withid: NULL).bulkCreate()now mirrorscreate()'s id/_idnormalization per row.Updated dependencies [6cebf22]
Updated dependencies [21420d9]
@objectstack/driver-sqlite-wasm@12.6.0
Patch Changes
@objectstack/embedder-openai@12.6.0
Patch Changes
@objectstack/knowledge-memory@12.6.0
Patch Changes
@objectstack/knowledge-ragflow@12.6.0
Patch Changes
@objectstack/plugin-approvals@12.6.0
Patch Changes
@objectstack/plugin-audit@12.6.0
Patch Changes
@objectstack/plugin-auth@12.6.0
Patch Changes
@objectstack/plugin-dev@12.6.0
Patch Changes
@objectstack/plugin-email@12.6.0
Patch Changes
@objectstack/plugin-hono-server@12.6.0
Patch Changes
@objectstack/plugin-org-scoping@12.6.0
Patch Changes
@objectstack/plugin-reports@12.6.0
Patch Changes
@objectstack/plugin-security@12.6.0
Patch Changes
@objectstack/plugin-sharing@12.6.0
Patch Changes
@objectstack/plugin-webhooks@12.6.0
Patch Changes
@objectstack/runtime@12.6.0
Patch Changes
b5a87eb: Sandbox: stop
QuickJSScriptRunnerfrom crashing when a hook context holds a non-serialisable host object.installCtxmarshalledctxinto the QuickJS sandbox with a bareJSON.stringify. If the context (or anything reachable from it) held a livesetTimeout/setIntervalhandle,JSON.stringifythrewTypeError: Converting circular structure to JSON(Timeout._idlePrev -> TimersList._idleNext -> …) and took the whole hook down (QuickJSScriptRunner.installCtx throws when context contains a Timeout with circular refs #2674). Marshalling now goes through a sharedsafeJsonStringifythat drops circular back-edges via a pathWeakSetand coercesBigIntto a string, so only JSON-safe leaves cross the boundary and the body still runs.Updated dependencies [6cebf22]
Updated dependencies [21420d9]
@objectstack/service-analytics@12.6.0
Patch Changes
@objectstack/service-cache@12.6.0
Patch Changes
@objectstack/service-cluster@12.6.0
Patch Changes
@objectstack/service-cluster-redis@12.6.0
Patch Changes
@objectstack/service-datasource@12.6.0
Patch Changes
@objectstack/service-i18n@12.6.0
Patch Changes
@objectstack/service-job@12.6.0
Patch Changes
@objectstack/service-knowledge@12.6.0
Patch Changes
@objectstack/service-messaging@12.6.0
Patch Changes
@objectstack/service-package@12.6.0
Patch Changes
@objectstack/service-queue@12.6.0
Patch Changes
@objectstack/service-realtime@12.6.0
Patch Changes
@objectstack/service-storage@12.6.0
Patch Changes
@objectstack/trigger-api@12.6.0
Patch Changes
@objectstack/trigger-record-change@12.6.0
Patch Changes
@objectstack/trigger-schedule@12.6.0
Patch Changes
@objectstack/types@12.6.0
Patch Changes
@objectstack/console@12.6.0
create-objectstack@12.6.0
@objectstack/sdui-parser@12.6.0
objectstack-vscode@12.6.0
@objectstack/example-crm@4.0.76
Patch Changes
@objectstack/example-showcase@0.2.22
Patch Changes
@objectstack/example-todo@4.0.76
Patch Changes
@objectstack/example-embed-objectql@0.0.16
Patch Changes
@objectstack/dogfood@0.0.24
Patch Changes
@objectstack/downstream-contract@0.0.22
Patch Changes