chore: version packages#2617
Closed
github-actions[bot] wants to merge 1 commit into
Closed
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
cda705d to
4310c66
Compare
4310c66 to
03c12b1
Compare
409ef7c to
1fbb576
Compare
1fbb576 to
bfbb911
Compare
bfbb911 to
24aa377
Compare
24aa377 to
fd0a214
Compare
fd0a214 to
fab8782
Compare
fab8782 to
0b35062
Compare
0b35062 to
cb070c7
Compare
cb070c7 to
453ab71
Compare
453ab71 to
c91c568
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/metadata-core@12.2.0
Minor Changes
da807f7: feat(spec)!: retire the placeholder metadata kinds
trigger,router,function,service(ADR-0088).The registry is the contract authors — human and AI — read to learn what can be authored, and these four kinds had no authoring surface, no loader, no schema, and no (or a dead) consumer.
MetadataTypeSchema+DEFAULT_METADATA_TYPE_REGISTRYshrink 30 → 26;OPS_FILE_SUFFIX_REGEXdrops the four suffixes; the dormant objectql load path that registered QL functions fromtype: 'function'metadata items is removed (defineStack({ functions })/ plugincontributes.functionsremain the delivered forms); the metadata-core lockstep enum follows.external_catalogstays and is now annotated RUNTIME-CREATED (ADR-0062): its lack of an authoring surface is correct design. The delivered replacements:hook/record_changeflows (trigger), plugincontributes.routes+ declarativeapis:(router),defineStack({ functions })(function), the plugin/service registry (service). Persistedsys_metadatarows are unaffected — no production read path re-parses storedtypevalues through the enum.Patch Changes
@objectstack/objectql@12.2.0
Minor Changes
da807f7: feat(spec)!: retire the placeholder metadata kinds
trigger,router,function,service(ADR-0088).The registry is the contract authors — human and AI — read to learn what can be authored, and these four kinds had no authoring surface, no loader, no schema, and no (or a dead) consumer.
MetadataTypeSchema+DEFAULT_METADATA_TYPE_REGISTRYshrink 30 → 26;OPS_FILE_SUFFIX_REGEXdrops the four suffixes; the dormant objectql load path that registered QL functions fromtype: 'function'metadata items is removed (defineStack({ functions })/ plugincontributes.functionsremain the delivered forms); the metadata-core lockstep enum follows.external_catalogstays and is now annotated RUNTIME-CREATED (ADR-0062): its lack of an authoring surface is correct design. The delivered replacements:hook/record_changeflows (trigger), plugincontributes.routes+ declarativeapis:(router),defineStack({ functions })(function), the plugin/service registry (service). Persistedsys_metadatarows are unaffected — no production read path re-parses storedtypevalues through the enum.Patch Changes
4f5b791: Wire three more Studio-authored metadata surfaces at runtime (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 — the
"declared but never wired" family, following the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hooks template).
Authored actions now execute (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 item 1).
engine.executeAction's mapwas only ever populated from the app bundle at boot, so a published
actionrow (standalone or embedded in an authored object's
actions[]) was storedand listed but never executable — before OR after a restart. Now:
AppPlugininstalls a QuickJS-sandboxed default action runner at boot(
engine.setDefaultActionRunner), the action-path twin of the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hookbody runner. Opt out with
OS_DISABLE_AUTHORED_ACTIONS=1.ObjectQLPluginre-registers runtime-authored actions from theirsys_metadatarows underpackageId: 'metadata-service'atkernel:ready, onmetadata:reloaded, and onaction/objectprotocolmutations — saves, publishes, edits, and deletes take effect live.
Package-artifact actions are excluded (AppPlugin owns those; re-registering
would clobber their handlers).
Authored translations reach the i18n runtime (Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591).
translationmetadata items (single-locale
AppTranslationBundlepayloads; locale from_meta.locale, a top-levellocale, or a BCP-47-shaped item name) now loadinto the i18n service as a separate authored layer that overlays static
bundles. Both adapters carry the layer — service-i18n's
FileI18nAdapterAND the kernel's in-memory fallback (
createMemoryI18n), which is what devand standalone stacks actually run. The shared sync
(
wireAuthoredTranslationSync, exported from@objectstack/core, wired bythe runtime's AppPlugin and by I18nServicePlugin with single-owner
semantics) runs at
kernel:ready, onmetadata:reloaded, and ontranslationprotocol mutations, with clear-then-reload semantics sodeleted items/keys stop resolving instead of lingering in the deep-merged
map.
Sharing rules created at runtime bind without a restart (Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592).
bindRuleHookswas boot-only, so the first rule authored at runtime for anobject with no boot-time rule silently never evaluated (rule authoring is a
data insert —
metadata:reloadednever fires). The sharing plugin now bindsafterInsert/afterUpdate/afterDelete triggers on
sys_sharing_rulethatunbind + re-bind the rule-hook package from a fresh
listRules(), serializedso overlapping writes can't leave a stale snapshot bound, and fail-safe so a
rebind failure never fails the rule write.
Updated dependencies [fce8ff4]
Updated dependencies [3962023]
Updated dependencies [2bb193d]
Updated dependencies [75c310f]
Updated dependencies [0426d27]
Updated dependencies [da807f7]
Updated dependencies [4f5b791]
@objectstack/plugin-security@12.2.0
Minor Changes
3962023: feat(spec,security): make ambiguous nav landings unrepresentable + close the field-permission filter oracle (objectui#2251, objectui ADR-0055).
spec —
ObjectNavItemtarget exclusivity.NavigationItemSchemanow rejects an object nav item that combinesfilterswithrecordIdorviewName(custom issue onfilterswith the fix in the message). Runtime precedence would silently ignore the extras — a stalerecordIdhijacking a configuredfiltersslice — so the ambiguous combination is now unwritable (ADR-0053 correct-by-construction). FROM{ filters, viewName }/{ filters, recordId }TO exactly one landing field; the legacyrecordId+viewNamecombination stays tolerated (documented:viewNameis ignored).filtersshipped in the same unreleased minor, so no released metadata is affected.plugin-security — field-level predicate guard.
FieldMaskerstrips non-readable fields from RESULTS, but predicates still leaked their values: filtering / sorting / grouping / aggregating by a hidden field changes row presence (a filter oracle — probesalary >= Xeven though the column is masked). The security middleware now rejects (403PermissionDeniedError,reason: 'field_predicate_denied') any caller query whosewhere/orderBy/groupBy/having/aggregations/windowFunctionsreference a field the caller cannot read — evaluated against the caller's AST before RLS injection, so RLS policies may keep referencing hidden fields (e.g.owner_id). Rejection over silent predicate dropping: removing an$andbranch widens results and re-opens the oracle. New exports:assertReadableQueryFields,collectQueryFields,collectConditionFields.Patch Changes
@objectstack/rest@12.2.0
Minor Changes
POST /data/:object/importacceptsmappingName, resolving a registereddefineMappingartifact (stackmappings:) and applying its fieldMapping pipeline (rename + constant/map/split/join; lookup delegates to the built-in reference resolution) as a strict projection before coercion. The artifact'smode/upsertKeyserve as writeMode/matchFields defaults; explicit request values win. Errors are loud and specific:MAPPING_NOT_FOUND,MAPPING_TARGET_MISMATCH,MAPPING_FORMAT_MISMATCH,CONFLICTING_MAPPING(mutually exclusive with the inline rename), andUNSUPPORTED_TRANSFORMforjavascript(no server-side sandbox — never silently skipped).defineStackcross-reference validation now rejects mappings targeting undefined objects andjavascripttransforms at build time.Patch Changes
@objectstack/spec@12.2.0
Minor Changes
fce8ff4: feat(rest,spec): named import mappings (defineMapping artifacts are registered but never consumed — wire named mappings into REST import or de-scope from the stack #2611) —
POST /data/:object/importacceptsmappingName, resolving a registereddefineMappingartifact (stackmappings:) and applying its fieldMapping pipeline (rename + constant/map/split/join; lookup delegates to the built-in reference resolution) as a strict projection before coercion. The artifact'smode/upsertKeyserve as writeMode/matchFields defaults; explicit request values win. Errors are loud and specific:MAPPING_NOT_FOUND,MAPPING_TARGET_MISMATCH,MAPPING_FORMAT_MISMATCH,CONFLICTING_MAPPING(mutually exclusive with the inline rename), andUNSUPPORTED_TRANSFORMforjavascript(no server-side sandbox — never silently skipped).defineStackcross-reference validation now rejects mappings targeting undefined objects andjavascripttransforms at build time.3962023: feat(spec,security): make ambiguous nav landings unrepresentable + close the field-permission filter oracle (objectui#2251, objectui ADR-0055).
spec —
ObjectNavItemtarget exclusivity.NavigationItemSchemanow rejects an object nav item that combinesfilterswithrecordIdorviewName(custom issue onfilterswith the fix in the message). Runtime precedence would silently ignore the extras — a stalerecordIdhijacking a configuredfiltersslice — so the ambiguous combination is now unwritable (ADR-0053 correct-by-construction). FROM{ filters, viewName }/{ filters, recordId }TO exactly one landing field; the legacyrecordId+viewNamecombination stays tolerated (documented:viewNameis ignored).filtersshipped in the same unreleased minor, so no released metadata is affected.plugin-security — field-level predicate guard.
FieldMaskerstrips non-readable fields from RESULTS, but predicates still leaked their values: filtering / sorting / grouping / aggregating by a hidden field changes row presence (a filter oracle — probesalary >= Xeven though the column is masked). The security middleware now rejects (403PermissionDeniedError,reason: 'field_predicate_denied') any caller query whosewhere/orderBy/groupBy/having/aggregations/windowFunctionsreference a field the caller cannot read — evaluated against the caller's AST before RLS injection, so RLS policies may keep referencing hidden fields (e.g.owner_id). Rejection over silent predicate dropping: removing an$andbranch widens results and re-opens the oracle. New exports:assertReadableQueryFields,collectQueryFields,collectConditionFields.2bb193d: feat(spec):
ObjectNavItem.filters— declarative URL filter conditions targeting the parameterized bare data surface (objectui ADR-0055, objectui#2251).An object nav item can now carry
filters: Record<string, string>(equality semantics). The shell resolves such an entry to/:objectName/data?filter[<field>]=<value>— an unanchored data surface with removable filter chips — instead of a saved list view. Use it for one-off / parameterized slices (dashboard drill-throughs, "assigned to me" links); slices worth curating stay onviewName. Values support the same{current_user_id}/{current_org_id}template variables asrecordId. Target precedence withintype: 'object':recordId→filters→viewName. Purely additive — items withoutfiltersare unaffected.0426d27: feat(spec):
deriveRecordFlowSurface(def, flow, opts)— flow-aware record-surface derivation (Design: record create/edit/subtable surface + return-flow model (follow-up to #2578) #2604, extends 字段多的对象:自适应呈现表面 + 语义 field span(auto/full)+ 表单布局防呆 lint(AI-authored,ADR-0085 对齐) #2578'sderiveRecordSurface, ADR-0085 §5 one-shared-derivation).Decides the default surface per record FLOW:
viewkeeps the shipped behavior verbatim (field-heavy →route/page, light → drawer overlay); the task flows (create/edit/child-create/child-edit) are ALWAYS overlays — never routes — with the derived'page'mapped to a full-screen modal (size: 'full') and light objects staying a drawer.child-*flows take the CHILD object's def (the overlay sizes to the record being edited; the return target is always the parent detail). Mobile task flows are full-screen modals.Rationale: viewing a record is shareable state (deep-link belongs there); making/changing one is a transient task whose URL is a false promise (refresh loses the draft) and whose invariant is lossless return to the origin. Renderers treat the result as the DEFAULT only — explicit
navigation.mode/size,FormView.type/modalSize, or an assigned page still win. No new authorable key (ADR-0085 §2). Additive, no breaking changes.da807f7: feat(spec)!: retire the placeholder metadata kinds
trigger,router,function,service(ADR-0088).The registry is the contract authors — human and AI — read to learn what can be authored, and these four kinds had no authoring surface, no loader, no schema, and no (or a dead) consumer.
MetadataTypeSchema+DEFAULT_METADATA_TYPE_REGISTRYshrink 30 → 26;OPS_FILE_SUFFIX_REGEXdrops the four suffixes; the dormant objectql load path that registered QL functions fromtype: 'function'metadata items is removed (defineStack({ functions })/ plugincontributes.functionsremain the delivered forms); the metadata-core lockstep enum follows.external_catalogstays and is now annotated RUNTIME-CREATED (ADR-0062): its lack of an authoring surface is correct design. The delivered replacements:hook/record_changeflows (trigger), plugincontributes.routes+ declarativeapis:(router),defineStack({ functions })(function), the plugin/service registry (service). Persistedsys_metadatarows are unaffected — no production read path re-parses storedtypevalues through the enum.@objectstack/hono@12.2.0
Patch Changes
@objectstack/account@12.2.0
Patch Changes
@objectstack/setup@12.2.0
Patch Changes
@objectstack/studio@12.2.0
Patch Changes
@objectstack/cli@12.2.0
Patch Changes
@objectstack/client@12.2.0
Patch Changes
@objectstack/client-react@12.2.0
Patch Changes
@objectstack/cloud-connection@12.2.0
Patch Changes
@objectstack/connector-mcp@12.2.0
Patch Changes
@objectstack/connector-openapi@12.2.0
Patch Changes
@objectstack/connector-rest@12.2.0
Patch Changes
@objectstack/connector-slack@12.2.0
Patch Changes
@objectstack/core@12.2.0
Patch Changes
4f5b791: Wire three more Studio-authored metadata surfaces at runtime (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 — the
"declared but never wired" family, following the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hooks template).
Authored actions now execute (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 item 1).
engine.executeAction's mapwas only ever populated from the app bundle at boot, so a published
actionrow (standalone or embedded in an authored object's
actions[]) was storedand listed but never executable — before OR after a restart. Now:
AppPlugininstalls a QuickJS-sandboxed default action runner at boot(
engine.setDefaultActionRunner), the action-path twin of the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hookbody runner. Opt out with
OS_DISABLE_AUTHORED_ACTIONS=1.ObjectQLPluginre-registers runtime-authored actions from theirsys_metadatarows underpackageId: 'metadata-service'atkernel:ready, onmetadata:reloaded, and onaction/objectprotocolmutations — saves, publishes, edits, and deletes take effect live.
Package-artifact actions are excluded (AppPlugin owns those; re-registering
would clobber their handlers).
Authored translations reach the i18n runtime (Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591).
translationmetadata items (single-locale
AppTranslationBundlepayloads; locale from_meta.locale, a top-levellocale, or a BCP-47-shaped item name) now loadinto the i18n service as a separate authored layer that overlays static
bundles. Both adapters carry the layer — service-i18n's
FileI18nAdapterAND the kernel's in-memory fallback (
createMemoryI18n), which is what devand standalone stacks actually run. The shared sync
(
wireAuthoredTranslationSync, exported from@objectstack/core, wired bythe runtime's AppPlugin and by I18nServicePlugin with single-owner
semantics) runs at
kernel:ready, onmetadata:reloaded, and ontranslationprotocol mutations, with clear-then-reload semantics sodeleted items/keys stop resolving instead of lingering in the deep-merged
map.
Sharing rules created at runtime bind without a restart (Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592).
bindRuleHookswas boot-only, so the first rule authored at runtime for anobject with no boot-time rule silently never evaluated (rule authoring is a
data insert —
metadata:reloadednever fires). The sharing plugin now bindsafterInsert/afterUpdate/afterDelete triggers on
sys_sharing_rulethatunbind + re-bind the rule-hook package from a fresh
listRules(), serializedso overlapping writes can't leave a stale snapshot bound, and fail-safe so a
rebind failure never fails the rule write.
Updated dependencies [fce8ff4]
Updated dependencies [3962023]
Updated dependencies [2bb193d]
Updated dependencies [0426d27]
Updated dependencies [da807f7]
@objectstack/formula@12.2.0
Patch Changes
@objectstack/lint@12.2.0
Patch Changes
@objectstack/mcp@12.2.0
Patch Changes
@objectstack/metadata@12.2.0
Patch Changes
@objectstack/metadata-fs@12.2.0
Patch Changes
@objectstack/metadata-protocol@12.2.0
Patch Changes
writable_package_requiredrejection message as user-facing remediation ("switch to a writable package in the package selector, or create a new one") instead of developer-facing copy that cited an internal ADR path — the message is surfaced verbatim as a Studio toast. The ADR pointer moves to adocsproperty on the error;code,status, andpackageIdare unchanged.@objectstack/observability@12.2.0
Patch Changes
@objectstack/platform-objects@12.2.0
Patch Changes
@objectstack/driver-memory@12.2.0
Patch Changes
@objectstack/driver-mongodb@12.2.0
Patch Changes
@objectstack/driver-sql@12.2.0
Patch Changes
@objectstack/driver-sqlite-wasm@12.2.0
Patch Changes
@objectstack/embedder-openai@12.2.0
Patch Changes
@objectstack/knowledge-memory@12.2.0
Patch Changes
@objectstack/knowledge-ragflow@12.2.0
Patch Changes
@objectstack/plugin-approvals@12.2.0
Patch Changes
@objectstack/plugin-audit@12.2.0
Patch Changes
@objectstack/plugin-auth@12.2.0
Patch Changes
@objectstack/plugin-dev@12.2.0
Patch Changes
@objectstack/plugin-email@12.2.0
Patch Changes
@objectstack/plugin-hono-server@12.2.0
Patch Changes
@objectstack/plugin-org-scoping@12.2.0
Patch Changes
@objectstack/plugin-reports@12.2.0
Patch Changes
@objectstack/plugin-sharing@12.2.0
Patch Changes
4f5b791: Wire three more Studio-authored metadata surfaces at runtime (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 — the
"declared but never wired" family, following the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hooks template).
Authored actions now execute (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 item 1).
engine.executeAction's mapwas only ever populated from the app bundle at boot, so a published
actionrow (standalone or embedded in an authored object's
actions[]) was storedand listed but never executable — before OR after a restart. Now:
AppPlugininstalls a QuickJS-sandboxed default action runner at boot(
engine.setDefaultActionRunner), the action-path twin of the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hookbody runner. Opt out with
OS_DISABLE_AUTHORED_ACTIONS=1.ObjectQLPluginre-registers runtime-authored actions from theirsys_metadatarows underpackageId: 'metadata-service'atkernel:ready, onmetadata:reloaded, and onaction/objectprotocolmutations — saves, publishes, edits, and deletes take effect live.
Package-artifact actions are excluded (AppPlugin owns those; re-registering
would clobber their handlers).
Authored translations reach the i18n runtime (Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591).
translationmetadata items (single-locale
AppTranslationBundlepayloads; locale from_meta.locale, a top-levellocale, or a BCP-47-shaped item name) now loadinto the i18n service as a separate authored layer that overlays static
bundles. Both adapters carry the layer — service-i18n's
FileI18nAdapterAND the kernel's in-memory fallback (
createMemoryI18n), which is what devand standalone stacks actually run. The shared sync
(
wireAuthoredTranslationSync, exported from@objectstack/core, wired bythe runtime's AppPlugin and by I18nServicePlugin with single-owner
semantics) runs at
kernel:ready, onmetadata:reloaded, and ontranslationprotocol mutations, with clear-then-reload semantics sodeleted items/keys stop resolving instead of lingering in the deep-merged
map.
Sharing rules created at runtime bind without a restart (Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592).
bindRuleHookswas boot-only, so the first rule authored at runtime for anobject with no boot-time rule silently never evaluated (rule authoring is a
data insert —
metadata:reloadednever fires). The sharing plugin now bindsafterInsert/afterUpdate/afterDelete triggers on
sys_sharing_rulethatunbind + re-bind the rule-hook package from a fresh
listRules(), serializedso overlapping writes can't leave a stale snapshot bound, and fail-safe so a
rebind failure never fails the rule write.
Updated dependencies [fce8ff4]
Updated dependencies [3962023]
Updated dependencies [2bb193d]
Updated dependencies [0426d27]
Updated dependencies [da807f7]
Updated dependencies [4f5b791]
@objectstack/plugin-webhooks@12.2.0
Patch Changes
@objectstack/runtime@12.2.0
Patch Changes
4f5b791: Wire three more Studio-authored metadata surfaces at runtime (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 — the
"declared but never wired" family, following the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hooks template).
Authored actions now execute (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 item 1).
engine.executeAction's mapwas only ever populated from the app bundle at boot, so a published
actionrow (standalone or embedded in an authored object's
actions[]) was storedand listed but never executable — before OR after a restart. Now:
AppPlugininstalls a QuickJS-sandboxed default action runner at boot(
engine.setDefaultActionRunner), the action-path twin of the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hookbody runner. Opt out with
OS_DISABLE_AUTHORED_ACTIONS=1.ObjectQLPluginre-registers runtime-authored actions from theirsys_metadatarows underpackageId: 'metadata-service'atkernel:ready, onmetadata:reloaded, and onaction/objectprotocolmutations — saves, publishes, edits, and deletes take effect live.
Package-artifact actions are excluded (AppPlugin owns those; re-registering
would clobber their handlers).
Authored translations reach the i18n runtime (Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591).
translationmetadata items (single-locale
AppTranslationBundlepayloads; locale from_meta.locale, a top-levellocale, or a BCP-47-shaped item name) now loadinto the i18n service as a separate authored layer that overlays static
bundles. Both adapters carry the layer — service-i18n's
FileI18nAdapterAND the kernel's in-memory fallback (
createMemoryI18n), which is what devand standalone stacks actually run. The shared sync
(
wireAuthoredTranslationSync, exported from@objectstack/core, wired bythe runtime's AppPlugin and by I18nServicePlugin with single-owner
semantics) runs at
kernel:ready, onmetadata:reloaded, and ontranslationprotocol mutations, with clear-then-reload semantics sodeleted items/keys stop resolving instead of lingering in the deep-merged
map.
Sharing rules created at runtime bind without a restart (Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592).
bindRuleHookswas boot-only, so the first rule authored at runtime for anobject with no boot-time rule silently never evaluated (rule authoring is a
data insert —
metadata:reloadednever fires). The sharing plugin now bindsafterInsert/afterUpdate/afterDelete triggers on
sys_sharing_rulethatunbind + re-bind the rule-hook package from a fresh
listRules(), serializedso overlapping writes can't leave a stale snapshot bound, and fail-safe so a
rebind failure never fails the rule write.
Updated dependencies [fce8ff4]
Updated dependencies [3962023]
Updated dependencies [2bb193d]
Updated dependencies [0426d27]
Updated dependencies [da807f7]
Updated dependencies [4f5b791]
@objectstack/service-analytics@12.2.0
Patch Changes
@objectstack/service-automation@12.2.0
Patch Changes
@objectstack/service-cache@12.2.0
Patch Changes
@objectstack/service-cluster@12.2.0
Patch Changes
@objectstack/service-cluster-redis@12.2.0
Patch Changes
@objectstack/service-datasource@12.2.0
Patch Changes
@objectstack/service-i18n@12.2.0
Patch Changes
4f5b791: Wire three more Studio-authored metadata surfaces at runtime (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 — the
"declared but never wired" family, following the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hooks template).
Authored actions now execute (Tracking: Studio-authored metadata that's declared but never wired at runtime (the 'silently does nothing' family) #2605 item 1).
engine.executeAction's mapwas only ever populated from the app bundle at boot, so a published
actionrow (standalone or embedded in an authored object's
actions[]) was storedand listed but never executable — before OR after a restart. Now:
AppPlugininstalls a QuickJS-sandboxed default action runner at boot(
engine.setDefaultActionRunner), the action-path twin of the fix(objectql,runtime,metadata-protocol): execute authored (Studio) hook bodies — default bodyRunner + live rebind (#2588) #2596 hookbody runner. Opt out with
OS_DISABLE_AUTHORED_ACTIONS=1.ObjectQLPluginre-registers runtime-authored actions from theirsys_metadatarows underpackageId: 'metadata-service'atkernel:ready, onmetadata:reloaded, and onaction/objectprotocolmutations — saves, publishes, edits, and deletes take effect live.
Package-artifact actions are excluded (AppPlugin owns those; re-registering
would clobber their handlers).
Authored translations reach the i18n runtime (Authored (Studio) translations never reach the i18n runtime — only static bundles are loaded #2591).
translationmetadata items (single-locale
AppTranslationBundlepayloads; locale from_meta.locale, a top-levellocale, or a BCP-47-shaped item name) now loadinto the i18n service as a separate authored layer that overlays static
bundles. Both adapters carry the layer — service-i18n's
FileI18nAdapterAND the kernel's in-memory fallback (
createMemoryI18n), which is what devand standalone stacks actually run. The shared sync
(
wireAuthoredTranslationSync, exported from@objectstack/core, wired bythe runtime's AppPlugin and by I18nServicePlugin with single-owner
semantics) runs at
kernel:ready, onmetadata:reloaded, and ontranslationprotocol mutations, with clear-then-reload semantics sodeleted items/keys stop resolving instead of lingering in the deep-merged
map.
Sharing rules created at runtime bind without a restart (Sharing rules created at runtime don't bind their hooks until restart (bindRuleHooks is boot-only) #2592).
bindRuleHookswas boot-only, so the first rule authored at runtime for anobject with no boot-time rule silently never evaluated (rule authoring is a
data insert —
metadata:reloadednever fires). The sharing plugin now bindsafterInsert/afterUpdate/afterDelete triggers on
sys_sharing_rulethatunbind + re-bind the rule-hook package from a fresh
listRules(), serializedso overlapping writes can't leave a stale snapshot bound, and fail-safe so a
rebind failure never fails the rule write.
Updated dependencies [fce8ff4]
Updated dependencies [3962023]
Updated dependencies [2bb193d]
Updated dependencies [0426d27]
Updated dependencies [da807f7]
Updated dependencies [4f5b791]
@objectstack/service-job@12.2.0
Patch Changes
@objectstack/service-knowledge@12.2.0
Patch Changes
@objectstack/service-messaging@12.2.0
Patch Changes
@objectstack/service-package@12.2.0
Patch Changes
@objectstack/service-queue@12.2.0
Patch Changes
@objectstack/service-realtime@12.2.0
Patch Changes
@objectstack/service-settings@12.2.0
Patch Changes
@objectstack/service-storage@12.2.0
Patch Changes
@objectstack/trigger-api@12.2.0
Patch Changes
@objectstack/trigger-record-change@12.2.0
Patch Changes
@objectstack/trigger-schedule@12.2.0
Patch Changes
@objectstack/types@12.2.0
Patch Changes
@objectstack/verify@12.2.0
Patch Changes
@objectstack/console@12.2.0
create-objectstack@12.2.0
@objectstack/sdui-parser@12.2.0
objectstack-vscode@12.2.0
@objectstack/example-crm@4.0.72
Patch Changes
@objectstack/example-showcase@0.2.18
Patch Changes
@objectstack/example-todo@4.0.72
Patch Changes
@objectstack/example-embed-objectql@0.0.12
Patch Changes
@objectstack/dogfood@0.0.20
Patch Changes
@objectstack/downstream-contract@0.0.18
Patch Changes