chore: version packages#2689
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
9b23929 to
64f6791
Compare
64f6791 to
a3b101d
Compare
a3b101d to
7982d5b
Compare
7982d5b to
7ec54be
Compare
7ec54be to
8bc2cfb
Compare
8bc2cfb to
c1ae0ac
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/lint@12.7.0
Minor Changes
466adf6: Author-time capability-reference lint (ADR-0066 ⑨) —
os validate/os lintnow warn when a
requiredPermissionsnames a capability that is registerednowhere.
requiredPermissions(on objects, fields, apps, actions) is a free string, so atypo like
mange_usersis schema-valid and fails closed at runtime (the calleris denied) — safe, but silent. The new
validateCapabilityReferencesrule(
@objectstack/lint) resolves every reference against the author-time known setand warns on the unresolved ones:
@objectstack/spec(security/capabilities.ts:PLATFORM_CAPABILITIES/PLATFORM_CAPABILITY_NAMES), which@objectstack/plugin-security'sbootstrapSystemCapabilitiesalso seeds from (one source of truth, no drift),systemPermissions(granting is what declares it — mirrors the runtime derived-defaults rule), and
sys_capabilityrow shipped as seed data.It is a warning, not an error: a single package can't see capabilities
declared by other installed packages, and the reference fails closed anyway.
systemPermissionsitself is never flagged — it is the declaration side, and apackage legitimately introduces new capabilities there. The object case also
understands the per-operation
requiredPermissionsmap form (ADR-0066 ⑤) andpoints a finding at the exact operation slice.
Patch Changes
@objectstack/metadata-protocol@12.7.0
Minor Changes
fc7e7f7: Enforce the package namespace-prefix rule for Studio-authored packages.
The protocol requires every object name in a package to carry the package's
manifest.namespaceprefix (crm_account);defineStack()enforces this atcompile time via
validateNamespacePrefix. Studio/runtime-authored packagesnever take that path, and they were created without a namespace at all — so the
rule was silently inert and objects published with bare, collision-prone names.
Two runtime changes close the gap:
protocol.installPackagenow derives a default namespace from the package id(
com.example.leave→leave) when the manifest declares none, and persistsit on the manifest (in-memory registry +
sys_packages). An explicitlydeclared namespace always wins (e.g. HotCRM's
crm).protocol.publishPackageDraftsnow rejects any object draft whose name lacksthe package namespace prefix, before promoting anything (atomic), with an
actionable message (
Rename it to 'leave_ticket'). Packages that declare nonamespace are grandfathered — mirroring
defineStack, the rule is notinvented at enforcement time.
The per-object prefix check and the id→namespace derivation are extracted into
@objectstack/spec/kernel(validateObjectNamespacePrefix,deriveNamespaceFromPackageId) as the single source shared bydefineStackandthe runtime publish path, so the two enforcement points cannot drift.
Patch Changes
@objectstack/platform-objects@12.7.0
Minor Changes
9fa84f9: Secure-by-default posture for sensitive system objects (ADR-0066 ④, system-object
slice) — the platform's raw secret/credential stores no longer ride the wildcard
'*'permission grant.sys_secret(encrypted settings/datasource secrets),sys_jwks(JWT signingkeys),
sys_verification(password-reset / verify tokens),sys_oauth_access_token,sys_oauth_refresh_token(live bearer credentials),and
sys_device_code(pending device-grant codes) now declareaccess: { default: 'private' }: an ordinary member's generic data-layerread/write gets 403 instead of being covered by
member_default's'*': allowRead. Platform admins retain access via the posture-gatedviewAllRecords/modifyAllRecordssuperuser bypass, and every runtime consumeris unaffected — better-auth reads via its adapter (system context),
engine.resolveSecretreads at driver level, and SettingsService / thedatasource secret-binder read principal-less (middleware falls open for internal
calls).
sys_scim_provider(SCIM bearer-token config) gains the object-levelrequiredPermissions: ['manage_platform_settings']capability gate, mirroringits sibling
sys_sso_provider. The Setup nav item for Signing Keys (JWKS) isnow capability-gated like API Keys, so non-admins don't see a menu entry that
can only 403.
Member self-service objects (
sys_session,sys_api_key,sys_oauth_application,sys_two_factor) deliberately keep the public posture —the Account app ("My Sessions" / "My API Keys" / "My Apps" / 2FA "My
Enrollment") reads them through the generic data layer as the member; row
scoping remains their guard. The declarations are pinned by
platform-objects.test.tsand the ADR-0056 D10 conformance-matrix rowsecure-by-default-posture, so dropping the flag from a secret store fails CI.Patch Changes
@objectstack/plugin-security@12.7.0
Minor Changes
466adf6: Per-operation object
requiredPermissions(ADR-0066 ⑤) — an object can now beread-open / write-gated instead of gating all of CRUD on one capability set.
Object.requiredPermissionsaccepts either the originalstring[](capabilitiesrequired for all operations) or a
{ read?, create?, update?, delete? }map that gates each operation class independently — mirroring how Salesforce and
Dataverse separate capability by operation. plugin-security enforces the caps for
the request's operation class as the same D3 AND-gate (checked before the CRUD
grant, fail-closed). The mapping folds
transfer/restoreintoupdateandpurgeintodelete, derived from the existing CRUD permission bits so it staysin lockstep with them.
Backward-compatible: the
string[]form keeps its gate-every-operation semantics(normalized into an
allbucket that unions with the per-operation bucket), soexisting objects are unaffected. The per-operation map's keys are validated
.strict(), so a mistyped key (e.g.reads) is rejected at author time ratherthan silently ignored.
Patch Changes
466adf6: Author-time capability-reference lint (ADR-0066 ⑨) —
os validate/os lintnow warn when a
requiredPermissionsnames a capability that is registerednowhere.
requiredPermissions(on objects, fields, apps, actions) is a free string, so atypo like
mange_usersis schema-valid and fails closed at runtime (the calleris denied) — safe, but silent. The new
validateCapabilityReferencesrule(
@objectstack/lint) resolves every reference against the author-time known setand warns on the unresolved ones:
@objectstack/spec(security/capabilities.ts:PLATFORM_CAPABILITIES/PLATFORM_CAPABILITY_NAMES), which@objectstack/plugin-security'sbootstrapSystemCapabilitiesalso seeds from (one source of truth, no drift),systemPermissions(granting is what declares it — mirrors the runtime derived-defaults rule), and
sys_capabilityrow shipped as seed data.It is a warning, not an error: a single package can't see capabilities
declared by other installed packages, and the reference fails closed anyway.
systemPermissionsitself is never flagged — it is the declaration side, and apackage legitimately introduces new capabilities there. The object case also
understands the per-operation
requiredPermissionsmap form (ADR-0066 ⑤) andpoints a finding at the exact operation slice.
799b285: Fix field-level-security read leak on mutation responses. The security
middleware only masked read-protected fields on
find/findOneresults, so acaller with edit-but-not-field-read could
insert/updatea record and read aread-protected field back out of the echoed post-image (field WRITES were
already blocked, but the response image was not masked). The mask now also
covers
insert/updateresults, matching read behavior.Updated dependencies [466adf6]
Updated dependencies [466adf6]
Updated dependencies [2bee609]
Updated dependencies [9fa84f9]
Updated dependencies [fc7e7f7]
@objectstack/spec@12.7.0
Minor Changes
466adf6: Author-time capability-reference lint (ADR-0066 ⑨) —
os validate/os lintnow warn when a
requiredPermissionsnames a capability that is registerednowhere.
requiredPermissions(on objects, fields, apps, actions) is a free string, so atypo like
mange_usersis schema-valid and fails closed at runtime (the calleris denied) — safe, but silent. The new
validateCapabilityReferencesrule(
@objectstack/lint) resolves every reference against the author-time known setand warns on the unresolved ones:
@objectstack/spec(security/capabilities.ts:PLATFORM_CAPABILITIES/PLATFORM_CAPABILITY_NAMES), which@objectstack/plugin-security'sbootstrapSystemCapabilitiesalso seeds from (one source of truth, no drift),systemPermissions(granting is what declares it — mirrors the runtime derived-defaults rule), and
sys_capabilityrow shipped as seed data.It is a warning, not an error: a single package can't see capabilities
declared by other installed packages, and the reference fails closed anyway.
systemPermissionsitself is never flagged — it is the declaration side, and apackage legitimately introduces new capabilities there. The object case also
understands the per-operation
requiredPermissionsmap form (ADR-0066 ⑤) andpoints a finding at the exact operation slice.
466adf6: Per-operation object
requiredPermissions(ADR-0066 ⑤) — an object can now beread-open / write-gated instead of gating all of CRUD on one capability set.
Object.requiredPermissionsaccepts either the originalstring[](capabilitiesrequired for all operations) or a
{ read?, create?, update?, delete? }map that gates each operation class independently — mirroring how Salesforce and
Dataverse separate capability by operation. plugin-security enforces the caps for
the request's operation class as the same D3 AND-gate (checked before the CRUD
grant, fail-closed). The mapping folds
transfer/restoreintoupdateandpurgeintodelete, derived from the existing CRUD permission bits so it staysin lockstep with them.
Backward-compatible: the
string[]form keeps its gate-every-operation semantics(normalized into an
allbucket that unions with the per-operation bucket), soexisting objects are unaffected. The per-operation map's keys are validated
.strict(), so a mistyped key (e.g.reads) is rejected at author time ratherthan silently ignored.
2bee609: BREAKING (pre-launch): remove the three declared-but-never-enforced compliance
subsystems per ADR-0056 D8 ("design + enforce, or remove"), and mark the AI
agent
visibilityproperty EXPERIMENTAL ([P1][security] Enforce agentvisibility(organization/private) — needs tenant/owner in request context #1901).Removed — none of these were read by any runtime path, and compliance-grade
configuration must never merely look live:
ComplianceConfigSchema/GDPRConfigSchema/HIPAAConfigSchema(and therest of
system/compliance.zod.ts) — there is no data-subject-rights engine,retention enforcer, or BAA gate. FROM
import { ComplianceConfigSchema } from '@objectstack/spec/system'TO: delete the reference — a real compliancesubsystem will be designed top-down when scheduled.
MaskingConfigSchema/MaskingRuleSchema(system/masking.zod.ts) — noredaction layer applies them. FROM masking config TO: field-level security
(permission-set field rules, enforced by plugin-security's field masker); a
subtractive masking/deny layer arrives with ADR-0066 ⑦/⑧ if needed.
RLSConfigSchema/RLSAuditEventSchema/RLSAuditConfigSchema(
security/rls.zod.ts) — the enforced RLS path never read the global config.FROM global
RLSConfigTO: per-policyRowLevelSecurityPolicySchema(thelive, enforced surface — unchanged).
Kept, still
[EXPERIMENTAL]:EncryptionConfigSchema(at-rest fieldencryption) — a real enterprise roadmap item with a stable shape; carrying it
marked costs less than remove-and-re-add (ADR-0087).
Marked
[EXPERIMENTAL — NOT ENFORCED]([P1][security] Enforce agentvisibility(organization/private) — needs tenant/owner in request context #1901):AgentSchema.visibility— thechat-access evaluator deliberately excludes it and the agent list route does
not filter by it, so
privatedoes not hide an agent. The schema descriptionand the authoring form now say so; use
access/permissions(both enforcedat the chat route since [P0][security] Agent access control is a no-op (permissions/visibility/access) #1884) for real gating. The ADR-0056 D10 conformance
matrix tracks all dispositions (
agent-visibilityexperimental;compliance-configs/data-masking/rls-config-globalremoved).fc7e7f7: Enforce the package namespace-prefix rule for Studio-authored packages.
The protocol requires every object name in a package to carry the package's
manifest.namespaceprefix (crm_account);defineStack()enforces this atcompile time via
validateNamespacePrefix. Studio/runtime-authored packagesnever take that path, and they were created without a namespace at all — so the
rule was silently inert and objects published with bare, collision-prone names.
Two runtime changes close the gap:
protocol.installPackagenow derives a default namespace from the package id(
com.example.leave→leave) when the manifest declares none, and persistsit on the manifest (in-memory registry +
sys_packages). An explicitlydeclared namespace always wins (e.g. HotCRM's
crm).protocol.publishPackageDraftsnow rejects any object draft whose name lacksthe package namespace prefix, before promoting anything (atomic), with an
actionable message (
Rename it to 'leave_ticket'). Packages that declare nonamespace are grandfathered — mirroring
defineStack, the rule is notinvented at enforcement time.
The per-object prefix check and the id→namespace derivation are extracted into
@objectstack/spec/kernel(validateObjectNamespacePrefix,deriveNamespaceFromPackageId) as the single source shared bydefineStackandthe runtime publish path, so the two enforcement points cannot drift.
@objectstack/hono@12.7.0
Patch Changes
@objectstack/account@12.7.0
Patch Changes
@objectstack/setup@12.7.0
Patch Changes
@objectstack/studio@12.7.0
Patch Changes
@objectstack/cli@12.7.0
Patch Changes
466adf6: Author-time capability-reference lint (ADR-0066 ⑨) —
os validate/os lintnow warn when a
requiredPermissionsnames a capability that is registerednowhere.
requiredPermissions(on objects, fields, apps, actions) is a free string, so atypo like
mange_usersis schema-valid and fails closed at runtime (the calleris denied) — safe, but silent. The new
validateCapabilityReferencesrule(
@objectstack/lint) resolves every reference against the author-time known setand warns on the unresolved ones:
@objectstack/spec(security/capabilities.ts:PLATFORM_CAPABILITIES/PLATFORM_CAPABILITY_NAMES), which@objectstack/plugin-security'sbootstrapSystemCapabilitiesalso seeds from (one source of truth, no drift),systemPermissions(granting is what declares it — mirrors the runtime derived-defaults rule), and
sys_capabilityrow shipped as seed data.It is a warning, not an error: a single package can't see capabilities
declared by other installed packages, and the reference fails closed anyway.
systemPermissionsitself is never flagged — it is the declaration side, and apackage legitimately introduces new capabilities there. The object case also
understands the per-operation
requiredPermissionsmap form (ADR-0066 ⑤) andpoints a finding at the exact operation slice.
Updated dependencies [466adf6]
Updated dependencies [799b285]
Updated dependencies [b1081b8]
Updated dependencies [466adf6]
Updated dependencies [a1766fe]
Updated dependencies [2bee609]
Updated dependencies [9fa84f9]
Updated dependencies [fc7e7f7]
@objectstack/client@12.7.0
Patch Changes
@objectstack/client-react@12.7.0
Patch Changes
@objectstack/cloud-connection@12.7.0
Patch Changes
@objectstack/connector-mcp@12.7.0
Patch Changes
@objectstack/connector-openapi@12.7.0
Patch Changes
@objectstack/connector-rest@12.7.0
Patch Changes
@objectstack/connector-slack@12.7.0
Patch Changes
@objectstack/core@12.7.0
Patch Changes
@objectstack/formula@12.7.0
Patch Changes
@objectstack/mcp@12.7.0
Patch Changes
@objectstack/metadata@12.7.0
Patch Changes
@objectstack/metadata-core@12.7.0
Patch Changes
@objectstack/metadata-fs@12.7.0
Patch Changes
@objectstack/objectql@12.7.0
Patch Changes
a1766fe: fix(validation): remove polynomial ReDoS in email validation regexes
The email validators used
/^[^\s@]+@[^\s@]+\.[^\s@]+$/, whose quantifiersaround
\.overlap (the literal dot is also matched by[^\s@]) and backtrackpolynomially on adversarial input. The domain part is rewritten as
[^\s@.]+(?:\.[^\s@.]+)+so labels exclude.and matching is linear. Validaddresses (including multi-label domains) are unaffected; addresses with an
empty label such as
a@b..care now correctly rejected.Updated dependencies [466adf6]
Updated dependencies [466adf6]
Updated dependencies [2bee609]
Updated dependencies [fc7e7f7]
@objectstack/observability@12.7.0
Patch Changes
@objectstack/driver-memory@12.7.0
Patch Changes
@objectstack/driver-mongodb@12.7.0
Patch Changes
@objectstack/driver-sql@12.7.0
Patch Changes
@objectstack/driver-sqlite-wasm@12.7.0
Patch Changes
@objectstack/embedder-openai@12.7.0
Patch Changes
@objectstack/knowledge-memory@12.7.0
Patch Changes
@objectstack/knowledge-ragflow@12.7.0
Patch Changes
@objectstack/plugin-approvals@12.7.0
Patch Changes
@objectstack/plugin-audit@12.7.0
Patch Changes
@objectstack/plugin-auth@12.7.0
Patch Changes
@objectstack/plugin-dev@12.7.0
Patch Changes
@objectstack/plugin-email@12.7.0
Patch Changes
a1766fe: fix(validation): remove polynomial ReDoS in email validation regexes
The email validators used
/^[^\s@]+@[^\s@]+\.[^\s@]+$/, whose quantifiersaround
\.overlap (the literal dot is also matched by[^\s@]) and backtrackpolynomially on adversarial input. The domain part is rewritten as
[^\s@.]+(?:\.[^\s@.]+)+so labels exclude.and matching is linear. Validaddresses (including multi-label domains) are unaffected; addresses with an
empty label such as
a@b..care now correctly rejected.Updated dependencies [466adf6]
Updated dependencies [466adf6]
Updated dependencies [2bee609]
Updated dependencies [9fa84f9]
Updated dependencies [fc7e7f7]
@objectstack/plugin-hono-server@12.7.0
Patch Changes
b1081b8: Return
405 Method Not Allowed(with an accurateAllowheader and adescriptive body) instead of an opaque
{"error":"Not found"}404 when arequest hits a registered path under the wrong HTTP method.
Hono routes a method mismatch to the same
notFoundsink as a genuinelymissing path, so a
POSTto aPUT-only route (e.g. the metadata saveendpoint
PUT /api/v1/meta/:type/:name) gave callers no hint that the pathexists under another verb (PUT /api/v1/meta/:type/:name is hard to discover — add a POST convenience alias #2684). The server now tracks every registered
(method, pattern)pair and re-matches the request path in thenotFoundhandler: matching another method yields a 405; matching nothing stays a 404.
This is framework-wide — every registered endpoint benefits. Static/SPA
catch-alls registered straight on the raw Hono app are not tracked and never
produce a spurious 405.
Updated dependencies [466adf6]
Updated dependencies [466adf6]
Updated dependencies [2bee609]
Updated dependencies [fc7e7f7]
@objectstack/plugin-org-scoping@12.7.0
Patch Changes
@objectstack/plugin-reports@12.7.0
Patch Changes
@objectstack/plugin-sharing@12.7.0
Patch Changes
@objectstack/plugin-webhooks@12.7.0
Patch Changes
@objectstack/rest@12.7.0
Patch Changes
@objectstack/runtime@12.7.0
Patch Changes
@objectstack/service-analytics@12.7.0
Patch Changes
@objectstack/service-automation@12.7.0
Patch Changes
@objectstack/service-cache@12.7.0
Patch Changes
@objectstack/service-cluster@12.7.0
Patch Changes
@objectstack/service-cluster-redis@12.7.0
Patch Changes
@objectstack/service-datasource@12.7.0
Patch Changes
@objectstack/service-i18n@12.7.0
Patch Changes
@objectstack/service-job@12.7.0
Patch Changes
@objectstack/service-knowledge@12.7.0
Patch Changes
@objectstack/service-messaging@12.7.0
Patch Changes
@objectstack/service-package@12.7.0
Patch Changes
@objectstack/service-queue@12.7.0
Patch Changes
@objectstack/service-realtime@12.7.0
Patch Changes
@objectstack/service-settings@12.7.0
Patch Changes
@objectstack/service-storage@12.7.0
Patch Changes
@objectstack/trigger-api@12.7.0
Patch Changes
@objectstack/trigger-record-change@12.7.0
Patch Changes
@objectstack/trigger-schedule@12.7.0
Patch Changes
@objectstack/types@12.7.0
Patch Changes
@objectstack/verify@12.7.0
Patch Changes
@objectstack/console@12.7.0
create-objectstack@12.7.0
@objectstack/sdui-parser@12.7.0
objectstack-vscode@12.7.0
@objectstack/example-crm@4.0.77
Patch Changes
@objectstack/example-showcase@0.2.23
Patch Changes
@objectstack/example-todo@4.0.77
Patch Changes
@objectstack/example-embed-objectql@0.0.17
Patch Changes
@objectstack/dogfood@0.0.25
Patch Changes
@objectstack/downstream-contract@0.0.23
Patch Changes