From 4c7278680e184b34f6f074c38d7d98e9329e0996 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 13:49:11 +0000 Subject: [PATCH] docs(release): the 18.1.0 CHANGELOGs name each entry's own commit, not the revert that restored its changeset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Clause-②: no Metadata-protocol: none The 18.1.0 cut (#25606, e649c2d91e) ran after #25605 reverted the first cut, so the stock generator credited 260 of 265 entries, and 6000 "Updated dependencies" lines, to the revert 3937697. The released text is amended in place, as AGENTS.md's release-owned rows require. The 18.1.0 sections are regenerated, not hand-edited: the cut re-run on e649c2d91e's parent (8801f2bb37) with the generator main now carries (annotate-shipped, then changeset version), and the 79 CHANGELOGs it moved copied over. Against e649c2d91e every changed line differs only in its 7-hex commit. The published tarballs are not touched. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01X36HeTaoAfX2pS589N9FYP --- examples/app-crm/CHANGELOG.md | 142 ++--- examples/app-multi-package/CHANGELOG.md | 120 ++-- examples/app-showcase/CHANGELOG.md | 192 +++--- examples/app-todo/CHANGELOG.md | 180 +++--- examples/embed-objectql/CHANGELOG.md | 150 ++--- packages/adapters/hono/CHANGELOG.md | 30 +- packages/apps/account/CHANGELOG.md | 158 ++--- packages/apps/setup/CHANGELOG.md | 158 ++--- packages/apps/studio/CHANGELOG.md | 158 ++--- packages/cli/CHANGELOG.md | 552 +++++++++--------- packages/client-react/CHANGELOG.md | 134 ++--- packages/client/CHANGELOG.md | 134 ++--- packages/cloud-connection/CHANGELOG.md | 210 +++---- .../connectors/connector-mcp/CHANGELOG.md | 134 ++--- .../connectors/connector-openapi/CHANGELOG.md | 134 ++--- .../connectors/connector-rest/CHANGELOG.md | 134 ++--- .../connectors/connector-slack/CHANGELOG.md | 134 ++--- packages/console/CHANGELOG.md | 16 +- packages/core/CHANGELOG.md | 144 ++--- packages/create-objectstack/CHANGELOG.md | 8 +- packages/drivers/driver-memory/CHANGELOG.md | 138 ++--- packages/drivers/driver-mongodb/CHANGELOG.md | 136 ++--- packages/drivers/driver-sql/CHANGELOG.md | 166 +++--- .../drivers/driver-sqlite-wasm/CHANGELOG.md | 160 ++--- packages/drivers/driver-turso/CHANGELOG.md | 172 +++--- packages/formula/CHANGELOG.md | 124 ++-- packages/lint/CHANGELOG.md | 166 +++--- packages/mcp/CHANGELOG.md | 144 ++--- packages/metadata-core/CHANGELOG.md | 128 ++-- packages/metadata-fs/CHANGELOG.md | 8 +- packages/metadata-protocol/CHANGELOG.md | 182 +++--- packages/metadata/CHANGELOG.md | 140 ++--- packages/objectql/CHANGELOG.md | 200 +++---- packages/observability/CHANGELOG.md | 120 ++-- packages/platform-objects/CHANGELOG.md | 174 +++--- packages/plugins/embedder-openai/CHANGELOG.md | 120 ++-- .../plugins/knowledge-memory/CHANGELOG.md | 134 ++--- .../plugins/knowledge-ragflow/CHANGELOG.md | 134 ++--- packages/plugins/organizations/CHANGELOG.md | 190 +++--- .../plugins/plugin-approvals/CHANGELOG.md | 198 +++---- packages/plugins/plugin-audit/CHANGELOG.md | 210 +++---- packages/plugins/plugin-auth/CHANGELOG.md | 274 ++++----- packages/plugins/plugin-dev/CHANGELOG.md | 284 ++++----- packages/plugins/plugin-email/CHANGELOG.md | 188 +++--- .../plugins/plugin-hono-server/CHANGELOG.md | 138 ++--- .../plugins/plugin-pinyin-search/CHANGELOG.md | 68 +-- packages/plugins/plugin-security/CHANGELOG.md | 242 ++++---- packages/plugins/plugin-sharing/CHANGELOG.md | 220 +++---- packages/plugins/plugin-webhooks/CHANGELOG.md | 202 +++---- packages/qa/dogfood/CHANGELOG.md | 374 ++++++------ packages/qa/downstream-contract/CHANGELOG.md | 120 ++-- packages/qa/http-conformance/CHANGELOG.md | 22 +- packages/rest/CHANGELOG.md | 194 +++--- packages/runtime/CHANGELOG.md | 336 +++++------ .../services/service-analytics/CHANGELOG.md | 140 ++--- .../services/service-automation/CHANGELOG.md | 200 +++---- packages/services/service-cache/CHANGELOG.md | 134 ++--- .../service-cluster-redis/CHANGELOG.md | 120 ++-- .../services/service-cluster/CHANGELOG.md | 134 ++--- .../services/service-datasource/CHANGELOG.md | 190 +++--- packages/services/service-i18n/CHANGELOG.md | 136 ++--- packages/services/service-job/CHANGELOG.md | 172 +++--- .../services/service-knowledge/CHANGELOG.md | 134 ++--- .../services/service-mailbox/CHANGELOG.md | 174 +++--- .../services/service-messaging/CHANGELOG.md | 202 +++---- .../services/service-package/CHANGELOG.md | 138 ++--- packages/services/service-print/CHANGELOG.md | 138 ++--- packages/services/service-queue/CHANGELOG.md | 172 +++--- .../services/service-realtime/CHANGELOG.md | 172 +++--- .../services/service-settings/CHANGELOG.md | 194 +++--- packages/services/service-sms/CHANGELOG.md | 190 +++--- .../services/service-storage/CHANGELOG.md | 178 +++--- packages/skills/CHANGELOG.md | 6 +- packages/spec/CHANGELOG.md | 120 ++-- packages/triggers/trigger-api/CHANGELOG.md | 134 ++--- .../trigger-record-change/CHANGELOG.md | 134 ++--- .../triggers/trigger-schedule/CHANGELOG.md | 140 ++--- packages/types/CHANGELOG.md | 122 ++-- packages/verify/CHANGELOG.md | 410 ++++++------- 79 files changed, 6406 insertions(+), 6406 deletions(-) diff --git a/examples/app-crm/CHANGELOG.md b/examples/app-crm/CHANGELOG.md index 7e975ea8722..b54e04412b1 100644 --- a/examples/app-crm/CHANGELOG.md +++ b/examples/app-crm/CHANGELOG.md @@ -4,77 +4,77 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [4cef6e2] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [fb7501b] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [c898bd8] +- Updated dependencies [2b7c331] +- Updated dependencies [7c68b10] +- Updated dependencies [35d942e] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/runtime@18.1.0 - @objectstack/service-i18n@18.1.0 diff --git a/examples/app-multi-package/CHANGELOG.md b/examples/app-multi-package/CHANGELOG.md index 7230eda2ba7..1a876640fe1 100644 --- a/examples/app-multi-package/CHANGELOG.md +++ b/examples/app-multi-package/CHANGELOG.md @@ -4,66 +4,66 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 0.0.7 diff --git a/examples/app-showcase/CHANGELOG.md b/examples/app-showcase/CHANGELOG.md index e3cb743f401..4f3f2c3e09b 100644 --- a/examples/app-showcase/CHANGELOG.md +++ b/examples/app-showcase/CHANGELOG.md @@ -4,102 +4,102 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [de9cd1f] +- Updated dependencies [78ab647] +- Updated dependencies [6b9e6df] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [4cef6e2] +- Updated dependencies [55d7aab] +- Updated dependencies [eee65af] +- Updated dependencies [72a302a] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [ea08ce5] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [b811c73] +- Updated dependencies [5d27d32] +- Updated dependencies [2069b81] +- Updated dependencies [5d66021] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [8c73398] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [ae58b26] +- Updated dependencies [c71d03a] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [fb7501b] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [e3190b9] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [b9c7a8f] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [c898bd8] +- Updated dependencies [2b7c331] +- Updated dependencies [8d9e8b9] +- Updated dependencies [7c68b10] +- Updated dependencies [35d942e] +- Updated dependencies [025f6de] +- Updated dependencies [6abee03] - @objectstack/cloud-connection@18.1.0 - @objectstack/spec@18.1.0 - @objectstack/runtime@18.1.0 diff --git a/examples/app-todo/CHANGELOG.md b/examples/app-todo/CHANGELOG.md index bc84d54c531..bf3932e59cf 100644 --- a/examples/app-todo/CHANGELOG.md +++ b/examples/app-todo/CHANGELOG.md @@ -4,96 +4,96 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [4cef6e2] +- Updated dependencies [55d7aab] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [386f60f] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [9340181] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [8010b64] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [72fad92] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [c898bd8] +- Updated dependencies [4374f3c] +- Updated dependencies [2b7c331] +- Updated dependencies [7c68b10] +- Updated dependencies [35d942e] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/runtime@18.1.0 - @objectstack/objectql@18.1.0 diff --git a/examples/embed-objectql/CHANGELOG.md b/examples/embed-objectql/CHANGELOG.md index 3dddc3f9be4..724dae37bea 100644 --- a/examples/embed-objectql/CHANGELOG.md +++ b/examples/embed-objectql/CHANGELOG.md @@ -4,81 +4,81 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [9340181] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/objectql@18.1.0 - @objectstack/driver-memory@18.1.0 diff --git a/packages/adapters/hono/CHANGELOG.md b/packages/adapters/hono/CHANGELOG.md index 0522c78432b..19434a7b49f 100644 --- a/packages/adapters/hono/CHANGELOG.md +++ b/packages/adapters/hono/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is +- 02e6d73: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is Clause-②: yes (narrowing) @@ -24,20 +24,20 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [94842ba] +- Updated dependencies [0091d84] +- Updated dependencies [02e6d73] +- Updated dependencies [4cef6e2] +- Updated dependencies [9cfc575] +- Updated dependencies [a1e51d6] +- Updated dependencies [fb7501b] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [eee2f0d] +- Updated dependencies [c898bd8] +- Updated dependencies [2b7c331] +- Updated dependencies [915e940] +- Updated dependencies [35d942e] - @objectstack/runtime@18.1.0 - @objectstack/plugin-hono-server@18.1.0 - @objectstack/types@18.1.0 diff --git a/packages/apps/account/CHANGELOG.md b/packages/apps/account/CHANGELOG.md index 2f080090b72..d944aa75cec 100644 --- a/packages/apps/account/CHANGELOG.md +++ b/packages/apps/account/CHANGELOG.md @@ -4,85 +4,85 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/apps/setup/CHANGELOG.md b/packages/apps/setup/CHANGELOG.md index fab01cd714d..9afb11f1ed8 100644 --- a/packages/apps/setup/CHANGELOG.md +++ b/packages/apps/setup/CHANGELOG.md @@ -4,85 +4,85 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/apps/studio/CHANGELOG.md b/packages/apps/studio/CHANGELOG.md index 382dedb0982..68415dd2fbd 100644 --- a/packages/apps/studio/CHANGELOG.md +++ b/packages/apps/studio/CHANGELOG.md @@ -4,85 +4,85 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index f8217777ed6..3f09cf0b4d1 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -26,7 +26,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -37,7 +37,7 @@ - **Existing indexes stay as they are.** Nothing is renamed, and no declared organization composite is dropped or rebuilt by the boot, `os migrate plan` or `os migrate apply`; on SQLite the ownership ceremony's NOT NULL step rebuilds the tables it tightens, and their composites come back plain, enforcing the same constraint. One index is re-keyed: the `sys_setting` row-identity index, which the metadata protocol rebuilds on every boot, keys the plain `organization_id` from the next boot on (probe-first; a pure relaxation, so it cannot fail on existing rows). The schema differ reads `COALESCE(, …)` and the plain tenant column as one key part, in both directions, where the column is physically `NOT NULL` or the database is certified (its organization-ownership birth marker, or the ownership ceremony's marker at the current shape generation). So `os migrate plan` and the boot report no `recreate_index` for those indexes. On an uncertified database with a nullable tenant column the two forms stay different constraints: the finding is reported, and it names `os migrate organization-ownership` as its remedy. - **What widens.** Where a tenant column is still nullable (every table of a database 18.0.0 created, an uncertified 17.x / 18.0 database, a rotation shard, a Turso remote table, a table the ceremony reported), a unique index created from now on does not constrain rows whose organization is NULL, exactly like a NULL in any other key part; in the in-memory driver a record with no organization is exempt from an organization-scoped unique. The unique duplicate pre-flight no longer reports groups of rows with a NULL key part, since the index never refuses them. - **Who sees it.** A fresh install and every ceremonied table whose tenant column is NOT NULL see nothing. A database 18.0.0 created from empty is certified by its birth marker yet keeps nullable tenant columns: its existing indexes are kept unchanged, and a new organization unique declared on one of its tables constrains only rows that carry an organization. -- 3937697: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params +- 925fd07: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params Clause-②: yes (widening) Metadata-protocol: semantic @@ -50,7 +50,7 @@ - **`os i18n extract`.** A bulk `confirmText` written as the envelope is seeded exactly as the bare string: the extractor reads the slot's text through `templateSlotSource`, so the envelope form no longer records as an absent key with nothing to translate. - **Served translations.** The catalog overlay on a served view or an object's `listViews` compares a bulk `confirmText` with its packaged base by the slot's text, whichever form either side holds: an unchanged envelope still takes the catalog's sentence, and an edited one keeps the authored sentence. - **Unchanged.** The `confirm` / `confirmmessage` near-misses still name `confirmText`. Every other bulk-def key, the default confirm sentence and the flow text slots' verdicts are unchanged. -- 3937697: fix(cli): `os migrate apply` on an empty database writes the organization-ownership birth marker, so the fresh install's first `os serve` starts +- 19484af: fix(cli): `os migrate apply` on an empty database writes the organization-ownership birth marker, so the fresh install's first `os serve` starts Clause-②: yes @@ -60,7 +60,7 @@ - **Never on a database that was not empty.** The decision is the serving boot's own: the database counts as created from empty only when none of the tables this release declares existed before the apply. A database an earlier release created gains no marker from `os migrate apply`, even when the apply creates a table in it, and is still refused until the ceremony runs: `os migrate organization-ownership --out PLAN`, then `--apply --plan-file PLAN --backup-taken`. - **A failed write fails the command.** If the tables are created and the marker cannot be written, `os migrate apply` exits `1` and names the ceremony, which certifies such a database. - **Unchanged.** A database that already carries a marker keeps it as it is. `os migrate plan` writes nothing. On a Turso remote (`libsql://`) primary, `os migrate apply` creates no tables (its schema sync is skipped there), so the first serving boot creates them and writes the marker, as before. -- 3937697: feat(cli,plugin-audit): `os migrate audit-mail-bodies` also masks the mail bodies in the audit copies already moved to the `archive` datasource +- 3d8960c: feat(cli,plugin-audit): `os migrate audit-mail-bodies` also masks the mail bodies in the audit copies already moved to the `archive` datasource Clause-②: yes (widening) @@ -74,7 +74,7 @@ - **Run it with the server stopped**, or re-run it once and read 0 to mask in both halves. A live server's Archiver can move a row between the hot run and the archive run. - **New in the `--json` document:** an `archive` array, one entry per declared target: `{ datasource, objects, status, report?, connection? }`, with `status` one of `examined`, `none`, `not-connected` or `unknown`. The `report` key and its shape are unchanged. - **New exports from `@objectstack/plugin-audit`:** `migrateArchivedMailLogBodyCopies(driver, logger, options)`, the runner over a datasource's driver, and an `objects` option on both runners, which limits a run to the named copy tables. Types `MailLogBodyArchiveDriver`, `MailLogBodyCopyObject` and `MailLogBodyMigrationOptions`. -- 3937697: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) +- 63085c3: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) Clause-②: yes (narrowing) @@ -92,7 +92,7 @@ - **`os migrate organization-ownership` (`@objectstack/cli`).** The inventory row for `sys_notification_subscription` moves FROM fate 3 (`attribution`: organization-less rows went to the Default Organization under `single`) TO fate 4 (`report`: rows listed by id, never attributed, never deleted). The table is exempt from NOT NULL, because no declaration anchors tenancy on its column any more. The row stays, so a database that still holds the table plans instead of being refused as carrying an uninventoried platform table. The plan's `inventoryDigest` changes: a plan file written by an earlier CLI no longer matches, and `--apply --plan-file` refuses it with `plan-digest-mismatch`. Re-run `os migrate organization-ownership --out PLAN`, review it, and apply that. **Existing databases.** The table is left in place untouched: no backfill, no reaper, no migrate command. Schema sync is additive and never drops a table, so a database an earlier release provisioned keeps `sys_notification_subscription` and any rows an administrator wrote, and nothing reads them. Export any row worth keeping. Dropping the table is the operator's call, by hand: `DROP TABLE sys_notification_subscription`. -- 3937697: fix(cli)!: `os migrate apply` exits `1` when the confirmation it needs is not given, as every other `os migrate` subcommand with a `--yes` gate already does +- 62bc129: fix(cli)!: `os migrate apply` exits `1` when the confirmation it needs is not given, as every other `os migrate` subcommand with a `--yes` gate already does In a non-interactive shell (stdin is not a terminal) or under `--json`, `os migrate apply` without `--yes` applies nothing and prints `⚠ Confirmation required. Re-run with --yes to apply, or use "os migrate plan" to preview.` (under `--json`, its `confirmation_required` document). It exited `0` there, so a deploy script or an agent reading the exit status took a run that applied nothing for an applied one, and the next boot still reported the drift. Every other `os migrate` subcommand that writes behind `--yes` — `comment-reactions --apply`, `meta --stored --apply`, `recorded-by --apply`, `resume --run` and the rest — already exits `1` in that situation, as `organization-ownership --apply` does without `--backup-taken`. `apply` now answers the same way, in both faces. The warning and the `--json` document are unchanged. @@ -106,7 +106,7 @@ - **TO:** nothing applied, exit `1`. The printed warning and the `--json` document (`message: 'confirmation_required'`, `hint: 'pass --yes'`) are unchanged. - **Unchanged:** answering `n` at the `[y/N]` prompt in a terminal still prints `Aborted — no changes made.` and exits `0`; a run with `--yes` applies and exits `0`; a database with nothing to apply exits `0` without asking. - **The fix for a script:** a script that means to apply passes `--yes` (`os migrate apply --yes`, or `os migrate apply --allow-destructive --yes`); one that only wants to know what would change runs `os migrate plan`. -- 3937697: feat(cli, objectql): `os db orphans` — report the detail rows whose required master-detail master does not exist, and delete them only behind `--delete`, after a pre-delete export +- 157ebd0: feat(cli, objectql): `os db orphans` — report the detail rows whose required master-detail master does not exist, and delete them only behind `--delete`, after a pre-delete export Clause-②: yes (widening) @@ -122,7 +122,7 @@ **`@objectstack/objectql`: `ObjectQL.inspectCascadeDelete(object, id)` (new method).** A read-only method that returns every record a by-id `delete()` of that record removes, root first. It is the cascade set the delete collects for itself, read through the same walk. It writes nothing, runs no hook, and files no reference-check elevation record, because no delete happens. It reads as the system with no organization. `restrict` and `set_null` relations are not listed, because neither removes a record. A dependents probe that fails propagates. Nothing that ran before changes: the audit still reports and never rewrites, and the system-write exemption is unchanged. -- 3937697: feat(spec): a `page:tabs` item label gains a translation key, `pages..components..items..label` +- 30d21f6: feat(spec): a `page:tabs` item label gains a translation key, `pages..components..items..label` Clause-②: yes (widening) @@ -132,7 +132,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts the key over a declared `page:tabs` item `value`. It refuses it as `translation-target-unknown` over an unknown value (with "Did you mean"), over a component of another type (a `page:accordion` is pointed at the inline locale map, since its panels have no stable key), and under a component id the page does not declare. - **`os i18n extract` / coverage.** The extractor writes a slot for every valued tab item, and the coverage check demands it. An inline locale map on the item label is counted as authored, as before. - **Unchanged.** Every existing `pages` key, and an inline locale map on a tab label that the bundle does not key. -- 3937697: feat(spec): a form view's `title` is translated through `objects.._views..title`, and `GET /forms/:slug` serves it in the visitor's language +- eddffc3: feat(spec): a form view's `title` is translated through `objects.._views..title`, and `GET /forms/:slug` serves it in the visitor's language Clause-②: yes (widening) @@ -145,7 +145,7 @@ ### Patch Changes -- 3937697: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) +- 448374d: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) Clause-②: yes (narrowing): a marketplace re-install that installed before is now refused `409` while it would un-make an access choice made in this system, until the same call confirms it (narrowing); the door gains the `confirmAccessUpgrade` body field and the `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` code, plugin-security gains the `security.accessUpgradeCheck` service and its exports, and the CLI gains `--confirm-access-upgrade ` (widening). Metadata-protocol: none @@ -163,14 +163,14 @@ - **Unchanged.** A fresh install is never checked. An upgrade with no finding installs exactly as before. The error-code ledger registers `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` under `@objectstack/cloud-connection`. `@objectstack/plugin-security` exports `ACCESS_UPGRADE_CHECK_SERVICE`, `createAccessUpgradeCheck` and `accessUpgradeDelta`, and `SecurityPlugin` registers the check under `security.accessUpgradeCheck`. -- 3937697: fix(cli): `os dev`'s in-place upgrade line no longer says every refused database is "still in the v17 organization-ownership shape" +- feb09db: fix(cli): `os dev`'s in-place upgrade line no longer says every refused database is "still in the v17 organization-ownership shape" Clause-②: no (printed text of `os dev` only: no exit code, refusal, recovered boot or IPC message moves) When the organization-ownership boot guard refuses the server `os dev` starts, `os dev` copies the development database and upgrades it in place. The line it printed first said the database was "still in the v17 organization-ownership shape", for every refusal. That was wrong for a database an 18.0 pre-release created, and for every refusal that is not about the database's origin at all: a marker that is unverified, unreadable or from an older shape generation, or a read or write the guard could not make. The line now names no origin. It points at the guard's own refusal, printed just above it, which says what the guard found, and it says that `os dev` upgrades the database in place, keeping a copy first. The verdict line printed after the upgrade still gives the copy's path. Which databases `os dev` upgrades, how it upgrades them, and what a bare `os serve` prints are unchanged. -- 3937697: fix(cli): `os lint` and `os i18n check` ask for an approval flow's label and each approval step's label (#24916) +- 2a2f5c2: fix(cli): `os lint` and `os i18n check` ask for an approval flow's label and each approval step's label (#24916) Clause-②: no Metadata-protocol: none @@ -195,7 +195,7 @@ ``` `os i18n extract` writes the empty slots for you and keeps the strings a pack already translates. No key, schema or export changes: both keys were already part of the translation contract, and `os validate` already accepted them. -- 3937697: fix(cli): `os migrate plan` names the organization-ownership ceremony, not `--allow-destructive`, for the `organization_id` drops `os migrate apply` refuses (#24925) +- 5f11cec: fix(cli): `os migrate plan` names the organization-ownership ceremony, not `--allow-destructive`, for the `organization_id` drops `os migrate apply` refuses (#24925) Clause-②: no @@ -206,7 +206,7 @@ - **Unchanged.** On a database whose ceremony has verified, or one with no `organization_id` drop, the plan reads as before, byte for byte, and on the second it reads no marker. The `--json` document, the exit code and `os migrate apply` are unchanged. **What to do.** Nothing. On a 17.x database, follow the plan's footer: run the ceremony, then re-run `os migrate plan`. -- 3937697: fix(cli): `os migrate plan` and `os migrate apply` name the command each held drop waits for, never `--allow-destructive`, for every drop `apply` refuses (#24958) +- 1a1f5c3: fix(cli): `os migrate plan` and `os migrate apply` name the command each held drop waits for, never `--allow-destructive`, for every drop `apply` refuses (#24958) Clause-②: no @@ -217,7 +217,7 @@ - **Unchanged.** A database with no held drop prints what it printed before, byte for byte, in both commands. The `--json` documents, the exit codes and every refusal of `os migrate apply --allow-destructive` (its rule and its text) are unchanged. **What to do.** Nothing. Follow the footer: run the command each held drop names, then re-run `os migrate plan`. -- 3937697: fix(cli): `os lint` and `os i18n check` ask for the label of a navigation item another package contributes into an app (#24993) +- 68a57ad: fix(cli): `os lint` and `os i18n check` ask for the label of a navigation item another package contributes into an app (#24993) Clause-②: no Metadata-protocol: none @@ -237,7 +237,7 @@ ``` `os i18n extract` now writes these slots too, and keeps the strings a pack already translates. No key, schema or export changes: the key was already part of the translation contract. -- 3937697: fix(plugin-auth): `os migrate apply`'s `sys_account.issuer` pre-flight report names each colliding row's stored issuer instead of `(none)` +- 4bf079c: fix(plugin-auth): `os migrate apply`'s `sys_account.issuer` pre-flight report names each colliding row's stored issuer instead of `(none)` Clause-②: yes (widening) @@ -248,7 +248,7 @@ - **`@objectstack/cli`.** `os migrate account-issuer` reads through the probe's reader instead of its own, so it and `os migrate apply` read one table one way. Its output is unchanged. **Unchanged.** The collision verdict (`ok`, the colliding keys, row ids, users, counts), the `apply` refusal and its exit code. A database whose `sys_account` has no `issuer` column reports each row as `(none)`, as before. -- 3937697: fix(driver-sql,cli): `os migrate plan` / `apply` no longer offer `--allow-destructive` for a unique index the existing rows already violate +- 8c73398: fix(driver-sql,cli): `os migrate plan` / `apply` no longer offer `--allow-destructive` for a unique index the existing rows already violate Clause-②: yes (widening) Metadata-protocol: none @@ -259,7 +259,7 @@ - **`os migrate plan` / `os migrate apply` (`@objectstack/cli`).** The apply-limit seam reads the entry's own limit first, then the driver's per-op one. A blocked unique index is listed with the conflicting groups as the reason it cannot be applied, the footer and the skip lines stop offering `--allow-destructive` for it, and it is counted among the changes that remain drift. A database with no blocked index prints as before. Unchanged: `os migrate apply --allow-destructive` still names such an entry as not applied and reports the run PARTIAL with exit 1, because the database still differs from its metadata. To clear it, deduplicate the listed rows and run `os migrate plan` again. -- 3937697: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since +- 03966ce: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since `@objectstack/plugin-auth` declares the better-auth family exactly, so a fresh install resolves what this package tested. All five declared ranges (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim`, `@better-auth/sso`) move from `1.7.3` to `1.7.12`, still exact. The lift takes the fixes published in 1.7.4 to 1.7.12 for packages this plugin mounts: GHSA-965c-763c-88jm and GHSA-r4xp-prcw-77qf (1.7.7), and the oauth-provider, SSO, SCIM, JWT and password-reset fixes up to 1.7.12. Every symbol this package imports from the family is still exported. It also pulls in `better-call` 1.4.4, `@better-auth/utils` 0.5.0 and `@better-fetch/fetch` 1.3.2, the versions 1.7.12 declares. @@ -289,13 +289,13 @@ - **`@objectstack/spec` and `@objectstack/cli` (patch, text only, not breaking):** the TSDoc on the organization schema's optional `updatedAt` now records that its better-auth measurement still holds on 1.7.12, and the `os migrate account-issuer` description no longer names a better-auth version. No schema, type, flag or behaviour changes in either package. - **`@objectstack/service-datasource` (patch, text only, not breaking):** the `resolveSqliteDriver` docs now describe the error better-sqlite3 13 actually throws for an addon that was never built: its loader's `require()` of the absent `build/Release/better_sqlite3.node`, which Node answers with `MODULE_NOT_FOUND`. The docs used to name a helper package's message that 13.x no longer produces. Development still steps down to wasm SQLite on that error, as before. No code changes. - **What to do as an operator:** tell users that a Magic Link, social, SSO or account-linking sign-in begun before the upgrade must be started again after it. Check each OIDC SSO provider's configured issuer against its discovery document and set it to the exact `issuer` string the document publishes. An OAuth client that branched on `401` for a PKCE failure should branch on `400 invalid_grant`. A browser client that read every non-`200` `/get-session` answer as "signed out" should treat a `500` as "try again". -- 3937697: fix(cli): retire the scaffold's five stale `peerDependencyRules` entries on the better-auth 1.7.12 pin +- 80ec71d: fix(cli): retire the scaffold's five stale `peerDependencyRules` entries on the better-auth 1.7.12 pin Clause-②: no Metadata-protocol: none A project scaffolded by `objectstack init` or `npx create-objectstack` no longer carries a `peerDependencyRules.allowedVersions` block in its `pnpm-workspace.yaml`. All five entries suppressed peer mismatches that better-auth 1.7.12 no longer has: `better-auth` declares no `better-sqlite3` peer, and `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim` and `@better-auth/sso` each peer `@better-auth/utils` as `^0.4.2 || ^0.5.0`, which the resolved 0.5.0 satisfies. `allowedVersions` only silences a report, so a scaffold resolves the same lockfile as before and its first `pnpm install` stays free of unmet-peer warnings. Projects scaffolded earlier can keep or delete the block; either way nothing changes. -- 3937697: fix(cli)!: a production `os serve` that composes no organization object is refused whether or not `--server`, so `--no-server` no longer writes ownerless rows +- ab488d9: fix(cli)!: a production `os serve` that composes no organization object is refused whether or not `--server`, so `--no-server` no longer writes ownerless rows Clause-②: yes (narrowing) Metadata-protocol: none @@ -315,7 +315,7 @@ - A cloud migrate-and-exit job (`OS_MIGRATE_AND_EXIT=1`) must carry `OS_AUTH_SECRET` in production; without it the job is now refused, naming the variable. **Release-notes correction.** The 18.0 release page says a production `os serve` with no auth secret can "serve without the data API (`--no-server`)". That remedy is withdrawn: `--no-server` is refused the same way. The pending changeset `24583-7b3-organizationless-counter-retired` is corrected in this change to match. -- 3937697: feat(cli): `os migrate plan` lists the tenant columns still nullable and names the voluntary organization-ownership ceremony; the ceremony reports a rotation shard already NOT NULL as such (#25134) +- 6251f59: feat(cli): `os migrate plan` lists the tenant columns still nullable and names the voluntary organization-ownership ceremony; the ceremony reports a rotation shard already NOT NULL as such (#25134) Clause-②: yes (widening) — `os migrate plan --json` gains the `nullableTenantColumns` field, and the ceremony's `not-null` step gains the `already-not-null` outcome and the `alreadyNotNull` summary count. No exit code, drift entry, op, refusal or accepted input moves. @@ -328,7 +328,7 @@ - **The ceremony's `not-null` step.** A rotation shard that the driver created `NOT NULL` used to be reported as `unsupported`, with a note saying each new shard is created nullable. That has not been true since the driver began creating shards `NOT NULL`. Such a shard is now `already-not-null` (counted in `alreadyNotNull`) and gets no note. A shard rotated in before then stays `unsupported`, and its note says it is dropped when its period leaves the base table's retention. **What to do.** Nothing is required: the server starts either way. To tighten the columns the plan lists, run `os migrate organization-ownership --out PLAN`, review it, then run `os migrate organization-ownership --apply --plan-file PLAN --backup-taken`. -- 3937697: fix(cli)!: a production `os serve` whose `@objectstack/plugin-auth` fails to load is refused, naming the load error, instead of booting with no organization object +- b2e964f: fix(cli)!: a production `os serve` whose `@objectstack/plugin-auth` fails to load is refused, naming the load error, instead of booting with no organization object Clause-②: yes (narrowing) Metadata-protocol: none @@ -343,7 +343,7 @@ **Unchanged:** `os dev` and `--dev` (a development boot keeps the warning and boots without auth); the cloud runtime's host kernel (`ObjectOSEnvironmentPlugin`), whose auth is each project's; a production boot with no auth secret or with no auth at all, which is still refused by the existing refusals; and an embedded kernel, which never runs this command. **The remedy.** Repair the install the error names: `@objectstack/plugin-auth` is a dependency of `@objectstack/cli`, so reinstall the deployment's dependencies (e.g. `npm ci` or `pnpm install --frozen-lockfile`). Running kernel-only (`--no-server`) does not avoid the refusal. -- 3937697: fix(cli,create-objectstack): new projects declare vitest `~4.1.12`, outside GHSA-qxg6-89mg-rqv8, and still install on npm 10 +- b6e8707: fix(cli,create-objectstack): new projects declare vitest `~4.1.12`, outside GHSA-qxg6-89mg-rqv8, and still install on npm 10 Clause-②: no Metadata-protocol: none @@ -353,7 +353,7 @@ npm 10, the npm Node 22 bundles, still installs every scaffold. The `overrides.vitest` entry, which equals `devDependencies.vitest`, is what makes that hold: it settles vitest 4.1.12's contradictory optional peer (`@vitest/browser-webdriverio`), which npm 10 otherwise crashes on with `Cannot read properties of null (reading 'edgesOut')`. Measured on npm 10.9.4, 10.9.9 and 11.21.1. pnpm ignores npm's `overrides` field. **An existing project made by an earlier `create-objectstack`, `os init` or `os create plugin`** keeps its own `~4.0.0`. To move it, set `overrides.vitest` to `~4.1.12` in `package.json`, and `devDependencies.vitest` too where the project declares it, then run `npm install`. npm refuses an override that differs from the direct dependency (`EOVERRIDE`), so the two move together. -- 3937697: fix(cli,create-objectstack): new projects override `uuid` below 12.0.0 to `^11.1.1`, so `npm audit` lists no GHSA-w5hq-g745-h8pq entry +- d0c56a2: fix(cli,create-objectstack): new projects override `uuid` below 12.0.0 to `^11.1.1`, so `npm audit` lists no GHSA-w5hq-g745-h8pq entry Clause-②: no Metadata-protocol: none @@ -363,7 +363,7 @@ The selector stops at `<12.0.0`, so a project can still add a newer `uuid` of its own: `npm install uuid@14` installs. A spec-less `npm install uuid` is refused with `EOVERRIDE` (npm reads it as `uuid@*`, which meets the selector); name the major instead. **An existing project made by an earlier `create-objectstack`, `os init` or `os create plugin`**, or any other npm project that installs `@objectstack/rest`, directly or through `@objectstack/runtime`, `@objectstack/cli`, `@objectstack/plugin-auth` or `@objectstack/verify`: add `"uuid@<12.0.0": "^11.1.1"` to the `overrides` block of its root `package.json` and run `npm install`. npm reads `overrides` only from the root manifest, so no `@objectstack/*` release can apply it for you. -- 3937697: fix(cli): `os create plugin` ships a starter test, so a new project's `npm test` passes +- 6bc8cc6: fix(cli): `os create plugin` ships a starter test, so a new project's `npm test` passes Clause-②: no Metadata-protocol: none @@ -373,7 +373,7 @@ The starter test lives in `src/`, which `tsc` compiles, so the template also writes `tsconfig.build.json`: it extends `tsconfig.json` and excludes `src/**/*.test.ts`, and `build` and `dev` now run `tsc -p tsconfig.build.json`. `typecheck` still reads `tsconfig.json`, so a type error in a test still fails it, while `dist/` holds no compiled test and `npm test` after `npm run build` runs each test once. **An existing project made by an earlier `os create plugin`** still has no test file. Add a `*.test.ts` file, for example a copy of the `src/index.test.ts` that a new `os create plugin NAME` writes. If you put it under `src/`, also copy `tsconfig.build.json` and point the `build` and `dev` scripts at it (`tsc -p tsconfig.build.json`), or `tsc` compiles the test into `dist/` and vitest runs it twice. -- 3937697: fix(cli): `os init -t plugin` ships a starter test, so a new project's `npm test` passes +- 9c431ba: fix(cli): `os init -t plugin` ships a starter test, so a new project's `npm test` passes Clause-②: no Metadata-protocol: none @@ -381,7 +381,7 @@ A project made by `os init NAME -t plugin` declared `"test": "vitest run"` and contained no test file, so its first `npm test` exited 1 with `No test files found, exiting with code 1`. The template now writes `package.test.ts` beside `objectstack.config.ts`. The test imports the package's stack, which runs `defineStack()` and its protocol check as the file loads, and asserts that the stack declares itself a `plugin` and contains every object `src/objects/index.ts` exports. A fresh project's `npm test` reports `Test Files 1 passed`. The test boots no engine. Its header links the `@objectstack/verify` harness for tests that need one. **An existing project made by an earlier `os init -t plugin`** still has no test file. Add a `*.test.ts` file, for example a copy of the `package.test.ts` that a new `os init NAME -t plugin` writes. -- 3937697: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected +- 24360dc: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected Clause-②: no Metadata-protocol: none @@ -390,7 +390,7 @@ - **`@objectstack/plugin-security`.** The Organization help on `sys_user_position` and `sys_user_permission_set` no longer says an empty value means "global" or "applies in every org context". A grant or assignment applies only in its own organization, and one with no organization applies nowhere. The four locale bundles carry the new text. - **`@objectstack/cli`.** `os migrate organization-ownership`'s warning about rows whose owner cannot be derived reads "…while one stays NULL, except on a table whose column is not the tenancy anchor." where it read "(but on a table …)". - **`@objectstack/spec`.** Wording only, no schema moves: the upgrade guide's `driver-read-scope-follows-tenant-wall` entry names update and delete "by id or by predicate"; the `sharing-rule-declared-mirror-retired` entry no longer paraphrases ADR-0131 D13 as asking an entry of every retirement; `IEmailService`'s `organizationId` TSDoc no longer says an absent value leaves the row unstamped (the engine stamps the derivable organization or refuses the insert); a TSDoc citation in `schedule-organization.zod.ts` names the run store instead of a deleted file. -- 3937697: feat(cli): the ownership ceremony gives a walled organization-less self-registration grant its user's sole membership's organization +- 1eb1afa: feat(cli): the ownership ceremony gives a walled organization-less self-registration grant its user's sole membership's organization Clause-②: no Metadata-protocol: none @@ -406,7 +406,7 @@ - its user already holds the same permission set in that organization, because the grant's unique index would refuse the write. Each reported row's reason names its case. The remedy is unchanged: assign the organization, or delete the row by hand, then re-run `--apply`. Under `single` nothing changes, and the Default Organization takes every organization-less grant. -- 3937697: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core +- 8dfd126: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core Clause-②: yes (narrowing) Metadata-protocol: none @@ -421,7 +421,7 @@ - **One definition of the Default Organization (`@objectstack/core`).** New exports: `findDefaultOrganization(read)` (the rule, over a read the caller supplies), `DEFAULT_ORGANIZATION_SLUG`, and `readDefaultOrganizationId(ql)` (the resolver's own read, which fails loud on an unreachable store). plugin-auth's boot invariant, default-organization bootstrap, tenancy service and last-admin guard, plugin-security's `resolveDefaultOrganizationId`, and the ownership ceremony's plan now name the organization through it. Each keeps its own read policy: whether a failed read throws or reads as none, the guard's simulation of a pending write, and the ceremony's raw SQL. Two edge answers align with the resolver's. A `default`-slugged row with a blank id now falls through to the only-organization reading in the ceremony's plan. A numeric id is now read as its string in plugin-security's reader. **What an operator does.** Before you create a second organization on a `single` deployment whose only organization has another slug, either give that organization the slug `default` (while it is the only one, that changes nothing else), or make sure another account can administer: an organization owner or admin, or an address in `OS_PLATFORM_OWNER_EMAIL`. -- 3937697: feat(cli): the console document carries the runtime branding in its ``, description and Open Graph tags, written on the server, so a link preview shows the product's name +- 7b047b4: feat(cli): the console document carries the runtime branding in its `<title>`, description and Open Graph tags, written on the server, so a link preview shows the product's name Clause-②: no Metadata-protocol: none @@ -438,7 +438,7 @@ Every value is HTML-escaped, and a missing value writes no tag. A composition that mounts no `runtime/config` door gets the document exactly as before. A branding read that fails serves the document as before and logs one `warn`. Nothing to change: `OS_PRODUCT_NAME`, `OS_PWA_DESCRIPTION`, `OS_LOGO_URL`, the `RuntimeConfigPlugin` options and, under `single`, a saved Setup → Branding name and logo reach the tags the way they reach the console. -- 3937697: fix(cli,mcp): `os dev`'s boot banner and the served SKILL.md name the MCP server the same way +- 4374f3c: fix(cli,mcp): `os dev`'s boot banner and the served SKILL.md name the MCP server the same way Clause-②: no Metadata-protocol: none @@ -448,13 +448,13 @@ Both producers now read one exported constant, `OBJECTSTACK_MCP_SERVER_NAME` (`'objectstack'`), from `@objectstack/mcp`. The banner's `Connect` row prints `claude mcp add --transport http objectstack URL`. If you registered the server under the folder name from an earlier banner, that entry keeps working. Remove it with `claude mcp remove FOLDER` if you also added it as `objectstack`. `printMcpConnectHint` no longer takes a `name` option. -- 3937697: fix: `os migrate apply --allow-destructive` no longer says the organization-ownership ceremony verified on a database that was created from empty +- fa06169: fix: `os migrate apply --allow-destructive` no longer says the organization-ownership ceremony verified on a database that was created from empty Clause-②: no Metadata-protocol: none On a database an 18.x release created from empty, the ceremony's `sys_migration` row is the birth marker the boot guard writes (`details.birth`): it records that no ceremony was owed, not that one ran. When such a database dropped an `organization_id` column, the success line still read "the organization-ownership ceremony verified (TIME)", with TIME being the database's creation. The line now says which row let the drop through: for a birth marker, that the database was created from empty (its creation time and the platform version that created it) and the ceremony is not needed for it; for a ceremony run, the same sentence as before. The line is read from the marker the gate already reads, with no second database read. `--json` output, exit codes and which drops are allowed are unchanged. -- 3937697: fix(create-objectstack, cli): a scaffolded project pins every `@objectstack/*` dependency to the exact version of the tool that wrote it, not a `^` range +- 975d5b3: fix(create-objectstack, cli): a scaffolded project pins every `@objectstack/*` dependency to the exact version of the tool that wrote it, not a `^` range Clause-②: no Metadata-protocol: none @@ -464,252 +464,252 @@ - **`npm create objectstack`** (`create-objectstack`), **`os init`** and **`os create`** (the default standalone placement) now write the scaffolder's own version, exactly, for every `@objectstack/*` entry in the emitted `package.json`: `18.0.0`, not `^18.0.0`. A prerelease is written verbatim (`18.1.0-rc.2`). - **Unchanged.** `os create --in-repo` still writes `workspace:*`. Third-party ranges (`typescript`, `vitest`, `zod`, `@types/node`) are not touched. Every `@objectstack/*` package is released on one version, so the exact version is published for each of them. - **An existing project** keeps whatever its `package.json` says. To follow the docs, replace each `^18.x.y` on an `@objectstack/*` entry with the exact version you run (for example `"@objectstack/runtime": "18.0.0"`), then reinstall. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [54df640] +- Updated dependencies [448374d] +- Updated dependencies [e207b97] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [8cfe1f9] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [9a06f0b] +- Updated dependencies [f90ea67] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [c2d4072] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [abd5acd] +- Updated dependencies [6b9e6df] +- Updated dependencies [fbb42d9] +- Updated dependencies [73a2b52] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [6440cf1] +- Updated dependencies [72518d2] +- Updated dependencies [e5b3de0] +- Updated dependencies [88cc145] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [4cef6e2] +- Updated dependencies [28ff8a9] +- Updated dependencies [55d7aab] +- Updated dependencies [98c3d00] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [eee65af] +- Updated dependencies [3fbef41] +- Updated dependencies [72a302a] +- Updated dependencies [fcb40ad] +- Updated dependencies [ba69b16] +- Updated dependencies [865d2c8] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [3b3830c] +- Updated dependencies [abc25a3] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [3d8960c] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [ea08ce5] +- Updated dependencies [19e5338] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0603bfa] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [b811c73] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [f802213] +- Updated dependencies [86d2360] +- Updated dependencies [688052e] +- Updated dependencies [5d27d32] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [0a3ce08] +- Updated dependencies [5d66021] +- Updated dependencies [c5915b2] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [9532e27] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [58cd58f] +- Updated dependencies [58cd58f] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [d68aab6] +- Updated dependencies [aaee084] +- Updated dependencies [42b60b9] +- Updated dependencies [c0ae356] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [31f0f27] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [b289090] +- Updated dependencies [386f60f] +- Updated dependencies [c24203f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [8c73398] +- Updated dependencies [0f1eeee] +- Updated dependencies [f46ef4d] +- Updated dependencies [3782b2d] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [a39389e] +- Updated dependencies [9340181] +- Updated dependencies [9340181] +- Updated dependencies [2e242bb] +- Updated dependencies [fccbd9d] +- Updated dependencies [459afea] +- Updated dependencies [c8f4c43] +- Updated dependencies [4f97aeb] +- Updated dependencies [c4b49c3] +- Updated dependencies [db9c02a] +- Updated dependencies [284e048] +- Updated dependencies [c6bdcac] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [0148071] +- Updated dependencies [03966ce] +- Updated dependencies [ae58b26] +- Updated dependencies [1b3b65e] +- Updated dependencies [331613c] +- Updated dependencies [5801a4f] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [c71d03a] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [80ec71d] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [8010b64] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [b6e8707] +- Updated dependencies [fe0ec2b] +- Updated dependencies [d0c56a2] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [1f78b64] +- Updated dependencies [bc5daf0] +- Updated dependencies [3a440b0] +- Updated dependencies [279fdcf] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [17f3c65] +- Updated dependencies [b62f959] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [72fad92] +- Updated dependencies [d196748] +- Updated dependencies [9d60b42] +- Updated dependencies [a285ff2] +- Updated dependencies [829cb77] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [b9c7a8f] +- Updated dependencies [69913f8] +- Updated dependencies [7db1697] +- Updated dependencies [b3fddd1] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [ab510f4] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [4374f3c] +- Updated dependencies [d0a1361] +- Updated dependencies [431327b] +- Updated dependencies [97aa34e] +- Updated dependencies [2b7c331] +- Updated dependencies [8878c36] +- Updated dependencies [832a84e] +- Updated dependencies [832a84e] +- Updated dependencies [2581efb] +- Updated dependencies [8a49e37] +- Updated dependencies [8d9e8b9] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0b8dbea] +- Updated dependencies [0ec4c5a] +- Updated dependencies [0fab7ba] +- Updated dependencies [35d942e] - Updated dependencies [a57643d] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [b8c9590] +- Updated dependencies [74496c6] +- Updated dependencies [aa2dbab] +- Updated dependencies [975d5b3] +- Updated dependencies [ce18e73] - Updated dependencies [4a25192] -- Updated dependencies [3937697] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [cc8d886] +- Updated dependencies [1000cc7] +- Updated dependencies [51e804c] +- Updated dependencies [06900c9] +- Updated dependencies [9a48ae8] +- Updated dependencies [d44c893] +- Updated dependencies [9057fd4] +- Updated dependencies [7adfaec] +- Updated dependencies [6abee03] +- Updated dependencies [6abee03] +- Updated dependencies [1361a5a] +- Updated dependencies [f7d7403] - @objectstack/plugin-security@18.1.0 - @objectstack/plugin-sharing@18.1.0 - @objectstack/cloud-connection@18.1.0 diff --git a/packages/client-react/CHANGELOG.md b/packages/client-react/CHANGELOG.md index a3e3bee59a1..ad86a6432d6 100644 --- a/packages/client-react/CHANGELOG.md +++ b/packages/client-react/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md index 861428a1230..dbc9877a7e4 100644 --- a/packages/client/CHANGELOG.md +++ b/packages/client/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/cloud-connection/CHANGELOG.md b/packages/cloud-connection/CHANGELOG.md index d6bcca20522..79944b16bd4 100644 --- a/packages/cloud-connection/CHANGELOG.md +++ b/packages/cloud-connection/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(cloud-connection): `GET /api/v1/runtime/config` serves the Branding settings' name, logo and colour, falling back to `OS_PRODUCT_NAME`, `OS_LOGO_URL` and `OS_BRAND_COLOR` +- 78ab647: feat(cloud-connection): `GET /api/v1/runtime/config` serves the Branding settings' name, logo and colour, falling back to `OS_PRODUCT_NAME`, `OS_LOGO_URL` and `OS_BRAND_COLOR` Clause-②: no (the served `branding` block keeps its shape and no exported type changes; only where its values come from moves) @@ -17,7 +17,7 @@ A value somebody set wins (saved in Setup, or pinned by the settings layer's own `OS_BRANDING_*` variable). A key nobody set falls back exactly as before: the host's constructor option, then `OS_PRODUCT_NAME` / `OS_LOGO_URL` / `OS_BRAND_COLOR`, then the built-in default. `productShortName`, `pwaDescription` and `pwaThemeColor` follow the name and colour actually served, unless configured themselves. `brandColor` keeps its meaning: the console's browser and installed-app theme colour, beside each app's own `AppBranding` colours. The door reads the settings only when the settings service lists the `branding` namespace. `@objectstack/service-settings` withholds it under the `group` and `isolated` tenancy postures, so on a walled deployment no tenant data reaches this anonymous door and the deployment's `OS_*` branding is served, as before. A settings read that fails serves the deployment's branding and logs one warning; the door never answers 500 for it. -- 3937697: fix(cloud-connection)!: a runtime holding the environment service key is platform-managed, so it registers no Cloud Connection Setup page and refuses to disconnect; everywhere else the Cloud Connection entry moves to Setup's Integrations group +- ae58b26: fix(cloud-connection)!: a runtime holding the environment service key is platform-managed, so it registers no Cloud Connection Setup page and refuses to disconnect; everywhere else the Cloud Connection entry moves to Setup's Integrations group A runtime whose control-plane credential is the environment service key (`controlPlaneApiKey`, or `OS_CLOUD_API_KEY`, which the cloud sets on the environments it hosts) is connected by the platform, not by anyone on the runtime. It still registered the Cloud Connection page in Setup's Apps group, which read "Connected" and offered Disconnect. Disconnecting there cleared the runtime's stored device credential while the service key stayed in use, so the page went on reading "Connected", and the control plane was asked to revoke a connection the platform had made. @@ -36,7 +36,7 @@ ### Patch Changes -- 3937697: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) +- 448374d: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) Clause-②: yes (narrowing): a marketplace re-install that installed before is now refused `409` while it would un-make an access choice made in this system, until the same call confirms it (narrowing); the door gains the `confirmAccessUpgrade` body field and the `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` code, plugin-security gains the `security.accessUpgradeCheck` service and its exports, and the CLI gains `--confirm-access-upgrade <token>` (widening). Metadata-protocol: none @@ -54,7 +54,7 @@ - **Unchanged.** A fresh install is never checked. An upgrade with no finding installs exactly as before. The error-code ledger registers `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` under `@objectstack/cloud-connection`. `@objectstack/plugin-security` exports `ACCESS_UPGRADE_CHECK_SERVICE`, `createAccessUpgradeCheck` and `accessUpgradeDelta`, and `SecurityPlugin` registers the check under `security.accessUpgradeCheck`. -- 3937697: fix(cloud-connection)!: one rule for the Cloud Connection capability — the page's record and its three connection-changing requests require `manage_platform_settings`, like its Setup entry; a server holding the environment service key also refuses `bind/start` and `bind/poll` +- c71d03a: fix(cloud-connection)!: one rule for the Cloud Connection capability — the page's record and its three connection-changing requests require `manage_platform_settings`, like its Setup entry; a server holding the environment service key also refuses `bind/start` and `bind/poll` Clause-②: no (narrowing) Metadata-protocol: none @@ -72,7 +72,7 @@ - **Unchanged:** a user who holds `manage_platform_settings`, which the default platform-administrator permission set carries, is served exactly as before on a server without the service key. Anonymous callers still get `401`, and a session the authentication policy is holding still gets its `403`. The device-code flow's steps, the status answer for a permitted caller, and the four other session routes (`install`, `installation`, `installed`, `org-packages`) are unchanged. **Who acts:** a deployment that relies on organization administrators, or another set holding only Setup Access, to connect its server grants `manage_platform_settings` to those users, through a permission set or a position, and they are served as before. -- 3937697: feat(core): `isCloudManaged()` is the one reader of `OS_CLOUD_MANAGED`, and a production boot that sets it without a bound control plane refuses to start +- db1c7cc: feat(core): `isCloudManaged()` is the one reader of `OS_CLOUD_MANAGED`, and a production boot that sets it without a bound control plane refuses to start Clause-②: yes (widening) Metadata-protocol: none @@ -81,7 +81,7 @@ - **The fuse.** On a production boot (not `--dev`, which sets `NODE_ENV=development` only when `NODE_ENV` is unset, and not `NODE_ENV=test`; so `NODE_ENV=production os serve --dev` counts as a production boot and is refused the same way), `OS_CLOUD_MANAGED=1` with `OS_CLOUD_API_KEY` unset or empty refuses: `ObjectKernel.bootstrap()` and `LiteKernel.bootstrap()` reject before any plugin initialises, and `isCloudManaged()` throws the same error. The cloud sets both variables on the runtimes it hosts. A self-hosted deployment that has `OS_CLOUD_MANAGED=1` in a copied env file now fails to boot; remove the variable, which a self-hosted deployment never needs. - **One caveat:** the fuse reads the environment only. A runtime that binds its control plane solely through `CloudConnectionPlugin`'s `controlPlaneApiKey` option, and also sets `OS_CLOUD_MANAGED=1` in production, is refused. Set `OS_CLOUD_API_KEY` instead. - **`@objectstack/cloud-connection`:** the plugin resolves its control-plane credential through `resolveControlPlaneApiKey(controlPlaneApiKey)`, so the plugin's "platform-managed" answer and the fuse share one derivation. Its behaviour is unchanged: the option wins, then `OS_CLOUD_API_KEY`, trimmed. -- 3937697: fix(cloud-connection)!: a cloud-fetched marketplace install whose package ships a position, permission set or capability name an environment-authored item holds is refused before any write, as the file-import install already was +- 8d9e8b9: fix(cloud-connection)!: a cloud-fetched marketplace install whose package ships a position, permission set or capability name an environment-authored item holds is refused before any write, as the file-import install already was Clause-②: no (narrowing) Metadata-protocol: none @@ -100,106 +100,106 @@ - To stay on the earlier version, install that version again through the same door (`POST /api/v1/marketplace/install-local` with its `versionId`). It loads at once, and its ledger entry replaces the one that cannot load, so it also loads after a restart. - To take the new version, first move the environment's item off the name. Save it again under a new name, point every assignment that named the old name at the new one, then delete the item under the old name. Then restart, or install the new version again. Only after that does the old name belong to the package, so an assignment left on the old name grants the package's definition from then on. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [4cef6e2] +- Updated dependencies [55d7aab] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [9340181] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [17f3c65] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [69913f8] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [c898bd8] +- Updated dependencies [2b7c331] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [35d942e] +- Updated dependencies [ce18e73] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/connectors/connector-mcp/CHANGELOG.md b/packages/connectors/connector-mcp/CHANGELOG.md index 38cfd50481a..f767ddf3fee 100644 --- a/packages/connectors/connector-mcp/CHANGELOG.md +++ b/packages/connectors/connector-mcp/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/connectors/connector-openapi/CHANGELOG.md b/packages/connectors/connector-openapi/CHANGELOG.md index e10d82c3c8b..3f49b84dd23 100644 --- a/packages/connectors/connector-openapi/CHANGELOG.md +++ b/packages/connectors/connector-openapi/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/connectors/connector-rest/CHANGELOG.md b/packages/connectors/connector-rest/CHANGELOG.md index 720b2caab5b..3eeba8b8feb 100644 --- a/packages/connectors/connector-rest/CHANGELOG.md +++ b/packages/connectors/connector-rest/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/connectors/connector-slack/CHANGELOG.md b/packages/connectors/connector-slack/CHANGELOG.md index 86d2618c6eb..0aa4ee625be 100644 --- a/packages/connectors/connector-slack/CHANGELOG.md +++ b/packages/connectors/connector-slack/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/console/CHANGELOG.md b/packages/console/CHANGELOG.md index 705ca6edbd0..6508289c1a3 100644 --- a/packages/console/CHANGELOG.md +++ b/packages/console/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: Console (objectui) refreshed to `cf153eb2e535`. Frontend changes in this range: +- 7adfaec: Console (objectui) refreshed to `cf153eb2e535`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 65 releasing of 66 changesets added across 69 non-merge commits; omitted: 1 release-nothing changeset, 3 commits carrying no changeset (they ship no package code). @@ -84,7 +84,7 @@ ### Patch Changes -- 3937697: Console (objectui) refreshed to `0d12e95361b2`. Frontend changes in this range: +- cc8d886: Console (objectui) refreshed to `0d12e95361b2`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 2 releasing of 3 changesets added across 5 non-merge commits; omitted: 1 release-nothing changeset, 2 commits carrying no changeset (they ship no package code). @@ -99,7 +99,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `cd14d8eeffe1...0d12e95361b2` -- 3937697: Console (objectui) refreshed to `1d178e06ac5e`. Frontend changes in this range: +- 1000cc7: Console (objectui) refreshed to `1d178e06ac5e`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 6 releasing of 6 changesets added across 5 non-merge commits. @@ -113,7 +113,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `5fef032b1ada...1d178e06ac5e` -- 3937697: Console (objectui) refreshed to `2958f17e9c6a`. Frontend changes in this range: +- 51e804c: Console (objectui) refreshed to `2958f17e9c6a`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 32 releasing of 33 changesets added across 34 non-merge commits; omitted: 1 release-nothing changeset, 1 commit carrying no changeset (they ship no package code). @@ -157,7 +157,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `6fb31dcc9954...2958f17e9c6a` -- 3937697: Console (objectui) refreshed to `56cf4d8e89b7`. Frontend changes in this range: +- 06900c9: Console (objectui) refreshed to `56cf4d8e89b7`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 16 releasing of 18 changesets added across 19 non-merge commits; omitted: 2 release-nothing changesets, 1 commit carrying no changeset (they ship no package code). @@ -185,7 +185,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `cf153eb2e535...56cf4d8e89b7` -- 3937697: Console (objectui) refreshed to `5fef032b1ada`. Frontend changes in this range: +- 9a48ae8: Console (objectui) refreshed to `5fef032b1ada`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 1 releasing of 2 changesets added across 2 non-merge commits; omitted: 1 release-nothing changeset (they ship no package code). @@ -194,7 +194,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `0d12e95361b2...5fef032b1ada` -- 3937697: Console (objectui) refreshed to `6fb31dcc9954`. Frontend changes in this range: +- d44c893: Console (objectui) refreshed to `6fb31dcc9954`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 7 releasing of 7 changesets added across 7 non-merge commits. @@ -209,7 +209,7 @@ Metadata-protocol: none (the console refresh changes no key, value or type a metadata author writes) objectui range: `1d178e06ac5e...6fb31dcc9954` -- 3937697: Console (objectui) refreshed to `cd14d8eeffe1`. Frontend changes in this range: +- 9057fd4: Console (objectui) refreshed to `cd14d8eeffe1`. Frontend changes in this range: Derived from the changesets objectui declared over the range — 1 releasing of 1 changeset added across 1 non-merge commit. diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index b5e3facf5d3..af54b013711 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor +- 94842ba: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor Clause-②: yes (narrowing) @@ -20,7 +20,7 @@ - **What a lean composition sees.** A composition that registers no organization object (`sys_organization`, which plugin-auth ships) still stores grants without an organization, and those grants now confer nothing. No shipped composition does this: `os serve` registers the security plugin only together with plugin-auth. **What an operator does.** Nothing beyond the upgrade itself: run `os migrate organization-ownership` before serving a database that 17.x or an 18.0 pre-release created. The server refuses such a database until you do. If an embedding composes `@objectstack/plugin-security` without plugin-auth, register the organization object so that grants carry an organization. -- 3937697: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it +- b964ea1: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it Clause-②: yes Metadata-protocol: added @@ -30,7 +30,7 @@ The `manifest` service registers each package with the `source` its entry states, so a merged artifact that carries marketplace installs beside the deployment's own code lists them as `marketplace` on `GET /api/v1/packages`. An entry that states nothing takes the registering door's statement as before (`register(artifact, { source })`, `code` when absent), so existing artifacts register unchanged. An entry's own statement wins over the door's. `@objectstack/core` adds `resolveArtifactPackageEntries(artifact)`, which returns each package to register as `{ manifest, source? }` in dependency order. `resolveArtifactPackageOrder` is unchanged and still returns the bodies alone. -- 3937697: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants +- 9019af9: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants Clause-②: yes (widening) Metadata-protocol: added @@ -48,7 +48,7 @@ - **`@objectstack/platform-objects`:** the `External` option label on the membership role pickers, translated. `org_external` is a reserved name from this release on, so a position can no longer be named `org_external`. -- 3937697: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS +- 45f9962: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS Clause-②: yes (widening: `@objectstack/core` gains `owdForAudience`, `isExternalAudienceContext`, `externalGrantSpeaks` and the two grant-stamp keys; every narrowing below applies only to the `external` role, which no release has shipped yet) Metadata-protocol: semantic @@ -66,12 +66,12 @@ ### Patch Changes -- 3937697: fix(core): the authorization prelude's grant read names the columns it decides on, so no formula on `sys_user_permission_set` is computed in every request a grant holder makes +- 644e4b2: fix(core): the authorization prelude's grant read names the columns it decides on, so no formula on `sys_user_permission_set` is computed in every request a grant holder makes Clause-②: no (a read's projection: every resolved authz answer is unchanged and pinned so; no accept set, served shape or export moves) `resolveAuthzContext` reads the principal's `sys_user_permission_set` grants on every authenticated request. That read named no columns, so the engine computed every formula field the grant table declares for it, the record title included, though the resolver reads none of them. A title that reads through a lookup (the person's name, one hop through `user_id`) would have cost each request by a principal holding a direct grant one more `sys_user` read and one more round trip: 9 reads in 5 round trips instead of 8 in 4. The read now names exactly the four columns the resolver decides on: `permission_set`, `organization_id`, `valid_from` and `valid_until`. The resolved authorization context is unchanged for every grant state (active, expired, not yet valid, organization-owned, deployment-wide, and the Default Organization's `admin_full_access` grant), and a grant holder's prelude stays at 8 reads in 4 round trips whatever display formula the grant table declares. -- 3937697: fix(core): the import resolves a lookup cell by the target object's stored title field +- dfe60e3: fix(core): the import resolves a lookup cell by the target object's stored title field Clause-②: no @@ -79,7 +79,7 @@ - **Now.** After the id and the lookup's `displayField`, the import asks the target's title field, resolved by ADR-0079's one rule (`resolveDisplayField`: `nameField`, then the deprecated `displayNameField` alias, then the derived title). It is read from the same object declaration the import already reads to check the target's exposure, so no extra metadata read is made. Two records that share the title answer `reference_ambiguous`, like the import's other ambiguous matches. The cell is never linked to the first hit. - **A formula title is not matched.** A `formula` field has no stored column, and the engine refuses a filter over it. The import no longer sends that query, for the title or for any other candidate the target declares as a formula, so a cell against a formula title still answers `reference_not_found`. How a formula title should be matched is still open. - **Unchanged.** The fixed fallback keys and their order. The exposure check still runs first: a target whose declared exposure does not serve `list` answers `reference_not_found` for every cell and is never read. -- 3937697: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core +- 8dfd126: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core Clause-②: yes (narrowing) Metadata-protocol: none @@ -100,7 +100,7 @@ Metadata-protocol: none `owdForAudience`'s module docblock said an external is floored on a `controlled_by_parent` detail. It is not: plugin-sharing exempts the detail, whose rows follow its master, and the master meets the floor (#25541). Comment only; no behaviour changes. -- 3937697: fix(core)!: `resolveLocalizationContext`'s direct `sys_setting` fallback reads the caller's organization's rows only, never another organization's row or a row with no organization outside a lean embedding +- d196748: fix(core)!: `resolveLocalizationContext`'s direct `sys_setting` fallback reads the caller's organization's rows only, never another organization's row or a row with no organization outside a lean embedding Clause-②: no (narrowing) Metadata-protocol: none @@ -118,7 +118,7 @@ **Who is affected.** Only a deployment whose settings service fails a localization read, and only for an organization with no tenant localization row of its own, or a store holding organization-less tenant localization rows. A healthy settings service never reaches this read. **The remedy.** Run `os migrate organization-ownership --out PLAN`, review the reported `sys_setting` rows, and save each localization value again from inside the organization it belongs to (Setup → Localization, or `PUT /api/settings/localization` with that organization active). -- 3937697: feat(core): `isCloudManaged()` is the one reader of `OS_CLOUD_MANAGED`, and a production boot that sets it without a bound control plane refuses to start +- db1c7cc: feat(core): `isCloudManaged()` is the one reader of `OS_CLOUD_MANAGED`, and a production boot that sets it without a bound control plane refuses to start Clause-②: yes (widening) Metadata-protocol: none @@ -127,7 +127,7 @@ - **The fuse.** On a production boot (not `--dev`, which sets `NODE_ENV=development` only when `NODE_ENV` is unset, and not `NODE_ENV=test`; so `NODE_ENV=production os serve --dev` counts as a production boot and is refused the same way), `OS_CLOUD_MANAGED=1` with `OS_CLOUD_API_KEY` unset or empty refuses: `ObjectKernel.bootstrap()` and `LiteKernel.bootstrap()` reject before any plugin initialises, and `isCloudManaged()` throws the same error. The cloud sets both variables on the runtimes it hosts. A self-hosted deployment that has `OS_CLOUD_MANAGED=1` in a copied env file now fails to boot; remove the variable, which a self-hosted deployment never needs. - **One caveat:** the fuse reads the environment only. A runtime that binds its control plane solely through `CloudConnectionPlugin`'s `controlPlaneApiKey` option, and also sets `OS_CLOUD_MANAGED=1` in production, is refused. Set `OS_CLOUD_API_KEY` instead. - **`@objectstack/cloud-connection`:** the plugin resolves its control-plane credential through `resolveControlPlaneApiKey(controlPlaneApiKey)`, so the plugin's "platform-managed" answer and the fuse share one derivation. Its behaviour is unchanged: the option wins, then `OS_CLOUD_API_KEY`, trimmed. -- 3937697: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security +- b3034ee: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security Clause-②: yes (widening) Metadata-protocol: none @@ -166,7 +166,7 @@ These two differences are kept by design: they make the fallback, which runs only when the service has failed, the stricter reader. No configuration, metadata or HTTP behaviour changes. Code that does not import the new exports needs no action. -- 3937697: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both +- 27b3f1f: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both Clause-②: yes (widening: `GET /meta/position?include=grants` adds two read-only served keys per position, `_holderCount` and `_grantedPermissionSets`; `ISecurityService` gains the optional `describePositionGrants`) Metadata-protocol: none @@ -190,67 +190,67 @@ - **An option value in another case.** A select / multiselect cell `CN` matches the declared option value `cn` and stores `cn` — the declared value, never the cell's spelling — as labels already matched in any case. A cell that matched an exact value or a label before stores what it stored: the value pass runs after both. A cell naming, by case alone, two declared values that differ only by case (`cn` and `CN`, which the spec's lowercase option value refuses but a programmatically registered object can carry) is not resolved by guessing; it gets `invalid_option` as before. Every cell error of a row is still reported as the first one only; that half of the same request is not in this change. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/types@18.1.0 diff --git a/packages/create-objectstack/CHANGELOG.md b/packages/create-objectstack/CHANGELOG.md index 8de3694a737..54713b71d52 100644 --- a/packages/create-objectstack/CHANGELOG.md +++ b/packages/create-objectstack/CHANGELOG.md @@ -4,13 +4,13 @@ ### Patch Changes -- 3937697: fix(cli): retire the scaffold's five stale `peerDependencyRules` entries on the better-auth 1.7.12 pin +- 80ec71d: fix(cli): retire the scaffold's five stale `peerDependencyRules` entries on the better-auth 1.7.12 pin Clause-②: no Metadata-protocol: none A project scaffolded by `objectstack init` or `npx create-objectstack` no longer carries a `peerDependencyRules.allowedVersions` block in its `pnpm-workspace.yaml`. All five entries suppressed peer mismatches that better-auth 1.7.12 no longer has: `better-auth` declares no `better-sqlite3` peer, and `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim` and `@better-auth/sso` each peer `@better-auth/utils` as `^0.4.2 || ^0.5.0`, which the resolved 0.5.0 satisfies. `allowedVersions` only silences a report, so a scaffold resolves the same lockfile as before and its first `pnpm install` stays free of unmet-peer warnings. Projects scaffolded earlier can keep or delete the block; either way nothing changes. -- 3937697: fix(cli,create-objectstack): new projects declare vitest `~4.1.12`, outside GHSA-qxg6-89mg-rqv8, and still install on npm 10 +- b6e8707: fix(cli,create-objectstack): new projects declare vitest `~4.1.12`, outside GHSA-qxg6-89mg-rqv8, and still install on npm 10 Clause-②: no Metadata-protocol: none @@ -20,7 +20,7 @@ npm 10, the npm Node 22 bundles, still installs every scaffold. The `overrides.vitest` entry, which equals `devDependencies.vitest`, is what makes that hold: it settles vitest 4.1.12's contradictory optional peer (`@vitest/browser-webdriverio`), which npm 10 otherwise crashes on with `Cannot read properties of null (reading 'edgesOut')`. Measured on npm 10.9.4, 10.9.9 and 11.21.1. pnpm ignores npm's `overrides` field. **An existing project made by an earlier `create-objectstack`, `os init` or `os create plugin`** keeps its own `~4.0.0`. To move it, set `overrides.vitest` to `~4.1.12` in `package.json`, and `devDependencies.vitest` too where the project declares it, then run `npm install`. npm refuses an override that differs from the direct dependency (`EOVERRIDE`), so the two move together. -- 3937697: fix(cli,create-objectstack): new projects override `uuid` below 12.0.0 to `^11.1.1`, so `npm audit` lists no GHSA-w5hq-g745-h8pq entry +- d0c56a2: fix(cli,create-objectstack): new projects override `uuid` below 12.0.0 to `^11.1.1`, so `npm audit` lists no GHSA-w5hq-g745-h8pq entry Clause-②: no Metadata-protocol: none @@ -30,7 +30,7 @@ The selector stops at `<12.0.0`, so a project can still add a newer `uuid` of its own: `npm install uuid@14` installs. A spec-less `npm install uuid` is refused with `EOVERRIDE` (npm reads it as `uuid@*`, which meets the selector); name the major instead. **An existing project made by an earlier `create-objectstack`, `os init` or `os create plugin`**, or any other npm project that installs `@objectstack/rest`, directly or through `@objectstack/runtime`, `@objectstack/cli`, `@objectstack/plugin-auth` or `@objectstack/verify`: add `"uuid@<12.0.0": "^11.1.1"` to the `overrides` block of its root `package.json` and run `npm install`. npm reads `overrides` only from the root manifest, so no `@objectstack/*` release can apply it for you. -- 3937697: fix(create-objectstack, cli): a scaffolded project pins every `@objectstack/*` dependency to the exact version of the tool that wrote it, not a `^` range +- 975d5b3: fix(create-objectstack, cli): a scaffolded project pins every `@objectstack/*` dependency to the exact version of the tool that wrote it, not a `^` range Clause-②: no Metadata-protocol: none diff --git a/packages/drivers/driver-memory/CHANGELOG.md b/packages/drivers/driver-memory/CHANGELOG.md index 4d97ebaa0a5..c6b562e5cd9 100644 --- a/packages/drivers/driver-memory/CHANGELOG.md +++ b/packages/drivers/driver-memory/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -18,75 +18,75 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/drivers/driver-mongodb/CHANGELOG.md b/packages/drivers/driver-mongodb/CHANGELOG.md index 120cec2ceb6..c2fd54001dd 100644 --- a/packages/drivers/driver-mongodb/CHANGELOG.md +++ b/packages/drivers/driver-mongodb/CHANGELOG.md @@ -4,75 +4,75 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/drivers/driver-sql/CHANGELOG.md b/packages/drivers/driver-sql/CHANGELOG.md index adab7df1133..a8b06f14f87 100644 --- a/packages/drivers/driver-sql/CHANGELOG.md +++ b/packages/drivers/driver-sql/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -26,7 +26,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -37,7 +37,7 @@ - **Existing indexes stay as they are.** Nothing is renamed, and no declared organization composite is dropped or rebuilt by the boot, `os migrate plan` or `os migrate apply`; on SQLite the ownership ceremony's NOT NULL step rebuilds the tables it tightens, and their composites come back plain, enforcing the same constraint. One index is re-keyed: the `sys_setting` row-identity index, which the metadata protocol rebuilds on every boot, keys the plain `organization_id` from the next boot on (probe-first; a pure relaxation, so it cannot fail on existing rows). The schema differ reads `COALESCE(<tenant>, …)` and the plain tenant column as one key part, in both directions, where the column is physically `NOT NULL` or the database is certified (its organization-ownership birth marker, or the ownership ceremony's marker at the current shape generation). So `os migrate plan` and the boot report no `recreate_index` for those indexes. On an uncertified database with a nullable tenant column the two forms stay different constraints: the finding is reported, and it names `os migrate organization-ownership` as its remedy. - **What widens.** Where a tenant column is still nullable (every table of a database 18.0.0 created, an uncertified 17.x / 18.0 database, a rotation shard, a Turso remote table, a table the ceremony reported), a unique index created from now on does not constrain rows whose organization is NULL, exactly like a NULL in any other key part; in the in-memory driver a record with no organization is exempt from an organization-scoped unique. The unique duplicate pre-flight no longer reports groups of rows with a NULL key part, since the index never refuses them. - **Who sees it.** A fresh install and every ceremonied table whose tenant column is NOT NULL see nothing. A database 18.0.0 created from empty is certified by its birth marker yet keeps nullable tenant columns: its existing indexes are kept unchanged, and a new organization unique declared on one of its tables constrains only rows that carry an organization. -- 3937697: fix(driver-sql)!: on PostgreSQL, `introspectSchema` reads each table's columns in the table's own schema, and refuses a `search_path` that reaches one table name in two schemas instead of silently dropping one +- 74fcec1: fix(driver-sql)!: on PostgreSQL, `introspectSchema` reads each table's columns in the table's own schema, and refuses a `search_path` that reaches one table name in two schemas instead of silently dropping one `introspectSchema` lists the base tables of every schema in `current_schemas(false)` and keys the answer by bare table name. Two things went wrong when a connection's `search_path` named more than one schema (`ALTER DATABASE … SET search_path = public, sales`). First, each table's columns came from knex `columnInfo()` on the bare name, which reads only the first schema on the path, so a table that lives only in a later schema (`sales.orders`) was listed with no columns. `listRemoteTables` answered it `columnCount: 0`, and a draft built from it had no fields. Second, a same-named table in a later schema (`sales.customers` behind `public.customers`) was dropped without a word, because one key cannot hold two tables. The PostgreSQL branch now reads every table's columns in its own schema. When one bare name is reached in more than one schema, it refuses the whole introspection with `RESOURCE_CONFLICT` / `409`, naming each colliding table with its schemas in `search_path` order. A connection that reaches one schema, the default `public` deployment included, answers exactly what it answered before. The SQLite and MySQL branches are unchanged. @@ -52,7 +52,7 @@ - **Also changed (a wrong answer made right, no accept set moved):** a table that lives only in a later schema on the path now reports its own columns where it reported none. - **Unchanged:** a connection that reaches one schema, the default `public` deployment included. One schema cannot hold two same-named tables, so it is never refused, and its answer is byte-identical to before. - **Fix:** point the connection at one schema (the datasource's `schema` setting sets its `search_path`), or rename one of the two tables on the remote database. -- 3937697: fix(driver-sql): a SQLite file whose bytes are not a SQLite database fails `connect()` at once, naming the file, and a development boot no longer moves it aside and replaces it with an empty database (#24960) +- 7f99616: fix(driver-sql): a SQLite file whose bytes are not a SQLite database fails `connect()` at once, naming the file, and a development boot no longer moves it aside and replaces it with an empty database (#24960) `SqlDriver.connect()` runs `PRAGMA auto_vacuum` as the connection's first statement. On a file that is not a SQLite database (plain text, another format, a file encrypted by another engine) SQLite answers `SQLITE_NOTADB`, which `connect()` logged as "Failed to set PRAGMA auto_vacuum=INCREMENTAL" and swallowed. It resolved over a file it could not read. In production the first query failed later. On a development boot, `resolveSqliteDriver` (`@objectstack/service-datasource`) answered the failed probe by stepping down to wasm SQLite, whose open renamed the file to `<file>.corrupt-<timestamp>`, wrote an empty database in its place and read `connected`, under a warning that blamed the native addon. @@ -67,7 +67,7 @@ - **Before:** `connect()` resolved; in production the first query failed with `DATABASE_ERROR`, and on a development boot the file was renamed to `<file>.corrupt-<timestamp>` and an empty database was written in its place. - **Now:** `connect()` rejects with `SqliteDatabaseFileError`, `code: 'SQLITE_NOTADB'`, naming the file; the file is untouched. - **Fix:** point the datasource at a SQLite database file, or move the file aside yourself (an absent file is created empty on the next connect). -- 3937697: fix(driver-sql): a read-only boot refuses a SQLite datasource whose file can be neither opened nor created, instead of opening an empty in-memory database over it and reporting it connected +- 4d99158: fix(driver-sql): a read-only boot refuses a SQLite datasource whose file can be neither opened nor created, instead of opening an empty in-memory database over it and reporting it connected Clause-②: no (narrowing) @@ -81,7 +81,7 @@ - **TO:** `resolveSqliteAbsentFileTarget`, and so the `SqlDriver` constructor, throws `SqliteDatabaseFileError` naming the file and the operating system's answer: `ENOTDIR` (a path under a regular file), `EACCES` (a directory the process may not write or search), `EROFS` (a read-only mount), or `ENOENT` (a directory whose name a dangling symbolic link holds). The datasource's connect fails with it, as the boot that writes already failed, so `os migrate plan` reports the datasource failed instead of planning into it. The judgement still writes nothing: no directory and no file is created to find out. - **Unchanged:** an absent file in a directory that exists, or that could be made, still opens as an empty in-memory database and leaves the disk untouched. An existing file opens as before. The default mode (`'create'`) is untouched, and so is every server dialect: the option is now applied to SQLite clients only, as documented (a `pg` driver given it with a connection string used to have that string rewritten to `:memory:`). - **Fix:** if a read-only boot now refuses a SQLite datasource, correct its `filename`: the refusal names the path and the reason. -- 3937697: fix(driver-sql): a SQLite database whose header SQLite cannot read fails `connect()` at once, naming the file, and a dangling symbolic link as the database's directory is refused on the boot that writes, as the read-only boot already refused it (#25019) +- d6a5fa3: fix(driver-sql): a SQLite database whose header SQLite cannot read fails `connect()` at once, naming the file, and a dangling symbolic link as the database's directory is refused on the boot that writes, as the read-only boot already refused it (#25019) Three more SQLite files a declared datasource cannot use, each now classified by the file's own driver at connect: @@ -103,7 +103,7 @@ ### Patch Changes -- 3937697: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database +- 5e9b100: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database Clause-②: yes (narrowing) Metadata-protocol: none @@ -118,14 +118,14 @@ - **Who sees it.** A composed `os serve` / `os dev` / `os start` with auth stamps every write with its organization, so nothing changes there. A production `os serve` whose `AuthPlugin` did not compose (no `OS_AUTH_SECRET`) and a lean embedding (`@objectstack/objectql/core` or `createStandaloneStack` over a SQL driver, with no organization object) used to write those rows with a NULL organization; now each such write fails, loudly. **The remedy.** Carry the organization on the write: `ql.insert(object, { ...row, organization_id: orgId })`, or `{ context: { tenantId: orgId } }`. Compose authentication (set `OS_AUTH_SECRET`) so the platform derives it. If the object's rows legitimately belong to no organization, declare it so and it has no tenant column: `systemFields: { tenant: false }` or `tenancy: { enabled: false }`. -- 3937697: fix(driver-sql): `update()` no longer writes its `updated_at` stamp into the caller's `data`, so webhook deliveries for record updates are stored again on PostgreSQL and MySQL +- eee65af: fix(driver-sql): `update()` no longer writes its `updated_at` stamp into the caller's `data`, so webhook deliveries for record updates are stored again on PostgreSQL and MySQL Clause-②: no - **What was lost.** On PostgreSQL and MySQL, every webhook delivery for a record update was lost. `SqlDriver.update()` assigned its `updated_at` stamp onto the patch object the caller passed in. ObjectQL publishes that same object as the update event's `changes`. On those two dialects the stamp is a knex `Raw` (`CURRENT_TIMESTAMP`) that holds the database client, its pool and a timer. The webhook outbox could not serialise the event (`Converting circular structure to JSON`), so no `sys_http_delivery` row was written. The record write still answered 200, and the webhook still read active. Every other reader of the update event's `changes`, and of the patch after the driver call, saw the same `Raw`. On SQLite the stamp is an ISO string, so the delivery was stored, but the caller's patch and the event's `changes` still carried an `updated_at` the caller never wrote. - **What changed.** `update()`, including its rotated-table path, stamps `updated_at` into a fresh object, as `updateMany()` already did. The caller's `data` is left exactly as it was passed. - **Unchanged.** The stored `updated_at` value on every dialect, `preserveAudit` imports, tables without an `updated_at` column, `upsert()` (it already stamps a copy of its input), and every export and option. -- 3937697: fix(driver-sql): on a database the organization-ownership ceremony has not certified, the boot's drift line for an orphaned `organization_id` column names the ceremony instead of `os migrate apply --allow-destructive` +- 5d66021: fix(driver-sql): on a database the organization-ownership ceremony has not certified, the boot's drift line for an orphaned `organization_id` column names the ceremony instead of `os migrate apply --allow-destructive` Clause-②: no (operator log line text only) Metadata-protocol: none @@ -133,7 +133,7 @@ A 17.x database booted on 18.x printed one `[schema-drift]` line per `organization_id` column ending `— "os migrate apply --allow-destructive" to drop it.`, during `os serve` and `os migrate apply --yes`. That command is refused on such a database: the drop is the ceremony's (ADR-0131 D10 item 5). The boot now asks the driver's own reader, `isTenantKeyCertified()`, once per table that has such a drop. When the answer is "not certified", the line keeps the finding and replaces that sentence with `— a drop the organization-ownership ceremony owns, and it has not verified on this database: run "os migrate organization-ownership", which drops it itself.` These are the words `os migrate plan` shows under the same entry. A certified database prints the same line as before. So does every other column and every other drift kind. Nothing the boot applies or skips changes. -- 3937697: fix(driver-sql,cli): `os migrate plan` / `apply` no longer offer `--allow-destructive` for a unique index the existing rows already violate +- 8c73398: fix(driver-sql,cli): `os migrate plan` / `apply` no longer offer `--allow-destructive` for a unique index the existing rows already violate Clause-②: yes (widening) Metadata-protocol: none @@ -144,7 +144,7 @@ - **`os migrate plan` / `os migrate apply` (`@objectstack/cli`).** The apply-limit seam reads the entry's own limit first, then the driver's per-op one. A blocked unique index is listed with the conflicting groups as the reason it cannot be applied, the footer and the skip lines stop offering `--allow-destructive` for it, and it is counted among the changes that remain drift. A database with no blocked index prints as before. Unchanged: `os migrate apply --allow-destructive` still names such an entry as not applied and reports the run PARTIAL with exit 1, because the database still differs from its metadata. To clear it, deduplicate the listed rows and run `os migrate plan` again. -- 3937697: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number +- c8f4c43: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number Clause-②: yes (widening) Metadata-protocol: none @@ -156,7 +156,7 @@ - **A driver that owns its counter without the member** stores the readers computed without the number, as before, and the engine now says so once per object at `error` level, with the remedy. - **`ObjectQL.registerInsertRecomputeListener(id, fn)` (new).** Called per row after that second computation, on the row the driver is handed. `plugin-pinyin-search` registers on it, so a `__search` companion whose name field reads the record number is stamped from the value that carries the number, and `$search` finds the record by pinyin and by its number. - **One change in what a refused insert reports.** On an object whose stored expression reads the number, a SQL driver's collision that survives every retry now leaves as `ERR_AUTONUMBER_COLLISION` (the engine's three attempts) instead of `DUPLICATE_RECORD` (the driver's own retries). Every other object is unchanged. -- 3937697: fix(driver-sql): a SQLite `connect()` that refuses its file closes the connection it opened before it rejects +- 4e2c42f: fix(driver-sql): a SQLite `connect()` that refuses its file closes the connection it opened before it rejects Clause-②: no (resource release only: no response, status, error, outcome or export moves) Metadata-protocol: none @@ -165,7 +165,7 @@ - **What changed.** When a SQLite `connect()` rejects, it destroys its pool and puts a fresh, empty one in its place, then rethrows the same error: same class, code, message and `cause`. Nothing is left open, and the `-shm` / `-wal` siblings are gone when the rejection arrives. A later `connect()` on the same instance opens the file again: it gives the same refusal while the file is bad, and connects once the file is repaired. A release that itself fails is logged at `warn`, and the original refusal is still the error thrown. - **Unchanged.** Which files are refused, the codes and the messages. Server dialects (`pg`, `mysql`) are untouched: their `connect()` rejects only when no connection could be made, so there is nothing to release. `SqliteWasmDriver` and the local mode of `TursoDriver` inherit the release through `super.connect()`. - **What to do.** Nothing. -- 3937697: refactor(objectql)!: the per-table platform-object tenancy ledger is retired, and the tenant-audit mute is decided by the object's schema (ADR-0131 D13) +- 3a440b0: refactor(objectql)!: the per-table platform-object tenancy ledger is retired, and the tenant-audit mute is decided by the object's schema (ADR-0131 D13) Clause-②: no (narrowing) Metadata-protocol: none @@ -186,7 +186,7 @@ - FROM `tenantScopedPlatformObjects()` TO the census's `reach: "in"` rows. - FROM `PlatformObjectTenancy` TO delete it: no classification exists any more. - FROM `PlatformObjectTenancyEntry` TO delete it: no classification exists any more. -- 3937697: fix(driver-sql): the `[tenant-audit]` warning no longer fires for an insert whose rows carry their organization +- b62f959: fix(driver-sql): the `[tenant-audit]` warning no longer fires for an insert whose rows carry their organization Clause-②: no Metadata-protocol: none @@ -196,7 +196,7 @@ The line is now skipped when every inserted row carries a non-empty tenant column. It still fires for an insert where any row lacks the column, and for every `update`, `delete`, `updateMany`, `deleteMany`, `bulkDelete` and `upsert` with no `tenantId`, whatever the payload says: there the column is a value being written, not the statement's scope. The line's text and prefix are unchanged. Diagnostics only: no write changes. Turso's local face and the SQLite WASM driver inherit the change; the in-memory and MongoDB drivers have no such warning. -- 3937697: fix(driver-sql)!: `findWithWindowFunctions()` compiles the function name and sort direction from closed sets and quotes every column it names +- 6abee03: fix(driver-sql)!: `findWithWindowFunctions()` compiles the function name and sort direction from closed sets and quotes every column it names Clause-②: no (narrowing) Metadata-protocol: none @@ -212,75 +212,75 @@ - **Fields:** each `partitionBy` and `orderBy` field is emitted as a quoted column reference, so a field names a column and nothing else. - **Unchanged:** every call that names a supported function, a column and `asc` / `desc` compiles to the same window and returns the same rows. - **Fix:** use one of the five functions above and `asc` / `desc`. A window that needs an argument (`lag`, `lead`, `ntile`, `first_value`) was never expressible through this door; send it through the driver's `execute()` with bound parameters. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/drivers/driver-sqlite-wasm/CHANGELOG.md b/packages/drivers/driver-sqlite-wasm/CHANGELOG.md index 211ee707a69..a935d4f8cf9 100644 --- a/packages/drivers/driver-sqlite-wasm/CHANGELOG.md +++ b/packages/drivers/driver-sqlite-wasm/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix(driver-sqlite-wasm)!: a file wasm SQLite cannot read is refused at connect, naming the file, and left as it was found, instead of being renamed and replaced with an empty database (#25019) +- 27dc53b: fix(driver-sqlite-wasm)!: a file wasm SQLite cannot read is refused at connect, naming the file, and left as it was found, instead of being renamed and replaced with an empty database (#25019) Clause-②: no (narrowing) Metadata-protocol: none @@ -17,87 +17,87 @@ - **TO:** `SqliteWasmDriver.connect()` rejects with the native driver's `SqliteDatabaseFileError`: `code: 'SQLITE_NOTADB'` for bytes that are not a database, `code: 'SQLITE_CORRUPT'` for a database it cannot read, `filename`, and a message naming the file and how to move it aside. Nothing is renamed, nothing is written beside it, and a stale write-ahead log beside a refused file stays where it is. `WasmSqliteConnection.open()` rejects with the same code and `filename`. `resolveSqliteDriver` re-throws that refusal at the wasm rung instead of trying the in-memory driver, so the datasource's connect fails and its connection state says so. Any other wasm failure, sql.js itself not loading first among them, still goes on to the in-memory driver. - **Unchanged:** a real database opens and answers; an absent file is created; an empty file opens as an empty database; a native addon that cannot load over a real or absent file still steps down to wasm SQLite. - **The fix for an operator:** restore the database from a backup, or move the unreadable file aside yourself (`mv '<file>' '<file>.unreadable'`) and start again: an absent file is created empty on the next connect. A development server whose own wasm image is damaged no longer starts itself clean; this is that step, done by hand. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [eee65af] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [5d66021] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [28c9a2c] +- Updated dependencies [8c73398] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/driver-sql@18.1.0 diff --git a/packages/drivers/driver-turso/CHANGELOG.md b/packages/drivers/driver-turso/CHANGELOG.md index 38276bebc24..5b31f8f850c 100644 --- a/packages/drivers/driver-turso/CHANGELOG.md +++ b/packages/drivers/driver-turso/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -26,7 +26,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -37,7 +37,7 @@ - **Existing indexes stay as they are.** Nothing is renamed, and no declared organization composite is dropped or rebuilt by the boot, `os migrate plan` or `os migrate apply`; on SQLite the ownership ceremony's NOT NULL step rebuilds the tables it tightens, and their composites come back plain, enforcing the same constraint. One index is re-keyed: the `sys_setting` row-identity index, which the metadata protocol rebuilds on every boot, keys the plain `organization_id` from the next boot on (probe-first; a pure relaxation, so it cannot fail on existing rows). The schema differ reads `COALESCE(<tenant>, …)` and the plain tenant column as one key part, in both directions, where the column is physically `NOT NULL` or the database is certified (its organization-ownership birth marker, or the ownership ceremony's marker at the current shape generation). So `os migrate plan` and the boot report no `recreate_index` for those indexes. On an uncertified database with a nullable tenant column the two forms stay different constraints: the finding is reported, and it names `os migrate organization-ownership` as its remedy. - **What widens.** Where a tenant column is still nullable (every table of a database 18.0.0 created, an uncertified 17.x / 18.0 database, a rotation shard, a Turso remote table, a table the ceremony reported), a unique index created from now on does not constrain rows whose organization is NULL, exactly like a NULL in any other key part; in the in-memory driver a record with no organization is exempt from an organization-scoped unique. The unique duplicate pre-flight no longer reports groups of rows with a NULL key part, since the index never refuses them. - **Who sees it.** A fresh install and every ceremonied table whose tenant column is NOT NULL see nothing. A database 18.0.0 created from empty is certified by its birth marker yet keeps nullable tenant columns: its existing indexes are kept unchanged, and a new organization unique declared on one of its tables constrains only rows that carry an organization. -- 3937697: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext +- 28c9a2c: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext Clause-②: no (narrowing) — the accept set of the `turso` `datasource.config` contract, of the published `TursoConfigSchema` mirror and of `new TursoDriver()` narrows by one key beside a `file:` url or `:memory:`, in every mode. No key is added, removed or renamed, and no exported symbol moves. `@objectstack/service-datasource` is graded `patch`: the TSDoc of its exported `TursoDriverConfigInput.encryptionKey` no longer promises an encrypted file, and nothing else in it changes. @@ -66,7 +66,7 @@ Blast radius, measured on this tree: no example, template, CLI scaffold or published skill authors the key, and no host default or environment variable sets it (a turso `encryptionKey` reaches the driver only from an authored `datasource.config`). Whether any out-of-repo deployment declares such a config is NOT measured and is not claimed to be zero. <!-- adr-0087: registered turso-config-local-encryption-key-refused --> -- 3937697: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource +- 2354058: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource Clause-②: no (narrowing) @@ -109,7 +109,7 @@ ### Patch Changes -- 3937697: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database +- 5e9b100: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database Clause-②: yes (narrowing) Metadata-protocol: none @@ -124,7 +124,7 @@ - **Who sees it.** A composed `os serve` / `os dev` / `os start` with auth stamps every write with its organization, so nothing changes there. A production `os serve` whose `AuthPlugin` did not compose (no `OS_AUTH_SECRET`) and a lean embedding (`@objectstack/objectql/core` or `createStandaloneStack` over a SQL driver, with no organization object) used to write those rows with a NULL organization; now each such write fails, loudly. **The remedy.** Carry the organization on the write: `ql.insert(object, { ...row, organization_id: orgId })`, or `{ context: { tenantId: orgId } }`. Compose authentication (set `OS_AUTH_SECRET`) so the platform derives it. If the object's rows legitimately belong to no organization, declare it so and it has no tenant column: `systemFields: { tenant: false }` or `tenancy: { enabled: false }`. -- 3937697: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit +- 0b8bce4: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit Clause-②: no Metadata-protocol: none @@ -133,7 +133,7 @@ - **`@objectstack/service-analytics`.** The engine-bound merges (`ObjectQLStrategy.withReadScope`, its FK attribute map, and the plugin's record-label pass) admit the leaf and hand the scope to the engine, which composes it as a find does. `NativeSQLStrategy.canHandle` declines a query whose base or joined object's read scope carries the leaf, so a `controlled_by_parent` object's analytics query routes to the ObjectQL strategy and serves the find path's rows. `compileScopedFilterToSql` refuses a scope carrying the leaf by name, in its existing `READ_SCOPE_COMPILE_FAILED` / 500 envelope: the `/api/v1/analytics/sql` dry-run echo of a `controlled_by_parent` object now refuses where it rendered the bound id list — it runs no composition and shows no statement it would not run. A filter an author writes keeps its judgement on every face. - **`@objectstack/driver-turso`.** The remote face resolves a composed leaf nested inside a composed leaf's scope through `toRemoteWhere` with the outer read's options, so a two-level `controlled_by_parent` chain on a remote Turso datasource answers rows instead of `INTERNAL_ERROR` / 500. - **`@objectstack/spec`.** One nested-leaf row in `READABLE_IDS_CASES`, so every driver's conformance suite measures the shape, and the comparand-shape door's docblock names both callers that pass `admitReadableIds`. No schema, accept set or export of a metadata key moves. -- 3937697: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number +- c8f4c43: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number Clause-②: yes (widening) Metadata-protocol: none @@ -145,87 +145,87 @@ - **A driver that owns its counter without the member** stores the readers computed without the number, as before, and the engine now says so once per object at `error` level, with the remedy. - **`ObjectQL.registerInsertRecomputeListener(id, fn)` (new).** Called per row after that second computation, on the row the driver is handed. `plugin-pinyin-search` registers on it, so a `__search` companion whose name field reads the record number is stamped from the value that carries the number, and `$search` finds the record by pinyin and by its number. - **One change in what a refused insert reports.** On an object whose stored expression reads the number, a SQL driver's collision that survives every retry now leaves as `ERR_AUTONUMBER_COLLISION` (the engine's three attempts) instead of `DUPLICATE_RECORD` (the driver's own retries). Every other object is unchanged. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [eee65af] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [5d66021] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [28c9a2c] +- Updated dependencies [8c73398] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/driver-sql@18.1.0 diff --git a/packages/formula/CHANGELOG.md b/packages/formula/CHANGELOG.md index ce32381a915..9fcca4b1867 100644 --- a/packages/formula/CHANGELOG.md +++ b/packages/formula/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(formula): `has()` over a selection whose receiver is an index or a call result evaluates as a presence test, as the CEL spec defines it +- 9d96b2b: fix(formula): `has()` over a selection whose receiver is an index or a call result evaluates as a presence test, as the CEL spec defines it Clause-②: yes (widening) Metadata-protocol: added @@ -18,7 +18,7 @@ ### Patch Changes -- 3937697: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) +- 9127f23: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) Clause-②: no (narrowing: an email template whose `bodyHtml` places a hole outside the supported placements is refused at the three CLI commands and at the publish door, where it passed) Metadata-protocol: none @@ -38,66 +38,66 @@ - **`@objectstack/formula` (patch):** the classifier the rule reads, `judgeMailHtmlHoles`, is exported with its supported-placement list and labels. `@objectstack/plugin-email`'s built-in template pin reads the same classifier and holds its hole grammar to the renderer's. - **`@objectstack/spec` (patch):** one conversion's example templates now declare their link variable with `type: 'url'` and place it in an `href`. No schema, conversion behaviour or export changes. - **The fix for an author:** move the hole into element text or a quoted plain-text attribute. For a link, declare the variable with `type: 'url'` and write it triple-braced as the whole double-quoted `href` value. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 18.0.0 diff --git a/packages/lint/CHANGELOG.md b/packages/lint/CHANGELOG.md index 935402940e8..b8997dab421 100644 --- a/packages/lint/CHANGELOG.md +++ b/packages/lint/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go +- b42c621: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go Clause-②: yes (narrowing) @@ -41,7 +41,7 @@ - **`@objectstack/metadata-core`**: the ADR-0106 field-security scrub no longer classifies `filterableFields` as a list-view name list. A body that still carries the key goes the unclassified way and fails closed: a list view whose `filterableFields` names a field the caller may not read is dropped whole, where the scrub used to remove the name. ⛔ **Untouched:** `userFilters` and `searchableFields` keep their meaning and their checks. -- 3937697: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params +- 925fd07: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params Clause-②: yes (widening) Metadata-protocol: semantic @@ -54,7 +54,7 @@ - **`os i18n extract`.** A bulk `confirmText` written as the envelope is seeded exactly as the bare string: the extractor reads the slot's text through `templateSlotSource`, so the envelope form no longer records as an absent key with nothing to translate. - **Served translations.** The catalog overlay on a served view or an object's `listViews` compares a bulk `confirmText` with its packaged base by the slot's text, whichever form either side holds: an unchanged envelope still takes the catalog's sentence, and an edited one keeps the authored sentence. - **Unchanged.** The `confirm` / `confirmmessage` near-misses still name `confirmText`. Every other bulk-def key, the default confirm sentence and the flow text slots' verdicts are unchanged. -- 3937697: feat(lint,spec): `os validate`, `os build` and `os lint` warn on a `user` field whose `reference` names an object other than `sys_user`, and `Field.user()` marks `reference` deprecated +- e7befa7: feat(lint,spec): `os validate`, `os build` and `os lint` warn on a `user` field whose `reference` names an object other than `sys_user`, and `Field.user()` marks `reference` deprecated Clause-②: yes (widening) @@ -64,7 +64,7 @@ - **Published.** `USER_FIELD_FOREIGN_REFERENCE` (`user-field-foreign-reference`) is exported from `@objectstack/lint` beside `OBJECT_REFERENCE_UNKNOWN`, and `RULE_EXPLANATIONS` gains its entry, so `os explain user-field-foreign-reference` prints why the field is half a link and half a user, and why the rewrite to a `lookup` is left to the author. - **Unchanged.** Parsing, the runtime's resolution of such a field (it still follows the authored `reference`), `Field.user()`'s output, and `user` fields written without `reference` or with `reference: 'sys_user'`. - **What to do.** Change a `user` field that points at another object to a `lookup` on that object. No in-repo app or package wrote this shape. Two test fixtures did: one is now a `lookup`, and the other deliberately pins the 18.x resolution. -- 3937697: feat(spec): the `flows` translation face gains `approvals.<node_id>.label`, the step label of an `approval` node +- b9a79ef: feat(spec): the `flows` translation face gains `approvals.<node_id>.label`, the step label of an `approval` node Clause-②: yes (widening) @@ -73,7 +73,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts the key over an `approval` node and refuses it, as `translation-target-unknown`, over an unknown node or a node of another type (a `screen` node is pointed at its `screens.<node_id>.title`). A `screens` or `refusals` key written over an approval node is now pointed at `approvals.<node_id>.label` instead of being told only that the node is not a screen. - **Not yet rendered.** This is the spec half: the key parses and validates, and the approvals service does not read it yet, so an approval request still shows the authored step label. Its liveness row is `planned` until that reader lands. - **Unchanged.** Every existing `flows` key, and every verdict on a key over a node that is not an approval node. -- 3937697: feat(spec)!: a `user` field whose `reference` names an object other than `sys_user` is refused at parse, and every `user` field resolves to `sys_user` +- 2069b81: feat(spec)!: a `user` field whose `reference` names an object other than `sys_user` is refused at parse, and every `user` field resolves to `sys_user` Clause-②: no (narrowing) Metadata-protocol: narrowed @@ -92,7 +92,7 @@ **Supersedes the `user-field-foreign-reference` warning entry in this release.** That entry announced a `@objectstack/lint` advisory `user-field-foreign-reference`, the `USER_FIELD_FOREIGN_REFERENCE` export and its `os explain` entry, and said such a field would still parse. All three are withdrawn before release and never ship: a foreign `reference` on a `user` field is now refused by `FieldSchema` instead, so there is nothing left for the advisory to warn about. - **For `@objectstack/lint`:** no `user-field-foreign-reference` rule, no `USER_FIELD_FOREIGN_REFERENCE` export and no `RULE_EXPLANATIONS` entry for it. `OBJECT_REFERENCE_UNKNOWN` and every other export are unchanged. The refusal arrives as a `FieldSchema` issue at `reference`, not as a lint advisory. -- 3937697: feat(lint): a CEL slot inside a page component's `properties` that overruns the platform's parse bounds is reported as a warning at `os validate`, `os build`, `os lint` and the page publish door +- 0a3ce08: feat(lint): a CEL slot inside a page component's `properties` that overruns the platform's parse bounds is reported as a warning at `os validate`, `os build`, `os lint` and the page publish door Clause-②: no @@ -101,7 +101,7 @@ The new rule `page-predicate-over-budget` (`validatePagePredicateBounds`) reads the slots off each component's `ComponentPropsMap` row: every position where the row's parse produces a `{ dialect: 'cel', source }` envelope. It judges each one with `validateExpression`'s bounds verdict and names the key and the bound. It does not echo the source. It is a **warning** in 18.x: the page still saves and builds, and the publish door carries the finding on its `advisories` channel. A future major release refuses it. A within-bounds source draws nothing. Fix: shrink the expression. Collapse an `||` chain into one `in [...]` test, or precompute the heavy part into a formula or roll-up field and test that field. -- 3937697: fix(lint)!: `os build` and the object save door refuse a `validations[]` rule whose predicate reads `parent` (#24957) +- c5915b2: fix(lint)!: `os build` and the object save door refuse a `validations[]` rule whose predicate reads `parent` (#24957) Clause-②: no (narrowing: `os build` and the object save door refuse a `validations[]` rule whose predicate reads `parent`, which the server's rule evaluator never binds) Metadata-protocol: narrowed @@ -127,7 +127,7 @@ - No public export or signature moves. <!-- adr-0087: not-required (no-migration-prescription) a refusal at `os build` and at the object save door of a validations[] rule predicate that reads `parent`, which the server's rule evaluator never binds: no authorable key, spelling, export or stored shape moves, and no stored row is read, rewritten or converted. A stored object carrying such a rule keeps loading until it is next saved, and the repair is the author's rewrite of the predicate (a field rule, a lifecycle hook, or a denormalised column), which no ledger entry can derive. The other categories are closed on facts: the package publishes (not unpublished); no ADR-0087 id covers this verdict (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: feat(spec): a `page:tabs` item label gains a translation key, `pages.<page>.components.<tabsId>.items.<value>.label` +- 30d21f6: feat(spec): a `page:tabs` item label gains a translation key, `pages.<page>.components.<tabsId>.items.<value>.label` Clause-②: yes (widening) @@ -137,7 +137,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts the key over a declared `page:tabs` item `value`. It refuses it as `translation-target-unknown` over an unknown value (with "Did you mean"), over a component of another type (a `page:accordion` is pointed at the inline locale map, since its panels have no stable key), and under a component id the page does not declare. - **`os i18n extract` / coverage.** The extractor writes a slot for every valued tab item, and the coverage check demands it. An inline locale map on the item label is counted as authored, as before. - **Unchanged.** Every existing `pages` key, and an inline locale map on a tab label that the bundle does not key. -- 3937697: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language +- eddffc3: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language Clause-②: yes (widening) @@ -147,7 +147,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts a `title` key over a form view (a `formViews.<key>` entry, the default `form`, or a `viewKind: 'form'` item) and refuses it, as `translation-target-unknown`, over a list view, pointing at the view's `label` key. - **`os i18n extract`.** The CLI extractor emits `_views.<view>.title` for each form a view container serves (keyed by the composer's runtime name) and for a `viewKind: 'form'` item, so the skeleton carries the slot and the i18n coverage gate reports an authored title a supported locale leaves untranslated. - **Unchanged.** Every other `_views` key, the view `label` and `description` reads, and a form without a title. -- 3937697: fix(lint)!: `os build`, `os validate`, `os lint` and the page save door refuse a page component whose `properties` is present but not an object, nested components included (#24991) +- c0ae356: fix(lint)!: `os build`, `os validate`, `os lint` and the page save door refuse a page component whose `properties` is present but not an object, nested components included (#24991) Clause-②: no (narrowing: `os lint --strict` refuses a nested page component whose `properties` is `null` or an array) @@ -172,7 +172,7 @@ - Measured before crossing: no page this repository ships authors a non-object `properties` bag. <!-- adr-0087: not-required (no-migration-prescription) a refusal at the CLI doors and the page save door of a page component whose properties bag is present but not an object: no authorable key, spelling, export or stored shape moves, and no stored row is read, rewritten or converted. A stored page with such a component keeps loading until it is next saved, and the repair is the author restoring the props the component lost, which no ledger entry can derive. The other categories are closed on facts: the package publishes (not unpublished); no ADR-0087 id covers this verdict (not already-registered); and the change is a lint verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: fix(lint)!: `os build`, `os validate`, `os lint` and the page save door refuse a page component props CEL slot over the platform's parse bounds (#25002) +- 31f0f27: fix(lint)!: `os build`, `os validate`, `os lint` and the page save door refuse a page component props CEL slot over the platform's parse bounds (#25002) Clause-②: no (narrowing: a page component props CEL slot over the platform parse bounds is refused at `os build` and the page door; it ships now under the amended 「甲」, #6015 `6303865025`) @@ -195,7 +195,7 @@ - Measured before crossing, through the built `@objectstack/lint`: 0 in-repo producers carry such a slot. Every page module under `examples/` and `packages/` (30 files, 65 page values) draws 0 findings, and so do the `app-crm`, `app-multi-package` and `app-todo` composed stacks. A literal scan of 9,919 tracked source files (13,840 string literals of 120+ characters) finds 0 sources over the bounds, and HotCRM at `c8a7a70` (611 files) finds 0. A planted 78-term control is found by both instruments. <!-- adr-0087: not-required (no-migration-prescription) a refusal at `os build`, `os validate`, `os lint` and the page save door of a page component props CEL slot whose source overruns the platform's parse bounds: no authorable key, spelling, export or stored shape moves, and no stored row is read, rewritten or converted. A stored page whose slot is refused keeps loading until it is next saved, and the repair is the author's rewrite of the predicate (shrinking it, or precomputing it into a formula or roll-up field), which no ledger entry can derive. The other categories are closed on facts: the package publishes (not unpublished); no ADR-0087 id covers this verdict (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: feat(lint)!: `objectstack validate`, `compile` and the publish gate refuse a bulk action's `confirmText` hole over an unbound root, a single-brace token, a hole holding logic and a blank sentence (#25205) +- ecb4e69: feat(lint)!: `objectstack validate`, `compile` and the publish gate refuse a bulk action's `confirmText` hole over an unbound root, a single-brace token, a hole holding logic and a blank sentence (#25205) Clause-②: no (narrowing: a bulk action's `confirmText` that names an unbound root, carries a single-brace token, holds logic in a hole or is blank is refused at `objectstack validate`, `compile` and the publish gate; it ships now under the amended 「甲」, #6015 `6303865025`) Metadata-protocol: narrowed @@ -218,7 +218,7 @@ - Measured before crossing, through the built `@objectstack/lint` at `925fd0772c`: 0 in-repo producers carry such a sentence. The 6 bulk defs with a `confirmText` in `examples/app-showcase` (`project.view.ts`) draw 0 findings, against 1 for a planted unbound hole. HotCRM at `1e71d5e` declares 3 bulk `confirmText` sentences on `account.view.ts` (`{{count}}`, and `{{tier}}` on the def whose param is `tier`), all over bound roots: 0 findings. Its other 9 of the 12 are translations of those 3 in its locale bundles, which this pass does not read. <!-- adr-0087: not-required (no-migration-prescription) a refusal at `objectstack validate`, `compile` and the publish gate of a bulk action `confirmText` naming an unbound root, carrying a single-brace token, holding logic in a hole, or blank: no authorable key, spelling, export or stored shape moves, the parse is unchanged, and no stored row is read, rewritten or converted. A stored view whose sentence is refused keeps loading until it is next saved, and the repair is the author's rewrite of the sentence (which root a hole should name is the author's intent), which no ledger entry can derive. The other categories are closed on facts: the packages publish (not unpublished); no ADR-0087 id covers this verdict (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: feat(lint)!: a membership key, and a row policy that reads one, are judged when authored, at the CLI and at the object and permission save doors +- b531016: feat(lint)!: a membership key, and a row policy that reads one, are judged when authored, at the CLI and at the object and permission save doors Clause-②: no (narrowing: `os validate`, `os build`, `os lint` and the object and permission save doors refuse a `membershipKeys` declaration that cannot resolve and a row policy that reads a membership key in a way that matches no rows; the RLS rule now also judges object writes) Metadata-protocol: narrowed @@ -249,7 +249,7 @@ - **Remedy:** declare the key on its roster object's `membershipKeys`, or register the resolver that stages it, before publishing the policy; test a key against the column that references the key's target; use `in`, not `==`; keep a key's `filter` to the roster object's own columns. An object write refused for a stored policy is fixed by keeping the field or key that policy reads, or by changing the policy first. <!-- adr-0087: not-required (no-migration-prescription) Refusals at the CLI and at the object and permission save doors of membership key declarations that cannot resolve and of row policies that read a membership key in a position that matches no rows, plus the RLS rule's crossing to object writes. No authorable key, spelling, export or stored shape moves, and no stored row is read, rewritten or converted; the repair is the author's choice of declaration, resolver, column or operator, which no ledger entry can derive. The other categories are closed on facts: the packages publish (not unpublished); no ADR-0087 id covers these verdicts (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: fix(lint)!: a page or view `visibleWhen` that hands `has()` an argument other than a field selection is refused at publish +- f5b6b3f: fix(lint)!: a page or view `visibleWhen` that hands `has()` an argument other than a field selection is refused at publish Clause-②: no (narrowing) @@ -278,7 +278,7 @@ ### Patch Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -300,7 +300,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -312,7 +312,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: feat(spec)!: a list's `addRecord` block says what renders — `enabled` is required, `position` defaults to `top`, and `mode` / `formView` are retired +- fde7456: feat(spec)!: a list's `addRecord` block says what renders — `enabled` is required, `position` defaults to `top`, and `mode` / `formView` are retired Clause-②: yes (narrowing) @@ -350,7 +350,7 @@ - The Studio view form and page form offer exactly `enabled` and `position` for `addRecord`. - `@objectstack/lint`: `os explain list-view-field-unknown` no longer names `addRecord.formView` as a position another rule checks. - The showcase's two `addRecord` blocks and the docs (`ui/create-vs-edit-form`, `ui/views`) drop `mode` / `formView` and state the create-form convention. -- 3937697: fix(lint): `os validate`, `os build` and the object save door warn on a `validations[]` rule whose predicate reads `parent` (#24720) +- 8cfe1f9: fix(lint): `os validate`, `os build` and the object save door warn on a `validations[]` rule whose predicate reads `parent` (#24720) Clause-②: no @@ -368,7 +368,7 @@ - `parent` on a field's own `readonlyWhen` / `requiredWhen` is still accepted with no finding, as before, and so is a `record` column spelled like the root (`record.parent_code`). - No example or package object in this repository authors `parent` in a `validations[]` rule. - No public export or signature moves. -- 3937697: docs(lint): `os explain` covers `list-view-object-unknown` and `list-view-object-outside-closure`, and the `packageScope` docblock says what a whole-collection miss now means +- 88cc145: docs(lint): `os explain` covers `list-view-object-unknown` and `list-view-object-outside-closure`, and the `packageScope` docblock says what a whole-collection miss now means Clause-②: no (no verdict, severity, accept set or served body moves: explanation text and comments only) @@ -376,7 +376,7 @@ - **`os explain list-view-object-unknown`** explains why a write that names no package can say an object exists nowhere (it is judged against the whole collection the deployment serves), why an empty collection is not judged, and why `os validate` / `os build` / `os lint` still skip the binding. - **`os explain list-view-field-unknown`** no longer says an unresolvable binding always skips the list view: it does on the CLI, and the runtime save door refuses it under one of the two ids above. - **`AuthoringRuleContext.packageScope`** (in the published `.d.ts`) no longer says an object missing from a whole snapshot "may come from another package": that is true only on the CLI. At the runtime door with no closure in force the snapshot is the whole served collection, and such a binding is refused `list-view-object-unknown`. -- 3937697: fix(lint): the record-title diagnostics no longer steer a composite title that must be queried into a formula field +- 459afea: fix(lint): the record-title diagnostics no longer steer a composite title that must be queried into a formula field Clause-②: no (wording only: no verdict, severity, code, key or export moves) Metadata-protocol: none @@ -384,7 +384,7 @@ The `title-format-retired` and `title-unresolvable` messages and fix lines, the `object/missing-name-field` fix line, and the `os explain title-format-retired` text now say the same thing: a composite record title that an import, a sort or a search must match is a stored computed field, a non-formula field (such as a `text` field) that declares an `expression`, which the engine computes and stores on every write, designated as `nameField`. A `formula` field with `returnType: 'text'` stays a legal `nameField` for a title shown for display only: its value is computed on read and stored nowhere, so a sort by it is refused, search never reaches it, and an import cannot match a lookup cell against it. No finding fires on a different object than before, and no severity changes. Only the text an author reads changes. -- 3937697: feat(spec)!: a `controlled_by_parent` object whose one required `master_detail` is marked `readonly: true` or `system: true` is refused at parse +- 02ad31a: feat(spec)!: a `controlled_by_parent` object whose one required `master_detail` is marked `readonly: true` or `system: true` is refused at parse Clause-②: no (narrowing) @@ -406,7 +406,7 @@ `@objectstack/spec/data`: `controlledByParentMasterRefusal` returns the new shape `master-not-writable` for this object, so a producer that asks it before writing `controlled_by_parent` gets the parse's verdict. `ControlledByParentMasterShape` gains that member. `isControlledByParentMasterField` is unchanged: a flagged required `master_detail` still counts as the master, so beside a second required one the object is still refused as having two. `@objectstack/lint`: the `relationship/master-detail-required` explanation (`os explain`) now says that the parse refuses every shape that leaves the object without exactly one writable required master, and that a shape on a second, non-required `master_detail` is this rule's report alone. -- 3937697: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) +- 9127f23: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) Clause-②: no (narrowing: an email template whose `bodyHtml` places a hole outside the supported placements is refused at the three CLI commands and at the publish door, where it passed) Metadata-protocol: none @@ -426,67 +426,67 @@ - **`@objectstack/formula` (patch):** the classifier the rule reads, `judgeMailHtmlHoles`, is exported with its supported-placement list and labels. `@objectstack/plugin-email`'s built-in template pin reads the same classifier and holds its hole grammar to the renderer's. - **`@objectstack/spec` (patch):** one conversion's example templates now declare their link variable with `type: 'url'` and place it in an `href`. No schema, conversion behaviour or export changes. - **The fix for an author:** move the hole into element text or a quoted plain-text attribute. For a link, declare the variable with `type: 'url'` and write it triple-braced as the whole double-quoted `href` value. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/formula@18.1.0 - @objectstack/sdui-parser@18.1.0 diff --git a/packages/mcp/CHANGELOG.md b/packages/mcp/CHANGELOG.md index 66653988d44..621b75c5360 100644 --- a/packages/mcp/CHANGELOG.md +++ b/packages/mcp/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix(mcp)!: the stdio data bridge reads objects from the protocol's merged view, so `list_objects` and `describe_object` see every object `GET /api/v1/meta/object` lists, a package object declared `apiEnabled: false` is refused by every data verb, and so is every object of a disabled package (`404 OBJECT_PACKAGE_DISABLED`) +- 8010b64: fix(mcp)!: the stdio data bridge reads objects from the protocol's merged view, so `list_objects` and `describe_object` see every object `GET /api/v1/meta/object` lists, a package object declared `apiEnabled: false` is refused by every data verb, and so is every object of a disabled package (`404 OBJECT_PACKAGE_DISABLED`) Clause-②: no (narrowing) Metadata-protocol: none @@ -20,7 +20,7 @@ - **Also changed.** A disabled package's objects, where the `metadata` service still held a copy, were listed and described; they are now omitted, as REST omits them. Every data verb and the record resource now refuse a disabled package's object `404 OBJECT_PACKAGE_DISABLED`, whatever the object declares: before, the stdio transport served it on every verb, because each verb asks the engine and never the protocol. When the metadata store cannot be read, `list_objects` and `describe_object` answer the store's `503 SERVICE_UNAVAILABLE`, as `GET /api/v1/meta/object` does, instead of the `metadata` service's listing. - **Unchanged.** Objects that already had a copy (every object on a kernel without an `environmentId`, a marketplace install on any kernel, and a runtime-authored object) are listed and gated as before. A host with no `protocol` service, or one without the merged reads, keeps reading the `metadata` service. If the protocol's by-name read fails, the gate judges the `metadata` service's copy, as it did before. - **What to do.** Nothing, if the declarations say what you mean. A stdio client that relied on reaching an object declared `apiEnabled: false` was relying on the defect: set `enable.apiEnabled` (or `enable.apiMethods`) on the object to the exposure you want. A stdio client that read a disabled package's objects was relying on the same kind of defect: re-enable the package to restore access, as REST says. -- 3937697: fix(mcp)!: the `objectstack://objects` resources read the stdio transport's merged object view, so they list and describe every object `list_objects` and `describe_object` answer, and omit a disabled package's objects as those tools do +- 72fad92: fix(mcp)!: the `objectstack://objects` resources read the stdio transport's merged object view, so they list and describe every object `list_objects` and `describe_object` answer, and omit a disabled package's objects as those tools do Clause-②: no (narrowing) Metadata-protocol: none @@ -36,7 +36,7 @@ - **Also changed.** A disabled package's objects, where the `metadata` service still held a copy, were listed by `objectstack://objects` and described by `objectstack://objects/NAME`. They are now omitted, and `objectstack://objects/NAME` answers `404 RESOURCE_NOT_FOUND` for them, as `describe_object` answers "not found". When the protocol's merged listing throws, both resource reads fail with that error, as `list_objects` does, instead of answering the `metadata` service's listing. - **Unchanged.** Objects that already had a copy (every object on a kernel without an `environmentId`, a marketplace install on any kernel, and a runtime-authored object) are listed and described as before. The completeness verdict is still the `metadata` service's: a loader outage still withholds `totalCount` and answers `partial: true`, and a miss during an outage still answers `503 SERVICE_UNAVAILABLE`. A host with no `protocol` service, or one without the merged listing, keeps reading the `metadata` service. A host that calls `MCPServerRuntime.bridgeResources` itself reads the `metadata` service as before. - **What to do.** Nothing. A stdio client that read a disabled package's object through these resources was reading a stale copy the rest of the platform no longer serves: re-enable the package to restore it, as REST says. -- 3937697: fix(cli,mcp): `os dev`'s boot banner and the served SKILL.md name the MCP server the same way +- 4374f3c: fix(cli,mcp): `os dev`'s boot banner and the served SKILL.md name the MCP server the same way Clause-②: no Metadata-protocol: none @@ -46,76 +46,76 @@ Both producers now read one exported constant, `OBJECTSTACK_MCP_SERVER_NAME` (`'objectstack'`), from `@objectstack/mcp`. The banner's `Connect` row prints `claude mcp add --transport http objectstack URL`. If you registered the server under the folder name from an earlier banner, that entry keeps working. Remove it with `claude mcp remove FOLDER` if you also added it as `objectstack`. `printMcpConnectHint` no longer takes a `name` option. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/metadata-core/CHANGELOG.md b/packages/metadata-core/CHANGELOG.md index c83ee5c730c..f055bf2ddb0 100644 --- a/packages/metadata-core/CHANGELOG.md +++ b/packages/metadata-core/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value +- 386f60f: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value Clause-②: no (narrowing: a `Field.select` shorthand string the helper used to rewrite silently, e.g. `'no-overlay'` → `nooverlay`, is refused instead) @@ -27,7 +27,7 @@ ### Patch Changes -- 3937697: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go +- b42c621: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go Clause-②: yes (narrowing) @@ -64,7 +64,7 @@ - **`@objectstack/metadata-core`**: the ADR-0106 field-security scrub no longer classifies `filterableFields` as a list-view name list. A body that still carries the key goes the unclassified way and fails closed: a list view whose `filterableFields` names a field the caller may not read is dropped whole, where the scrub used to remove the name. ⛔ **Untouched:** `userFilters` and `searchableFields` keep their meaning and their checks. -- 3937697: feat(spec): a roster object can declare its membership keys, `ObjectSchema.membershipKeys` +- dc532e8: feat(spec): a roster object can declare its membership keys, `ObjectSchema.membershipKeys` Clause-②: yes (widening) Metadata-protocol: added @@ -78,7 +78,7 @@ - **`@objectstack/metadata-core`: the field-level-security projection classifies the new key.** When an object document is served to a caller who cannot read some of its fields, each membership key whose `userField`, `valueField` or `filter` names such a field is dropped whole from the served document; the others are served unchanged. - The row-level security docs no longer say the runtime stages `territory_account_ids` or `team_member_ids`: those are app-supplied keys, and the docs now say where a membership key comes from. - Additive: every object that parsed before still parses, and its parsed output is unchanged. -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -93,66 +93,66 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 18.0.0 diff --git a/packages/metadata-fs/CHANGELOG.md b/packages/metadata-fs/CHANGELOG.md index 524c01d012e..7b23e71ba6d 100644 --- a/packages/metadata-fs/CHANGELOG.md +++ b/packages/metadata-fs/CHANGELOG.md @@ -4,10 +4,10 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [b42c621] +- Updated dependencies [386f60f] +- Updated dependencies [dc532e8] +- Updated dependencies [ee63b47] - @objectstack/metadata-core@18.1.0 ## 18.0.0 diff --git a/packages/metadata-protocol/CHANGELOG.md b/packages/metadata-protocol/CHANGELOG.md index b9aca05a7f6..1cbaec9ac18 100644 --- a/packages/metadata-protocol/CHANGELOG.md +++ b/packages/metadata-protocol/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 7cacad5: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat(plugin-sharing,plugin-approvals,metadata-protocol)!: the organization-less readers of sharing rules, approval units and the seed loader retire (ADR-0131 D2/D8, 18.x step 7) @@ -22,7 +22,7 @@ - **The scoped seed pre-load reads one thing: its organization's rows.** The second read that collected keys held by organization-less rows, and refused to twin or adopt them, is deleted; a scoped upsert/ignore/update issues no `organization_id IS NULL` read on any path. Remedy for a database that still holds organization-less rows: `os migrate organization-ownership --out PLAN`, review it, then `os migrate organization-ownership --apply --plan-file PLAN --backup-taken`. -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -33,7 +33,7 @@ - **Existing indexes stay as they are.** Nothing is renamed, and no declared organization composite is dropped or rebuilt by the boot, `os migrate plan` or `os migrate apply`; on SQLite the ownership ceremony's NOT NULL step rebuilds the tables it tightens, and their composites come back plain, enforcing the same constraint. One index is re-keyed: the `sys_setting` row-identity index, which the metadata protocol rebuilds on every boot, keys the plain `organization_id` from the next boot on (probe-first; a pure relaxation, so it cannot fail on existing rows). The schema differ reads `COALESCE(<tenant>, …)` and the plain tenant column as one key part, in both directions, where the column is physically `NOT NULL` or the database is certified (its organization-ownership birth marker, or the ownership ceremony's marker at the current shape generation). So `os migrate plan` and the boot report no `recreate_index` for those indexes. On an uncertified database with a nullable tenant column the two forms stay different constraints: the finding is reported, and it names `os migrate organization-ownership` as its remedy. - **What widens.** Where a tenant column is still nullable (every table of a database 18.0.0 created, an uncertified 17.x / 18.0 database, a rotation shard, a Turso remote table, a table the ceremony reported), a unique index created from now on does not constrain rows whose organization is NULL, exactly like a NULL in any other key part; in the in-memory driver a record with no organization is exempt from an organization-scoped unique. The unique duplicate pre-flight no longer reports groups of rows with a NULL key part, since the index never refuses them. - **Who sees it.** A fresh install and every ceremonied table whose tenant column is NOT NULL see nothing. A database 18.0.0 created from empty is certified by its birth marker yet keeps nullable tenant columns: its existing indexes are kept unchanged, and a new organization unique declared on one of its tables constrains only rows that carry an organization. -- 3937697: fix(metadata-protocol)!: the metadata save doors and `composeStacks` refuse an object's `external` binding on a named managed datasource, from either side of the pair +- bda53bb: fix(metadata-protocol)!: the metadata save doors and `composeStacks` refuse an object's `external` binding on a named managed datasource, from either side of the pair Clause-②: yes (narrowing) @@ -58,7 +58,7 @@ This narrows the **Unchanged** bullet of the #25168 changeset, which said a binding on a datasource "registered by the host or another package, or stored at runtime" gets no verdict at the load doors: the metadata save doors now judge it, and `composeStacks` judges one another input declares. `@objectstack/spec/data`: exports `externalBindingDatasourceRefusal` and its result type `ExternalBindingDatasourceRefusal`, the one predicate behind the rule, so a runtime door resolves the datasource it can see and asks it rather than copying the judgement. Its behaviour is unchanged. -- 3937697: fix(metadata-protocol)!: `rollbackMetaItem` and `revertCommit` refuse a stored version the save door refuses, instead of writing it back live +- 69913f8: fix(metadata-protocol)!: `rollbackMetaItem` and `revertCommit` refuse a stored version the save door refuses, instead of writing it back live Clause-②: no (narrowing) @@ -86,7 +86,7 @@ ### Patch Changes -- 3937697: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go +- b42c621: fix(lint)!: `os lint` and the react-page props check report the retired list-view `filterableFields` by name, and the readers that still treated it as a field position go Clause-②: yes (narrowing) @@ -123,7 +123,7 @@ - **`@objectstack/metadata-core`**: the ADR-0106 field-security scrub no longer classifies `filterableFields` as a list-view name list. A body that still carries the key goes the unclassified way and fails closed: a list view whose `filterableFields` names a field the caller may not read is dropped whole, where the scrub used to remove the name. ⛔ **Untouched:** `userFilters` and `searchableFields` keep their meaning and their checks. -- 3937697: fix(service-messaging,metadata-protocol)!: a notification preference's User is a `sys_user` reference, so the record title names the person and the write door refuses an id no user holds; the default for every user is an empty User instead of `'*'` +- e282f32: fix(service-messaging,metadata-protocol)!: a notification preference's User is a `sys_user` reference, so the record title names the person and the write door refuses an id no user holds; the default for every user is an empty User instead of `'*'` Clause-②: yes (narrowing) Metadata-protocol: none @@ -141,7 +141,7 @@ - On SQLite and PostgreSQL, `@objectstack/metadata-protocol` rebuilds the index `uniq_sys_notification_preference_a22d7d27` at `kernel:ready` as `(organization_id, COALESCE(user_id, ''), topic, channel)`, so a second default for one topic and channel in one organization is refused (`409`). If existing rows already break that rule, it refuses to migrate: the previous index stays, no row is touched, and the boot log and `os migrate duplicates` list the rows. MySQL/MariaDB and driver-memory keep the declared index, which does not constrain empty Users, and the boot log says so on MySQL. - **Unchanged:** `topic = '*'` and `channel = '*'` are still the topic and channel wildcards. Most-specific-wins resolution, mandatory topics, quiet hours and digests behave as before. A row for a real user is read, matched and titled as before, except for the title text. The physical column is still a `varchar(255)`, so no DDL change is needed for it. - **The fix for an operator:** nothing, normally; the boot rewrites the old `'*'` rows. If the boot log reports a `'*'` row that shares its topic and channel with a default whose User is already empty, delete the one that should not apply and restart. If it reports that the one-default-per-key index could not be built because two such defaults exist, list them with `os migrate duplicates`, delete one, and restart. A script or import that wrote `user_id: '*'` writes an empty `user_id` (omit it, or send `null`) for the default for every user. -- 3937697: fix(metadata-protocol)!: the Data API refuses a malformed or negative page window with a 400 naming the parameter as written, instead of a 500 or a silently ignored window +- 17f3c65: fix(metadata-protocol)!: the Data API refuses a malformed or negative page window with a 400 naming the parameter as written, instead of a 500 or a silently ignored window Clause-②: no (narrowing) Metadata-protocol: none @@ -155,7 +155,7 @@ - **Unchanged.** A well-formed window pages exactly as before (`?$top=5&$skip=2`, `{"limit": 5, "offset": 2}`), and `0` stays valid on both (`$top=0` asks for the total alone). A non-number in a `POST` body (`{"limit": "ten"}`) is still the body schema's `400 VALIDATION_FAILED`. **The remedy.** Send the window as a whole count of zero or more, or leave the parameter out. -- 3937697: feat(lint)!: a membership key, and a row policy that reads one, are judged when authored, at the CLI and at the object and permission save doors +- b531016: feat(lint)!: a membership key, and a row policy that reads one, are judged when authored, at the CLI and at the object and permission save doors Clause-②: no (narrowing: `os validate`, `os build`, `os lint` and the object and permission save doors refuse a `membershipKeys` declaration that cannot resolve and a row policy that reads a membership key in a way that matches no rows; the RLS rule now also judges object writes) Metadata-protocol: narrowed @@ -186,7 +186,7 @@ - **Remedy:** declare the key on its roster object's `membershipKeys`, or register the resolver that stages it, before publishing the policy; test a key against the column that references the key's target; use `in`, not `==`; keep a key's `filter` to the roster object's own columns. An object write refused for a stored policy is fixed by keeping the field or key that policy reads, or by changing the policy first. <!-- adr-0087: not-required (no-migration-prescription) Refusals at the CLI and at the object and permission save doors of membership key declarations that cannot resolve and of row policies that read a membership key in a position that matches no rows, plus the RLS rule's crossing to object writes. No authorable key, spelling, export or stored shape moves, and no stored row is read, rewritten or converted; the repair is the author's choice of declaration, resolver, column or operator, which no ledger entry can derive. The other categories are closed on facts: the packages publish (not unpublished); no ADR-0087 id covers these verdicts (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: fix(spec)!: the published list-query schemas declare the page window the Data API enforces — a non-negative integer — instead of any number +- 5f30f00: fix(spec)!: the published list-query schemas declare the page window the Data API enforces — a non-negative integer — instead of any number Clause-②: no (narrowing) Metadata-protocol: none @@ -201,7 +201,7 @@ - **Unchanged.** A well-formed window parses and pages exactly as before, `0` included (`$top=0` asks for the total alone). Windows inside `expand` and the engine and driver contracts (`QuerySchema`, `EngineQueryOptionsSchema`) are not narrowed: no door refuses those. **The remedy.** Send the window as a whole count of zero or more, or leave the parameter out. -- 3937697: fix(spec): `os migrate meta --stored` lists a stored object bound `external` to a stored or registered managed datasource +- 7db1697: fix(spec): `os migrate meta --stored` lists a stored object bound `external` to a stored or registered managed datasource Clause-②: yes (widening) @@ -211,7 +211,7 @@ - **Now:** for each stored `object` row carrying `external` and naming a datasource, the pass reads that datasource the way the object save door does (the environment's stored row, else the definition the code layer registers; both go through one read) and hands it to the chain. The row is listed under `rows[].todos` with this entry's id exactly when that door refuses its next save. A datasource declared `schemaMode: 'external'` or `'validate-only'`, and a datasource no layer holds, give no listing, as at the door. Nothing is rewritten. - **`@objectstack/spec`:** `ApplyConversionsOptions` (and so `StoredConversionOptions` for `applyConversionsToStoredItem`) gains an optional `knownDatasources`, a map of datasource definitions by name that the caller's door can see beyond the stack. Only the refused-shape listing reads it, so only when an `onTodo` sink is passed. A datasource the stack declares is read from the stack first. Without it, behaviour is unchanged. -- 3937697: fix: `POST /api/v1/packages/:id/publish-drafts` probes dashboard widgets as the publishing caller, so a correct dataset over a permission-gated object is no longer reported as an error-tier `widget_query_failed` +- 35d942e: fix: `POST /api/v1/packages/:id/publish-drafts` probes dashboard widgets as the publishing caller, so a correct dataset over a permission-gated object is no longer reported as an error-tier `widget_query_failed` Clause-②: no Metadata-protocol: none @@ -222,7 +222,7 @@ - **`@objectstack/metadata-protocol`:** `publishPackageDrafts` passes that context to `runBuildProbes`, which takes a new optional `context`. The widget probe runs `queryDataset` as that caller, the same path the dashboard renderer takes. "Empty although the object has rows" is now judged over the rows that caller can see. The probe never falls back to a system context. A publisher who cannot read the dataset still gets the error-tier `widget_query_failed`, because that widget will not render for them either. -- 3937697: fix(metadata-protocol): a publish build probe refused by read admission tells the publisher to get read access, not to change a correct dataset +- ce18e73: fix(metadata-protocol): a publish build probe refused by read admission tells the publisher to get read access, not to change a correct dataset Clause-②: no Metadata-protocol: none @@ -232,87 +232,87 @@ - **An access refusal names the access.** When the analytics service refuses the query with `PERMISSION_DENIED` (an object or a field the caller may not read), the `fix` now says the dataset is not the cause, and that the publisher (or the role the dashboard is for) needs read access to the refused object, and the refused fields when the refusal names them. The refusal is told apart by the error's code, not its message. - **Every other failure keeps the dataset fix.** A selection the dataset does not declare, and a member the field-level gate cannot judge (also `PERMISSION_DENIED`, but its remedy is a dataset change), keep "Fix the dataset definition (or the widget's values/dimensions) so the query compiles, then republish." - **Nothing else changes.** The issue's `code` (`widget_query_failed`), `severity` (`error`) and `message` are the same, and so is every other probe plane. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [8cfe1f9] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [88cc145] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [0a3ce08] +- Updated dependencies [c5915b2] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [c0ae356] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [31f0f27] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [459afea] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] - Updated dependencies [4a25192] -- Updated dependencies [3937697] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/metadata/CHANGELOG.md b/packages/metadata/CHANGELOG.md index 747187175a3..bf81cc3c125 100644 --- a/packages/metadata/CHANGELOG.md +++ b/packages/metadata/CHANGELOG.md @@ -4,77 +4,77 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/objectql/CHANGELOG.md b/packages/objectql/CHANGELOG.md index f46e4c982ee..0aad5b7af3d 100644 --- a/packages/objectql/CHANGELOG.md +++ b/packages/objectql/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -26,7 +26,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database +- d5d8146: feat(driver-sql,driver-turso,driver-memory,objectql,metadata-protocol,cli): an organization-scoped unique index keys the plain organization column, and an index an earlier release built with `COALESCE(organization_id, '__global__')` is read as the same index on a certified database Clause-②: yes (widening) Metadata-protocol: semantic @@ -37,7 +37,7 @@ - **Existing indexes stay as they are.** Nothing is renamed, and no declared organization composite is dropped or rebuilt by the boot, `os migrate plan` or `os migrate apply`; on SQLite the ownership ceremony's NOT NULL step rebuilds the tables it tightens, and their composites come back plain, enforcing the same constraint. One index is re-keyed: the `sys_setting` row-identity index, which the metadata protocol rebuilds on every boot, keys the plain `organization_id` from the next boot on (probe-first; a pure relaxation, so it cannot fail on existing rows). The schema differ reads `COALESCE(<tenant>, …)` and the plain tenant column as one key part, in both directions, where the column is physically `NOT NULL` or the database is certified (its organization-ownership birth marker, or the ownership ceremony's marker at the current shape generation). So `os migrate plan` and the boot report no `recreate_index` for those indexes. On an uncertified database with a nullable tenant column the two forms stay different constraints: the finding is reported, and it names `os migrate organization-ownership` as its remedy. - **What widens.** Where a tenant column is still nullable (every table of a database 18.0.0 created, an uncertified 17.x / 18.0 database, a rotation shard, a Turso remote table, a table the ceremony reported), a unique index created from now on does not constrain rows whose organization is NULL, exactly like a NULL in any other key part; in the in-memory driver a record with no organization is exempt from an organization-scoped unique. The unique duplicate pre-flight no longer reports groups of rows with a NULL key part, since the index never refuses them. - **Who sees it.** A fresh install and every ceremonied table whose tenant column is NOT NULL see nothing. A database 18.0.0 created from empty is certified by its birth marker yet keeps nullable tenant columns: its existing indexes are kept unchanged, and a new organization unique declared on one of its tables constrains only rows that carry an organization. -- 3937697: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` +- 7532ea3: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` Clause-②: yes (widening) @@ -49,7 +49,7 @@ - **Flow step warning.** `@objectstack/service-automation` words the new reason. Its warning says the requested value(s) were not stored, rather than that the field was not written, and its closing sentence says the write succeeded with the computed value(s). **For consumers that branch on `reason`.** A `Record<DroppedFieldsEvent['reason'], …>` table fails its typecheck until it has a `stored_expression` row. That is the intended signal: add the row. A client running behind the server should treat a reason it does not recognise as "not applied", never as one of the known reasons. -- 3937697: fix(objectql,plugin-security): an update's re-point of `organization_id` that the Layer 0 wall admits is stored as sent, not silently dropped +- 5050442: fix(objectql,plugin-security): an update's re-point of `organization_id` that the Layer 0 wall admits is stored as sent, not silently dropped Clause-②: yes (widening) — an update re-point of `organization_id` the Layer 0 wall admits is now stored instead of silently dropped, and an in-process `strictReadonlyWrites: true` update naming an organization the wall admits is now stored instead of refused `ERR_READONLY_FIELD_REJECTED`. @@ -79,7 +79,7 @@ - **Only the platform's injected column on an app object is spared.** A `sys_` object, a platform-internal `managedBy` bucket (`engine-owned`, `append-only`, `better-auth`), and an object whose author declares its own `organization_id` with `readonly: true` keep the update strip: the value is still taken, reported, and refused under strict, exactly as before. The organization-scoped grant tables (`sys_user_position`, `sys_user_permission_set`) declare a writable `organization_id` the strip never took, so their re-points keep meeting their own guards exactly as before. - **Where no wall judges the column, nothing changes.** The re-point is still taken and reported, and strict still refuses it. That includes `single`, a composition without the security plugin, a tenancy-disabled object, a platform operator crossing the wall on its own behalf, and `preserveAudit`, whose update-only exemption never reaches `organization_id`. - **The `update`-mode `validate()` preview is unchanged.** It runs no middleware, so it holds no seam: it still reports an admitted re-point as dropped while the write stores it. -- 3937697: fix(objectql,plugin-security): an insert's explicit `organization_id` that the Layer 0 wall judges is stored as sent, not replaced by the active organization +- 2b1382a: fix(objectql,plugin-security): an insert's explicit `organization_id` that the Layer 0 wall judges is stored as sent, not replaced by the active organization Clause-②: yes (widening) — `PostHookWriteImageCheck` gains the optional published member `judgesOrganization`, and an in-process `strictReadonlyWrites: true` insert naming an organization the wall admits is now stored instead of refused `ERR_READONLY_FIELD_REJECTED`. @@ -110,7 +110,7 @@ - **An explicit empty value in an array insert.** A row naming `organization_id: null` or `''` is no longer taken, reported, or refused under strict. It is still stored as the active organization, because the driver's stamp fills an empty value. - **Only the platform's injected column is spared.** On an object whose author declares its own `organization_id` with `readonly: true`, a caller's value is still taken, reported, and refused under strict, exactly as before. The wall still judges that column. The author's declaration is what keeps the strip, and the injected column is told apart by the registry's provenance reader (`resolveInjectedColumnProvenance`). - **Where no wall judges the column, nothing changes.** The value is still taken and reported, and strict still refuses it. That includes `single`, a composition without the security plugin, a tenancy-disabled object, and a platform operator crossing the wall on its own behalf. -- 3937697: fix(objectql, plugin-auth)!: deleting an organization that still owns records is refused with 409 and a per-table count, before anything is deleted; an empty one is deleted whole, its teams and organization-admin grants with it; the engine never clears a tenant column +- 688052e: fix(objectql, plugin-auth)!: deleting an organization that still owns records is refused with 409 and a per-table count, before anything is deleted; an empty one is deleted whole, its teams and organization-admin grants with it; the engine never clears a tenant column **The 18.0.0 defect this fixes.** `POST /api/v1/auth/organization/delete` ran better-auth's delete, which removes the organization's members, then its invitations, then the organization row, as three separate writes. The engine's delete cascade then applied the tenant column's `set_null` default to every row the organization still owned. On a database whose tenant column is NOT NULL (one that took the v18 organization-ownership ceremony), the delete answered 500 on `sys_team.organization_id` after the members and invitations were already gone, so the organization survived with no owner and nobody could delete it. On a database 18.0.0 created, where the column is still nullable, the delete answered 200 and left the organization's teams and records with `organization_id = NULL`, owned by nobody and visible to nobody. Every organization created through the door owns a default team, so on a NOT NULL database not even an empty organization could be deleted. Deployments that run `single` are not reached the same way: their one organization is the Default Organization, which the last-administrator guard answers first, and they cannot create another. @@ -138,7 +138,7 @@ - **Fix:** delete the organization's records, or move them to another organization, then delete the organization. The refusal names the tables to look at. Business units, positions and sharing rules count as records. Activity, audit and mail-log rows do not, nor do engine-owned rows (approval state, runs, deliveries, shares, settings values). - **Seed datasets:** on a composition with the organizations runtime (`@objectstack/organizations`) and an app that ships seed datasets, a new organization receives that seed replay at creation, so it owns records from its first moment and its delete is refused until they are removed. The refusal lists them. Delete them (or move them) like any other records, then delete the organization. Measured on the showcase: a fresh organization owns 132 seeded rows in 19 tables. - **Already orphaned on 18.0.0?** Rows an earlier organization delete set to `organization_id = NULL` are not touched by this release. Organization-less rows are what the v18 organization-ownership ceremony (`os migrate organization-ownership`) attributes or reports. -- 3937697: feat(cli, objectql): `os db orphans` — report the detail rows whose required master-detail master does not exist, and delete them only behind `--delete`, after a pre-delete export +- 157ebd0: feat(cli, objectql): `os db orphans` — report the detail rows whose required master-detail master does not exist, and delete them only behind `--delete`, after a pre-delete export Clause-②: yes (widening) @@ -154,7 +154,7 @@ **`@objectstack/objectql`: `ObjectQL.inspectCascadeDelete(object, id)` (new method).** A read-only method that returns every record a by-id `delete()` of that record removes, root first. It is the cascade set the delete collects for itself, read through the same walk. It writes nothing, runs no hook, and files no reference-check elevation record, because no delete happens. It reads as the system with no organization. `restrict` and `set_null` relations are not listed, because neither removes a record. A dependents probe that fails propagates. Nothing that ran before changes: the audit still reports and never rewrites, and the system-write exemption is unchanged. -- 3937697: fix(objectql)!: under `strictReadonlyWrites`, a write whose value a stored field's `expression` replaces (`stored_expression`) is refused, and nothing is written +- 03c12a5: fix(objectql)!: under `strictReadonlyWrites`, a write whose value a stored field's `expression` replaces (`stored_expression`) is refused, and nothing is written Clause-②: no (narrowing: under `strictReadonlyWrites`, a write whose value a stored expression replaces is refused instead of reported; it ships now under the amended 「甲」, #6015 `6303865025`) @@ -175,7 +175,7 @@ This supersedes the `strictReadonlyWrites` bullet of the `stored_expression` reason's entry, which deferred this refusal to a later major. Measured before the change: no non-test caller in this repository passes `strictReadonlyWrites` (the examples, dogfood suites and runtime doors pass none), so no in-repo producer moves. -- 3937697: feat(objectql, plugin-security): the engine composes its `ReadableIds` leaf for a delegated (on-behalf-of) caller, scoped to the delegator intersection, instead of refusing it (ADR-0139 D5.1 as amended; O5 answered) +- f8c5fb3: feat(objectql, plugin-security): the engine composes its `ReadableIds` leaf for a delegated (on-behalf-of) caller, scoped to the delegator intersection, instead of refusing it (ADR-0139 D5.1 as amended; O5 answered) Clause-②: no @@ -189,7 +189,7 @@ **What a reader sees.** No shipped consumer writes a leaf for a delegated caller yet (each still routes it to its probe; that routing retires per consumer on its own card), so a delegated read of `sys_activity`, `sys_audit_log`, `sys_comment`, `sys_comment_reaction` or `sys_attachment` is served as before. A door that binds `getReadFilter` directly, such as the analytics raw-SQL path, scopes a delegated context to the intersection now; as accepted it denied that context outright. **Unchanged.** `controlled_by_parent`'s own read scope (ADR-0055 §2 mechanism (b), the pre-resolved id set) and the nested master chain, which keep their own cards; the delegated `find`, `findOne`, `count` and `aggregate` through the engine middleware, which already applied the intersection. -- 3937697: feat(objectql): the engine composes a `ReadableIds` leaf that sits inside a composed read scope — the nested master chain (ADR-0139 D6 as amended) +- d96f618: feat(objectql): the engine composes a `ReadableIds` leaf that sits inside a composed read scope — the nested master chain (ADR-0139 D6 as amended) Clause-②: no @@ -200,7 +200,7 @@ **What a reader sees.** No shipped security service answers a read scope carrying a leaf yet — `controlled_by_parent`'s scope is still the pre-resolved id list (ADR-0055 §2 mechanism (b)) until the plugin-security switch lands on its own card — so every shipped read is served as before. The six consumers' leaves compose exactly as they did: a scope with no leaf is composed by reference, one level asked. **Unchanged.** `controlled_by_parent`'s own read scope and the id-list pre-scan, ADR-0055, every consumer's probe routing, and the drivers' compilation of the composed leaf (driver-sql and driver-memory already compile a scope that holds a composed leaf, through their own filter path). -- 3937697: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it +- b964ea1: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it Clause-②: yes Metadata-protocol: added @@ -213,7 +213,7 @@ ### Patch Changes -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -225,7 +225,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(objectql): an advisory validation rule that cannot be evaluated logs one line saying the write proceeded, not two saying it was rejected (#24782) +- 72518d2: fix(objectql): an advisory validation rule that cannot be evaluated logs one line saying the write proceeded, not two saying it was rejected (#24782) Clause-②: no (log text only: no response, status, code, outcome or export moves) @@ -234,7 +234,7 @@ Such a rule now logs ONE line: `Validation rule 'NAME' (warning): the rule could not be evaluated (FAULT) — write proceeded: the rule is advisory, so it was not applied to this write`. This covers a `script` / `cross_field` condition, a `conditional`'s `when`, and the relationship-traversal refusal. On the seed / boot path the same text folds into that load's advisory summary line, which keeps its shape. Unchanged: an unevaluable `error` rule is refused with the same `400 VALIDATION_FAILED` body, and its log line still says the write was rejected and the rule fails closed. Which rules block is unchanged. An unevaluable rule still stays out of a write answer's `warnings`. `requiredWhen`, `readonlyWhen` and the option `visibleWhen` gate still refuse on every severity. -- 3937697: fix(objectql): a unique refusal's user-facing sentence names the object and the field by label +- 6b656bf: fix(objectql): a unique refusal's user-facing sentence names the object and the field by label Clause-②: no (text only: the user-facing sentence names the object and field by label, and `developerMessage` opens with the API names; no code, status, outcome or export moves) @@ -244,7 +244,7 @@ - **The API names stay available for diagnostics.** They are still on `object` and `field`, and `developerMessage` now opens with them: `Duplicate record refused on object 'crm_account', field 'name'. …`. - **Unchanged:** the code (`DUPLICATE_RECORD` in the engine, `UNIQUE_VIOLATION` on every wire route), the 409 status and the outcome. `DuplicateRecordError`'s constructor takes an optional fourth argument with the labels. Callers that pass three arguments get the API-name sentence. - **For HTTP clients:** on the REST data routes the curated `error` text is unchanged. The wire `developerMessage` (which carries the engine's sentence) now names the labels, and the body's `object` and `field` keys still carry the API names. -- 3937697: fix(objectql): the write preview (`validate()`, the import dry run) answers a row's `organization_id` from the Layer 0 tenant wall's own verdict +- 9340181: fix(objectql): the write preview (`validate()`, the import dry run) answers a row's `organization_id` from the Layer 0 tenant wall's own verdict Clause-②: yes (widening) @@ -256,7 +256,7 @@ - **`validate()` reads each row's verdict.** A row whose organization the wall judges keeps `organization_id` through the static `readonly` strip, so no `droppedFields` entry names it, as on the write. A row the wall refuses answers `valid: false` with the write's own code (`PERMISSION_DENIED`) and message, under `organization_id` for a refused value and `_record` for the caller's state, and it drops nothing. Rows stay independent, and the set's `valid` stays the conjunction. A row the strips changed is asked about again, as the write's stored-image half judges it. - **Unregistered, nothing changes**: the strip runs as before, which is what the write does in a composition without the security plugin. - **Named limit:** the preview runs no hooks, so an organization a `beforeInsert` / `beforeUpdate` hook writes is judged by the write alone. -- 3937697: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number +- c8f4c43: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number Clause-②: yes (widening) Metadata-protocol: none @@ -268,7 +268,7 @@ - **A driver that owns its counter without the member** stores the readers computed without the number, as before, and the engine now says so once per object at `error` level, with the remedy. - **`ObjectQL.registerInsertRecomputeListener(id, fn)` (new).** Called per row after that second computation, on the row the driver is handed. `plugin-pinyin-search` registers on it, so a `__search` companion whose name field reads the record number is stamped from the value that carries the number, and `$search` finds the record by pinyin and by its number. - **One change in what a refused insert reports.** On an object whose stored expression reads the number, a SQL driver's collision that survives every retry now leaves as `ERR_AUTONUMBER_COLLISION` (the engine's three attempts) instead of `DUPLICATE_RECORD` (the driver's own retries). Every other object is unchanged. -- 3937697: fix(objectql): a federated object whose datasource the connect policy denied is reported at info, not in the ERROR that claims its reads hit the wrong table +- db9c02a: fix(objectql): a federated object whose datasource the connect policy denied is reported at info, not in the ERROR that claims its reads hit the wrong table Clause-②: no (log text and level only: no response, status, outcome, boot verdict or export moves) Metadata-protocol: none (a boot log line's level and text; nothing a metadata author writes changes) @@ -277,7 +277,7 @@ - **What changed.** When the datasource layer records the datasource as refused by policy (availability `blocked`), its unbound objects are reported in one `info` line instead. The line names the objects and their datasource, and says every read against them is refused with `DatasourceUnavailableError` until the policy allows that datasource. That is what the engine already does for such a read. The same line appears on every composition, serving or not, because it follows the recorded verdict alone. - **Unchanged.** The ERROR, word for word, for every other object it covered: a datasource that was never declared, a connect that FAILED (availability `failed`), a driver without external-object registration, and a registration that threw. On a boot with both, the info line covers the denied objects and the ERROR covers the rest, and the ERROR's counts exclude the denied ones. No binding, connect policy or read result changes. - **What to do.** Nothing. A log filter or agent that keyed on the ERROR for a policy-denied datasource now finds the info line, which names the same objects and datasource. -- 3937697: fix(objectql)!: a `controlled_by_parent` detail whose master the engine cannot compose a read over now refuses the boot, instead of booting and failing at read time +- 504d8b3: fix(objectql)!: a `controlled_by_parent` detail whose master the engine cannot compose a read over now refuses the boot, instead of booting and failing at read time Clause-②: yes (narrowing) @@ -307,7 +307,7 @@ - bind the detail and its master to one datasource (the same `datasource`, mapping rule or package default); - or choose a master that no object-scoped read middleware narrows; - or declare the detail with a sharing model other than `controlled_by_parent`, and grant its access directly. -- 3937697: refactor(objectql)!: the per-table platform-object tenancy ledger is retired, and the tenant-audit mute is decided by the object's schema (ADR-0131 D13) +- 3a440b0: refactor(objectql)!: the per-table platform-object tenancy ledger is retired, and the tenant-audit mute is decided by the object's schema (ADR-0131 D13) Clause-②: no (narrowing) Metadata-protocol: none @@ -328,7 +328,7 @@ - FROM `tenantScopedPlatformObjects()` TO the census's `reach: "in"` rows. - FROM `PlatformObjectTenancy` TO delete it: no classification exists any more. - FROM `PlatformObjectTenancyEntry` TO delete it: no classification exists any more. -- 3937697: fix(objectql): the engine declares the organization wall's exemption to the driver, so an exempt platform admin's predicate write is not told to declare an option it cannot set +- b62f959: fix(objectql): the engine declares the organization wall's exemption to the driver, so an exempt platform admin's predicate write is not told to declare an option it cannot set Clause-②: no Metadata-protocol: none @@ -338,7 +338,7 @@ The engine now fills in `bypassTenantAudit: true` on the driver options when the Layer 0 verdict the security layer recorded for the operation is `none` and the same decision without the exemption would have walled it. It does not fill it in when no verdict was recorded (a by-id write, a system context, no security layer), under the `single` posture, for an insert, for an object outside the tenant machinery, or when the caller supplied its own value. Diagnostics only: the driver's scope was already the recorded verdict's, and the option only silences the warning. -- 3937697: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster +- e5eab06: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster Clause-②: no Metadata-protocol: semantic @@ -351,7 +351,7 @@ - **Explain.** The object-level `rls` layer names each key the policies read: its label and description, the roster object, `valueField`, `userField`, the filter, and the size it resolved to or why it did not, and the permission sets whose holders can write the roster object (whoever can write a roster row can grant the key). A record-grained rule reads `via: 'membership:KEY'`, and its detail names the roster row that links the record to the principal. - **`@objectstack/objectql`: an `extend` contribution cannot declare a membership key.** `SchemaRegistry.registerObject` refuses one that carries `membershipKeys`, with `INVALID_METADATA` (`status: 422`) and the error name `ExtensionMembershipKeysRefusedError`, naming the object and the extending package, beside the `defaultRowScope` refusal. The extension merge never carried the key onto the object, so it registered and then never resolved. The manifest path already refused it at authoring. - **`@objectstack/spec`**: the `membershipKeys` describe and the row-level security docs no longer say the key is not applied, and the liveness row is `live`. -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -366,85 +366,85 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [17f3c65] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [69913f8] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [35d942e] +- Updated dependencies [ce18e73] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/observability/CHANGELOG.md b/packages/observability/CHANGELOG.md index 2866dacab32..a10b4e2dc48 100644 --- a/packages/observability/CHANGELOG.md +++ b/packages/observability/CHANGELOG.md @@ -4,66 +4,66 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 18.0.0 diff --git a/packages/platform-objects/CHANGELOG.md b/packages/platform-objects/CHANGELOG.md index 706b9b159e1..474a77c7804 100644 --- a/packages/platform-objects/CHANGELOG.md +++ b/packages/platform-objects/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(platform-objects): a team record no longer lists Sessions with "Sign out other devices" (#24765) +- a8b44d4: fix(platform-objects): a team record no longer lists Sessions with "Sign out other devices" (#24765) Clause-②: no (narrowing) @@ -17,14 +17,14 @@ - **Unchanged.** The `active_team_id` field, its lookup to `sys_team`, its label and its column: better-auth still writes `activeTeamId` there. A user record's Sessions tab (keyed on `user_id`), where "Sign out other devices" belongs, and the action itself. **What to do.** Nothing. No team-scoped session action existed to lose. -- 3937697: fix(platform-objects): `SETUP_NAV_CONTRIBUTIONS` no longer carries the Setup → Branding entry; `@objectstack/service-settings` contributes it with the `branding` namespace +- 78ab647: fix(platform-objects): `SETUP_NAV_CONTRIBUTIONS` no longer carries the Setup → Branding entry; `@objectstack/service-settings` contributes it with the `branding` namespace Clause-②: no (the entry moves to the package that serves its page: a composition that serves Setup → Branding still lists it, and one that does not no longer lists a page it cannot open) The `nav_settings_branding` entry (Setup → Configuration → Branding) was a static item of `SETUP_NAV_CONTRIBUTIONS`, listed whatever the settings service offered. From this release `@objectstack/service-settings` does not offer the `branding` namespace under the `group` and `isolated` tenancy postures, so a static entry would open a page the server refuses with `404 UNKNOWN_NAMESPACE`. `SettingsServicePlugin` (`@objectstack/service-settings`, same release) now contributes the entry from the same `kernel:ready` step that offers the namespace, and only then. On a single-organization deployment Setup still lists Branding, now at the end of the Configuration group's platform entries. Its translated labels are unchanged and still keyed `apps.setup.navigation.nav_settings_branding`. -- 3937697: fix(platform-objects)!: deleting a business unit that still has child units is refused, instead of silently turning each child into a root of the tenant +- 4b8f597: fix(platform-objects)!: deleting a business unit that still has child units is refused, instead of silently turning each child into a root of the tenant Clause-②: no (narrowing) @@ -36,7 +36,7 @@ - **TO:** the same delete answers `409 DELETE_RESTRICTED`, naming the blocking object (`dependentObject: 'sys_business_unit'`) and the number of child units (`dependentCount`), with the sentence "This Business Unit is still referenced by N Business Unit record(s) through “Parent Business Unit”. Delete or reassign them first." The unit and its children are left exactly as they were. The field's help text now says a unit with child units cannot be deleted until they are re-parented or deleted. - **Unchanged:** a unit with no child units deletes as before. A bulk delete (`deleteMany`, `batch`) that lists the children before their parent (leaf to root) completes, atomic or not. Deleting an organization leaves its units and their tree in place, as before. - **Fix:** before deleting a business unit, re-parent its child units (edit each child's Parent Business Unit) or delete them first. A bulk delete of a whole subtree lists the units leaf to root; listed root first, the root is refused. -- 3937697: fix(platform-objects)!: `sys_oauth_application.type` declares only `web` and `native`, the two application types its writer produces +- ba244f1: fix(platform-objects)!: `sys_oauth_application.type` declares only `web` and `native`, the two application types its writer produces Clause-②: no (narrowing) — the stored column's declared options, which `GET /api/v1/meta/object/sys_oauth_application` serves and the record validator judges a write against, lose `useragentbased` and `public`, which no writer produces. @@ -50,7 +50,7 @@ - **TO:** it declares and serves `web` and `native`. A write that sends any other value, including `useragentbased` and `public`, is refused with `VALIDATION_FAILED` (`400` at an HTTP boundary) and an `invalid_option` finding on `type`. No door sends one: the provider sends only `web`, `native` or no type, and the generic data API answers `405` for every write to this table. - **Unchanged:** the column stays optional and defaults to `web`, and a `null` type is a blank value. No stored row is rewritten. A row holding any type, `user-agent-based` included, still reads and lists through the data API and the provider. It takes every write that leaves `type` out, such as a secret rotation or enabling and disabling the application. The provider's own update path still refuses a row whose type is not `web` or `native`, as it did before. The register-form entry in this release refers to this entry for the stored column's options. - **The fix:** nothing to change for a client the provider registered. A row an earlier provider line stored as `user-agent-based` keeps that value. To edit it through the provider's update path, set `application_type` (`web` or `native`) in the same update. -- 3937697: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants +- 9019af9: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants Clause-②: yes (widening) Metadata-protocol: added @@ -71,7 +71,7 @@ ### Patch Changes -- 3937697: fix(platform-objects): the password an administrator or user types into an action dialog is masked, no longer shown in clear text +- 7035682: fix(platform-objects): the password an administrator or user types into an action dialog is masked, no longer shown in clear text Clause-②: no (an input's presentation: the param still accepts the same string, and no accept set or served shape moves) @@ -82,7 +82,7 @@ - `sys_sso_provider`: `register_sso_provider`'s `clientSecret`. Labels, names, `required` and the posted body are unchanged: the value is still posted as the string typed, and no endpoint changes what it accepts. -- 3937697: fix(platform-objects): Setup no longer offers Ban with Unban, Revoke with Restore, or Unlock on every account, whatever the record's state +- d606fc1: fix(platform-objects): Setup no longer offers Ban with Unban, Revoke with Restore, or Unlock on every account, whatever the record's state Clause-②: no (an action's offering: `visible` is judged in the console, and no server door reads it, so no accept set or served shape moves; if the dev measures a door that does, the dev stops, and the seat re-declares) @@ -95,7 +95,7 @@ The `sys_user` actions keep their platform-admin standing (`current_user.isPlatformAdmin == true`) first. A row that does not carry the field offers neither action of a pair. The console asks for every field an object action's predicate reads, so the default Users list carries `banned` without showing it. Unchanged: labels, texts, targets and params, and what the ban, unban, unlock and key routes accept and answer. Who may restore a key that a forced password reset revoked is still decided by the server. -- 3937697: fix(platform-objects): the OAuth application register form offers only Web and Native, and its Redirect URLs help states the rule for each (#24773) +- 73a2b52: fix(platform-objects): the OAuth application register form offers only Web and Native, and its Redirect URLs help states the rule for each (#24773) Clause-②: no (a form's offering: nothing on the server reads the action's param options, so this change moves no accept set or served shape; the register route's refusal of the other types is its own breaking entry in this release) @@ -106,7 +106,7 @@ - **Unchanged.** A row written under an earlier provider line keeps its stored type, and the `public` column is unchanged; the stored column's options narrow to Web and Native in this release's `sys_oauth_application.type` entry. The zh-CN, ja-JP and es-ES translations carry the new help texts. -- 3937697: fix(plugin-auth)!: `POST /api/v1/auth/sys-oauth-application/register` refuses an application type the OAuth provider does not judge with `400 INVALID_REQUEST`, where it registered it as a `web` client +- 5872450: fix(plugin-auth)!: `POST /api/v1/auth/sys-oauth-application/register` refuses an application type the OAuth provider does not judge with `400 INVALID_REQUEST`, where it registered it as a `web` client Clause-②: no (narrowing) — the register door accepted any `type` value and registered every one other than `web` / `native` as a `web` client with a secret; it now refuses each of those values with 400, so it accepts exactly `web`, `native` and no type. @@ -122,14 +122,14 @@ - **Unchanged:** A request with no `type`, or with `type: null`, registers a `web` client, the provider's default. The other refusals keep their codes (their statuses are this release's refusal-status entry). Clients already registered are not touched. - **`@objectstack/platform-objects`:** only the code comment on the `create_oauth_application` action changes, to state this refusal; it ships in the package's JavaScript. The form offers only Web and Native (this release's register-form entry). - **The fix for an integrator:** send `type: 'web'` for a client whose redirect URIs are https on a host that is not a loopback address, or `type: 'native'` for a client that also redirects to `http://localhost`, `http://127.0.0.1` or `http://[::1]`. Omitting `type` registers `web`. -- 3937697: fix(platform-objects): Rotate Client Secret's result dialog states the immediate cut-off its confirmation states +- 9ea5afe: fix(platform-objects): Rotate Client Secret's result dialog states the immediate cut-off its confirmation states Clause-②: no (text only: no accept set, served shape or behaviour moves) - **Before.** On `sys_oauth_application`, the Rotate Client Secret confirmation said the previous secret "will stop working immediately". The result dialog then told the admin to "update every integration before the previous secret's grace period ends". Only the first is true. - **What rotation does.** `POST /api/v1/auth/oauth2/client/rotate-secret` is better-auth's own route. It overwrites the client's one stored secret, and client authentication checks a presented secret against that value only. No previous secret is kept, so there is no grace period: the old secret is refused from the moment the rotation completes. - **Now.** The result dialog reads "Save the new secret now — it is shown only once. The previous secret has already stopped working: update every integration with the new secret." The zh-CN, ja-JP and es-ES translations of that sentence are updated to match. The confirmation, the dialog's title, acknowledgement and secret field are unchanged. -- 3937697: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) +- 63085c3: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) Clause-②: yes (narrowing) @@ -147,19 +147,19 @@ - **`os migrate organization-ownership` (`@objectstack/cli`).** The inventory row for `sys_notification_subscription` moves FROM fate 3 (`attribution`: organization-less rows went to the Default Organization under `single`) TO fate 4 (`report`: rows listed by id, never attributed, never deleted). The table is exempt from NOT NULL, because no declaration anchors tenancy on its column any more. The row stays, so a database that still holds the table plans instead of being refused as carrying an uninventoried platform table. The plan's `inventoryDigest` changes: a plan file written by an earlier CLI no longer matches, and `--apply --plan-file` refuses it with `plan-digest-mismatch`. Re-run `os migrate organization-ownership --out PLAN`, review it, and apply that. **Existing databases.** The table is left in place untouched: no backfill, no reaper, no migrate command. Schema sync is additive and never drops a table, so a database an earlier release provisioned keeps `sys_notification_subscription` and any rows an administrator wrote, and nothing reads them. Export any row worth keeping. Dropping the table is the operator's call, by hand: `DROP TABLE sys_notification_subscription`. -- 3937697: fix(platform-objects): the Create User result dialog no longer tells an admin who typed the password to copy a temporary one +- 5d2c5a1: fix(platform-objects): the Create User result dialog no longer tells an admin who typed the password to copy a temporary one Clause-②: no (text only: the create-user result dialog's sentence and button; no param, response, status, outcome or export moves) `sys_user.create_user`'s result dialog said "Copy the temporary password now — it is shown only once and never stored." with an "I have saved this password" button, in both outcomes. The endpoint returns `temporaryPassword` only when it generated one, so after a typed password the dialog showed the email alone and asked the admin to save a password it never showed. The dialog now reads "If a temporary password was generated, copy it now — it is shown only once and never stored." with a "Done" button — the same sentence and button as `set_user_password`, true for a typed and for a generated password. The zh-CN, ja-JP and es-ES bundles carry the same change, reusing `set_user_password`'s existing translations. -- 3937697: fix(platform-objects): the user page's Security tab shows only on the viewer's own record +- 066dabc: fix(platform-objects): the user page's Security tab shows only on the viewer's own record Clause-②: no (platform metadata only: the Security tab's self-service sections are shown on the viewer's own record only; no action, param, response, spec key or export moves) The `sys_user` record page's Security tab holds only self-service controls: change password and email, two-factor authentication, email verification and account deletion. Every one of those actions is already gated to the viewer's own record. On another user's record the actions were withheld, but the tab still showed its four "your account" headings and captions with nothing under them, addressed to an administrator about an account that is not theirs. The tab item now carries the own-record gate `has(record.id) && record.id == ctx.user.id` as an item-level `visibleWhen` in the CEL envelope (the same guard the page's unverified-email alert carries). On your own record the tab is unchanged. On anyone else's record the tab header and its panel are both omitted. The actions, their own gates and the other tabs are unchanged. -- 3937697: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value +- 386f60f: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value Clause-②: no (narrowing: a `Field.select` shorthand string the helper used to rewrite silently, e.g. `'no-overlay'` → `nooverlay`, is refused instead) @@ -179,7 +179,7 @@ `@objectstack/metadata-core`: `sys_metadata_audit.lock_state` was the one in-tree column relying on the strip. It declared the options `none`, `nooverlay`, `nodelete` and `full`, while its writer stores the `MetadataLock` spelling (`none`, `no-overlay`, `no-delete`, `full`), so no `no-overlay` or `no-delete` row ever matched a declared option. It is now `Field.text({ maxLength: 255 })`, read-only as before. `GET /api/v1/meta/object/sys_metadata_audit` serves `lock_state` as `type: 'text'` with `maxLength: 255` and no `options`. No stored row is rewritten, the writer and reader are unchanged, and an existing `varchar(255)` column reports no schema drift on postgres, mysql or sqlite. `@objectstack/platform-objects`: the translation bundles drop the four `sys_metadata_audit.lock_state` option labels (`none`, `nooverlay`, `nodelete`, `full`), which the column no longer declares. The field label stays translated. -- 3937697: feat(spec): `ISharingRuleService` declares the optional `declaredRuleNamed` reader that the catalog activation door uses for declared sharing rules +- dfab597: feat(spec): `ISharingRuleService` declares the optional `declaredRuleNamed` reader that the catalog activation door uses for declared sharing rules Clause-②: yes (widening) Metadata-protocol: none @@ -187,7 +187,7 @@ - **The contract member.** `ISharingRuleService` (`@objectstack/spec/contracts`) gains an optional `declaredRuleNamed?(name)` member. It returns `Promise<{ name: string; packageId?: string } | null>`: the rule the application declares under that name, or `null` when nothing servable is declared under it. The answer covers every organization, and it does not depend on whether the activation ledger has the rule switched off. `POST /api/v1/security/_activation/sharing_rule/:name` reads it to confirm the name it is asked to switch. Before this change the door read the method by duck type, and the contract did not mention it. - **Optional, so no implementer breaks.** An implementation that serves no declared rules can leave it out. A caller probes for it and refuses fail-closed when it is absent. The activation door still answers `503 SERVICE_UNAVAILABLE` in that case, so the door's behaviour does not change. `@objectstack/plugin-sharing`'s `SharingRuleService` already implements it with a compatible signature. - **The ledger's field description.** On `sys_metadata_activation`, the `metadata_type` description now lists every type the ledger holds: `flow`, `action`, `position`, `permission`, `sharing_rule` and `webhook`. It used to stop at `flow`, `permission`, …. -- 3937697: fix: the `sys_user` page and list views show no 2FA state on a deployment where two-factor authentication is off +- c109bfc: fix: the `sys_user` page and list views show no 2FA state on a deployment where two-factor authentication is off Clause-②: no Metadata-protocol: none @@ -199,7 +199,7 @@ - **List views:** `all_users` and `me` drop the `two_factor_enabled` column, and the `two_factor` ("2FA Enabled") list view is retired. A list column or view has no feature gate, and adding one would be a new authorable key. The `two_factor_enabled` field itself is unchanged. A deployment with 2FA on that wants the column back can add it to its own list view. -- 3937697: feat(platform-objects): the console hides the six doors that add people while `features.cloudManaged` is on +- f4112a7: feat(platform-objects): the console hides the six doors that add people while `features.cloudManaged` is on Clause-②: no Metadata-protocol: none @@ -211,7 +211,7 @@ - `sys_user.set_user_password`. This one is hidden in the console only: the server keeps answering it for a local (`env_native`) account, so the break-glass admin stays editable. Each action keeps the gate it already had (`organization` or `admin`), and the new gate is added beside it, so nothing changes where the flag is off. -- 3937697: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" +- 830a63a: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" Clause-②: no Metadata-protocol: none @@ -221,7 +221,7 @@ - **`@objectstack/spec`:** `AnalyticsResult.fields[]` and its mirror `AnalyticsResultResponseSchema` gain the optional response member `nullLabel?: string`, the display name of a dimension column's null bucket. It is a response member only; nothing an author writes changes. - **`@objectstack/service-analytics`:** the column-description pass shared by the live query and the draft-data preview sets `fields[].nullLabel` on a dimension column whose dataset dimension declares `nullLabel`, resolved to a string at the request locale by the same resolver as `label`. A dimension without one, and every measure column, carry no `nullLabel` key, so those answers are byte-identical to before. - **`@objectstack/platform-objects`:** the `sys_audit_log_metrics` dataset's `user_id` dimension declares `nullLabel: { en: 'System', 'zh-CN': '系统', 'ja-JP': 'システム', 'es-ES': 'Sistema' }`. The rows the platform writes itself carry no user, and System Overview's "Events by User" drew them, its largest bar, under the renderer's default "(None)". Once the console reads `fields[].nullLabel`, that bar reads "System". -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -236,7 +236,7 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- 3937697: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources +- bdf762c: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources Clause-②: no Metadata-protocol: none @@ -246,7 +246,7 @@ - **`@objectstack/spec`:** the `autoMigrate` key of the SQLite, PostgreSQL and MySQL driver configs had no JSON-Schema `title`, so the New datasource form labelled the field with the raw key `autoMigrate`. It is now titled "Auto-migrate schema". The English labels flow into the generated translation bundles; the existing zh-CN, ja-JP and es-ES option translations are kept. -- 3937697: feat: Create User can grant a permission set in the same step, judged by the same delegated-administration gate as Setup's grant form +- 3306cad: feat: Create User can grant a permission set in the same step, judged by the same delegated-administration gate as Setup's grant form Clause-②: yes (widening: `POST /api/v1/auth/admin/create-user` and the `sys_user` `create_user` action accept an optional `permissionSet`; a request without it is answered exactly as before) Metadata-protocol: none @@ -258,7 +258,7 @@ - **Refused before anything is written:** a `permissionSet` that is not a string (400), a caller whose own context does not resolve (403), and a host that wires no grant seam (501). - **Response.** The success body carries `permissionSet` beside the user, and the result dialog shows it. - **Cloud-managed environments are unchanged.** `create_user` stays hidden while `features.cloudManaged` is on. -- 3937697: feat: Setup → API Keys → Create Key offers the key's expiry, and a date past the policy's maximum is refused with the policy named +- c898bd8: feat: Setup → API Keys → Create Key offers the key's expiry, and a date past the policy's maximum is refused with the policy named Clause-②: yes Metadata-protocol: none @@ -266,7 +266,7 @@ Create Key asked only for a name, so every key silently got the default life the Authentication API key policy sets, and the list then showed an expiry the admin never chose. The `sys_api_key` action `create_api_key` now declares an optional `expires_at` param, the second body key `POST /api/v1/keys` already reads. Its help text says what an empty field means (the policy's Default key lifetime, 90 days unless changed) and that a date later than the policy's Maximum key lifetime is refused. The param has no literal default on purpose: an action param default is submitted verbatim, so a fixed date there would override the deployment's policy instead of following it. The reveal dialog now shows the expiry the key actually got, beside the key. The route behaviour is unchanged: an empty field gets the policy's default life, and a date past the maximum is refused `400 API_KEY_EXPIRY_TOO_LONG`, never clamped. That refusal's message now names the setting that decided it ("the Authentication API key policy's Maximum key lifetime is N days") next to the latest date allowed. -- 3937697: fix: Setup → Sessions shows each session's user agent and last activity, so two sessions of one user can be told apart +- 97aa34e: fix: Setup → Sessions shows each session's user agent and last activity, so two sessions of one user can be told apart Clause-②: no Metadata-protocol: none @@ -276,7 +276,7 @@ The two views that list live sessions, `all_sessions` (Setup's Sessions page) and `mine` (the Account app), now show `user_agent` and `last_activity_at` next to the IP address. Both fields already existed on `sys_session`. The `revoked` audit view is unchanged. `user_agent` is the raw string better-auth records. `last_activity_at` is written only while an idle timeout is configured (`session_idle_timeout_minutes` above 0). With the default of 0 the column is empty. -- 3937697: fix(platform-objects): the organization record says its name is not the product name, and that Localization's timezone is the one in effect +- 832a84e: fix(platform-objects): the organization record says its name is not the product name, and that Localization's timezone is the one in effect Clause-②: no Metadata-protocol: none @@ -285,74 +285,74 @@ - **`sys_organization.timezone`'s help** no longer says date boundaries are computed in it: nothing on the platform reads the column. It now says the value is kept as the root default for business units, changes no date calculation today, and that formulas, reports and displayed dates use Settings → Localization → Default timezone. Both in all four bundles. Nothing stored or served changes meaning. -- 3937697: fix(platform-objects): Setup → People & Organization no longer shows two identical "组织" / "組織" entries +- f7d7403: fix(platform-objects): Setup → People & Organization no longer shows two identical "组织" / "組織" entries Clause-②: no Metadata-protocol: none `nav_organization` (the active organization's record page) and `nav_organizations` (the organization list, shown where `org-scoping` is mounted) both translated to "组织" in zh-CN and "組織" in ja-JP, so a multi-organization deployment showed two identical menu entries that open different pages. They now read "当前组织" / "所有组织" (zh-CN) and "現在の組織" / "すべての組織" (ja-JP). A new test fails when any two entries in one Setup nav group read the same in any shipped locale. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/metadata-core@18.1.0 diff --git a/packages/plugins/embedder-openai/CHANGELOG.md b/packages/plugins/embedder-openai/CHANGELOG.md index 6752321ab7d..bb6349af233 100644 --- a/packages/plugins/embedder-openai/CHANGELOG.md +++ b/packages/plugins/embedder-openai/CHANGELOG.md @@ -4,66 +4,66 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 18.0.0 diff --git a/packages/plugins/knowledge-memory/CHANGELOG.md b/packages/plugins/knowledge-memory/CHANGELOG.md index 7aa5697980b..3b3ed753da4 100644 --- a/packages/plugins/knowledge-memory/CHANGELOG.md +++ b/packages/plugins/knowledge-memory/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/plugins/knowledge-ragflow/CHANGELOG.md b/packages/plugins/knowledge-ragflow/CHANGELOG.md index d62200f34be..9ea12e25885 100644 --- a/packages/plugins/knowledge-ragflow/CHANGELOG.md +++ b/packages/plugins/knowledge-ragflow/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/plugins/organizations/CHANGELOG.md b/packages/plugins/organizations/CHANGELOG.md index c9c02e5fe8b..3a3029bdd5f 100644 --- a/packages/plugins/organizations/CHANGELOG.md +++ b/packages/plugins/organizations/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix(organizations)!: the first organization no longer adopts organization-less rows — `claimOrphanOrgRows` is retired +- e3190b9: fix(organizations)!: the first organization no longer adopts organization-less rows — `claimOrphanOrgRows` is retired Clause-②: no (narrowing) Metadata-protocol: none @@ -22,102 +22,102 @@ The retired export: - FROM `claimOrphanOrgRows` TO no replacement; run `os migrate organization-ownership` for organization-less rows. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [c2d4072] +- Updated dependencies [78ab647] +- Updated dependencies [fbb42d9] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [55d7aab] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [abc25a3] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [688052e] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [c6bdcac] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [829cb77] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [431327b] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/plugin-auth@18.1.0 diff --git a/packages/plugins/plugin-approvals/CHANGELOG.md b/packages/plugins/plugin-approvals/CHANGELOG.md index b2f0201a574..8cd75bd18eb 100644 --- a/packages/plugins/plugin-approvals/CHANGELOG.md +++ b/packages/plugins/plugin-approvals/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 7cacad5: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat(plugin-sharing,plugin-approvals,metadata-protocol)!: the organization-less readers of sharing rules, approval units and the seed loader retire (ADR-0131 D2/D8, 18.x step 7) @@ -25,7 +25,7 @@ ### Patch Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 9a06f0b: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-approvals): a reminder's `notified` counts each approver address once, not once per slate slot @@ -34,7 +34,7 @@ `POST /api/v1/approvals/requests/:id/remind` (`ApprovalService.remind()`) answers `notified` as the number of reminders it handed to messaging: one per distinct approver address on the pending slate. A `per_group` slate lists a person once per group they resolved into, and `pending_approvers` keeps every one of those slots until the first vote, so a person placed in two groups was counted twice while messaging delivered them one reminder. They are now reminded once and counted once, the rule the opening `approval.requested` notice already applies. A user id and the same account's email are still two addresses: the person holds two slots and receives two reminders, exactly as at the opening. Unchanged: who is reminded, each reminder's topic, payload, deep link and dedup key, the throttle, the submitter check, the `remind` audit row, and `position:*`-style literals, which still notify no one and add nothing to the count. -- 3937697: fix(plugin-approvals): every step of a multi-step approval names the person who submitted the run, not the previous step's approver +- 28ff8a9: fix(plugin-approvals): every step of a multi-step approval names the person who submitted the run, not the previous step's approver Clause-②: no @@ -42,7 +42,7 @@ - **Now.** Every step of a run records the user who triggered the run as its `submitter_id`, and as the actor of the step's `submit` timeline entry, whoever decided the steps before it. That holds on both `runAs` postures, after any number of decisions by different people, and on a step that a decision node reaches by routing around another. A run whose trigger resolved no user (a schedule, a write that carried no user) opens its later steps with no submitter, as it opens its first one. - **Unchanged.** The decider still runs the nodes after their decision: their identity, permissions and attribution, as the resume-as-decider change ships them. The first step of every run, and every single-step approval, are unchanged. Compared with the last release nothing moves: later steps named the run's submitter there too, so recall and resubmit on a later step go back to the person they reached before. - **`ApprovalService.openNodeRequest`.** A caller that passes `submitterId: null` now opens the request with no submitter. Before, `null` fell back to the calling context's user, the same as leaving `submitterId` out, which still falls back. -- 3937697: fix(plugin-approvals): the approvals inbox, the record's approval panel and the request page name the flow, the step and the record's object in the reader's language +- ba69b16: fix(plugin-approvals): the approvals inbox, the record's approval panel and the request page name the flow, the step and the record's object in the reader's language Clause-②: no @@ -51,7 +51,7 @@ - **Fallback.** A label the pack does not carry, a locale no pack holds, a read without a locale and a stack without an `i18n` service all get the label the request stored, exactly as before. An `en` reader of an app authored in English sees no change. - **Unchanged.** The stored `process_label` and `current_step_label` columns keep the authored text they were written with: nothing is migrated or rewritten, and the generic data door, the list views and the one-tap action page still show the stored text. Who may read a request is unchanged. The `approval.requested` notification body is still English. - **`ApprovalServiceOptions.i18nServiceSource`.** A new optional option: a lazy reader of the `i18n` service. `ApprovalsServicePlugin` wires it from the kernel's `i18n` service. A host that constructs `ApprovalService` by hand and leaves it out keeps the stored labels. -- 3937697: fix(plugin-approvals): approval notifications reach each recipient in their own language +- 58cd58f: fix(plugin-approvals): approval notifications reach each recipient in their own language Every approval notification now hands the messaging service its sentence as catalog keys beside the English literal (`EmitInput.keyedText`). The messaging service renders it at delivery in each recipient's `sys_user.locale`, else the deployment default. This plugin's translation bundle gains the sentences in en, zh-CN, ja-JP and es-ES, in its `messages` face (`messages.approvalRequestedTitle` and the rest). @@ -59,7 +59,7 @@ - **The record is named as before:** the object's label and the record id (`Deal D_123`), never a title. The label is rendered from the app's `objects.<object>.label` when its language pack holds one, else the schema label. - **The English is unchanged.** The payload's `title` and `body` are the `en` catalog entries, byte for byte the sentences each notification carried before. A messaging service that does not render keyed text delivers them as it always did. - **Unchanged.** Who is notified, each notification's topic, payload fields, deep link, dedup key and organization, and every channel's delivery behaviour apart from the text. -- 3937697: fix(plugin-approvals): an out-of-office delegation applies only in its own organization, and an organization-less delegation reroutes no approval +- b3fddd1: fix(plugin-approvals): an out-of-office delegation applies only in its own organization, and an organization-less delegation reroutes no approval Clause-②: no (narrowing) Metadata-protocol: none @@ -76,7 +76,7 @@ - **Setup.** The delegation form's Organization help says what the code does, in every shipped locale. **What an operator does.** On a `single` deployment, run `os migrate organization-ownership --apply` if it has not run yet; it attributes these rows to the Default Organization. On a walled deployment, ask the delegator to create the delegation again while signed in to the organization whose approvals it should cover, then delete the organization-less row the warning names. -- 3937697: feat: `ExecutionStatus` gains `missed`, the run status for a scheduled flow's due time that passed while no kernel was ticking +- d12e650: feat: `ExecutionStatus` gains `missed`, the run status for a scheduled flow's due time that passed while no kernel was ticking Clause-②: yes (widening) Metadata-protocol: none @@ -90,7 +90,7 @@ `@objectstack/plugin-approvals`: `RUN_STATUS_LIVENESS` maps `missed` to `terminal`, so an approval pending on a missed run is swept like one pending on any other finished run. This release only declares the value. The engine writes `missed` rows in a later release. -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -105,7 +105,7 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- 3937697: fix: a new out-of-office delegation opens with the Delegator already set to the signed-in user, and the field's help says why no one else can be chosen +- d0a1361: fix: a new out-of-office delegation opens with the Delegator already set to the signed-in user, and the field's help says why no one else can be chosen Clause-②: no Metadata-protocol: none @@ -131,103 +131,103 @@ - **Unchanged.** A caller who may not move the slot is still refused `403 FORBIDDEN` first, before any directory read. An empty `to`, and a `to` that is already pending, are refused as before. The SLA escalation `reassign` action is not this door and is unchanged. **What a caller does.** Reassign to the user id or email of a person in the request's organization, or to `position:<name>` for a position someone in it holds. -- 3937697: fix: the approval request page's Timeline shows each action's step by its label, not the node's machine id +- b8c9590: fix: the approval request page's Timeline shows each action's step by its label, not the node's machine id Clause-②: no Metadata-protocol: none The Timeline tab of the `sys_approval_request` record page lists the request's `sys_approval_action` rows. Its step column asked for `step_name`, which holds the Approval node's id (for example `dual_signoff`), so every row showed that id. The column is now `step_label`, the step's label that the service writes on every row and the boot backfill fills on older rows. The strip's step chip (`current_step_label`) and the object's own lists already show this label. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/metadata-core@18.1.0 diff --git a/packages/plugins/plugin-audit/CHANGELOG.md b/packages/plugins/plugin-audit/CHANGELOG.md index 1062aee2049..65c8d1ae297 100644 --- a/packages/plugins/plugin-audit/CHANGELOG.md +++ b/packages/plugins/plugin-audit/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(cli,plugin-audit): `os migrate audit-mail-bodies` also masks the mail bodies in the audit copies already moved to the `archive` datasource +- 3d8960c: feat(cli,plugin-audit): `os migrate audit-mail-bodies` also masks the mail bodies in the audit copies already moved to the `archive` datasource Clause-②: yes (widening) @@ -21,7 +21,7 @@ ### Patch Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- e5b3de0: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-audit): an @mention notification reaches only mentioned users who can read the comment's record @@ -30,7 +30,7 @@ - **Recipients are judged by read access to the record.** The `sys_comment` mention writer now resolves each `mentions` entry to a user and asks, in that user's own envelope, whether they can read the record named by the comment's `thread_id`. The envelope comes from the resolver every request uses (`resolveUserAuthzGrants`). The user's organization claim is vetted under the tenancy posture in force (`vetOrganizationClaim`). The read goes through the evaluator every parent-derived read gate uses (`resolveReadableParentIds`). So the tenant wall, sharing, RLS and object permissions decide, as they do when that user opens the deep link. A user who cannot read the record gets no notification, and a `warn` line records their id and the reason (never the comment text). - **Email entries resolve to a user first.** An email-shaped mention is looked up to its user and then checked like an id. An email that matches no user notifies nobody. Entries that expand an audience (`role:`, `team:`, `owner_of:`) name no single person and are no longer mentions. - **Fail closed.** A comment whose thread names no record, a record that cannot be found, and a grant resolution that fails all withhold the notification. `installAuditWriters` takes the gate as `admitMentionRecipients`, and `AuditPlugin` wires it. A host that calls `installAuditWriters` without one emits no mention notifications and is told so once at `warn`. -- 3937697: fix(plugin-audit,service-storage): a delegated (on-behalf-of) caller reads the parent-record gates through the ReadableIds leaf, no longer through the bounded 2000-row probe (ADR-0139 D5.1, as amended) +- 0f1eeee: fix(plugin-audit,service-storage): a delegated (on-behalf-of) caller reads the parent-record gates through the ReadableIds leaf, no longer through the bounded 2000-row probe (ADR-0139 D5.1, as amended) Clause-②: no Metadata-protocol: none @@ -38,110 +38,110 @@ The activity, ledger and comment-thread read gates (`@objectstack/plugin-audit`) and the attachment read gate (`@objectstack/service-storage`) routed every read by a delegated caller to the whole-read probe: a SYSTEM pre-scan of at most 2000 rows, then one caller-scoped read per parent object. Past 2000 candidate rows, a delegated caller was served a truncated list (fail-closed, never a leak) with a matching `total`. Since the engine composes a `ReadableIds` leaf for a delegated caller from the delegator intersection (ADR-0090 D10, #25009), the gates now write such a caller the same leaves as any caller. It is served every row its delegator intersection admits, with a true `total`. This is the same set the probe's own readability answer admits, without the window. ADR-0139 D5's two remaining classes are unchanged: a parent narrowed by an object-scoped read middleware, and a parent bound to another datasource. Both still take the bounded probe, read with the caller's delegated context. The gates no longer read the delegation link themselves, and the `delegated-caller` value is gone from the gates' internal whole-read probe reasons. Neither is exported. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [9340181] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/objectql@18.1.0 diff --git a/packages/plugins/plugin-auth/CHANGELOG.md b/packages/plugins/plugin-auth/CHANGELOG.md index 08ce1c72099..cbe27dde380 100644 --- a/packages/plugins/plugin-auth/CHANGELOG.md +++ b/packages/plugins/plugin-auth/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- de9cd1f: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-auth): `POST /api/v1/auth/organization/invite-member` refuses a role outside the membership vocabulary with `code: 'ROLE_NOT_FOUND'` @@ -14,7 +14,7 @@ - **Now.** invite-member answers `400` with `code: 'ROLE_NOT_FOUND'` and the same message, naming the role, the body `update-member-role` gives for the same condition. The refusal still happens before any invitation row is written. This is the answer the invitation schema's `role` docstring and the authentication docs already promise. - **The ledger.** `ROLE_NOT_FOUND` is registered under `@objectstack/plugin-auth` in the error-code ledger, so `ErrorCode` (and `ApiErrorSchema.code`) admits it. - **Unchanged.** A valid role invites as before, and every other refusal on invite-member keeps its answer. -- 3937697: fix(plugin-auth): the auth product name binds to `branding.workspace_name` only where the settings service offers the `branding` namespace, so a walled boot no longer warns about it +- 78ab647: fix(plugin-auth): the auth product name binds to `branding.workspace_name` only where the settings service offers the `branding` namespace, so a walled boot no longer warns about it Clause-②: no (this package stops reading a namespace `@objectstack/service-settings` no longer offers under a wall; that withholding, declared BREAKING in its changeset, is what narrows the walled deployment, and nothing here widens) @@ -28,7 +28,7 @@ - A `branding.workspace_name` row stored with no organization, for example one saved before the wall stood. Migration, FROM → TO: `OS_BRANDING_WORKSPACE_NAME=Acme` → `OS_APP_NAME=Acme`. Set `OS_APP_NAME` to the name the deployment's sign-in emails and authenticator entries should carry. A deployment that set neither source sees no change. -- 3937697: fix(plugin-auth)!: `POST /api/v1/auth/sys-oauth-application/register` refuses an application type the OAuth provider does not judge with `400 INVALID_REQUEST`, where it registered it as a `web` client +- 5872450: fix(plugin-auth)!: `POST /api/v1/auth/sys-oauth-application/register` refuses an application type the OAuth provider does not judge with `400 INVALID_REQUEST`, where it registered it as a `web` client Clause-②: no (narrowing) — the register door accepted any `type` value and registered every one other than `web` / `native` as a `web` client with a secret; it now refuses each of those values with 400, so it accepts exactly `web`, `native` and no type. @@ -44,7 +44,7 @@ - **Unchanged:** A request with no `type`, or with `type: null`, registers a `web` client, the provider's default. The other refusals keep their codes (their statuses are this release's refusal-status entry). Clients already registered are not touched. - **`@objectstack/platform-objects`:** only the code comment on the `create_oauth_application` action changes, to state this refusal; it ships in the package's JavaScript. The form offers only Web and Native (this release's register-form entry). - **The fix for an integrator:** send `type: 'web'` for a client whose redirect URIs are https on a host that is not a loopback address, or `type: 'native'` for a client that also redirects to `http://localhost`, `http://127.0.0.1` or `http://[::1]`. Omitting `type` registers `web`. -- 3937697: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is +- 02e6d73: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is Clause-②: yes (narrowing) @@ -61,7 +61,7 @@ - **Unchanged.** Same-origin requests need no CORS answer. An exact origin or a pattern that names part of the host (`https://*.example.com`) is admitted as before, credentials included; the one exception is the comma-separated `cors.origin` string above, which now admits what it lists. `'*'` with credentials off is still served. `cors: false` and `OS_CORS_ENABLED=false` still disable the middleware. Headers, methods and max-age are unchanged. `OS_TRUSTED_ORIGINS` still admits nothing to CORS. **What an operator does.** A host composing `createHonoApp` for a cross-origin front-end names its origins, in `OS_CORS_ORIGIN` or the `cors.origin` option. A deployment that reached the server from a loopback origin outside development names that origin in its list. A list holding `'*'` or an all-host pattern while credentials are on either names its origins or sets `OS_CORS_CREDENTIALS=false`. -- 3937697: fix(objectql, plugin-auth)!: deleting an organization that still owns records is refused with 409 and a per-table count, before anything is deleted; an empty one is deleted whole, its teams and organization-admin grants with it; the engine never clears a tenant column +- 688052e: fix(objectql, plugin-auth)!: deleting an organization that still owns records is refused with 409 and a per-table count, before anything is deleted; an empty one is deleted whole, its teams and organization-admin grants with it; the engine never clears a tenant column **The 18.0.0 defect this fixes.** `POST /api/v1/auth/organization/delete` ran better-auth's delete, which removes the organization's members, then its invitations, then the organization row, as three separate writes. The engine's delete cascade then applied the tenant column's `set_null` default to every row the organization still owned. On a database whose tenant column is NOT NULL (one that took the v18 organization-ownership ceremony), the delete answered 500 on `sys_team.organization_id` after the members and invitations were already gone, so the organization survived with no owner and nobody could delete it. On a database 18.0.0 created, where the column is still nullable, the delete answered 200 and left the organization's teams and records with `organization_id = NULL`, owned by nobody and visible to nobody. Every organization created through the door owns a default team, so on a NOT NULL database not even an empty organization could be deleted. Deployments that run `single` are not reached the same way: their one organization is the Default Organization, which the last-administrator guard answers first, and they cannot create another. @@ -89,7 +89,7 @@ - **Fix:** delete the organization's records, or move them to another organization, then delete the organization. The refusal names the tables to look at. Business units, positions and sharing rules count as records. Activity, audit and mail-log rows do not, nor do engine-owned rows (approval state, runs, deliveries, shares, settings values). - **Seed datasets:** on a composition with the organizations runtime (`@objectstack/organizations`) and an app that ships seed datasets, a new organization receives that seed replay at creation, so it owns records from its first moment and its delete is refused until they are removed. The refusal lists them. Delete them (or move them) like any other records, then delete the organization. Measured on the showcase: a fresh organization owns 132 seeded rows in 19 tables. - **Already orphaned on 18.0.0?** Rows an earlier organization delete set to `organization_id = NULL` are not touched by this release. Organization-less rows are what the v18 organization-ownership ceremony (`os migrate organization-ownership`) attributes or reports. -- 3937697: fix(plugin-auth): `os migrate apply`'s `sys_account.issuer` pre-flight report names each colliding row's stored issuer instead of `(none)` +- 4bf079c: fix(plugin-auth): `os migrate apply`'s `sys_account.issuer` pre-flight report names each colliding row's stored issuer instead of `(none)` Clause-②: yes (widening) @@ -100,7 +100,7 @@ - **`@objectstack/cli`.** `os migrate account-issuer` reads through the probe's reader instead of its own, so it and `os migrate apply` read one table one way. Its output is unchanged. **Unchanged.** The collision verdict (`ok`, the colliding keys, row ids, users, counts), the `apply` refusal and its exit code. A database whose `sys_account` has no `issuer` column reports each row as `(none)`, as before. -- 3937697: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants +- 9019af9: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants Clause-②: yes (widening) Metadata-protocol: added @@ -118,7 +118,7 @@ - **`@objectstack/platform-objects`:** the `External` option label on the membership role pickers, translated. `org_external` is a reserved name from this release on, so a position can no longer be named `org_external`. -- 3937697: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS +- 45f9962: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS Clause-②: yes (widening: `@objectstack/core` gains `owdForAudience`, `isExternalAudienceContext`, `externalGrantSpeaks` and the two grant-stamp keys; every narrowing below applies only to the `external` role, which no release has shipped yet) Metadata-protocol: semantic @@ -136,7 +136,7 @@ ### Patch Changes -- 3937697: fix(plugin-auth): an administrator's impersonation session is not held by the target's forced password reset or password expiry (#24762) +- c2d4072: fix(plugin-auth): an administrator's impersonation session is not held by the target's forced password reset or password expiry (#24762) Clause-②: no @@ -144,7 +144,7 @@ - **What moves.** On a session that carries `impersonatedBy`, the session gate (`user.authGate`, stamped in `customSession`) now shows only the first `account`-scope posture the user holds. `PASSWORD_RESET_REQUIRED` and `PASSWORD_EXPIRED` no longer hold it. `MFA_REQUIRED` still does, so an impersonation session of a user who owes MFA enrolment is still refused `403 MFA_REQUIRED`, including when the user also owes a password change. - **Unchanged.** The user's own sign-in stays held until they change the password. The forced reset's revocation (`revokeSessionsAndKeys`, on by default) still ends every session of the user, impersonation sessions included. API keys, the print door's refusal of an impersonation session, and the impersonation door's own check of the administrator's posture are unchanged. -- 3937697: fix(plugin-auth): the Console's OAuth Application Type reaches the provider as `application_type`, so a Native client can register a loopback redirect URI (#24773) +- fbb42d9: fix(plugin-auth): the Console's OAuth Application Type reaches the provider as `application_type`, so a Native client can register a loopback redirect URI (#24773) Clause-②: no — the declared type now takes effect under the OAuth provider's own redirect-URI rule, an authentication behaviour the maintainer ruled on; nothing published widens. @@ -153,7 +153,7 @@ - **Now.** `web` and `native` are forwarded as `application_type`, and the provider's own rule decides. A `native` client may use http only on exactly `localhost`, `127.0.0.1` or `[::1]` (any port), and is stored as `native`. A `web` client still needs an https URI on a non-loopback host. - **Refused.** Any other type, including the form's `user-agent-based` and `public`, has no `application_type` in the provider. The register route refuses it with `400 INVALID_REQUEST` and registers nothing (this release's breaking entry for the route). To use a loopback redirect URI, register the client as `native`. - **Unchanged.** No type at all is `web`. Refusals keep the codes and statuses they had: `400 OAUTH_REGISTER_FAILED`, with `error.details.upstreamError` `invalid_redirect_uri` when the redirect-URI rule refuses. -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 950f949: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-auth): a refused OAuth application registration answers the status the refusal declared, not 500 (#24773) @@ -163,7 +163,7 @@ - **Now.** The route answers the refusal's own status: `400` for the redirect-URI refusal and `401` for the missing session. The code stays `OAUTH_REGISTER_FAILED`, and `error.details.upstreamError` still carries the provider's discriminator (`invalid_redirect_uri`). - **Unchanged.** A throw that declares no status, such as a storage fault while the client is persisted, still answers `500`. The body-schema refusal keeps answering `400`. Which redirect URIs a client may register is unchanged: a `web` client still needs an `https` URI on a non-loopback host. -- 3937697: fix(plugin-auth): the vendored auth library records and keys on the client address the server established (#24799) +- ad8cf92: fix(plugin-auth): the vendored auth library records and keys on the client address the server established (#24799) Clause-②: no @@ -176,7 +176,7 @@ - A request whose client address cannot be established records no address, and better-auth's rate limiter counts it in one shared bucket. **For hosts:** `AuthManager.handleRequest` now drops any `x-objectstack-client-address` request header a caller sends. The platform writes that header itself, from the address it established, and better-auth reads no other header for the client address. A programmatic `auth.api.*` call is handed whatever headers its caller passes. Route a client's request through `handleRequest` instead. -- 3937697: fix(plugin-auth): the phone OTP and invitation SMS read their template row in the organization the send resolves to +- 865d2c8: fix(plugin-auth): the phone OTP and invitation SMS read their template row in the organization the send resolves to Clause-②: no @@ -186,7 +186,7 @@ - **`isolated` and `group`:** no organization is resolved, so no template row is read and the built-in text is sent. No organization's row decides the text a user receives. - **No tenancy service, or a failed resolution:** the built-in text. A template outage still never blocks a send. - **Unchanged:** the locale ladder (the recipient's stored locale, then the deployment default, then `en`), how a deactivated or blank row passes its rung on, the built-in texts themselves, and the rendered holes. -- 3937697: fix(plugin-auth): every in-process auth bridge judges the request it re-dispatches on the same client-address facts as the request it serves (#24877) +- 2941a19: fix(plugin-auth): every in-process auth bridge judges the request it re-dispatches on the same client-address facts as the request it serves (#24877) Clause-②: no @@ -194,7 +194,7 @@ - **Now.** Each route hands `handleRequest` the connection it was called on, as the main auth mount does. Each rebuilt request carries the incoming request's `X-Forwarded-For` and `X-Real-IP`. Without a declared trusted proxy, the re-dispatched request is judged on the connection's peer address, whatever those headers say. With `server.trustProxy` declared, it is judged on the forwarded client address, the same address as the request the route serves. - **Unchanged.** What each route accepts or refuses, and every answer it gives. `resolveClientAddress` decides exactly as before. The main auth mount, and the `allowed_ip_ranges` allow-list in front of every auth route, already judged on the connection. -- 3937697: fix(plugin-auth)!: the last-admin guard and the default-organization bootstrap count only the Default Organization's `admin_full_access` grant — an organization-less grant is no administrator +- abc25a3: fix(plugin-auth)!: the last-admin guard and the default-organization bootstrap count only the Default Organization's `admin_full_access` grant — an organization-less grant is no administrator Clause-②: yes (narrowing) Metadata-protocol: none @@ -212,7 +212,7 @@ **Who sees it.** No served composition: a fresh install, a certified 18.0.0 database and a ceremonied database hold no organization-less grant, and the engine derives or refuses one wherever the organization object is registered. What changes is a host that embeds the guard on an engine with no organization object (for example on driver-memory), or runs plugin-auth outside `os serve` on a database the ceremony has not certified. **What an embedder does.** Anchor your administrators the way ADR-0131 D5 names: declare them in `OS_PLATFORM_OWNER_EMAIL` (their accounts verified), or give them an owner or admin `sys_member` row. Or register the organization object (`sys_organization`, which plugin-auth ships) and own the grant by the Default Organization. On a database 17.x or an 18.0 pre-release created, run `os migrate organization-ownership`, which attributes every organization-less grant to an organization. -- 3937697: fix(plugin-auth): an organization delete whose admission cannot read what it decides on is refused with 503 `SERVICE_UNAVAILABLE`, before better-auth's first write +- e5f194b: fix(plugin-auth): an organization delete whose admission cannot read what it decides on is refused with 503 `SERVICE_UNAVAILABLE`, before better-auth's first write Clause-②: no Metadata-protocol: none @@ -226,7 +226,7 @@ - **Unchanged.** What better-auth answers itself still goes to it: no session, no membership, no permission, no organization row, and a member row whose role the vendor's own permission check cannot evaluate (its identical check runs before its first write). The `409 DELETE_RESTRICTED` refusal and the Default Organization's `403` are unchanged. **What a client does.** Treat `503 SERVICE_UNAVAILABLE` from an organization delete as "retry later": nothing was deleted. -- 3937697: feat(plugin-auth, plugin-email): under the `open` and `email_domain` postures, a sign-up for an address that already has an account answers like a new sign-up and mails that address, while mail is really delivered +- 2aaee3b: feat(plugin-auth, plugin-email): under the `open` and `email_domain` postures, a sign-up for an address that already has an account answers like a new sign-up and mails that address, while mail is really delivered Clause-②: yes Metadata-protocol: none @@ -243,7 +243,7 @@ - **For a client of the sign-up door.** In the configurations above, a screen that showed an "already registered" message on the refusal now receives the success answer instead, and should show its usual "check your email" step. - **A send that fails after the answer.** The answer is still the success, and the server logs one error-level line saying the mail was not sent. A verification mail that fails for a new address leaves the same gap. - **Unchanged.** A sign-up for a new address, every refusal the audience posture raises, and every other auth mail. -- 3937697: fix(plugin-auth)!: a cloud-managed environment (`OS_CLOUD_MANAGED=1`) refuses local self-registration, invitations, user creation and import, and sets passwords only on local accounts — self-hosted deployments are unchanged +- c6bdcac: fix(plugin-auth)!: a cloud-managed environment (`OS_CLOUD_MANAGED=1`) refuses local self-registration, invitations, user creation and import, and sets passwords only on local accounts — self-hosted deployments are unchanged Clause-②: yes (narrowing) — one widening and one narrowing. The widening: the package entry now exports `cloudManagedRefusal`, `CLOUD_MANAGED_REFUSAL_CODE`, `CLOUD_MANAGED_REFUSAL_STATUS`, `CLOUD_MANAGED_REFUSAL_MESSAGES` and `CloudManagedDoor`, so a host that mounts its own twin of one of these doors (the cloud's per-environment `set-initial-password`, objectstack-ai/cloud#3169) refuses with the same status, code and message. The narrowing: under the managed mode only, doors that admitted a request now refuse it: every audience posture but `invite_only`, email sign-up, member invitations, admin create-user and import-users, an admin password set on an identity-provider account, and a first password for a caller without platform-admin standing. A process that does not set `OS_CLOUD_MANAGED=1` answers every one of these doors exactly as before. Metadata-protocol: none @@ -261,7 +261,7 @@ - **New exports.** `cloudManagedRefusal(door)` and the constants behind it, for a host twin of one of these doors. - **Unchanged:** every door on a process without `OS_CLOUD_MANAGED=1`, including one running SSO-only; existing users, invitations and credentials. - **The fix for an operator:** nothing on a self-hosted deployment. On a hosted environment, invite people from the organisation in the cloud console; their account arrives on their first sign-in. Keep a local password only for the break-glass administrator. -- 3937697: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since +- 03966ce: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since `@objectstack/plugin-auth` declares the better-auth family exactly, so a fresh install resolves what this package tested. All five declared ranges (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim`, `@better-auth/sso`) move from `1.7.3` to `1.7.12`, still exact. The lift takes the fixes published in 1.7.4 to 1.7.12 for packages this plugin mounts: GHSA-965c-763c-88jm and GHSA-r4xp-prcw-77qf (1.7.7), and the oauth-provider, SSO, SCIM, JWT and password-reset fixes up to 1.7.12. Every symbol this package imports from the family is still exported. It also pulls in `better-call` 1.4.4, `@better-auth/utils` 0.5.0 and `@better-fetch/fetch` 1.3.2, the versions 1.7.12 declares. @@ -291,7 +291,7 @@ - **`@objectstack/spec` and `@objectstack/cli` (patch, text only, not breaking):** the TSDoc on the organization schema's optional `updatedAt` now records that its better-auth measurement still holds on 1.7.12, and the `os migrate account-issuer` description no longer names a better-auth version. No schema, type, flag or behaviour changes in either package. - **`@objectstack/service-datasource` (patch, text only, not breaking):** the `resolveSqliteDriver` docs now describe the error better-sqlite3 13 actually throws for an addon that was never built: its loader's `require()` of the absent `build/Release/better_sqlite3.node`, which Node answers with `MODULE_NOT_FOUND`. The docs used to name a helper package's message that 13.x no longer produces. Development still steps down to wasm SQLite on that error, as before. No code changes. - **What to do as an operator:** tell users that a Magic Link, social, SSO or account-linking sign-in begun before the upgrade must be started again after it. Check each OIDC SSO provider's configured issuer against its discovery document and set it to the exact `issuer` string the document publishes. An OAuth client that branched on `401` for a PKCE failure should branch on `400 invalid_grant`. A browser client that read every non-`200` `/get-session` answer as "signed out" should treat a `500` as "try again". -- 3937697: fix(plugin-auth): SSO domain verification accepts the DNS TXT record that request-domain-verification tells the operator to publish (#25111) +- 425c743: fix(plugin-auth): SSO domain verification accepts the DNS TXT record that request-domain-verification tells the operator to publish (#25111) Clause-②: no — the verify door now accepts the record the platform already names, as `@better-auth/sso` designed it; the one record it stops accepting is `undefined=TOKEN`, which only the defect produced and nothing instructs. Metadata-protocol: none @@ -301,14 +301,14 @@ - **Now.** The adapter hands better-auth the row's `identifier` the same way it already hands back `value`. The instructed record verifies on both doors and marks the provider verified. - **Still refused.** A wrong token, the token under another provider's label, the record published under another provider's name, and `undefined=TOKEN`: each answers `502 DOMAIN_VERIFICATION_FAILED` and leaves the provider unverified. - **Unchanged.** A record holding only the token is still accepted, as the vendor designed it. The generic data API still omits `identifier` from every `sys_verification` row. -- 3937697: fix(plugin-auth): the Magic Link mail states the lifetime the link really has, five minutes +- d609f60: fix(plugin-auth): the Magic Link mail states the lifetime the link really has, five minutes Clause-②: no Metadata-protocol: none The `auth.magic_link` mail said "This link expires in 10 minutes", while the link it carried lived 300 seconds: `magicLink()` was mounted without `expiresIn`, so better-auth's own default applied, and the mail's `expiresInMinutes` was a separate hard-coded `10`. The mount now states `expiresIn: 300` explicitly, and the mail's `expiresInMinutes` is derived from that same value, so every locale of the mail now reads "5 minutes". The link's lifetime does not change. Nothing to do on upgrade; a customised `auth.magic_link` template that hard-codes its own number should read `expiresInMinutes` instead. -- 3937697: fix(plugin-auth): an MCP client that registers over OAuth dynamic client registration with a loopback or custom-scheme redirect, and no `application_type`, is registered as a native client instead of being refused +- 6b44efa: fix(plugin-auth): an MCP client that registers over OAuth dynamic client registration with a loopback or custom-scheme redirect, and no `application_type`, is registered as a native client instead of being refused Clause-②: no (a runtime security-boundary change the maintainer ruled; no published type, export or metadata key moves) Metadata-protocol: none @@ -323,7 +323,7 @@ - PKCE stays required at `/oauth2/authorize` for every one of these clients, and every token still needs the user's sign-in and consent. The Setup form's own OAuth application door (`/sys-oauth-application/register`) is not affected. -- 3937697: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core +- 8dfd126: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core Clause-②: yes (narrowing) Metadata-protocol: none @@ -338,7 +338,7 @@ - **One definition of the Default Organization (`@objectstack/core`).** New exports: `findDefaultOrganization(read)` (the rule, over a read the caller supplies), `DEFAULT_ORGANIZATION_SLUG`, and `readDefaultOrganizationId(ql)` (the resolver's own read, which fails loud on an unreachable store). plugin-auth's boot invariant, default-organization bootstrap, tenancy service and last-admin guard, plugin-security's `resolveDefaultOrganizationId`, and the ownership ceremony's plan now name the organization through it. Each keeps its own read policy: whether a failed read throws or reads as none, the guard's simulation of a pending write, and the ceremony's raw SQL. Two edge answers align with the resolver's. A `default`-slugged row with a blank id now falls through to the only-organization reading in the ceremony's plan. A numeric id is now read as its string in plugin-security's reader. **What an operator does.** Before you create a second organization on a `single` deployment whose only organization has another slug, either give that organization the slug `default` (while it is the only one, that changes nothing else), or make sure another account can administer: an organization owner or admin, or an address in `OS_PLATFORM_OWNER_EMAIL`. -- 3937697: feat(plugin-auth): a JIT sign-in reads the IdP `locale` claim into the user's language preference, so a hosted environment follows the cloud account language +- 829cb77: feat(plugin-auth): a JIT sign-in reads the IdP `locale` claim into the user's language preference, so a hosted environment follows the cloud account language Clause-②: no Metadata-protocol: none @@ -351,7 +351,7 @@ - **No claim:** nothing changes. What the IdP last wrote is recorded per user in `sys_verification` (identifier `idp-locale:` plus the user id), so an IdP-written value can be told apart from a local choice; no schema changes. Applying the claim never fails a sign-in: a store that refuses the write is reported at `warn` and the user keeps the language they had. -- 3937697: fix(plugin-auth)!: under `single`, no slug change makes another organization the Default Organization — re-slugging to `default` captured the platform-admin anchor +- 09e07c2: fix(plugin-auth)!: under `single`, no slug change makes another organization the Default Organization — re-slugging to `default` captured the platform-admin anchor Clause-②: no (narrowing) Metadata-protocol: none @@ -366,7 +366,7 @@ - **Unchanged:** a slug changed to any other value; every slug change under a walled posture (`isolated`, `group`), where no grant anchors and a slug is just a slug; the data API, whose user-context PATCH and update-mode import were already refused a `slug` by the ADR-0092 identity write guard. **What an operator does.** Keep another slug. To move the anchor, move the grant rather than the slug: an `admin_full_access` grant re-owned by the Default Organization anchors, and a grant owned elsewhere does not. To name a Default Organization on a `single` deployment that holds several organizations, hold one organization (merge the others into it; the sole organization is the Default Organization and may then take the slug `default`), or declare a walled posture (`OS_TENANCY_POSTURE=group` or `isolated`), as the tenancy organization census already prescribes. -- 3937697: feat(plugin-auth): `GET /api/v1/auth/config` serves `features.cloudManaged` +- f4112a7: feat(plugin-auth): `GET /api/v1/auth/config` serves `features.cloudManaged` Clause-②: yes (widening) Metadata-protocol: none @@ -374,7 +374,7 @@ The public auth config's `features` gains `cloudManaged`, a boolean read from `isCloudManaged()` in `@objectstack/core` (true when the process runs with `OS_CLOUD_MANAGED=1`). It is `false` on every other deployment. The console reads it to hide the doors that add people by hand (invite, create user, set password) in a cloud-managed environment, whose people arrive from the organisation's identity provider. What to do: nothing. The payload only gains a key. -- 3937697: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security +- b3034ee: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security Clause-②: yes (widening) Metadata-protocol: none @@ -413,7 +413,7 @@ These two differences are kept by design: they make the fallback, which runs only when the service has failed, the stricter reader. No configuration, metadata or HTTP behaviour changes. Code that does not import the new exports needs no action. -- 3937697: fix: the degraded rate-limit warning names the remedy that boots: a shared `ICacheService` registered as `cache` +- b3f3298: fix: the degraded rate-limit warning names the remedy that boots: a shared `ICacheService` registered as `cache` Clause-②: no Metadata-protocol: none @@ -421,7 +421,7 @@ With no `cache` service registered, the lazy counter store falls back to a per-process store and logs one warning. That warning told a multi-node deployment to use "Redis via @objectstack/service-cache". But `CacheServicePlugin` throws at `init` when `adapter: 'redis'` is set, so an operator who followed it got a boot failure. The warning now names the working path: an `ICacheService` backed by a store every node reaches, registered as the `cache` service (`ctx.registerService('cache', impl)`). It no longer names a bundled adapter, so the text cannot go stale when one ships. The ADR-0069 D2 reference and the per-caller impact suffix are unchanged. The same applies to every counter built on `createLazyCounterStore`: better-auth's rate limit, the per-number OTP send budget, the SMS quotas and the runtime's inbound and endpoint limiters. -- 3937697: feat: Create User can grant a permission set in the same step, judged by the same delegated-administration gate as Setup's grant form +- 3306cad: feat: Create User can grant a permission set in the same step, judged by the same delegated-administration gate as Setup's grant form Clause-②: yes (widening: `POST /api/v1/auth/admin/create-user` and the `sys_user` `create_user` action accept an optional `permissionSet`; a request without it is answered exactly as before) Metadata-protocol: none @@ -433,13 +433,13 @@ - **Refused before anything is written:** a `permissionSet` that is not a string (400), a caller whose own context does not resolve (403), and a host that wires no grant seam (501). - **Response.** The success body carries `permissionSet` beside the user, and the result dialog shows it. - **Cloud-managed environments are unchanged.** `create_user` stays hidden while `features.cloudManaged` is on. -- 3937697: Clause-②: no +- 431327b: Clause-②: no Metadata-protocol: none The session activity heartbeat now runs on every deployment. `sys_session.last_activity_at` is "the last request on this session", and Setup → Sessions shows it so an administrator can tell two of one user's sessions apart. Until now it was written only while `sessionIdleTimeoutMinutes` was above 0, so on a default deployment (no idle or absolute limit) the Last Activity column stayed empty. It is still written at most once a minute per session. When neither the idle nor the absolute limit is configured, the `sys_session` read that feeds it is throttled too: a per-process memo, per session and bounded in size, skips the read for 60 seconds after one. With a limit configured, every request still reads the session row, as enforcement needs. -- 3937697: fix(plugin-auth): the last-administrator guard answers a read it could not complete with 503 `SERVICE_UNAVAILABLE`, the code the sibling guards on the same doors answer their read faults with +- 8a49e37: fix(plugin-auth): the last-administrator guard answers a read it could not complete with 503 `SERVICE_UNAVAILABLE`, the code the sibling guards on the same doors answer their read faults with Clause-②: no Metadata-protocol: none @@ -451,7 +451,7 @@ - **better-auth's endpoints** (`organization/update`, the admin ban and remove-user endpoints, and every other endpoint that writes through the adapter) answer it 503 `SERVICE_UNAVAILABLE`. The adapter now maps any engine error that declares `status: 503` and `code: 'SERVICE_UNAVAILABLE'` to that answer; before, such an error reached better-auth's router as an unhandled 500 with an empty body. The driver's message is not relayed. - **`organization/delete`** of the Default Organization answers the guard's read fault 503 `SERVICE_UNAVAILABLE`, the code the admission's own read faults answer with. A refusal on the merits there stays 403 `PERMISSION_DENIED`. - **For a client:** branch on the code. `SERVICE_UNAVAILABLE` means retry once the data store is reachable; `PERMISSION_DENIED` means the write itself is refused. -- 3937697: fix(plugin-auth)!: the temporary auth secret is used on a development boot only; any other boot without `OS_AUTH_SECRET` refuses to start +- 6abee03: fix(plugin-auth)!: the temporary auth secret is used on a development boot only; any other boot without `OS_AUTH_SECRET` refuses to start Clause-②: no (narrowing) Metadata-protocol: none @@ -466,113 +466,113 @@ - **TO:** the same boot throws `OS_AUTH_SECRET is required outside development`. - **Unchanged:** `os serve` and `os start` default an unset `NODE_ENV` to `production` and `os dev` / `--dev` set `development`, so CLI boots behave as before. A configured secret is used exactly as before in every environment. - **Fix:** set `OS_AUTH_SECRET` to a strong random value. For a local development boot, set `NODE_ENV=development`. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [865d2c8] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0603bfa] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [f802213] +- Updated dependencies [86d2360] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [58cd58f] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [d68aab6] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [c24203f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [a39389e] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4f97aeb] +- Updated dependencies [c4b49c3] +- Updated dependencies [284e048] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [1b3b65e] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [1f78b64] +- Updated dependencies [bc5daf0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [8878c36] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0fab7ba] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [1361a5a] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/service-messaging@18.1.0 diff --git a/packages/plugins/plugin-dev/CHANGELOG.md b/packages/plugins/plugin-dev/CHANGELOG.md index 763298807e7..9703528369a 100644 --- a/packages/plugins/plugin-dev/CHANGELOG.md +++ b/packages/plugins/plugin-dev/CHANGELOG.md @@ -4,150 +4,150 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [54df640] +- Updated dependencies [448374d] +- Updated dependencies [e207b97] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [f90ea67] +- Updated dependencies [c2d4072] +- Updated dependencies [78ab647] +- Updated dependencies [fbb42d9] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [6440cf1] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [4cef6e2] +- Updated dependencies [55d7aab] +- Updated dependencies [98c3d00] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [abc25a3] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [f802213] +- Updated dependencies [86d2360] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [9532e27] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [aaee084] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [b289090] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [0f1eeee] +- Updated dependencies [f46ef4d] +- Updated dependencies [3782b2d] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [9340181] +- Updated dependencies [9340181] +- Updated dependencies [2e242bb] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4f97aeb] +- Updated dependencies [c4b49c3] +- Updated dependencies [db9c02a] +- Updated dependencies [c6bdcac] +- Updated dependencies [02ad31a] +- Updated dependencies [0148071] +- Updated dependencies [03966ce] +- Updated dependencies [1b3b65e] +- Updated dependencies [331613c] +- Updated dependencies [5801a4f] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [a285ff2] +- Updated dependencies [829cb77] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [431327b] +- Updated dependencies [2b7c331] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0fab7ba] +- Updated dependencies [35d942e] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] +- Updated dependencies [1361a5a] - @objectstack/plugin-security@18.1.0 - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/plugins/plugin-email/CHANGELOG.md b/packages/plugins/plugin-email/CHANGELOG.md index 5742b3d1459..ce78607835d 100644 --- a/packages/plugins/plugin-email/CHANGELOG.md +++ b/packages/plugins/plugin-email/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- abd5acd: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-email, service-sms): Setup's "Send test email" and "Send test SMS" send to the signed-in admin when the request names no recipient (#24767) @@ -21,7 +21,7 @@ - The request and result shapes of `POST /api/settings/mail/test` and `POST /api/settings/sms/test`: no key, route or setting is added. - Which provider and credentials a test uses: the saved values overlaid with the form's unsaved edits, as before. - Saving the Mail form still judges a required field only when the save writes it, or writes a key its visibility depends on. -- 3937697: feat(plugin-auth, plugin-email): under the `open` and `email_domain` postures, a sign-up for an address that already has an account answers like a new sign-up and mails that address, while mail is really delivered +- 2aaee3b: feat(plugin-auth, plugin-email): under the `open` and `email_domain` postures, a sign-up for an address that already has an account answers like a new sign-up and mails that address, while mail is really delivered Clause-②: yes Metadata-protocol: none @@ -38,7 +38,7 @@ - **For a client of the sign-up door.** In the configurations above, a screen that showed an "already registered" message on the refusal now receives the success answer instead, and should show its usual "check your email" step. - **A send that fails after the answer.** The answer is still the success, and the server logs one error-level line saying the mail was not sent. A verification mail that fails for a new address leaves the same gap. - **Unchanged.** A sign-up for a new address, every refusal the audience posture raises, and every other auth mail. -- 3937697: feat(spec, plugin-email): `IEmailService.isConfigured()` answers whether mail sent through the service is actually delivered +- fccbd9d: feat(spec, plugin-email): `IEmailService.isConfigured()` answers whether mail sent through the service is actually delivered Clause-②: yes (widening: an optional member on `IEmailService`) Metadata-protocol: none @@ -47,7 +47,7 @@ - **Absent means unknown.** The member is optional, so every existing implementation stays valid. A consumer must never read an absent member as delivering: a flow whose success depends on a mail reaching someone treats absent the same as `false` and keeps its explicit refusal, so a service that is merely wired is never mistaken for one that delivers. - **The implementation.** `@objectstack/plugin-email`'s `EmailService.isConfigured()` answers `false` while its transport is the `LogTransport` (the default when no mail transport is configured) and `true` for any other transport. It follows the transport the plugin rebuilds from the `mail` settings, so saving an SMTP or API-provider configuration turns it `true` without a restart. - **Unchanged.** Sending, templates, persistence and the boot warning for the `log` transport behave as before. No consumer reads the member yet. -- 3937697: feat: Setup → Email states which mail transport is live, and says so when no mail leaves this machine +- ab510f4: feat: Setup → Email states which mail transport is live, and says so when no mail leaves this machine Clause-②: yes (widening: service-settings exports SettingsService.registerLiveStatus / liveStatusOf, SettingsLiveStatus, SettingsLiveStatusProvider and SETTINGS_LIVE_STATUS_BANNER_ID; nothing is refused) Metadata-protocol: none @@ -56,7 +56,7 @@ - **`@objectstack/service-settings`:** `SettingsService.registerLiveStatus(namespace, provider)` lets the package that owns a live object state it on that namespace's page. `GET /api/settings/:namespace` asks the provider on every read and puts its answer first in the manifest's specifiers, as an `info_banner` with the reserved id `live_status` (`SETTINGS_LIVE_STATUS_BANNER_ID`). The registered manifest and in-process `getNamespace()` are unchanged. If the provider throws, the page says the live status could not be read; the statement is never silently dropped. New exports: `SettingsLiveStatus`, `SettingsLiveStatusProvider`, `SETTINGS_LIVE_STATUS_BANNER_ID`. - **`@objectstack/plugin-email`:** registers the `mail` statement from `EmailService.isConfigured()`. When it answers `false` (the log transport), the banner reads "No mail leaves this machine". When it answers `true`, the banner names the live transport, for example "Mail is delivered through SMTP (smtp.example.com:587)". The statement waits for any settings re-apply still running, so a read made just after a save names the transport that save built. -- 3937697: fix(plugin-email): the Send test email refusals name what the admin does on the page instead of a REST recipe (#25424) +- 0b8dbea: fix(plugin-email): the Send test email refusals name what the admin does on the page instead of a REST recipe (#25424) Clause-②: no Metadata-protocol: none @@ -64,7 +64,7 @@ When **Send test email** (`mail/test`) could not go to the signed-in admin's own address, its refusal said to pass "to" in the request body. The mail settings page has no recipient field, so that advice could not be followed from it. Each refusal now says that nothing was sent and what the admin can do on the page: press Send test email signed in as an admin whose account has an email address, or press it again once the account can be read. A `to` in the request still wins, as before. It is now documented only in the handler's TSDoc, for API callers. No route, response shape, status or code changes: only the message text does. A caller that compared these strings verbatim must update its copy. -- 3937697: fix(plugin-email): saving mail provider "None (log only — no real delivery)" stops delivery +- 0ec4c5a: fix(plugin-email): saving mail provider "None (log only — no real delivery)" stops delivery Clause-②: no Metadata-protocol: none @@ -72,101 +72,101 @@ Setup → Email offers the provider `log` as "None (log only — no real delivery)". Saving it used to leave the live transport in place, so after a boot with SMTP (saved on the page, or built from `OS_EMAIL_SMTP_*` / `providerOptions`) every message kept going out over SMTP while the page label and the info log both said nothing was delivered. A saved `log` now installs the `LogTransport`, replacing whatever was live, as a saved SMTP host or API key already replaces it. The live-status banner, the re-apply's log line (which names the transport it replaced) and "Send test email" all report that no mail leaves the machine. If a deployment saved `log` on the settings page while relying on SMTP from `OS_EMAIL_SMTP_*` or on a transport the host supplies, mail now stops at boot. To deliver again, select SMTP (or Resend / Postmark) in Setup → Email and save. Alternatively, pin the provider with `OS_MAIL_PROVIDER`. -- 3937697: fix(plugin-email): "Send test email" with "None (log only)" picked but not saved no longer delivers over the live transport +- aa2dbab: fix(plugin-email): "Send test email" with "None (log only)" picked but not saved no longer delivers over the live transport Clause-②: no Metadata-protocol: none Setup → Email's "Send test email" tests what the form says, saved or not: an SMTP host on the form gets a one-shot SMTP connection, a Resend / Postmark key a one-shot client. With "None (log only — no real delivery)" picked and not saved, the test used to go through the live service instead, so with SMTP live a real message was delivered and the answer was "Sent test email to …". The test now goes through a one-shot `LogTransport` (recorded in `sys_email` like any other test send) and answers with a warning that nothing was delivered and no mail left the machine, naming the live transport it did not use. Once `log` is saved the answer is the existing warning that no delivery transport is active. The other providers are unchanged. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/plugins/plugin-hono-server/CHANGELOG.md b/packages/plugins/plugin-hono-server/CHANGELOG.md index fab6ab6be9e..284e89d766f 100644 --- a/packages/plugins/plugin-hono-server/CHANGELOG.md +++ b/packages/plugins/plugin-hono-server/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is +- 02e6d73: fix(cors)!: every CORS door reads one admission rule; a loopback origin beside a list is admitted on a development boot only; an all-host pattern is refused with credentials, as `'*'` is Clause-②: yes (narrowing) @@ -24,75 +24,75 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/plugins/plugin-pinyin-search/CHANGELOG.md b/packages/plugins/plugin-pinyin-search/CHANGELOG.md index 7723c80c31c..e6e957d70d9 100644 --- a/packages/plugins/plugin-pinyin-search/CHANGELOG.md +++ b/packages/plugins/plugin-pinyin-search/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number +- c8f4c43: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number Clause-②: yes (widening) Metadata-protocol: none @@ -16,40 +16,40 @@ - **A driver that owns its counter without the member** stores the readers computed without the number, as before, and the engine now says so once per object at `error` level, with the remedy. - **`ObjectQL.registerInsertRecomputeListener(id, fn)` (new).** Called per row after that second computation, on the row the driver is handed. `plugin-pinyin-search` registers on it, so a `__search` companion whose name field reads the record number is stamped from the value that carries the number, and `$search` finds the record by pinyin and by its number. - **One change in what a refused insert reports.** On an object whose stored expression reads the number, a SQL driver's collision that survives every retry now leaves as `ERR_AUTONUMBER_COLLISION` (the engine's three attempts) instead of `DUPLICATE_RECORD` (the driver's own retries). Every other object is unchanged. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [94842ba] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [7532ea3] +- Updated dependencies [72518d2] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [644e4b2] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [157ebd0] +- Updated dependencies [dfe60e3] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [9340181] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [504d8b3] +- Updated dependencies [3a440b0] +- Updated dependencies [8dfd126] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [d196748] +- Updated dependencies [db1c7cc] +- Updated dependencies [b3034ee] +- Updated dependencies [ee63b47] +- Updated dependencies [27b3f1f] +- Updated dependencies [915e940] - Updated dependencies [9f39094] - @objectstack/core@18.1.0 - @objectstack/objectql@18.1.0 diff --git a/packages/plugins/plugin-security/CHANGELOG.md b/packages/plugins/plugin-security/CHANGELOG.md index ce8211eafdb..afcf16fc344 100644 --- a/packages/plugins/plugin-security/CHANGELOG.md +++ b/packages/plugins/plugin-security/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor +- 94842ba: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor Clause-②: yes (narrowing) @@ -20,7 +20,7 @@ - **What a lean composition sees.** A composition that registers no organization object (`sys_organization`, which plugin-auth ships) still stores grants without an organization, and those grants now confer nothing. No shipped composition does this: `os serve` registers the security plugin only together with plugin-auth. **What an operator does.** Nothing beyond the upgrade itself: run `os migrate organization-ownership` before serving a database that 17.x or an 18.0 pre-release created. The server refuses such a database until you do. If an embedding composes `@objectstack/plugin-security` without plugin-auth, register the organization object so that grants carry an organization. -- 3937697: feat(objectql, plugin-security): the engine composes its `ReadableIds` leaf for a delegated (on-behalf-of) caller, scoped to the delegator intersection, instead of refusing it (ADR-0139 D5.1 as amended; O5 answered) +- f8c5fb3: feat(objectql, plugin-security): the engine composes its `ReadableIds` leaf for a delegated (on-behalf-of) caller, scoped to the delegator intersection, instead of refusing it (ADR-0139 D5.1 as amended; O5 answered) Clause-②: no @@ -34,7 +34,7 @@ **What a reader sees.** No shipped consumer writes a leaf for a delegated caller yet (each still routes it to its probe; that routing retires per consumer on its own card), so a delegated read of `sys_activity`, `sys_audit_log`, `sys_comment`, `sys_comment_reaction` or `sys_attachment` is served as before. A door that binds `getReadFilter` directly, such as the analytics raw-SQL path, scopes a delegated context to the intersection now; as accepted it denied that context outright. **Unchanged.** `controlled_by_parent`'s own read scope (ADR-0055 §2 mechanism (b), the pre-resolved id set) and the nested master chain, which keep their own cards; the delegated `find`, `findOne`, `count` and `aggregate` through the engine middleware, which already applied the intersection. -- 3937697: fix(plugin-security)!: an update or delete of a `controlled_by_parent` detail asks for edit access to its master on every write shape (ADR-0055 §3) +- b289090: fix(plugin-security)!: an update or delete of a `controlled_by_parent` detail asks for edit access to its master on every write shape (ADR-0055 §3) Clause-②: no (narrowing) @@ -50,7 +50,7 @@ - **Unchanged.** Inserts and by-id updates and deletes; system contexts; the detail's read scope; the platform ownership floor; and every object that does not declare `controlled_by_parent`. **What to do.** Grant the caller edit access on the master, or narrow the write to details under masters the caller may edit. -- 3937697: fix(plugin-security)!: an update of a `controlled_by_parent` detail also asks for edit access on the master its body names (ADR-0055 §3) +- f46ef4d: fix(plugin-security)!: an update of a `controlled_by_parent` detail also asks for edit access on the master its body names (ADR-0055 §3) ADR-0055 §3 says editing, deleting or creating a detail requires edit access to its master, and it reads a create's master from the master id in the incoming body. A write to a `controlled_by_parent` detail can involve more than one master, and for one shape of write the master-detail write gate asked the master-edit question of one of them only. It now asks it of every master the write involves, with the same check and in the same order as before for the one it already asked. One master the caller may not edit refuses the whole write, and nothing is written. On a write made on a user's behalf, both principals are asked, as on every other detail write. @@ -65,7 +65,7 @@ - **Unchanged.** Inserts and deletes; every write that involves only the master its rows already sit under; system contexts; the detail's read scope; the platform ownership floor; and every object that does not declare `controlled_by_parent`. **What to do.** Grant the caller edit access on every master the write involves, or keep the write within masters the caller may edit. -- 3937697: fix(plugin-security)!: a batch create of a `controlled_by_parent` detail asks for edit access on the master of every row it names, and an update no longer empties a detail's master reference (ADR-0055 §1, §3) +- 3782b2d: fix(plugin-security)!: a batch create of a `controlled_by_parent` detail asks for edit access on the master of every row it names, and an update no longer empties a detail's master reference (ADR-0055 §1, §3) ADR-0055 §3 says creating, editing or deleting a detail requires edit access to its master, and it reads a create's master from the master id in the incoming body. A batch create carries one body per row. The master-detail write gate read a create's master only from a body that is a single record, so a batch create asked about no master at all. That covers the engine's array insert and `insertMany`, and the bulk-create and import doors that call them. The gate now asks about the master of every row the batch names, with the same check a single create runs, once per master and in row order. One master the caller may not edit refuses the whole batch, and nothing is written. On a write made on a user's behalf, both principals are asked, as on every other detail write. @@ -92,7 +92,7 @@ - The import door degrades a refused batch to one create per row. There, the rows under masters the caller may edit still land, and the other row is refused on its own. **What to do.** Grant the caller edit access on every master a batch names, or keep each batch within masters the caller may edit. To move a detail to another master, write that master's id, never null. -- 3937697: fix(plugin-security)!: a delegated operation runs only in an organization the delegator is a member of, on a walled posture +- 2e242bb: fix(plugin-security)!: a delegated operation runs only in an organization the delegator is a member of, on a walled posture ADR-0090 D10 bounds an on-behalf-of operation by the delegator's scope. The operation runs in the live principal's active organization, and the delegator context is resolved in that same organization, on the stated assumption that the agent and its delegator are in the same organization. Nothing checked that assumption. The delegated-principal prologue (`resolveOperationPrincipals`) now checks it with `vetOrganizationClaim`, the one rule for "a membership backs this organization": under `isolated` or `group`, when the on-behalf-of context carries an active organization the delegator is not a member of, every operation is refused before any gate runs. @@ -106,7 +106,7 @@ - **TO:** the same operation is refused `403` with `code: 'PERMISSION_DENIED'` before any gate runs. The message names the organization and the delegator. - **Unchanged:** the `single` posture, an on-behalf-of context with no active organization (it keeps the ADR-0123 D2 answers), a context without `onBehalfOf`, a dangling delegator (still refused as before), and system contexts. The `/mcp` OAuth door, the one producer of an on-behalf-of context in the platform, vets the request's organization against the same membership, so the contexts it builds are never refused by this rule. - **The fix for an in-process producer:** code that builds an `ExecutionContext` with `onBehalfOf` by hand (a plugin, a service, an agent runtime) must set its `tenantId` to an organization the delegating user is a member of, or leave it unset. -- 3937697: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants +- 9019af9: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants Clause-②: yes (widening) Metadata-protocol: added @@ -124,7 +124,7 @@ - **`@objectstack/platform-objects`:** the `External` option label on the membership role pickers, translated. `org_external` is a reserved name from this release on, so a position can no longer be named `org_external`. -- 3937697: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS +- 45f9962: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS Clause-②: yes (widening: `@objectstack/core` gains `owdForAudience`, `isExternalAudienceContext`, `externalGrantSpeaks` and the two grant-stamp keys; every narrowing below applies only to the `external` role, which no release has shipped yet) Metadata-protocol: semantic @@ -139,7 +139,7 @@ - **Directory doors.** `list-teams` and `get-full-organization`'s `teams` answer an external only the teams it sits on. `list-invitations`, which better-auth gates on membership alone, answers an external only invitations to its own email. Nothing changes for a principal that does not hold the `external` role. -- 3937697: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster +- e5eab06: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster Clause-②: no Metadata-protocol: semantic @@ -152,7 +152,7 @@ - **Explain.** The object-level `rls` layer names each key the policies read: its label and description, the roster object, `valueField`, `userField`, the filter, and the size it resolved to or why it did not, and the permission sets whose holders can write the roster object (whoever can write a roster row can grant the key). A record-grained rule reads `via: 'membership:KEY'`, and its detail names the roster row that links the record to the principal. - **`@objectstack/objectql`: an `extend` contribution cannot declare a membership key.** `SchemaRegistry.registerObject` refuses one that carries `membershipKeys`, with `INVALID_METADATA` (`status: 422`) and the error name `ExtensionMembershipKeysRefusedError`, naming the object and the extending package, beside the `defaultRowScope` refusal. The extension merge never carried the key onto the object, so it registered and then never resolved. The manifest path already refused it at authoring. - **`@objectstack/spec`**: the `membershipKeys` describe and the row-level security docs no longer say the key is not applied, and the liveness row is `live`. -- 3937697: feat(plugin-security)!: a flow that runs as system writes no identity assignment — position holdings, permission-set grants, invitations and memberships are refused from a flow run's system context +- a285ff2: feat(plugin-security)!: a flow that runs as system writes no identity assignment — position holdings, permission-set grants, invitations and memberships are refused from a flow run's system context Clause-②: no (narrowing) Metadata-protocol: semantic @@ -170,7 +170,7 @@ ### Patch Changes -- 3937697: feat: at boot, an administrator is told when a package upgrade renamed, removed or collided with an access item the customer switched off, cloned or authored +- 54df640: feat: at boot, an administrator is told when a package upgrade renamed, removed or collided with an access item the customer switched off, cloned or authored Clause-②: yes (widening: plugin-sharing's exported `SharingRuleService` gains `listDeclaredRules()`; the report itself refuses nothing and adds no key, code or setting) Metadata-protocol: none @@ -199,7 +199,7 @@ "The old name carrying a clone" is carried by the switch-off half. The sanctioned ceremony is clone plus switch-off, and a clone whose base stays on is not a choice a rename un-makes. A read that fails stops the report for that boot, and nothing is judged from an unread store. - **`@objectstack/plugin-sharing`:** `SharingRuleService.listDeclaredRules()` answers every declared rule with its `packageId`, or `null` when the service reads no declarations. -- 3937697: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) +- 448374d: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) Clause-②: yes (narrowing): a marketplace re-install that installed before is now refused `409` while it would un-make an access choice made in this system, until the same call confirms it (narrowing); the door gains the `confirmAccessUpgrade` body field and the `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` code, plugin-security gains the `security.accessUpgradeCheck` service and its exports, and the CLI gains `--confirm-access-upgrade <token>` (widening). Metadata-protocol: none @@ -217,7 +217,7 @@ - **Unchanged.** A fresh install is never checked. An upgrade with no finding installs exactly as before. The error-code ledger registers `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` under `@objectstack/cloud-connection`. `@objectstack/plugin-security` exports `ACCESS_UPGRADE_CHECK_SERVICE`, `createAccessUpgradeCheck` and `accessUpgradeDelta`, and `SecurityPlugin` registers the check under `security.accessUpgradeCheck`. -- 3937697: feat: a boot upgrade impact report for the non-access classes (flows, actions, webhooks, overlays, object extensions, navigation contributions, settings), raised to the administrator like the access upgrade report +- e207b97: feat: a boot upgrade impact report for the non-access classes (flows, actions, webhooks, overlays, object extensions, navigation contributions, settings), raised to the administrator like the access upgrade report Clause-②: yes (widening: a new boot report and a new notification topic, `system.upgrade_impact`; nothing is written or refused, and no existing path changes) Metadata-protocol: none @@ -231,7 +231,7 @@ - **Settings:** a stored value whose namespace no longer declares its key. The value is never read, and the default applies. The report never reads a value. Each category logs one `error` with its fix. The finding set is raised through the same delivery as the access report, under its own topic and `dedupKey`. Under `single` it goes to the Default Organization's administrators. Under a wall it goes to the operator alone, and in-app in the organization `OS_PLATFORM_OWNER_ORGANIZATION` names when that is set. A clean boot logs one `info` line. A store that cannot be read stops the report for that boot, and it says so. -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -243,7 +243,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(plugin-security): the `position_name_fold_grant` warning says the same-name grant is removed in the next major version, and what holders lose then +- f90ea67: fix(plugin-security): the `position_name_fold_grant` warning says the same-name grant is removed in the next major version, and what holders lose then Clause-②: no (a runtime warning's wording plus one added field in its log payload; no accept set, served shape, resolution result or error code moves) @@ -252,14 +252,14 @@ - **Why only a warning in 18.x.** No ADR-0087 conversion can carry this retirement: the platform cannot write `permissionSets` into a sealed managed position definition (ADR-0131 D6). So 18.x ships the warning, and the removal of the name-based grant waits for 19.0. - **Unchanged.** Every resolution result. A holder of `P` still receives set `P` in 18.x. The warning still fires under the same conditions, including for a position bound to a different set that also shares its name with one. It stays silent for a declared pair, a baseline set and a position whose name matches no set, and it still fires once per position name until the next restart. - **What to do.** For each position named in a `position_name_fold_grant` warning, add the same-named set to that position's `permissionSets` before upgrading to the next major version. Setup's Permission Sets field and the set's Assigned Users panel then show the binding as well. -- 3937697: fix(plugin-security): a permission-set assignment is titled by the person's name, not the raw user id +- 6440cf1: fix(plugin-security): a permission-set assignment is titled by the person's name, not the raw user id Clause-②: no (no accept set moves: the value a declared formula computes on read changes; no key, column, write path or authorization answer moves) - **Before.** `sys_user_permission_set`'s record title (`display_title`, the object's `nameField`) composed the stored user id, so Setup's list of a user's permission sets and the assignment's record page read like `ISu3jHPIrdgD45L1rrC2FuE7DIcsk2ap → crm_edit`. - **Now.** The title names the person: the user's `name`, or their `email` where the name is blank, then the set, as in `Alice Liddell → crm_edit`. The name is read one hop through `user_id`, under the reader's own permissions (the ADR-0079 addendum on one-hop formula titles). A reader who may not read that user, and a grant whose user no longer exists, get no title (`null`), never the user's name or email; a renderer then falls to the object's `titleFormat`, `{user_id} → {permission_set}`. No column is stored, and the title is still neither sortable nor searchable. - **Cost.** A read of `sys_user_permission_set` that computes its formulas (no field projection, or a projection naming `display_title`) now issues one batched `sys_user` read per page. The grant read every authenticated request makes is not one of them: it names the columns it decides on, so it computes no title, and the request's authorization prelude stays 8 reads in 4 round trips for a principal holding a direct grant. -- 3937697: fix(plugin-security): a platform operator's tenant-scoped insert from a session with no active organization is refused 403 naming the missing organization, as a member's is, instead of a 500 +- 98c3d00: fix(plugin-security): a platform operator's tenant-scoped insert from a session with no active organization is refused 403 naming the missing organization, as a member's is, instead of a 500 Clause-②: no (no accept set moves: the insert was refused before and is refused now, with the ADR-0123 D2 answer in place of an internal error) @@ -272,7 +272,7 @@ - inserts into objects that opted out of tenancy; - system contexts (which still meet the engine's own refusal); - every `single` answer. -- 3937697: fix(objectql,plugin-security): an update's re-point of `organization_id` that the Layer 0 wall admits is stored as sent, not silently dropped +- 5050442: fix(objectql,plugin-security): an update's re-point of `organization_id` that the Layer 0 wall admits is stored as sent, not silently dropped Clause-②: yes (widening) — an update re-point of `organization_id` the Layer 0 wall admits is now stored instead of silently dropped, and an in-process `strictReadonlyWrites: true` update naming an organization the wall admits is now stored instead of refused `ERR_READONLY_FIELD_REJECTED`. @@ -302,7 +302,7 @@ - **Only the platform's injected column on an app object is spared.** A `sys_` object, a platform-internal `managedBy` bucket (`engine-owned`, `append-only`, `better-auth`), and an object whose author declares its own `organization_id` with `readonly: true` keep the update strip: the value is still taken, reported, and refused under strict, exactly as before. The organization-scoped grant tables (`sys_user_position`, `sys_user_permission_set`) declare a writable `organization_id` the strip never took, so their re-points keep meeting their own guards exactly as before. - **Where no wall judges the column, nothing changes.** The re-point is still taken and reported, and strict still refuses it. That includes `single`, a composition without the security plugin, a tenancy-disabled object, a platform operator crossing the wall on its own behalf, and `preserveAudit`, whose update-only exemption never reaches `organization_id`. - **The `update`-mode `validate()` preview is unchanged.** It runs no middleware, so it holds no seam: it still reports an admitted re-point as dropped while the write stores it. -- 3937697: fix(objectql,plugin-security): an insert's explicit `organization_id` that the Layer 0 wall judges is stored as sent, not replaced by the active organization +- 2b1382a: fix(objectql,plugin-security): an insert's explicit `organization_id` that the Layer 0 wall judges is stored as sent, not replaced by the active organization Clause-②: yes (widening) — `PostHookWriteImageCheck` gains the optional published member `judgesOrganization`, and an in-process `strictReadonlyWrites: true` insert naming an organization the wall admits is now stored instead of refused `ERR_READONLY_FIELD_REJECTED`. @@ -333,7 +333,7 @@ - **An explicit empty value in an array insert.** A row naming `organization_id: null` or `''` is no longer taken, reported, or refused under strict. It is still stored as the active organization, because the driver's stamp fills an empty value. - **Only the platform's injected column is spared.** On an object whose author declares its own `organization_id` with `readonly: true`, a caller's value is still taken, reported, and refused under strict, exactly as before. The wall still judges that column. The author's declaration is what keeps the strip, and the injected column is told apart by the registry's provenance reader (`resolveInjectedColumnProvenance`). - **Where no wall judges the column, nothing changes.** The value is still taken and reported, and strict still refuses it. That includes `single`, a composition without the security plugin, a tenancy-disabled object, and a platform operator crossing the wall on its own behalf. -- 3937697: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit +- 0b8bce4: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit Clause-②: no Metadata-protocol: none @@ -342,7 +342,7 @@ - **`@objectstack/service-analytics`.** The engine-bound merges (`ObjectQLStrategy.withReadScope`, its FK attribute map, and the plugin's record-label pass) admit the leaf and hand the scope to the engine, which composes it as a find does. `NativeSQLStrategy.canHandle` declines a query whose base or joined object's read scope carries the leaf, so a `controlled_by_parent` object's analytics query routes to the ObjectQL strategy and serves the find path's rows. `compileScopedFilterToSql` refuses a scope carrying the leaf by name, in its existing `READ_SCOPE_COMPILE_FAILED` / 500 envelope: the `/api/v1/analytics/sql` dry-run echo of a `controlled_by_parent` object now refuses where it rendered the bound id list — it runs no composition and shows no statement it would not run. A filter an author writes keeps its judgement on every face. - **`@objectstack/driver-turso`.** The remote face resolves a composed leaf nested inside a composed leaf's scope through `toRemoteWhere` with the outer read's options, so a two-level `controlled_by_parent` chain on a remote Turso datasource answers rows instead of `INTERNAL_ERROR` / 500. - **`@objectstack/spec`.** One nested-leaf row in `READABLE_IDS_CASES`, so every driver's conformance suite measures the shape, and the comparand-shape door's docblock names both callers that pass `admitReadableIds`. No schema, accept set or export of a metadata key moves. -- 3937697: fix(plugin-security): a `controlled_by_parent` detail's read scope requires object-level read on its master (ADR-0055 §3) +- 9532e27: fix(plugin-security): a `controlled_by_parent` detail's read scope requires object-level read on its master (ADR-0055 §3) Clause-②: no @@ -352,7 +352,7 @@ - **The write doors follow.** A by-id update or delete of such a detail answers the read door's not-found (`RECORD_NOT_FOUND`, 404), as it does for any row the principal cannot read. A predicate update or delete matches no such detail. - **The engine already gave this answer.** Its ADR-0139 `ReadableIds` leaf asks `canReadObject` before it scopes a parent's rows. The id-list derivation and the leaf now agree. - **Unchanged.** A principal that may read the master object keeps its previous answer, whether or not its master rows are scoped. So do a system context, a super-user grant, and an on-behalf-of read whose delegator may read the master. -- 3937697: fix(plugin-security): a `controlled_by_parent` detail write asks its master the object-level question the master's own write door asks (ADR-0055 §3) +- aaee084: fix(plugin-security): a `controlled_by_parent` detail write asks its master the object-level question the master's own write door asks (ADR-0055 §3) Clause-②: no @@ -361,7 +361,7 @@ - **Every door that asks the leg.** An insert, a by-id update and a by-id delete of a detail answer `PERMISSION_DENIED` (403) and write nothing. `checkControlledByParentWrite`, which the comment and attachment parent gates ask, answers `deny` on the `object_permission` leg. A record-grained `security/explain` of a by-id write follows the same leg. - **An insert answers before the reference check.** For such a principal, an insert under a master id that exists answers the same refusal as one under an id that exists nowhere. A principal that also cannot read the master, on an on-behalf-of write too, now gets this `PERMISSION_DENIED` on insert where it got the reference check's `VALIDATION_FAILED`. An insert under a master object that does not resolve answers `PERMISSION_DENIED` where it answered `OBJECT_NOT_FOUND` (404). - **Unchanged.** A principal the master's own write door admits for an `update` keeps writing its details, and so do a super-user grant and a system context. Under a master that is `public`, resolves and requires no capability for `update`, every principal gets the answer it got before. -- 3937697: fix(plugin-security): step 3.7's tenant write wall is composed by one method, and the write preview asks it about each row +- 9340181: fix(plugin-security): step 3.7's tenant write wall is composed by one method, and the write preview asks it about each row Clause-②: yes (widening) @@ -371,7 +371,7 @@ - **One spelling of the wall.** Step 3.7's judgement (the no-active-organization pre-test with its delegator leg, the supplied-value forge guard, the emptied organization on update, the #24784 / #24821 no-active-organization insert arms, and whether the wall judges the organization) is composed by one method, `composeWriteTenantWall`. The middleware's payload half and its stored-image seam both call it. Behaviour, refusals and log lines are unchanged. - **New: `SecurityPlugin.writeWallVerdict(object, operation, context, rows)`**, registered on the engine as `registerWriteWallVerdict`. It answers each row from that same method: admitted (and whether the wall judges its organization), or refused with the write's `PermissionDeniedError` code and message. It answers `null` for a system context, a context with no user, and a caller the context prologue refuses before the wall is reached. On an engine without the seam the plugin logs one warning at start and the preview keeps its old answer. -- 3937697: fix(plugin-security)!: under a `controlled_by_parent` declaration whose one master reference is `readonly` or `system`, every write that sets that reference is refused (ADR-0055 §1) +- 0148071: fix(plugin-security)!: under a `controlled_by_parent` declaration whose one master reference is `readonly` or `system`, every write that sets that reference is refused (ADR-0055 §1) Clause-②: no (narrowing) @@ -391,7 +391,7 @@ - System contexts, every object declared with an ordinary required master, and every object that does not declare `controlled_by_parent`. **What to do.** Fix the declaration as the parse says: remove `readonly: true` and `system: true` from the master reference and declare it as an ordinary required field. If the rows must outlive their parent, the object is not a detail: give it its own `sharingModel` (`private`, `public_read` or `public_read_write`). -- 3937697: fix(plugin-security)!: the raw-SQL read scope (`getReadFilter`) answers the deny sentinel for a delegated context the operation prologue refuses — the delegator's membership must back the organization the read runs in, on a walled posture +- 331613c: fix(plugin-security)!: the raw-SQL read scope (`getReadFilter`) answers the deny sentinel for a delegated context the operation prologue refuses — the delegator's membership must back the organization the read runs in, on a walled posture Clause-②: no (narrowing) Metadata-protocol: none @@ -404,7 +404,7 @@ - **TO:** it answers `RLS_DENY_FILTER` itself (the spec's sentinel, by reference), so a door that bypasses the engine reads zero rows for that context, as the engine's find refuses it. - **Unchanged:** the `single` posture, an on-behalf-of context with no active organization, an on-behalf-of context in an organization the delegator is a member of, a context without `onBehalfOf`, a dangling delegator (still the deny sentinel) and system contexts. The `/mcp` OAuth door, the one producer of an on-behalf-of context in the platform, vets the request's organization against the same membership, so the contexts it builds keep their scope. - **The fix for an in-process producer:** code that builds an `ExecutionContext` with `onBehalfOf` by hand and hands it to the security service or to the analytics service must set its `tenantId` to an organization the delegating user is a member of, or leave it unset. -- 3937697: fix(plugin-security)!: the delegation probes, field projections, explanation and narrowing diagnostic answer the refusal the operation prologue makes for a delegated context whose delegator is not a member of the organization it runs in, on a walled posture +- 5801a4f: fix(plugin-security)!: the delegation probes, field projections, explanation and narrowing diagnostic answer the refusal the operation prologue makes for a delegated context whose delegator is not a member of the organization it runs in, on a walled posture Clause-②: no (narrowing) Metadata-protocol: none @@ -418,7 +418,7 @@ - **Unchanged:** the `single` posture, an on-behalf-of context with no active organization, an on-behalf-of context in an organization the delegator is a member of, a context without `onBehalfOf`, a dangling delegator, and system contexts. The `/mcp` OAuth door, the one producer of an on-behalf-of context in the platform, vets the request's organization against the same membership, so the contexts it builds keep every answer. - **The fix for an in-process producer:** code that builds an `ExecutionContext` with `onBehalfOf` by hand must set its `tenantId` to an organization the delegating user is a member of, or leave it unset. - **`ExplainEngineDeps`:** an embedder that builds the explain engine's dependencies itself passes the deployment's tenancy posture as `tenancyPosture`, the value the security plugin's enforcement runs under. The compiler names the missing member. -- 3937697: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected +- 24360dc: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected Clause-②: no Metadata-protocol: none @@ -427,7 +427,7 @@ - **`@objectstack/plugin-security`.** The Organization help on `sys_user_position` and `sys_user_permission_set` no longer says an empty value means "global" or "applies in every org context". A grant or assignment applies only in its own organization, and one with no organization applies nowhere. The four locale bundles carry the new text. - **`@objectstack/cli`.** `os migrate organization-ownership`'s warning about rows whose owner cannot be derived reads "…while one stays NULL, except on a table whose column is not the tenancy anchor." where it read "(but on a table …)". - **`@objectstack/spec`.** Wording only, no schema moves: the upgrade guide's `driver-read-scope-follows-tenant-wall` entry names update and delete "by id or by predicate"; the `sharing-rule-declared-mirror-retired` entry no longer paraphrases ADR-0131 D13 as asking an entry of every retirement; `IEmailService`'s `organizationId` TSDoc no longer says an absent value leaves the row unstamped (the engine stamps the derivable organization or refuses the insert); a TSDoc citation in `schedule-organization.zod.ts` names the run store instead of a deleted file. -- 3937697: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core +- 8dfd126: fix(core,plugin-auth)!: the last-admin guard judges a `sys_organization` insert that moves the Default Organization, and one definition of the Default Organization is exported from core Clause-②: yes (narrowing) Metadata-protocol: none @@ -442,7 +442,7 @@ - **One definition of the Default Organization (`@objectstack/core`).** New exports: `findDefaultOrganization(read)` (the rule, over a read the caller supplies), `DEFAULT_ORGANIZATION_SLUG`, and `readDefaultOrganizationId(ql)` (the resolver's own read, which fails loud on an unreachable store). plugin-auth's boot invariant, default-organization bootstrap, tenancy service and last-admin guard, plugin-security's `resolveDefaultOrganizationId`, and the ownership ceremony's plan now name the organization through it. Each keeps its own read policy: whether a failed read throws or reads as none, the guard's simulation of a pending write, and the ceremony's raw SQL. Two edge answers align with the resolver's. A `default`-slugged row with a blank id now falls through to the only-organization reading in the ceremony's plan. A numeric id is now read as its string in plugin-security's reader. **What an operator does.** Before you create a second organization on a `single` deployment whose only organization has another slug, either give that organization the slug `default` (while it is the only one, that changes nothing else), or make sure another account can administer: an organization owner or admin, or an address in `OS_PLATFORM_OWNER_EMAIL`. -- 3937697: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security +- b3034ee: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security Clause-②: yes (widening) Metadata-protocol: none @@ -481,7 +481,7 @@ These two differences are kept by design: they make the fallback, which runs only when the service has failed, the stricter reader. No configuration, metadata or HTTP behaviour changes. Code that does not import the new exports needs no action. -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -496,7 +496,7 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- 3937697: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both +- 27b3f1f: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both Clause-②: yes (widening: `GET /meta/position?include=grants` adds two read-only served keys per position, `_holderCount` and `_grantedPermissionSets`; `ISecurityService` gains the optional `describePositionGrants`) Metadata-protocol: none @@ -509,7 +509,7 @@ - **`_holderCount`** counts the people who hold the position in the caller's active organization, by the rule the resolver uses to give a caller positions: `sys_user_position` rows in their validity window, membership roles, and `everyone` for every active member. A switched-off position keeps its holders (ADR-0049). The count is `null`, never `0`, with no active organization, for `platform_admin` and `guest`, after a truncated read, and for a caller who may not read `sys_user_position`. - **`ISecurityService.describePositionGrants`** (`@objectstack/spec` contract, served by `@objectstack/plugin-security`) is optional. A security service without it serves the list undecorated, never with empty values. - **`@objectstack/core`** exports `readPositionGrantsInForce` and `countPositionHolders`. `resolveUserAuthzGrants` now asks the same two rules for a caller, with no change in what it resolves. -- 3937697: feat: under a walled posture, `OS_PLATFORM_OWNER_ORGANIZATION` raises the access upgrade report in-app in the platform operators' own organization, beside the operator log line +- 915e940: feat: under a walled posture, `OS_PLATFORM_OWNER_ORGANIZATION` raises the access upgrade report in-app in the platform operators' own organization, beside the operator log line Clause-②: yes (widening: a new optional environment variable, `PLATFORM_OWNER_ORGANIZATION_ENV` and `resolvePlatformOwnerOrganization()` exported from `@objectstack/types`; unset, every posture behaves as before) Metadata-protocol: none @@ -523,97 +523,97 @@ - **Unchanged:** unset, the operator line is the only channel, worded as before. Under `single` the setting is ignored, and the Default Organization's administrators are told as before. The walled and `single` delivery now lives in one helper, `upgrade-report-delivery.ts`, so the non-access upgrade report (#24447) can raise its findings the same way. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/metadata-core@18.1.0 diff --git a/packages/plugins/plugin-sharing/CHANGELOG.md b/packages/plugins/plugin-sharing/CHANGELOG.md index ecc8af10854..f1bec9b3de7 100644 --- a/packages/plugins/plugin-sharing/CHANGELOG.md +++ b/packages/plugins/plugin-sharing/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 7cacad5: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat(plugin-sharing,plugin-approvals,metadata-protocol)!: the organization-less readers of sharing rules, approval units and the seed loader retire (ADR-0131 D2/D8, 18.x step 7) @@ -22,7 +22,7 @@ - **The scoped seed pre-load reads one thing: its organization's rows.** The second read that collected keys held by organization-less rows, and refused to twin or adopt them, is deleted; a scoped upsert/ignore/update issues no `organization_id IS NULL` read on any path. Remedy for a database that still holds organization-less rows: `os migrate organization-ownership --out PLAN`, review it, then `os migrate organization-ownership --apply --plan-file PLAN --backup-taken`. -- 3937697: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS +- 45f9962: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS Clause-②: yes (widening: `@objectstack/core` gains `owdForAudience`, `isExternalAudienceContext`, `externalGrantSpeaks` and the two grant-stamp keys; every narrowing below applies only to the `external` role, which no release has shipped yet) Metadata-protocol: semantic @@ -50,7 +50,7 @@ ### Patch Changes -- 3937697: feat: at boot, an administrator is told when a package upgrade renamed, removed or collided with an access item the customer switched off, cloned or authored +- 54df640: feat: at boot, an administrator is told when a package upgrade renamed, removed or collided with an access item the customer switched off, cloned or authored Clause-②: yes (widening: plugin-sharing's exported `SharingRuleService` gains `listDeclaredRules()`; the report itself refuses nothing and adds no key, code or setting) Metadata-protocol: none @@ -79,7 +79,7 @@ "The old name carrying a clone" is carried by the switch-off half. The sanctioned ceremony is clone plus switch-off, and a clone whose base stays on is not a choice a rename un-makes. A read that fails stops the report for that boot, and nothing is judged from an unread store. - **`@objectstack/plugin-sharing`:** `SharingRuleService.listDeclaredRules()` answers every declared rule with its `packageId`, or `null` when the service reads no declarations. -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -91,14 +91,14 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(spec,plugin-sharing): the `DataEvent.organizationId` description and the sharing-rule Organization help stop describing organization-less rows that 18.x no longer writes +- 60b42cd: fix(spec,plugin-sharing): the `DataEvent.organizationId` description and the sharing-rule Organization help stop describing organization-less rows that 18.x no longer writes Clause-②: no (description and help text only: no response, status, outcome, boot verdict or export moves) Metadata-protocol: none (a schema description and a field's help text; nothing a metadata author writes changes) - **`DataEvent.organizationId` (`@objectstack/spec/api`).** The description said every event on a `single`-posture deployment carries no organization, because nothing stamps the column there. Since 18.x the engine stamps every tenant row on a single-organization deployment with its Default Organization, so those events carry it. The key is now described as absent in two cases: a row of an object outside the wall, and every row of a composition that registers no organization object. The schema itself is unchanged (`z.string().min(1).optional()`). - **`sys_sharing_rule.organization_id` (`@objectstack/plugin-sharing`).** The Setup help said "null = global". A stored rule always carries its organization; a rule that applies to every organization is a declared rule. The help now reads "The organization this rule belongs to.", with the translated locales updated to match. -- 3937697: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected +- 24360dc: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected Clause-②: no Metadata-protocol: none @@ -107,7 +107,7 @@ - **`@objectstack/plugin-security`.** The Organization help on `sys_user_position` and `sys_user_permission_set` no longer says an empty value means "global" or "applies in every org context". A grant or assignment applies only in its own organization, and one with no organization applies nowhere. The four locale bundles carry the new text. - **`@objectstack/cli`.** `os migrate organization-ownership`'s warning about rows whose owner cannot be derived reads "…while one stays NULL, except on a table whose column is not the tenancy anchor." where it read "(but on a table …)". - **`@objectstack/spec`.** Wording only, no schema moves: the upgrade guide's `driver-read-scope-follows-tenant-wall` entry names update and delete "by id or by predicate"; the `sharing-rule-declared-mirror-retired` entry no longer paraphrases ADR-0131 D13 as asking an entry of every retirement; `IEmailService`'s `organizationId` TSDoc no longer says an absent value leaves the row unstamped (the engine stamps the derivable organization or refuses the insert); a TSDoc citation in `schedule-organization.zod.ts` names the run store instead of a deleted file. -- 3937697: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources +- bdf762c: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources Clause-②: no Metadata-protocol: none @@ -117,111 +117,111 @@ - **`@objectstack/spec`:** the `autoMigrate` key of the SQLite, PostgreSQL and MySQL driver configs had no JSON-Schema `title`, so the New datasource form labelled the field with the raw key `autoMigrate`. It is now titled "Auto-migrate schema". The English labels flow into the generated translation bundles; the existing zh-CN, ja-JP and es-ES option translations are kept. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [688052e] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [9340181] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/objectql@18.1.0 diff --git a/packages/plugins/plugin-webhooks/CHANGELOG.md b/packages/plugins/plugin-webhooks/CHANGELOG.md index d83ff0a21b8..a1382479051 100644 --- a/packages/plugins/plugin-webhooks/CHANGELOG.md +++ b/packages/plugins/plugin-webhooks/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -16,14 +16,14 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(plugin-webhooks): a webhook delivery the outbox could not record is now reported at `error`, once per webhook, with what was lost and how to fix it +- 3fbef41: fix(plugin-webhooks): a webhook delivery the outbox could not record is now reported at `error`, once per webhook, with what was lost and how to fix it Clause-②: no - **What was wrong.** When the `sys_http_delivery` write for a webhook event failed, the auto-enqueuer logged one bare `WARN [webhook-auto-enqueuer] enqueue failed` line per event. The event was lost: it is never sent, retried or redeliverable, because no row exists. The record write that produced the event had already answered 200, and the webhook still read active in Setup, so nothing else looked wrong. On PostgreSQL every record-update delivery was lost this way. - **What changed.** The first lost delivery for a webhook is logged at `error`. The line names the webhook, says the event is lost and why nothing else shows it, and says where the cause is (the record's meta) and what to restore. Later lost events for the same webhook are logged at `debug`, each with its `eventId`. The `error` is said again only after a delivery for that webhook was recorded in between. A logger without `error` still receives the line at `warn`. Bulk (`data.records.*`) deliveries are reported the same way. - **Unchanged.** Successful deliveries, the delivery rows, the parked-subscription path and every export. This change does not fix the PostgreSQL loss itself: that cause is upstream of the webhook plugin and is fixed separately. -- 3937697: fix(plugin-webhooks): a declared webhook that the deployment can never deliver is reported once at boot, at `error`, with the consequence and the fix +- 19e5338: fix(plugin-webhooks): a declared webhook that the deployment can never deliver is reported once at boot, at `error`, with the consequence and the fix Clause-②: no @@ -39,106 +39,106 @@ - `os validate` and `os build`: they still accept a stack that declares webhooks without these tokens. - The activation door (`POST /api/v1/security/_activation/webhook/NAME`): it answers exactly as before. - **What to do.** A stack that declares webhooks needs `requires` to include both `'webhooks'` and `'realtime'`. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [865d2c8] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0603bfa] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [58cd58f] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [d68aab6] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [c24203f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [a39389e] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [284e048] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [1f78b64] +- Updated dependencies [bc5daf0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [8878c36] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/service-messaging@18.1.0 diff --git a/packages/qa/dogfood/CHANGELOG.md b/packages/qa/dogfood/CHANGELOG.md index 795730fc124..978dee13a2d 100644 --- a/packages/qa/dogfood/CHANGELOG.md +++ b/packages/qa/dogfood/CHANGELOG.md @@ -4,195 +4,195 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [54df640] +- Updated dependencies [448374d] +- Updated dependencies [e207b97] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [9a06f0b] +- Updated dependencies [f90ea67] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [c2d4072] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [abd5acd] +- Updated dependencies [6b9e6df] +- Updated dependencies [fbb42d9] +- Updated dependencies [73a2b52] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [6440cf1] +- Updated dependencies [72518d2] +- Updated dependencies [e5b3de0] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [4cef6e2] +- Updated dependencies [28ff8a9] +- Updated dependencies [55d7aab] +- Updated dependencies [98c3d00] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [3fbef41] +- Updated dependencies [72a302a] +- Updated dependencies [ba69b16] +- Updated dependencies [865d2c8] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [abc25a3] +- Updated dependencies [e282f32] +- Updated dependencies [3d8960c] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [ea08ce5] +- Updated dependencies [19e5338] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0603bfa] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [b811c73] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [688052e] +- Updated dependencies [5d27d32] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [7f99616] +- Updated dependencies [9532e27] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [58cd58f] +- Updated dependencies [58cd58f] +- Updated dependencies [69712d5] +- Updated dependencies [d68aab6] +- Updated dependencies [aaee084] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [b289090] +- Updated dependencies [386f60f] +- Updated dependencies [c24203f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [0f1eeee] +- Updated dependencies [f46ef4d] +- Updated dependencies [3782b2d] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [a39389e] +- Updated dependencies [9340181] +- Updated dependencies [9340181] +- Updated dependencies [2e242bb] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [db9c02a] +- Updated dependencies [284e048] +- Updated dependencies [c6bdcac] +- Updated dependencies [02ad31a] +- Updated dependencies [0148071] +- Updated dependencies [03966ce] +- Updated dependencies [331613c] +- Updated dependencies [5801a4f] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [8010b64] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [1f78b64] +- Updated dependencies [bc5daf0] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [72fad92] +- Updated dependencies [a285ff2] +- Updated dependencies [829cb77] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [b9c7a8f] +- Updated dependencies [7db1697] +- Updated dependencies [b3fddd1] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [ab510f4] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [4374f3c] +- Updated dependencies [d0a1361] +- Updated dependencies [431327b] +- Updated dependencies [97aa34e] +- Updated dependencies [2b7c331] +- Updated dependencies [8878c36] +- Updated dependencies [832a84e] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0b8dbea] +- Updated dependencies [0ec4c5a] +- Updated dependencies [35d942e] - Updated dependencies [a57643d] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [b8c9590] +- Updated dependencies [aa2dbab] - Updated dependencies [4a25192] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [025f6de] +- Updated dependencies [6abee03] +- Updated dependencies [f7d7403] - @objectstack/plugin-security@18.1.0 - @objectstack/plugin-sharing@18.1.0 - @objectstack/spec@18.1.0 diff --git a/packages/qa/downstream-contract/CHANGELOG.md b/packages/qa/downstream-contract/CHANGELOG.md index cc0f60a131d..6d4338f4bd4 100644 --- a/packages/qa/downstream-contract/CHANGELOG.md +++ b/packages/qa/downstream-contract/CHANGELOG.md @@ -4,66 +4,66 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 0.0.46 diff --git a/packages/qa/http-conformance/CHANGELOG.md b/packages/qa/http-conformance/CHANGELOG.md index 151e7525ec3..d00714331eb 100644 --- a/packages/qa/http-conformance/CHANGELOG.md +++ b/packages/qa/http-conformance/CHANGELOG.md @@ -4,18 +4,18 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [94842ba] +- Updated dependencies [644e4b2] +- Updated dependencies [dfe60e3] +- Updated dependencies [8dfd126] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [d196748] +- Updated dependencies [db1c7cc] +- Updated dependencies [b3034ee] +- Updated dependencies [27b3f1f] - Updated dependencies [9f39094] - @objectstack/core@18.1.0 diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index d2b559a67c6..091164c812d 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language +- eddffc3: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language Clause-②: yes (widening) @@ -17,7 +17,7 @@ ### Patch Changes -- 3937697: fix(rest): a lookup cell in the list export names the record by the target object's title field (#24944) +- f802213: fix(rest): a lookup cell in the list export names the record by the target object's title field (#24944) Clause-②: no @@ -28,7 +28,7 @@ - **Field-level security.** When the caller cannot read the target's title field, the `$expand` read leaves it off the record. The cell then shows the record's id. Another column, such as the job title, no longer stands in for the name. - **Visible change.** A target with a literal `name` column and a different declared title now exports the declared title. For example, an account with `nameField: 'display_title'` exports its display title instead of `name`. - **Unchanged.** No query parameter, header, column set or payload shape moves. Only the text of a lookup cell changes. -- 3937697: fix(rest): a boolean cell in the list export is written in the caller's language (#24945) +- 86d2360: fix(rest): a boolean cell in the list export is written in the caller's language (#24945) Clause-②: no @@ -38,12 +38,12 @@ - **No locale at all.** When the request names no locale and the deployment declares no default, the cells read `yes` / `no`, the same words the import template writes then. - **Re-import.** A file exported in either language re-imports its boolean column: the importer reads `yes` / `no` and `是` / `否`. - **Unchanged.** No query parameter, header, column set or payload shape moves. Only the text of a boolean cell changes, and a Chinese caller's file is byte-for-byte what it was. -- 3937697: fix(rest): the API docs viewer escapes the request-derived openapi URL for the attribute it lands in +- 4f97aeb: fix(rest): the API docs viewer escapes the request-derived openapi URL for the attribute it lands in The `GET {base}/docs` viewer page builds the sibling openapi URL from the request and places it into a `data-url="…"` attribute of a script element. It interpolated that value into the attribute with no escaping, so a character the attribute context interprets reached the served markup as itself rather than as the matching HTML entity. The value is now escaped for its attribute context (ruling 3C on #25040: every outlet that renders a value into HTML escapes it by the context it lands in): the five characters a quoted attribute or element text interprets become their entities, and a browser decodes each back to the original character for the page script. A URL carrying none of those characters is served byte-identically. Clause-②: no -- 3937697: fix(rest)!: the CSV export writes a text cell its consumer would interpret in a form that consumer reads as text, and the CSV import reverses exactly that +- c4b49c3: fix(rest)!: the CSV export writes a text cell its consumer would interpret in a form that consumer reads as text, and the CSV import reverses exactly that Clause-②: no (narrowing) — the CSV export serves different bytes for some text cells, and the CSV import parse reads a cell of the same shape differently; nothing is widened. Metadata-protocol: none (a REST export's bytes and a REST import's parse; nothing a metadata author writes changes) @@ -60,7 +60,7 @@ - **Measured.** A value beginning with TAB or CR is marked; the import removes the mark, and the default `trimWhitespace: true` then trims the leading TAB or CR exactly as it did before. With `trimWhitespace: false` it returns exactly. - **Unchanged.** Every other cell; numeric, boolean, date and datetime cells; the xlsx and json export formats; json and xlsx import payloads. - **What to do.** Nothing for a file that goes back through these import doors. A program that reads the CSV export some other way and needs the stored text applies the same reversal: remove one leading apostrophe from a cell whose rest the export would mark, by the rule in this repository's `packages/rest/src/export-format.ts`. -- 3937697: feat(rest)!: `GET {base}/docs`, the OpenAPI document's HTML viewer page, is retired; `GET {base}/openapi.json` stays +- 1b3b65e: feat(rest)!: `GET {base}/docs`, the OpenAPI document's HTML viewer page, is retired; `GET {base}/openapi.json` stays Clause-②: no (narrowing) Metadata-protocol: none @@ -76,7 +76,7 @@ - `api.enableOpenApi` now gates one route, the document. What changes for you. If you opened the page, load the document from `GET {base}/openapi.json` into an OpenAPI viewer of your choice. -- 3937697: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both +- 27b3f1f: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both Clause-②: yes (widening: `GET /meta/position?include=grants` adds two read-only served keys per position, `_holderCount` and `_grantedPermissionSets`; `ISecurityService` gains the optional `describePositionGrants`) Metadata-protocol: none @@ -89,7 +89,7 @@ - **`_holderCount`** counts the people who hold the position in the caller's active organization, by the rule the resolver uses to give a caller positions: `sys_user_position` rows in their validity window, membership roles, and `everyone` for every active member. A switched-off position keeps its holders (ADR-0049). The count is `null`, never `0`, with no active organization, for `platform_admin` and `guest`, after a truncated read, and for a caller who may not read `sys_user_position`. - **`ISecurityService.describePositionGrants`** (`@objectstack/spec` contract, served by `@objectstack/plugin-security`) is optional. A security service without it serves the list undecorated, never with empty values. - **`@objectstack/core`** exports `readPositionGrantsInForce` and `countPositionHolders`. `resolveUserAuthzGrants` now asks the same two rules for a caller, with no change in what it resolves. -- 3937697: fix(rest)!: `POST /api/v1/meta/:type/:name/rollback` accepts only a positive integer as `toVersion`, and refuses everything else with its own `400 INVALID_REQUEST` instead of coercing it into a version +- 0fab7ba: fix(rest)!: `POST /api/v1/meta/:type/:name/rollback` accepts only a positive integer as `toVersion`, and refuses everything else with its own `400 INVALID_REQUEST` instead of coercing it into a version Clause-②: no (narrowing) Metadata-protocol: none @@ -104,7 +104,7 @@ - **TO:** the body value must be a JSON number that is a whole number of at least 1. A `?toVersion=` query string is read the way `/diff` reads its versions (`readDeclaredQueryNumber`), so `?toVersion=3` still restores version 3. Everything else, `true`, `[2]`, `"2"`, `1.5`, `0`, `-1`, `"abc"`, a blank or non-finite query value, answers `400 INVALID_REQUEST` with the same message as before, and nothing is restored. - **Unchanged:** the precedence (`toVersion`, then `version`, then `?toVersion=`), the capability and walled-catalog gates in front of it, and every answer for a valid version. The client SDK's `rollbackItem` and the console's metadata client already send a JSON number. - **Fix:** send `toVersion` as a JSON number, for example `{"toVersion": 2}`. -- 3937697: fix(rest)!: a credential is honoured only in the environment whose auth service validated it, on every route behind the shared auth gate +- 1361a5a: fix(rest)!: a credential is honoured only in the environment whose auth service validated it, on every route behind the shared auth gate Clause-②: yes (narrowing) Metadata-protocol: none @@ -119,96 +119,96 @@ - **Who sees it.** Only a multi-environment host whose per-environment kernels carry no `auth` service while the default environment's does. Such a request now answers `401`. **The remedy.** Give each environment's kernel its own `auth` service, and sign in to the environment you call. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/metadata-core@18.1.0 diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index a6a60319893..cdbc6ee0f60 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(runtime)!: `POST /api/v1/packages/:id/adopt-orphans` refuses a read-only package with `422 WRITABLE_PACKAGE_REQUIRED`, as the other package write doors already do +- 4cef6e2: fix(runtime)!: `POST /api/v1/packages/:id/adopt-orphans` refuses a read-only package with `422 WRITABLE_PACKAGE_REQUIRED`, as the other package write doors already do ADR-0070 D2 makes a package the deployment ships read-only: one booted by code, one installed from the marketplace, and one whose manifest `scope` is `system` or `cloud`. `isWritablePackage` is that rule, and every other door that changes a package (`POST /packages` with `overwrite`, `PATCH /packages/:id`, `PATCH /packages/:id/disable`, `POST /packages/:id/publish`, `POST /packages/:id/revert`, `DELETE /packages/:id`) refuses such a package with `422 WRITABLE_PACKAGE_REQUIRED`. The orphan-adoption door never asked the rule, and the protocol's `reassignOrphanedMetadata` asks none of its own: it rebinds every package-less `sys_metadata` row to whatever id it is handed. So a `manage_metadata` holder's adoption into such a package answered `200` and bound the environment's loose items into it. The door now asks the same rule after the capability gate and the walled refusal, and before the protocol is resolved. @@ -21,7 +21,7 @@ ### Patch Changes -- 3937697: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor +- 94842ba: feat(core,plugin-security)!: a grant applies only in its own organization — an organization-less grant row confers nothing, and the Default Organization's `admin_full_access` grant is the only platform-admin anchor Clause-②: yes (narrowing) @@ -37,7 +37,7 @@ - **What a lean composition sees.** A composition that registers no organization object (`sys_organization`, which plugin-auth ships) still stores grants without an organization, and those grants now confer nothing. No shipped composition does this: `os serve` registers the security plugin only together with plugin-auth. **What an operator does.** Nothing beyond the upgrade itself: run `os migrate organization-ownership` before serving a database that 17.x or an 18.0 pre-release created. The server refuses such a database until you do. If an embedding composes `@objectstack/plugin-security` without plugin-auth, register the organization object so that grants carry an organization. -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -49,7 +49,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(service-automation,runtime): a flow whose data node is refused answers its caller with the refusal structured — `details.innerRefusal` and the producer-marked `userMessage` on every door's `400 FLOW_FAILED` — beside an unchanged `message` +- 9cfc575: fix(service-automation,runtime): a flow whose data node is refused answers its caller with the refusal structured — `details.innerRefusal` and the producer-marked `userMessage` on every door's `400 FLOW_FAILED` — beside an unchanged `message` Clause-②: yes (widening) Metadata-protocol: none @@ -61,7 +61,7 @@ - **Unchanged.** Every `error` / `message` text, byte for byte — the node's, the engine's prefix, the stored run, approvals and each door's wording. The in-flow `$error.code` keeps the engine's in-process `DUPLICATE_RECORD`. `error.code` stays `FLOW_FAILED`, and `AutomationResult.code` stays the closed union. **For consumers.** A flow runner can render a refused run the way a record form renders a refused save: the top-level `userMessage` when present, then `details.innerRefusal`, then `message`. A client that does not read the new members keeps its current behaviour. A container that rewords a child's failure into its own (`try_catch` without a catch region, `subflow`) does not forward the members yet; the run then carries none. -- 3937697: fix(runtime)!: the `/mcp` bridge reads objects from the protocol's merged view, so `list_objects` and `describe_object` see every object `GET /api/v1/meta/object` lists, a package object declared `apiEnabled: false` is refused by every data verb, and so is every object of a disabled package (`404 OBJECT_PACKAGE_DISABLED`) +- a1e51d6: fix(runtime)!: the `/mcp` bridge reads objects from the protocol's merged view, so `list_objects` and `describe_object` see every object `GET /api/v1/meta/object` lists, a package object declared `apiEnabled: false` is refused by every data verb, and so is every object of a disabled package (`404 OBJECT_PACKAGE_DISABLED`) Clause-②: no (narrowing) Metadata-protocol: none @@ -77,7 +77,7 @@ - **Also changed.** A disabled package's objects, where the `metadata` service still held a copy, were listed and described by `/mcp`; they are now omitted, as REST omits them. Every data verb on `/mcp`, and every well-formed request on the dispatcher's `/data` door, now refuses a disabled package's object `404 OBJECT_PACKAGE_DISABLED` at the exposure gate, whatever the object declares: the code and status `RestServer` answers for it on every `/data` route. On that door, as on REST, a body that is not a record is still answered `400 VALIDATION_FAILED` first. Such an object declared `apiEnabled: false` was refused `404 OBJECT_API_DISABLED` where the copy existed. `aggregate_records`, whose arm asks the engine and never the protocol, served a disabled package's exposed object on every kernel, and its object declared `apiEnabled: false` wherever no copy existed. When the metadata store cannot be read, `list_objects` and `describe_object` answer the store's `503 SERVICE_UNAVAILABLE`, as `GET /api/v1/meta/object` does, instead of the `metadata` service's listing. - **Unchanged.** Objects that already had a copy (every object on a kernel without an `environmentId`, a marketplace install on any kernel, and a runtime-authored object) are listed and gated as before, and `describe_object` answers the definition `GET /api/v1/meta/object` serves for them. A host whose `protocol` service has no merged read keeps reading the `metadata` service. If the merged by-name read fails, the gate judges the `metadata` service's copy, as it did before. - **What to do.** Nothing, if the declarations say what you mean. An agent that relied on reaching an object declared `apiEnabled: false` through `/mcp` or the dispatcher's `/data` door was relying on the defect: set `enable.apiEnabled` (or `enable.apiMethods`) on the object to the exposure you want. An agent that read aggregates of a disabled package's objects through `aggregate_records` was relying on the same kind of defect: re-enable the package to restore access, as REST says. -- 3937697: fix(runtime)!: the `/mcp` bridge's `list_actions`, `run_action` and `resume_run` read an object's actions from the listing `list_objects` serves, so a package object's actions are listed and run on every kernel, and a disabled package's are omitted as its objects are +- fb7501b: fix(runtime)!: the `/mcp` bridge's `list_actions`, `run_action` and `resume_run` read an object's actions from the listing `list_objects` serves, so a package object's actions are listed and run on every kernel, and a disabled package's are omitted as its objects are Clause-②: no (narrowing) Metadata-protocol: none @@ -93,7 +93,7 @@ - **Also changed.** A disabled package's actions, where the `metadata` service still held a copy of its objects (every kernel without an `environmentId`, and a marketplace install on any kernel), were listed and run: a script action's body ran, a declarative update was refused at the record load. They are now omitted from `list_actions`, `run_action` answers `Action 'NAME' not found on object 'OBJECT'` for them, and `resume_run` refuses their runs `403`, as `describe_object` answers their objects "not found". When the protocol's merged listing throws, the three tools fail with that error, as `list_objects` does, instead of reading the `metadata` service's listing. - **Unchanged.** Actions on objects that already had a copy are listed and run as before. Standalone `action` rows are still read from the `metadata` service (`loadMany('action')`), and an object-embedded declaration still wins over one with the same object and name. A host with no `protocol` service, or one without the merged listing, keeps reading the `metadata` service. REST's `/actions` door is untouched. - **What to do.** Nothing. An agent that ran a disabled package's action through MCP was running an action whose objects the rest of the platform no longer serves: re-enable the package to restore it. -- 3937697: fix(runtime)!: REST's `POST /api/v1/actions/OBJECT/NAME` refuses an action on an object whose owning package is disabled `404 OBJECT_PACKAGE_DISABLED`, the data plane's answer for that object, before any handler runs +- 258f4e6: fix(runtime)!: REST's `POST /api/v1/actions/OBJECT/NAME` refuses an action on an object whose owning package is disabled `404 OBJECT_PACKAGE_DISABLED`, the data plane's answer for that object, before any handler runs Clause-②: no (narrowing) Metadata-protocol: none @@ -108,7 +108,7 @@ - **Now.** Each of those is refused `404 OBJECT_PACKAGE_DISABLED`, with the error the data plane raises for the object, before any gate reads the action's declaration and before any record load or dispatch. The anonymous baseline still answers first. - **Unchanged.** Actions on objects of an enabled package run as before, as does every gate after this one. Re-enabling the package restores the actions at once: nothing records the refusal. An object-less action (`POST /api/v1/actions/global/NAME`) names no object and is not affected. The activation door (`POST /api/v1/actions/_activation/OBJECT/NAME`) is untouched. - **What to do.** Nothing. A caller that ran a disabled package's action through REST was running code of a package the rest of the platform no longer serves: re-enable the package to restore it. -- 3937697: fix(runtime)!: the `/mcp` bridge's `list_actions`, `run_action` and `resume_run` read the actions no object embeds from the merged `action` listing, so a package's object-less action and an environment-authored one are listed and run, and a disabled package's is omitted +- 882372d: fix(runtime)!: the `/mcp` bridge's `list_actions`, `run_action` and `resume_run` read the actions no object embeds from the merged `action` listing, so a package's object-less action and an environment-authored one are listed and run, and a disabled package's is omitted Clause-②: no (narrowing) Metadata-protocol: none @@ -124,7 +124,7 @@ - **Also changed.** A compiled-artifact package's object-less action stayed in the loader after the package was disabled, so it was still listed and run. It is now omitted from `list_actions`, and `run_action` answers `Action 'NAME' not found` for it, as the package's objects are omitted since #25120. When the merged `action` listing throws, the three tools fail with that error instead of reading the `metadata` service. - **Unchanged.** The compiled artifact's actions are listed and run as before. An object-embedded declaration still wins over a standalone one with the same object and name. A host with no `protocol` service, or one without the merged listing, keeps reading `loadMany('action')`. REST's `/actions` door is untouched. - **What to do.** Nothing. An agent that ran a disabled package's action through MCP was running an action whose package the rest of the platform no longer serves: re-enable the package to restore it. -- 3937697: fix(runtime)!: REST's `POST /api/v1/actions/global/NAME` answers an object-less action of a disabled package the "no declaration" `404` a name nothing declares gets, before any handler runs +- eee2f0d: fix(runtime)!: REST's `POST /api/v1/actions/global/NAME` answers an object-less action of a disabled package the "no declaration" `404` a name nothing declares gets, before any handler runs Clause-②: no (narrowing) Metadata-protocol: none @@ -140,7 +140,7 @@ - **Also.** The activation door (`POST /api/v1/actions/_activation/OBJECT/NAME`) resolves through the same function, so a disabled package's standalone action is answered there by that door's own "no declaration" `404` too, where a flip wrote a ledger row before. Re-enable the package to switch it. - **Unchanged.** An enabled package's object-less actions, and an environment-authored one (no owning package), run as before, through a disable of any package. Re-enabling the package restores its actions at once: nothing records the answer. A host whose protocol has no by-name read resolves from the registry and the metadata service, as before. - **What to do.** Nothing. A caller that ran a disabled package's action through REST was running code of a package the rest of the platform no longer serves: re-enable the package to restore it. -- 3937697: feat: Setup → API Keys → Create Key offers the key's expiry, and a date past the policy's maximum is refused with the policy named +- c898bd8: feat: Setup → API Keys → Create Key offers the key's expiry, and a date past the policy's maximum is refused with the policy named Clause-②: yes Metadata-protocol: none @@ -148,7 +148,7 @@ Create Key asked only for a name, so every key silently got the default life the Authentication API key policy sets, and the list then showed an expiry the admin never chose. The `sys_api_key` action `create_api_key` now declares an optional `expires_at` param, the second body key `POST /api/v1/keys` already reads. Its help text says what an empty field means (the policy's Default key lifetime, 90 days unless changed) and that a date later than the policy's Maximum key lifetime is refused. The param has no literal default on purpose: an action param default is submitted verbatim, so a fixed date there would override the deployment's policy instead of following it. The reveal dialog now shows the expiry the key actually got, beside the key. The route behaviour is unchanged: an empty field gets the policy's default life, and a date past the maximum is refused `400 API_KEY_EXPIRY_TOO_LONG`, never clamped. That refusal's message now names the setting that decided it ("the Authentication API key policy's Maximum key lifetime is N days") next to the latest date allowed. -- 3937697: fix(service-sms, runtime): the Send test SMS refusals and the flow clone notice name the admin's controls instead of a REST recipe (#25345) +- 2b7c331: fix(service-sms, runtime): the Send test SMS refusals and the flow clone notice name the admin's controls instead of a REST recipe (#25345) Clause-②: no Metadata-protocol: none @@ -159,7 +159,7 @@ - **Flow clone notice** (`FLOW_CLONE_NOTICE`, returned by `POST /api/v1/automation/:name/clone`): the notice told the admin to `PUT` the clone's complete definition with `status: 'obsolete'`, and named the toggle endpoint. It now names the two switches the console has. A packaged original is switched off with its Switch "…" off action on the Packaged automation page, and that switch does not reach the clone. The clone is switched off in Studio, with its Enabled switch and a publish. The REST recipe stays in the client SDK's `automation.toggle` TSDoc. No route, response shape, status or code changes: only the message text does. A caller that compared either string verbatim must update its copy. -- 3937697: fix: `POST /api/v1/packages/:id/publish-drafts` probes dashboard widgets as the publishing caller, so a correct dataset over a permission-gated object is no longer reported as an error-tier `widget_query_failed` +- 35d942e: fix: `POST /api/v1/packages/:id/publish-drafts` probes dashboard widgets as the publishing caller, so a correct dataset over a permission-gated object is no longer reported as an error-tier `widget_query_failed` Clause-②: no Metadata-protocol: none @@ -170,164 +170,164 @@ - **`@objectstack/metadata-protocol`:** `publishPackageDrafts` passes that context to `runBuildProbes`, which takes a new optional `context`. The widget probe runs `queryDataset` as that caller, the same path the dashboard renderer takes. "Empty although the object has rows" is now judged over the rows that caller can see. The probe never falls back to a system context. A publisher who cannot read the dataset still gets the error-tier `widget_query_failed`, because that widget will not render for them either. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [54df640] +- Updated dependencies [448374d] +- Updated dependencies [e207b97] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [f90ea67] +- Updated dependencies [c2d4072] +- Updated dependencies [78ab647] +- Updated dependencies [6b9e6df] +- Updated dependencies [fbb42d9] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [6440cf1] +- Updated dependencies [72518d2] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [55d7aab] +- Updated dependencies [98c3d00] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [eee65af] +- Updated dependencies [72a302a] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [abc25a3] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [ea08ce5] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [b811c73] +- Updated dependencies [f802213] +- Updated dependencies [86d2360] +- Updated dependencies [688052e] +- Updated dependencies [5d27d32] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [5d66021] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [9532e27] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [aaee084] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [b289090] +- Updated dependencies [386f60f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [8c73398] +- Updated dependencies [f46ef4d] +- Updated dependencies [3782b2d] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [9340181] +- Updated dependencies [9340181] +- Updated dependencies [2e242bb] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4f97aeb] +- Updated dependencies [c4b49c3] +- Updated dependencies [db9c02a] +- Updated dependencies [c6bdcac] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [0148071] +- Updated dependencies [03966ce] +- Updated dependencies [1b3b65e] +- Updated dependencies [331613c] +- Updated dependencies [5801a4f] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [17f3c65] +- Updated dependencies [b62f959] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [a285ff2] +- Updated dependencies [829cb77] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [b9c7a8f] +- Updated dependencies [69913f8] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [431327b] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0fab7ba] +- Updated dependencies [35d942e] +- Updated dependencies [ce18e73] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] +- Updated dependencies [6abee03] +- Updated dependencies [1361a5a] - @objectstack/plugin-security@18.1.0 - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-analytics/CHANGELOG.md b/packages/services/service-analytics/CHANGELOG.md index c57cd949aec..4a52e295942 100644 --- a/packages/services/service-analytics/CHANGELOG.md +++ b/packages/services/service-analytics/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit +- 0b8bce4: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit Clause-②: no Metadata-protocol: none @@ -13,7 +13,7 @@ - **`@objectstack/service-analytics`.** The engine-bound merges (`ObjectQLStrategy.withReadScope`, its FK attribute map, and the plugin's record-label pass) admit the leaf and hand the scope to the engine, which composes it as a find does. `NativeSQLStrategy.canHandle` declines a query whose base or joined object's read scope carries the leaf, so a `controlled_by_parent` object's analytics query routes to the ObjectQL strategy and serves the find path's rows. `compileScopedFilterToSql` refuses a scope carrying the leaf by name, in its existing `READ_SCOPE_COMPILE_FAILED` / 500 envelope: the `/api/v1/analytics/sql` dry-run echo of a `controlled_by_parent` object now refuses where it rendered the bound id list — it runs no composition and shows no statement it would not run. A filter an author writes keeps its judgement on every face. - **`@objectstack/driver-turso`.** The remote face resolves a composed leaf nested inside a composed leaf's scope through `toRemoteWhere` with the outer read's options, so a two-level `controlled_by_parent` chain on a remote Turso datasource answers rows instead of `INTERNAL_ERROR` / 500. - **`@objectstack/spec`.** One nested-leaf row in `READABLE_IDS_CASES`, so every driver's conformance suite measures the shape, and the comparand-shape door's docblock names both callers that pass `admitReadableIds`. No schema, accept set or export of a metadata key moves. -- 3937697: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" +- 830a63a: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" Clause-②: no Metadata-protocol: none @@ -23,75 +23,75 @@ - **`@objectstack/spec`:** `AnalyticsResult.fields[]` and its mirror `AnalyticsResultResponseSchema` gain the optional response member `nullLabel?: string`, the display name of a dimension column's null bucket. It is a response member only; nothing an author writes changes. - **`@objectstack/service-analytics`:** the column-description pass shared by the live query and the draft-data preview sets `fields[].nullLabel` on a dimension column whose dataset dimension declares `nullLabel`, resolved to a string at the request locale by the same resolver as `label`. A dimension without one, and every measure column, carry no `nullLabel` key, so those answers are byte-identical to before. - **`@objectstack/platform-objects`:** the `sys_audit_log_metrics` dataset's `user_id` dimension declares `nullLabel: { en: 'System', 'zh-CN': '系统', 'ja-JP': 'システム', 'es-ES': 'Sistema' }`. The rows the platform writes itself carry no user, and System Overview's "Events by User" drew them, its largest bar, under the renderer's default "(None)". Once the console reads `fields[].nullLabel`, that bar reads "System". -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-automation/CHANGELOG.md b/packages/services/service-automation/CHANGELOG.md index 2ae62aded0e..5abb79b7598 100644 --- a/packages/services/service-automation/CHANGELOG.md +++ b/packages/services/service-automation/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -16,7 +16,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` +- 7532ea3: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` Clause-②: yes (widening) @@ -28,7 +28,7 @@ - **Flow step warning.** `@objectstack/service-automation` words the new reason. Its warning says the requested value(s) were not stored, rather than that the field was not written, and its closing sentence says the write succeeded with the computed value(s). **For consumers that branch on `reason`.** A `Record<DroppedFieldsEvent['reason'], …>` table fails its typecheck until it has a `stored_expression` row. That is the intended signal: add the row. A client running behind the server should treat a reason it does not recognise as "not applied", never as one of the known reasons. -- 3937697: fix(service-automation,runtime): a flow whose data node is refused answers its caller with the refusal structured — `details.innerRefusal` and the producer-marked `userMessage` on every door's `400 FLOW_FAILED` — beside an unchanged `message` +- 9cfc575: fix(service-automation,runtime): a flow whose data node is refused answers its caller with the refusal structured — `details.innerRefusal` and the producer-marked `userMessage` on every door's `400 FLOW_FAILED` — beside an unchanged `message` Clause-②: yes (widening) Metadata-protocol: none @@ -40,110 +40,110 @@ - **Unchanged.** Every `error` / `message` text, byte for byte — the node's, the engine's prefix, the stored run, approvals and each door's wording. The in-flow `$error.code` keeps the engine's in-process `DUPLICATE_RECORD`. `error.code` stays `FLOW_FAILED`, and `AutomationResult.code` stays the closed union. **For consumers.** A flow runner can render a refused run the way a record form renders a refused save: the top-level `userMessage` when present, then `details.innerRefusal`, then `message`. A client that does not read the new members keeps its current behaviour. A container that rewords a child's failure into its own (`try_catch` without a catch region, `subflow`) does not forward the members yet; the run then carries none. -- 3937697: fix: the `get_record` designer form no longer offers a `limit` below 1 +- 2581efb: fix: the `get_record` designer form no longer offers a `limit` below 1 Clause-②: no Metadata-protocol: none The `get_record` node's `limit` is a positive integer, and every flow save door refuses `0`, a negative or a fraction. The executor's form descriptor still declared `limit` as a bare integer, so the designer form offered values the save always refused. The descriptor's `limit` now declares `minimum: 1`, the same floor as the contract. Nothing a flow can store changes; only the form stops offering what the save refuses. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [17f3c65] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [b531016] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [9d96b2b] +- Updated dependencies [5f30f00] +- Updated dependencies [69913f8] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [35d942e] +- Updated dependencies [ce18e73] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/metadata-protocol@18.1.0 diff --git a/packages/services/service-cache/CHANGELOG.md b/packages/services/service-cache/CHANGELOG.md index 53839496c21..2bd4f531003 100644 --- a/packages/services/service-cache/CHANGELOG.md +++ b/packages/services/service-cache/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-cluster-redis/CHANGELOG.md b/packages/services/service-cluster-redis/CHANGELOG.md index 9d0abf9f549..1ae210a0ed2 100644 --- a/packages/services/service-cluster-redis/CHANGELOG.md +++ b/packages/services/service-cluster-redis/CHANGELOG.md @@ -4,66 +4,66 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 - @objectstack/service-cluster@18.1.0 diff --git a/packages/services/service-cluster/CHANGELOG.md b/packages/services/service-cluster/CHANGELOG.md index ccc7f267bd3..fca5dbe7662 100644 --- a/packages/services/service-cluster/CHANGELOG.md +++ b/packages/services/service-cluster/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-datasource/CHANGELOG.md b/packages/services/service-datasource/CHANGELOG.md index 7f5e5301627..b46f2cc1aa5 100644 --- a/packages/services/service-datasource/CHANGELOG.md +++ b/packages/services/service-datasource/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 6b9e6df: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(service-datasource): Setup → Datasources: Test answers truthfully for the platform's primary datasource and for drivers that cannot introspect, and Sync on the primary datasource refuses with the true reason @@ -17,7 +17,7 @@ - **New, optional: `ExternalDatasourceServiceConfig.liveDriver`.** `(datasource) => driver | undefined` returns the live driver registered for a datasource, resolved by the primary datasource's naming rule. `ExternalDatasourceServicePlugin` wires it. Test reads it to reach the primary datasource and drivers without schema introspection. What to do: nothing, if the plugin builds the service. If you build `ExternalDatasourceService` yourself, pass `liveDriver` to get the new Test answers; without it, Test stays the introspection round trip, as before. -- 3937697: fix(driver-sql): a SQLite file whose bytes are not a SQLite database fails `connect()` at once, naming the file, and a development boot no longer moves it aside and replaces it with an empty database (#24960) +- 7f99616: fix(driver-sql): a SQLite file whose bytes are not a SQLite database fails `connect()` at once, naming the file, and a development boot no longer moves it aside and replaces it with an empty database (#24960) `SqlDriver.connect()` runs `PRAGMA auto_vacuum` as the connection's first statement. On a file that is not a SQLite database (plain text, another format, a file encrypted by another engine) SQLite answers `SQLITE_NOTADB`, which `connect()` logged as "Failed to set PRAGMA auto_vacuum=INCREMENTAL" and swallowed. It resolved over a file it could not read. In production the first query failed later. On a development boot, `resolveSqliteDriver` (`@objectstack/service-datasource`) answered the failed probe by stepping down to wasm SQLite, whose open renamed the file to `<file>.corrupt-<timestamp>`, wrote an empty database in its place and read `connected`, under a warning that blamed the native addon. @@ -32,7 +32,7 @@ - **Before:** `connect()` resolved; in production the first query failed with `DATABASE_ERROR`, and on a development boot the file was renamed to `<file>.corrupt-<timestamp>` and an empty database was written in its place. - **Now:** `connect()` rejects with `SqliteDatabaseFileError`, `code: 'SQLITE_NOTADB'`, naming the file; the file is untouched. - **Fix:** point the datasource at a SQLite database file, or move the file aside yourself (an absent file is created empty on the next connect). -- 3937697: fix(driver-sql): a SQLite database whose header SQLite cannot read fails `connect()` at once, naming the file, and a dangling symbolic link as the database's directory is refused on the boot that writes, as the read-only boot already refused it (#25019) +- d6a5fa3: fix(driver-sql): a SQLite database whose header SQLite cannot read fails `connect()` at once, naming the file, and a dangling symbolic link as the database's directory is refused on the boot that writes, as the read-only boot already refused it (#25019) Three more SQLite files a declared datasource cannot use, each now classified by the file's own driver at connect: @@ -51,7 +51,7 @@ - **Before:** `connect()` resolved; in production the first query failed with `DATABASE_ERROR`, and on a development boot a damaged file was renamed to `<file>.corrupt-<timestamp>` and replaced with an empty database, and a dangling-link directory stepped down to wasm SQLite under a warning that blamed the native addon. The read-only boot reported a dangling file link connected. - **Now:** `connect()` rejects with `SqliteDatabaseFileError`, `code: 'SQLITE_CORRUPT'` for the damaged file and `code: 'ENOENT'` for the dangling-link directory, naming the file (and the link); the read-only boot rejects the dangling file link with `code: 'ENOENT'`, naming its target. The file is untouched. - **Fix:** restore the database from a backup, or move the damaged file aside yourself (an absent file is created empty on the next connect); point the dangling link at a directory that exists, or point the datasource at a real path. -- 3937697: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource +- 2354058: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource Clause-②: no (narrowing) @@ -91,7 +91,7 @@ ### Blast radius Measured on this tree: no example, template, CLI scaffold, published skill, host default or environment variable authors the key. A tree-scoped absence pin now holds that. Whether any out-of-repo deployment declares it is not measured, and is not claimed to be zero. -- 3937697: fix(service-datasource)!: the datasource admin API refuses to make a datasource managed while objects bind it with `external`, as the metadata save door does +- b9c7a8f: fix(service-datasource)!: the datasource admin API refuses to make a datasource managed while objects bind it with `external`, as the metadata save door does Clause-②: no (narrowing) @@ -111,7 +111,7 @@ ### Patch Changes -- 3937697: fix(service-datasource)!: Sync (remote tables, object draft, import, catalog refresh) refuses a managed datasource with the existing `400`, because ADR-0015 §4.2 reserves federation for a datasource whose `schemaMode` is not `managed` +- 72a302a: fix(service-datasource)!: Sync (remote tables, object draft, import, catalog refresh) refuses a managed datasource with the existing `400`, because ADR-0015 §4.2 reserves federation for a datasource whose `schemaMode` is not `managed` Clause-②: no (narrowing) Metadata-protocol: none @@ -124,7 +124,7 @@ - **TO:** each of those requests answers `400` with the code its door already serves for a refusal, `EXTERNAL_DATASOURCE_ERROR` (the import: `EXTERNAL_IMPORT_ERROR`), and a message naming the rule and the remedy. Nothing is introspected, drafted, saved or stored. A name with no datasource definition gets the same refusal: nothing declares it a federation source. - **Unchanged:** `default` keeps its own refusal and message. A datasource declared `schemaMode: 'external'` or `'validate-only'` lists, drafts, imports and refreshes as before. Test (`POST /api/v1/datasources/:name/test`) and validation (`POST /api/v1/datasources/:name/external/validate`) answer as before; validation already skipped a managed datasource, and it now asks the same predicate the guard asks. No status code or error code is added. - **The fix for an integrator:** sync from a datasource the platform does not own. Declare it with `schemaMode: 'external'` (or `'validate-only'`) and its `external` settings; for a runtime datasource, send both in `PATCH /api/v1/datasources/:name`. A managed datasource's tables are the platform's own objects: define objects on it directly instead of importing them. -- 3937697: fix(service-datasource): a datasource whose database client is not installed (`pg`, `mysql2`, `better-sqlite3`) is refused with the install of that client, not with "Run `pnpm install && pnpm build`" +- ea08ce5: fix(service-datasource): a datasource whose database client is not installed (`pg`, `mysql2`, `better-sqlite3`) is refused with the install of that client, not with "Run `pnpm install && pnpm build`" Clause-②: no @@ -133,7 +133,7 @@ - **Unchanged.** A driver package whose build output is missing, or a required `@objectstack/…` driver package that is not installed (any but the optional `@objectstack/driver-turso`, `@objectstack/driver-mongodb` and `@objectstack/driver-sqlite-wasm`), still ends on `pnpm install && pnpm build`. A refused connection, a wrong DSN or a rejected password still ends on the same sentence as before. When the boot is refused, the error type, the retained connection state and the `OS_ALLOW_DRIVER_CONNECT_FAILURE` degraded boot do not change: only the closing sentence of the refusal is different. What to do: install the client the refusal names next to the server that opens the datasource, then start again. -- 3937697: fix(service-datasource): a datasource whose optional driver package is not installed (`@objectstack/driver-turso`, `@objectstack/driver-mongodb`, `@objectstack/driver-sqlite-wasm`) is refused with that package's install alone, no longer followed by "Run `pnpm install && pnpm build`" +- b811c73: fix(service-datasource): a datasource whose optional driver package is not installed (`@objectstack/driver-turso`, `@objectstack/driver-mongodb`, `@objectstack/driver-sqlite-wasm`) is refused with that package's install alone, no longer followed by "Run `pnpm install && pnpm build`" Clause-②: no @@ -142,7 +142,7 @@ - **Unchanged.** A driver package whose build output is missing (the error names a path into its `dist/`, which is what a monorepo checkout that has been installed but not built reports), or a required `@objectstack/…` package that is not installed, still ends on `pnpm install && pnpm build`. A missing `pg`, `mysql2` or `better-sqlite3` client still ends on the install of that client. A refused connection, a wrong DSN or a rejected password still ends on the same sentence as before. When the boot is refused, the error type, the retained connection state and the `OS_ALLOW_DRIVER_CONNECT_FAILURE` degraded boot do not change, and the driver factory's own messages are unchanged: only the closing sentence of the refusal is different. What to do: install the driver package the refusal names next to the server that opens the datasource, then start again. -- 3937697: fix(service-datasource): in development, a SQLite datasource whose file cannot be opened or created fails its connect, as in production, instead of stepping down to an in-memory engine +- 5d27d32: fix(service-datasource): in development, a SQLite datasource whose file cannot be opened or created fails its connect, as in production, instead of stepping down to an in-memory engine Clause-②: no @@ -152,7 +152,7 @@ - **Unchanged:** a native addon that cannot load (an ABI mismatch, an addon that was never built, a missing `better-sqlite3`) still steps down to wasm SQLite, with the same warning. An absent file in a directory that exists, or that the driver can make, still opens natively and is created. Production behaviour is unchanged. What to do: if a development boot now refuses a SQLite datasource, fix its `filename`. The boot names the path it could not open. -- 3937697: fix(driver-sqlite-wasm)!: a file wasm SQLite cannot read is refused at connect, naming the file, and left as it was found, instead of being renamed and replaced with an empty database (#25019) +- 27dc53b: fix(driver-sqlite-wasm)!: a file wasm SQLite cannot read is refused at connect, naming the file, and left as it was found, instead of being renamed and replaced with an empty database (#25019) Clause-②: no (narrowing) Metadata-protocol: none @@ -165,7 +165,7 @@ - **TO:** `SqliteWasmDriver.connect()` rejects with the native driver's `SqliteDatabaseFileError`: `code: 'SQLITE_NOTADB'` for bytes that are not a database, `code: 'SQLITE_CORRUPT'` for a database it cannot read, `filename`, and a message naming the file and how to move it aside. Nothing is renamed, nothing is written beside it, and a stale write-ahead log beside a refused file stays where it is. `WasmSqliteConnection.open()` rejects with the same code and `filename`. `resolveSqliteDriver` re-throws that refusal at the wasm rung instead of trying the in-memory driver, so the datasource's connect fails and its connection state says so. Any other wasm failure, sql.js itself not loading first among them, still goes on to the in-memory driver. - **Unchanged:** a real database opens and answers; an absent file is created; an empty file opens as an empty database; a native addon that cannot load over a real or absent file still steps down to wasm SQLite. - **The fix for an operator:** restore the database from a backup, or move the unreadable file aside yourself (`mv '<file>' '<file>.unreadable'`) and start again: an absent file is created empty on the next connect. A development server whose own wasm image is damaged no longer starts itself clean; this is that step, done by hand. -- 3937697: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext +- 28c9a2c: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext Clause-②: no (narrowing) — the accept set of the `turso` `datasource.config` contract, of the published `TursoConfigSchema` mirror and of `new TursoDriver()` narrows by one key beside a `file:` url or `:memory:`, in every mode. No key is added, removed or renamed, and no exported symbol moves. `@objectstack/service-datasource` is graded `patch`: the TSDoc of its exported `TursoDriverConfigInput.encryptionKey` no longer promises an encrypted file, and nothing else in it changes. @@ -194,7 +194,7 @@ Blast radius, measured on this tree: no example, template, CLI scaffold or published skill authors the key, and no host default or environment variable sets it (a turso `encryptionKey` reaches the driver only from an authored `datasource.config`). Whether any out-of-repo deployment declares such a config is NOT measured and is not claimed to be zero. <!-- adr-0087: registered turso-config-local-encryption-key-refused --> -- 3937697: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since +- 03966ce: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since `@objectstack/plugin-auth` declares the better-auth family exactly, so a fresh install resolves what this package tested. All five declared ranges (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim`, `@better-auth/sso`) move from `1.7.3` to `1.7.12`, still exact. The lift takes the fixes published in 1.7.4 to 1.7.12 for packages this plugin mounts: GHSA-965c-763c-88jm and GHSA-r4xp-prcw-77qf (1.7.7), and the oauth-provider, SSO, SCIM, JWT and password-reset fixes up to 1.7.12. Every symbol this package imports from the family is still exported. It also pulls in `better-call` 1.4.4, `@better-auth/utils` 0.5.0 and `@better-fetch/fetch` 1.3.2, the versions 1.7.12 declares. @@ -224,91 +224,91 @@ - **`@objectstack/spec` and `@objectstack/cli` (patch, text only, not breaking):** the TSDoc on the organization schema's optional `updatedAt` now records that its better-auth measurement still holds on 1.7.12, and the `os migrate account-issuer` description no longer names a better-auth version. No schema, type, flag or behaviour changes in either package. - **`@objectstack/service-datasource` (patch, text only, not breaking):** the `resolveSqliteDriver` docs now describe the error better-sqlite3 13 actually throws for an addon that was never built: its loader's `require()` of the absent `build/Release/better_sqlite3.node`, which Node answers with `MODULE_NOT_FOUND`. The docs used to name a helper package's message that 13.x no longer produces. Development still steps down to wasm SQLite on that error, as before. No code changes. - **What to do as an operator:** tell users that a Magic Link, social, SSO or account-linking sign-in begun before the upgrade must be started again after it. Check each OIDC SSO provider's configured issuer against its discovery document and set it to the exact `issuer` string the document publishes. An OAuth client that branched on `401` for a PKCE failure should branch on `400 invalid_grant`. A browser client that read every non-`200` `/get-session` answer as "signed out" should treat a `500` as "try again". -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [74fcec1] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [eee65af] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [5d66021] +- Updated dependencies [7f99616] +- Updated dependencies [4d99158] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [8c73398] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4e2c42f] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [3a440b0] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/driver-sql@18.1.0 diff --git a/packages/services/service-i18n/CHANGELOG.md b/packages/services/service-i18n/CHANGELOG.md index 74c173c277a..29d30185562 100644 --- a/packages/services/service-i18n/CHANGELOG.md +++ b/packages/services/service-i18n/CHANGELOG.md @@ -4,75 +4,75 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-job/CHANGELOG.md b/packages/services/service-job/CHANGELOG.md index c7821324023..8ea67e0fb36 100644 --- a/packages/services/service-job/CHANGELOG.md +++ b/packages/services/service-job/CHANGELOG.md @@ -4,94 +4,94 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-knowledge/CHANGELOG.md b/packages/services/service-knowledge/CHANGELOG.md index 8626adfec10..b20462d3df8 100644 --- a/packages/services/service-knowledge/CHANGELOG.md +++ b/packages/services/service-knowledge/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-mailbox/CHANGELOG.md b/packages/services/service-mailbox/CHANGELOG.md index b299feda428..bcdda077cab 100644 --- a/packages/services/service-mailbox/CHANGELOG.md +++ b/packages/services/service-mailbox/CHANGELOG.md @@ -4,95 +4,95 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-messaging/CHANGELOG.md b/packages/services/service-messaging/CHANGELOG.md index 359cc428e46..e9145836953 100644 --- a/packages/services/service-messaging/CHANGELOG.md +++ b/packages/services/service-messaging/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(service-messaging): a notification template is resolved in the recipient's organization +- 865d2c8: fix(service-messaging): a notification template is resolved in the recipient's organization Clause-②: yes (widening) — `NotificationTemplateStore.load` (exported from the package's `.` entry) gains an optional fourth parameter, `organizationId`. @@ -13,7 +13,7 @@ - **An organization with no row of its own** for a `(topic, channel, locale)` renders the notification's own title and body, the documented no-template fallback. - **The new parameter:** `NotificationTemplateStore.load(topic, channel, locale, organizationId?)`. A call that names no organization reads no row and answers `null`, so the channel renders that same fallback. Every delivery the messaging service fans out names its organization (the event row takes it from the producer or from the engine's system-write rule, and an emit with neither is refused), so this changes nothing a composed deployment renders. A direct caller of `NotificationTemplateStore.load` passes the recipient's organization as the fourth argument. - **Unchanged:** the locale ladder (the recipient's locale, its language, then `en`), the `is_active` filter, how a row renders, and the best-effort answer on a failed lookup. -- 3937697: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) +- 63085c3: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) Clause-②: yes (narrowing) @@ -31,7 +31,7 @@ - **`os migrate organization-ownership` (`@objectstack/cli`).** The inventory row for `sys_notification_subscription` moves FROM fate 3 (`attribution`: organization-less rows went to the Default Organization under `single`) TO fate 4 (`report`: rows listed by id, never attributed, never deleted). The table is exempt from NOT NULL, because no declaration anchors tenancy on its column any more. The row stays, so a database that still holds the table plans instead of being refused as carrying an uninventoried platform table. The plan's `inventoryDigest` changes: a plan file written by an earlier CLI no longer matches, and `--apply --plan-file` refuses it with `plan-digest-mismatch`. Re-run `os migrate organization-ownership --out PLAN`, review it, and apply that. **Existing databases.** The table is left in place untouched: no backfill, no reaper, no migrate command. Schema sync is additive and never drops a table, so a database an earlier release provisioned keeps `sys_notification_subscription` and any rows an administrator wrote, and nothing reads them. Export any row worth keeping. Dropping the table is the operator's call, by hand: `DROP TABLE sys_notification_subscription`. -- 3937697: feat(service-messaging): a notification's text can be catalog keys, rendered per recipient at delivery in that recipient's language +- 58cd58f: feat(service-messaging): a notification's text can be catalog keys, rendered per recipient at delivery in that recipient's language Clause-②: yes (widening): `EmitInput` gains an optional `keyedText` member, and the package's `.` entry gains `NotificationTextRenderer`, `assertNotificationTextKeys` and their types. An emit without `keyedText` is accepted and delivered exactly as before. @@ -44,7 +44,7 @@ - **Cost.** One `sys_user` read per keyed delivery (one per digest group). A delivery without keys, or a deployment with no `i18n` service, makes no read. - **Unchanged.** Every emit that passes no `keyedText` (and whose payload has no member of that name): the event row, the snapshot, and what the inbox, email and SMS channels deliver. The notify `template` path, `sys_notification_template` rendering (which now falls back to the rendered text), recipients, preferences and channel availability are also unchanged. - **Composing it.** `MessagingServicePlugin` wires one `NotificationTextRenderer` into the service and the dispatcher. A hand-built `MessagingService` passes `textRenderer` in its context and a `NotificationDispatcher` passes it in its options. Without one, keyed text is delivered as its literal, and the service says so once. -- 3937697: fix(service-messaging)!: `sys_notification_template` refuses a write that leaves a row naming a channel other than `email` or `sms`, because no channel ever sends such a row +- d68aab6: fix(service-messaging)!: `sys_notification_template` refuses a write that leaves a row naming a channel other than `email` or `sms`, because no channel ever sends such a row A notification template row is read by exactly two channels: the email channel (when the notification names no email template) and the SMS channel, which also renders the phone OTP and invitation texts. The in-app inbox reads no row on any path. `channel` is free text, so a row for `inbox`, `push` or any other value was stored and then rendered nowhere; the `channel_renders_template` rule only warned about it. That rule now refuses. It is an invariant judged over the stored row overlaid with the write, so it answers rows already stored with another channel as well as new ones: such a row is refused on any edit that leaves its channel out of the set, until an edit moves it to `email` or `sms`, and it is still read, listed and deleted. No stored row is rewritten or deleted by this change. @@ -58,7 +58,7 @@ - **TO:** that write is refused. The REST data door answers `400` with `code: 'VALIDATION_FAILED'` and one finding on `channel` (`code: 'rule_violation'`); an import commit fails that row with `field: 'channel'` and `code: 'rule_violation'`; a bulk update fails that row with `code: 'VALIDATION_FAILED'` and `httpStatus: 400`, and a predicate update over a set holding such a row writes no row. Every refusal carries the prescription: set the channel to `email` or `sms`, or delete the template; in-app content is an email template (`email_template`) named in a notify step's `template`. - **Unchanged:** `email` and `sms` rows and every write to them; reading, listing and deleting any row; how every channel renders, so a row for another channel is still sent by none; and the `channel` column and its width. - **The fix for an operator:** a row for another channel was never sent. Delete it, or set its channel to `email` or `sms` if its text belongs there. For in-app content, write an email template and name it in the notify step's `template`; the inbox and email both render it. -- 3937697: fix(service-messaging)!: an html or mjml `sys_notification_template` body escapes every hole's value for markup +- a39389e: fix(service-messaging)!: an html or mjml `sys_notification_template` body escapes every hole's value for markup The email channel renders a notification template row whose `format` is `html` or `mjml` into the mail's html part. Its `{{ payload.x }}` holes placed each value into that markup as stored, so a text field carrying markup characters — a person's display name, a record title, a comment — was read as markup by the recipient's mail client. Each hole's value in an html or mjml body is now HTML-escaped, in element text and quoted attributes alike, and the template's own markup renders as written. Stored text is never stripped or refused: a display name may contain any character, and the mail client shows it as typed. @@ -75,7 +75,7 @@ ### Patch Changes -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -87,7 +87,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(service-messaging,metadata-protocol)!: a notification preference's User is a `sys_user` reference, so the record title names the person and the write door refuses an id no user holds; the default for every user is an empty User instead of `'*'` +- e282f32: fix(service-messaging,metadata-protocol)!: a notification preference's User is a `sys_user` reference, so the record title names the person and the write door refuses an id no user holds; the default for every user is an empty User instead of `'*'` Clause-②: yes (narrowing) Metadata-protocol: none @@ -105,7 +105,7 @@ - On SQLite and PostgreSQL, `@objectstack/metadata-protocol` rebuilds the index `uniq_sys_notification_preference_a22d7d27` at `kernel:ready` as `(organization_id, COALESCE(user_id, ''), topic, channel)`, so a second default for one topic and channel in one organization is refused (`409`). If existing rows already break that rule, it refuses to migrate: the previous index stays, no row is touched, and the boot log and `os migrate duplicates` list the rows. MySQL/MariaDB and driver-memory keep the declared index, which does not constrain empty Users, and the boot log says so on MySQL. - **Unchanged:** `topic = '*'` and `channel = '*'` are still the topic and channel wildcards. Most-specific-wins resolution, mandatory topics, quiet hours and digests behave as before. A row for a real user is read, matched and titled as before, except for the title text. The physical column is still a `varchar(255)`, so no DDL change is needed for it. - **The fix for an operator:** nothing, normally; the boot rewrites the old `'*'` rows. If the boot log reports a `'*'` row that shares its topic and channel with a default whose User is already empty, delete the one that should not apply and restart. If it reports that the one-default-per-key index could not be built because two such defaults exist, list them with `os migrate duplicates`, delete one, and restart. A script or import that wrote `user_id: '*'` writes an empty `user_id` (omit it, or send `null`) for the default for every user. -- 3937697: fix(service-messaging): the `sys_notification_template` copy now says that only the email and SMS channels use a template row, and that the in-app inbox never does +- 0603bfa: fix(service-messaging): the `sys_notification_template` copy now says that only the email and SMS channels use a template row, and that the in-app inbox never does A notification template row is read by exactly two channels: the email channel (when the notification names no email template) and the SMS channel, which also renders the phone OTP and invitation texts. The in-app inbox reads no row on any path. `channel` is free text, so a row saved for `inbox`, `push` or any other value was stored and then rendered nowhere, with nothing to say so. @@ -115,7 +115,7 @@ - **Unchanged.** Nothing this entry describes changes which writes are accepted. `email` and `sms` rows, how every channel renders, and the column and its width are unchanged. - **What to do.** For in-app content, write an email template and name it in the notify step's `template`; the inbox and email both render it. A row for another channel was never sent, so delete it if you no longer want it listed. -- 3937697: fix(service-messaging): the heading of a notification digest of two or more items is rendered in its recipient's language, not as the English "You have N notifications" for everyone +- c24203f: fix(service-messaging): the heading of a notification digest of two or more items is rendered in its recipient's language, not as the English "You have N notifications" for everyone Clause-②: no Metadata-protocol: none @@ -124,7 +124,7 @@ - **Now.** The heading is keyed (`messages.notificationDigestTitle`, with a `{{count}}` hole) in `@objectstack/service-messaging`'s own translation bundle, in en, zh-CN, ja-JP and es-ES. It is rendered at delivery by the same keyed-text renderer as the digest's items (`EmitInput.keyedText`), in the same locale read: the recipient's `sys_user.locale`, then the deployment default. A zh-CN recipient reads "您有 3 条通知". - **Unchanged.** The English sentence stays the literal fallback, byte for byte: with no `i18n` service, with no renderer composed, or when neither the recipient's language nor the deployment default has a pack. A one-item digest is still titled by its item. No export, option or type changes. - **Cost.** With an `i18n` service registered, each digest of two or more items now reads its recipient's locale once, even when none of its items is keyed, because its heading always is. -- 3937697: fix(service-messaging)!: `sys_notification_template` refuses an html or mjml body that places a hole where the renderer's encoding is not right for it +- 284e048: fix(service-messaging)!: `sys_notification_template` refuses an html or mjml body that places a hole where the renderer's encoding is not right for it An html or mjml notification template body HTML-escapes every hole's value. That encoding is right in two placements only: element text, and a quoted plain-text attribute value. A hole anywhere else (an attribute read as a URL, an event handler, a style, an attribute holding markup, a meta element attribute, an unquoted attribute value, inside a tag, a raw-text element, a comment, or SVG / MathML content) received an encoding that does not fit where it lands. Such a body is now refused when it is saved. A hole counts as supported only when every way an HTML parser can read the body places it in element text or a quoted plain-text attribute value. The check is the template object's own save hooks, judged over the stored row overlaid with the write, so a row stored before this change that breaks the rule is refused on any edit that leaves it breaking it: frozen, not bricked. It is still read, listed and deleted, and it keeps rendering and delivering as before. No stored row is rewritten. @@ -139,7 +139,7 @@ - **TO:** that write is refused. The REST data door answers `400` with `code: 'VALIDATION_FAILED'` and one finding at `body` (`code: 'invalid_value'`) that names each refused hole and its placement. An import commit fails that row with `field: 'body'` and `code: 'invalid_value'`. A bulk update fails that row with `code: 'VALIDATION_FAILED'` and `httpStatus: 400`, and a predicate update over a set holding such a row writes no row. Every writer is judged, system context included. - **Unchanged:** `markdown` and `text` bodies, whose holes render verbatim; html and mjml bodies whose every hole sits in element text or a quoted plain-text attribute value; reading, listing and deleting any row; and how every row renders and is delivered. No error code is added. - **The fix for an author:** move each refused hole into element text or a quoted plain-text attribute value, or set the format to `text` or `markdown`. A link whose address comes from a value belongs in an email template (`email_template`), which declares that variable as a URL; name it in the notify step's `template`. -- 3937697: fix(service-messaging)!: retire `renderNotification`, the render export that takes a notification template body with no save moment +- 1f78b64: fix(service-messaging)!: retire `renderNotification`, the render export that takes a notification template body with no save moment The hole-placement rule for notification templates is judged where a template is saved: the `sys_notification_template` save hooks. `renderNotification` took a template body inline and rendered it at once, with no save moment, so the rule could not see it. It leaves the published entry of `@objectstack/service-messaging`. Nothing in this repository imported it from that entry. The renderer stays inside the package: the email and sms channels still render every stored template through it, unchanged. @@ -153,7 +153,7 @@ - FROM `renderNotification` TO a `sys_notification_template` row for the topic, channel and locale, which the delivering channel renders when the notification is emitted. Unchanged: `interpolate` (the plain-text face, which the placement rule judges at no door), `NotificationTemplateStore`, `TEMPLATE_OBJECT`, `DEFAULT_LOCALE` and the template types; and how every stored template renders. -- 3937697: fix(service-messaging): a notification delivery's title names the person it is for, not their raw user id (#25194) +- bc5daf0: fix(service-messaging): a notification delivery's title names the person it is for, not their raw user id (#25194) Clause-②: yes (widening) Metadata-protocol: none @@ -163,7 +163,7 @@ The delivery object gains one optional field, `recipient_user_id` (Recipient User), a `sys_user` reference the title reads through. `emit()` sets it when the recipient is a user's id, from one `sys_user` read per emit, and leaves it empty for an address. Deleting the user empties it; the delivery stays, titled by the raw recipient. `recipient_id` keeps its type and meaning (the address: a user id, an email or a phone number), and is now labelled **Recipient**. Rows written before this change carry no `recipient_user_id` and keep their old title until the 90-day window ages them out. Nothing is migrated, and no delivery is routed by the new field. -- 3937697: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms +- ee63b47: fix: Setup field help is written for administrators, and the two access-review fields nothing uses yet are hidden from the Setup forms Clause-②: no Metadata-protocol: none @@ -178,7 +178,7 @@ - the Data Lifecycle settings page and its retention overrides. `Last Certified At` and `Certified By` on `sys_user_permission_set` and `sys_user_position` are reserved for a future access-review feature and nothing writes or reads them. They are now `hidden: true`, so the Setup forms and detail pages no longer show them. The columns and any stored values stay. -- 3937697: fix(service-messaging): Setup's Notification Preferences form says which topics and channels can be entered +- 8878c36: fix(service-messaging): Setup's Notification Preferences form says which topics and channels can be entered Clause-②: no Metadata-protocol: none @@ -196,95 +196,95 @@ Both helps also say `*` means all, and that a value nothing uses matches nothing. No stored row, accepted value, default or column changes. The translation bundles carry the new help. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-package/CHANGELOG.md b/packages/services/service-package/CHANGELOG.md index 24b7a523e2b..37ce6ba3bfa 100644 --- a/packages/services/service-package/CHANGELOG.md +++ b/packages/services/service-package/CHANGELOG.md @@ -4,76 +4,76 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-print/CHANGELOG.md b/packages/services/service-print/CHANGELOG.md index 00b0eb25740..d7e41ff9618 100644 --- a/packages/services/service-print/CHANGELOG.md +++ b/packages/services/service-print/CHANGELOG.md @@ -4,76 +4,76 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [0f1eeee] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/services/service-queue/CHANGELOG.md b/packages/services/service-queue/CHANGELOG.md index 03c12249768..f032fc53e99 100644 --- a/packages/services/service-queue/CHANGELOG.md +++ b/packages/services/service-queue/CHANGELOG.md @@ -4,94 +4,94 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-realtime/CHANGELOG.md b/packages/services/service-realtime/CHANGELOG.md index 80f4f8e3ae6..6663959fa1c 100644 --- a/packages/services/service-realtime/CHANGELOG.md +++ b/packages/services/service-realtime/CHANGELOG.md @@ -4,94 +4,94 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-settings/CHANGELOG.md b/packages/services/service-settings/CHANGELOG.md index 44c85159341..8b13b8fe16f 100644 --- a/packages/services/service-settings/CHANGELOG.md +++ b/packages/services/service-settings/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: fix(service-settings)!: the Branding settings drive the console's name, logo and colour on a single-organization deployment, retire `theme_mode` and `support_email`, and are not offered under a walled tenancy posture +- 78ab647: fix(service-settings)!: the Branding settings drive the console's name, logo and colour on a single-organization deployment, retire `theme_mode` and `support_email`, and are not offered under a walled tenancy posture Clause-②: no (narrowing) @@ -37,7 +37,7 @@ - On a walled deployment, set the console's branding with `OS_PRODUCT_NAME`, `OS_LOGO_URL` and `OS_BRAND_COLOR`. If you set `OS_BRANDING_WORKSPACE_NAME` there, move its value to `OS_APP_NAME`. It ships as `minor` under the launch-window convention for narrowings. -- 3937697: fix(service-settings)!: a settings value that misses the format its `email`, `url`, `phone` or `color` type declares is refused, both when it is saved and when it arrives as an `OS_*` override (#24882) +- 3b3830c: fix(service-settings)!: a settings value that misses the format its `email`, `url`, `phone` or `color` type declares is refused, both when it is saved and when it arrives as an `OS_*` override (#24882) ADR-0007 declares a format for four specifier types: `email`, `url` and `phone` take "format validation", and `color` takes a hex string. Until now nothing enforced it. `PUT /api/settings/branding` stored a Logo URL of `not a url` and answered `200`, and an `OS_*` override was served whatever it held. Both doors now judge the format through one shared check, after every other declared constraint, and refuse a value that misses it. @@ -67,7 +67,7 @@ ### Patch Changes -- 3937697: fix(service-settings): Setup → Authentication saves "Enable Google login" ON when the Google credentials come from the server (#24844) +- fcb40ad: fix(service-settings): Setup → Authentication saves "Enable Google login" ON when the Google credentials come from the server (#24844) Clause-②: no @@ -76,14 +76,14 @@ `auth.google_client_id` and `auth.google_client_secret` are no longer `required`. Google sign-in needs the two credentials to resolve, saved on the page or set on the server; it never needed them stored. The `google_enabled` help already says so: Google is offered once both resolve, and the server's pair wins over saved values. Who may sign in, and which providers the login page offers, do not change for any deployment. Saving the toggle ON while neither pair resolves is now accepted; the login page then shows no Google button, as it does with the toggle left at its default. -- 3937697: fix(service-settings): Setup → Company → Legal name help no longer points to an organization name under Branding +- 42b60b9: fix(service-settings): Setup → Company → Legal name help no longer points to an organization name under Branding Clause-②: no Metadata-protocol: none The `legal_name` help in the Company settings page (the manifest description and the `en`, `zh-CN`, `ja-JP` and `es-ES` bundles) said the legal name "may differ from the organization name set under Branding". Branding's workspace name is the product name, not an organization name, and the Branding page is not offered at all under the `group` and `isolated` postures, where Company is. The help now reads "Registered legal name of the organization, as it appears on contracts and invoices." in every locale. Copy only; no key, value or behaviour changes. -- 3937697: fix(service-settings)!: a tenant- or user-scope setting stored with no organization no longer answers every organization's read, and a caller with no organization reads and writes as the one organization the deployment derives +- 279fdcf: fix(service-settings)!: a tenant- or user-scope setting stored with no organization no longer answers every organization's read, and a caller with no organization reads and writes as the one organization the deployment derives Clause-②: yes (narrowing) Metadata-protocol: none @@ -101,7 +101,7 @@ **Who is affected.** Only a store holding a tenant- or user-scope `sys_setting` row with a NULL `organization_id`. A fresh install holds none, nor does an 18.0.0-born store written through `os serve`: the measured 18.0.0 fixture holds two `sys_setting` rows, both owned. A v17 store holds none after `os migrate organization-ownership` under `single`, which gives such rows to the Default Organization. Under a walled posture the ceremony leaves such a row NULL and reports it, and from this release that row stops answering any organization. **The remedy.** Run `os migrate organization-ownership --out PLAN`, review the reported `sys_setting` rows, and save each value again from inside the organization it belongs to (Setup → the settings page, or `PUT /api/settings/:namespace` with that organization active). A value meant for every organization belongs on a key declared at scope `global`. -- 3937697: fix(service-settings)!: a host that binds its own engine and states no organization source reads and writes as the organization ADR-0131 D9 derives through that engine, not as no organization +- 9d60b42: fix(service-settings)!: a host that binds its own engine and states no organization source reads and writes as the organization ADR-0131 D9 derives through that engine, not as no organization Clause-②: no (narrowing) Metadata-protocol: none @@ -116,7 +116,7 @@ **Who is affected.** Only a host that binds its own engine and states no source: a control-plane mock or an embedded runtime. On a composition with an organization object it now reads and writes the derived organization's rows, and its rows with no organization stop answering. On one without, it meets the refusal above. A deployment booted through `SettingsServicePlugin` is not affected. **The fix.** State the composition at the bind site: `service.bindEngine(engine, audit, { organization: async () => ({ kind: 'no-organization-object' }) })` (a host that hands its engine to the constructor binds it this way instead), or hand over an engine whose `registry.getObject` can answer. -- 3937697: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security +- b3034ee: refactor(core, plugin-auth, plugin-security, service-settings): one definition each for the `admin_full_access` anchor rule and the organization-reach rule, exported from core security Clause-②: yes (widening) Metadata-protocol: none @@ -155,7 +155,7 @@ These two differences are kept by design: they make the fallback, which runs only when the service has failed, the stricter reader. No configuration, metadata or HTTP behaviour changes. Code that does not import the new exports needs no action. -- 3937697: feat: Setup → Email states which mail transport is live, and says so when no mail leaves this machine +- ab510f4: feat: Setup → Email states which mail transport is live, and says so when no mail leaves this machine Clause-②: yes (widening: service-settings exports SettingsService.registerLiveStatus / liveStatusOf, SettingsLiveStatus, SettingsLiveStatusProvider and SETTINGS_LIVE_STATUS_BANNER_ID; nothing is refused) Metadata-protocol: none @@ -164,7 +164,7 @@ - **`@objectstack/service-settings`:** `SettingsService.registerLiveStatus(namespace, provider)` lets the package that owns a live object state it on that namespace's page. `GET /api/settings/:namespace` asks the provider on every read and puts its answer first in the manifest's specifiers, as an `info_banner` with the reserved id `live_status` (`SETTINGS_LIVE_STATUS_BANNER_ID`). The registered manifest and in-process `getNamespace()` are unchanged. If the provider throws, the page says the live status could not be read; the statement is never silently dropped. New exports: `SettingsLiveStatus`, `SettingsLiveStatusProvider`, `SETTINGS_LIVE_STATUS_BANNER_ID`. - **`@objectstack/plugin-email`:** registers the `mail` statement from `EmailService.isConfigured()`. When it answers `false` (the log transport), the banner reads "No mail leaves this machine". When it answers `true`, the banner names the live transport, for example "Mail is delivered through SMTP (smtp.example.com:587)". The statement waits for any settings re-apply still running, so a read made just after a save names the transport that save built. -- 3937697: fix(service-settings): Settings → Branding's name is labelled the product name, shows no default the console never uses, and Localization's timezone says it is the one in effect +- 832a84e: fix(service-settings): Settings → Branding's name is labelled the product name, shows no default the console never uses, and Localization's timezone says it is the one in effect Clause-②: yes Metadata-protocol: none @@ -175,7 +175,7 @@ - **No default.** The `'ObjectStack'` default is gone. Neither reader ever served it: the runtime config and the auth readers use only a value somebody saved, and otherwise the deployment's own name (`OS_PRODUCT_NAME`, `OS_APP_NAME`, or the host options). So an unsaved page showed a name nothing used. An unsaved page now shows the field empty, and `GET /api/settings/branding` answers `workspace_name` as `value: null`, `source: 'default'`. - **Not required.** A key with no default stays optional, as `accent_color` already is, so the console can save the page without one. This widens the write: an empty `workspace_name` is accepted (it was refused as required) and means "use the deployment's name", which is how both readers already treat an empty value. Nothing served changes. - **`localization.timezone`.** Its help adds that it is the timezone in effect for the organization, and that the Timezone field on the Organization record does not change it (in all four bundles). -- 3937697: fix: Setup → AI's "Reset to environment defaults" button is now translated in zh-CN, ja-JP and es-ES +- 74496c6: fix: Setup → AI's "Reset to environment defaults" button is now translated in zh-CN, ja-JP and es-ES Clause-②: no Metadata-protocol: none @@ -183,95 +183,95 @@ The `ai` settings manifest declares an `action_button` with id `reset`, but no locale bundle carried `settings.ai.actions.reset.label`, so the button rendered in English beside its translated siblings. The bundles now carry it (en, zh-CN, ja-JP, es-ES). The settings translation coverage test now reads every manifest's `action_button` labels: each shipped non-English locale must carry `settings.<namespace>.actions.<id>.label` for every action button, and no bundle may carry action copy for a button no manifest declares. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/services/service-sms/CHANGELOG.md b/packages/services/service-sms/CHANGELOG.md index e152c8385d5..48a53b959f9 100644 --- a/packages/services/service-sms/CHANGELOG.md +++ b/packages/services/service-sms/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- abd5acd: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-email, service-sms): Setup's "Send test email" and "Send test SMS" send to the signed-in admin when the request names no recipient (#24767) @@ -21,7 +21,7 @@ - The request and result shapes of `POST /api/settings/mail/test` and `POST /api/settings/sms/test`: no key, route or setting is added. - Which provider and credentials a test uses: the saved values overlaid with the form's unsaved edits, as before. - Saving the Mail form still judges a required field only when the save writes it, or writes a key its visibility depends on. -- 3937697: fix(service-sms, runtime): the Send test SMS refusals and the flow clone notice name the admin's controls instead of a REST recipe (#25345) +- 2b7c331: fix(service-sms, runtime): the Send test SMS refusals and the flow clone notice name the admin's controls instead of a REST recipe (#25345) Clause-②: no Metadata-protocol: none @@ -32,101 +32,101 @@ - **Flow clone notice** (`FLOW_CLONE_NOTICE`, returned by `POST /api/v1/automation/:name/clone`): the notice told the admin to `PUT` the clone's complete definition with `status: 'obsolete'`, and named the toggle endpoint. It now names the two switches the console has. A packaged original is switched off with its Switch "…" off action on the Packaged automation page, and that switch does not reach the clone. The clone is switched off in Studio, with its Enabled switch and a publish. The REST recipe stays in the client SDK's `automation.toggle` TSDoc. No route, response shape, status or code changes: only the message text does. A caller that compared either string verbatim must update its copy. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [c2d4072] +- Updated dependencies [78ab647] +- Updated dependencies [fbb42d9] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [55d7aab] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [abc25a3] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [688052e] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [c6bdcac] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [829cb77] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [431327b] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/plugin-auth@18.1.0 diff --git a/packages/services/service-storage/CHANGELOG.md b/packages/services/service-storage/CHANGELOG.md index c06648b1eb3..5d8b97966cb 100644 --- a/packages/services/service-storage/CHANGELOG.md +++ b/packages/services/service-storage/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -16,7 +16,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: fix(plugin-audit,service-storage): a delegated (on-behalf-of) caller reads the parent-record gates through the ReadableIds leaf, no longer through the bounded 2000-row probe (ADR-0139 D5.1, as amended) +- 0f1eeee: fix(plugin-audit,service-storage): a delegated (on-behalf-of) caller reads the parent-record gates through the ReadableIds leaf, no longer through the bounded 2000-row probe (ADR-0139 D5.1, as amended) Clause-②: no Metadata-protocol: none @@ -24,95 +24,95 @@ The activity, ledger and comment-thread read gates (`@objectstack/plugin-audit`) and the attachment read gate (`@objectstack/service-storage`) routed every read by a delegated caller to the whole-read probe: a SYSTEM pre-scan of at most 2000 rows, then one caller-scoped read per parent object. Past 2000 candidate rows, a delegated caller was served a truncated list (fail-closed, never a leak) with a matching `total`. Since the engine composes a `ReadableIds` leaf for a delegated caller from the delegator intersection (ADR-0090 D10, #25009), the gates now write such a caller the same leaves as any caller. It is served every row its delegator intersection admits, with a true `total`. This is the same set the probe's own readability answer admits, without the window. ADR-0139 D5's two remaining classes are unchanged: a parent narrowed by an object-scoped read middleware, and a parent bound to another datasource. Both still take the bounded probe, read with the caller's delegated context. The gates no longer read the delegation link themselves, and the `delegated-caller` value is gone from the gates' internal whole-read probe reasons. Neither is exported. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [73a2b52] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [97aa34e] +- Updated dependencies [832a84e] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] +- Updated dependencies [f7d7403] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 - @objectstack/platform-objects@18.1.0 diff --git a/packages/skills/CHANGELOG.md b/packages/skills/CHANGELOG.md index 79e3a1a7019..88f4763c8d1 100644 --- a/packages/skills/CHANGELOG.md +++ b/packages/skills/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: docs(skills): the npm page and the catalog's front page give the install line for the project's own package manager +- c0cde8b: docs(skills): the npm page and the catalog's front page give the install line for the project's own package manager Clause-②: no @@ -12,7 +12,7 @@ - **Both pages** now print `pnpm add -D "@objectstack/skills@$(node -p "require('@objectstack/spec/package.json').version")"`, with the npm and yarn spellings on a comment line beside it, and the rule: add the package with the manager that installed the project. The `objectstack-upgrade` skill's re-install step, which an agent follows for this exact move, prints the same line. - **The npm page** names pnpm's `ERR_PNPM_NO_MATCHING_VERSION` beside npm's `ETARGET` for a project on `@objectstack/spec` 17.x, and runs `npx skills list` before `npx skills remove --all`, which removes every installed skill without asking. -- 3937697: docs(spec, skills): the `titleFormat` description and the objectstack-data skill no longer steer a composite record title that must be queried into a formula field +- 7f5b19d: docs(spec, skills): the `titleFormat` description and the objectstack-data skill no longer steer a composite record title that must be queried into a formula field Clause-②: no Metadata-protocol: none @@ -27,7 +27,7 @@ Clause-②: no The security rules' table of the `current_user.*` placeholders the RLS compiler resolves listed only the kernel's keys. It now has a row for `current_user.KEY`, the set an object's `membershipKeys.KEY` declares (for `IN`), so an author reading the catalog alone learns that a declared key resolves. -- 3937697: docs(skills): objectstack-data's security rules name the risk of renaming or removing a shipped access item in a later package version +- 0949fe5: docs(skills): objectstack-data's security rules name the risk of renaming or removing a shipped access item in a later package version Clause-②: no Metadata-protocol: none diff --git a/packages/spec/CHANGELOG.md b/packages/spec/CHANGELOG.md index de7a3f78db6..db2a703a807 100644 --- a/packages/spec/CHANGELOG.md +++ b/packages/spec/CHANGELOG.md @@ -4,7 +4,7 @@ ### Minor Changes -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- 7cacad5: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat(plugin-sharing,plugin-approvals,metadata-protocol)!: the organization-less readers of sharing rules, approval units and the seed loader retire (ADR-0131 D2/D8, 18.x step 7) @@ -22,7 +22,7 @@ - **The scoped seed pre-load reads one thing: its organization's rows.** The second read that collected keys held by organization-less rows, and refused to twin or adopt them, is deleted; a scoped upsert/ignore/update issues no `organization_id IS NULL` read on any path. Remedy for a database that still holds organization-less rows: `os migrate organization-ownership --out PLAN`, review it, then `os migrate organization-ownership --apply --plan-file PLAN --backup-taken`. -- 3937697: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` +- 7532ea3: feat(objectql): a caller value that a stored field's `expression` replaced is reported through `onFieldsDropped` / `droppedFields` under the new `DroppedFieldsEvent.reason` value `stored_expression` Clause-②: yes (widening) @@ -34,7 +34,7 @@ - **Flow step warning.** `@objectstack/service-automation` words the new reason. Its warning says the requested value(s) were not stored, rather than that the field was not written, and its closing sentence says the write succeeded with the computed value(s). **For consumers that branch on `reason`.** A `Record<DroppedFieldsEvent['reason'], …>` table fails its typecheck until it has a `stored_expression` row. That is the intended signal: add the row. A client running behind the server should treat a reason it does not recognise as "not applied", never as one of the known reasons. -- 3937697: feat(spec)!: a list's `addRecord` block says what renders — `enabled` is required, `position` defaults to `top`, and `mode` / `formView` are retired +- fde7456: feat(spec)!: a list's `addRecord` block says what renders — `enabled` is required, `position` defaults to `top`, and `mode` / `formView` are retired Clause-②: yes (narrowing) @@ -72,7 +72,7 @@ - The Studio view form and page form offer exactly `enabled` and `position` for `addRecord`. - `@objectstack/lint`: `os explain list-view-field-unknown` no longer names `addRecord.formView` as a position another rule checks. - The showcase's two `addRecord` blocks and the docs (`ui/create-vs-edit-form`, `ui/views`) drop `mode` / `formView` and state the create-form convention. -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- de9cd1f: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. fix(plugin-auth): `POST /api/v1/auth/organization/invite-member` refuses a role outside the membership vocabulary with `code: 'ROLE_NOT_FOUND'` @@ -82,7 +82,7 @@ - **Now.** invite-member answers `400` with `code: 'ROLE_NOT_FOUND'` and the same message, naming the role, the body `update-member-role` gives for the same condition. The refusal still happens before any invitation row is written. This is the answer the invitation schema's `role` docstring and the authentication docs already promise. - **The ledger.** `ROLE_NOT_FOUND` is registered under `@objectstack/plugin-auth` in the error-code ledger, so `ErrorCode` (and `ApiErrorSchema.code`) admits it. - **Unchanged.** A valid role invites as before, and every other refusal on invite-member keeps its answer. -- 3937697: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params +- 925fd07: feat(spec,lint): a bulk action's `confirmText` is a `template` slot over `count` and the action's params Clause-②: yes (widening) Metadata-protocol: semantic @@ -95,7 +95,7 @@ - **`os i18n extract`.** A bulk `confirmText` written as the envelope is seeded exactly as the bare string: the extractor reads the slot's text through `templateSlotSource`, so the envelope form no longer records as an absent key with nothing to translate. - **Served translations.** The catalog overlay on a served view or an object's `listViews` compares a bulk `confirmText` with its packaged base by the slot's text, whichever form either side holds: an unchanged envelope still takes the catalog's sentence, and an edited one keeps the authored sentence. - **Unchanged.** The `confirm` / `confirmmessage` near-misses still name `confirmText`. Every other bulk-def key, the default confirm sentence and the flow text slots' verdicts are unchanged. -- 3937697: feat(spec): the `flows` translation face gains `approvals.<node_id>.label`, the step label of an `approval` node +- b9a79ef: feat(spec): the `flows` translation face gains `approvals.<node_id>.label`, the step label of an `approval` node Clause-②: yes (widening) @@ -104,7 +104,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts the key over an `approval` node and refuses it, as `translation-target-unknown`, over an unknown node or a node of another type (a `screen` node is pointed at its `screens.<node_id>.title`). A `screens` or `refusals` key written over an approval node is now pointed at `approvals.<node_id>.label` instead of being told only that the node is not a screen. - **Not yet rendered.** This is the spec half: the key parses and validates, and the approvals service does not read it yet, so an approval request still shows the authored step label. Its liveness row is `planned` until that reader lands. - **Unchanged.** Every existing `flows` key, and every verdict on a key over a node that is not an approval node. -- 3937697: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) +- 63085c3: feat(service-messaging,spec,cli)!: `sys_notification_subscription` retires — no reader ever expanded a subscription into recipients (ADR-0030 L3, amended) Clause-②: yes (narrowing) @@ -122,7 +122,7 @@ - **`os migrate organization-ownership` (`@objectstack/cli`).** The inventory row for `sys_notification_subscription` moves FROM fate 3 (`attribution`: organization-less rows went to the Default Organization under `single`) TO fate 4 (`report`: rows listed by id, never attributed, never deleted). The table is exempt from NOT NULL, because no declaration anchors tenancy on its column any more. The row stays, so a database that still holds the table plans instead of being refused as carrying an uninventoried platform table. The plan's `inventoryDigest` changes: a plan file written by an earlier CLI no longer matches, and `--apply --plan-file` refuses it with `plan-digest-mismatch`. Re-run `os migrate organization-ownership --out PLAN`, review it, and apply that. **Existing databases.** The table is left in place untouched: no backfill, no reaper, no migrate command. Schema sync is additive and never drops a table, so a database an earlier release provisioned keeps `sys_notification_subscription` and any rows an administrator wrote, and nothing reads them. Export any row worth keeping. Dropping the table is the operator's call, by hand: `DROP TABLE sys_notification_subscription`. -- 3937697: feat(spec)!: a `user` field whose `reference` names an object other than `sys_user` is refused at parse, and every `user` field resolves to `sys_user` +- 2069b81: feat(spec)!: a `user` field whose `reference` names an object other than `sys_user` is refused at parse, and every `user` field resolves to `sys_user` Clause-②: no (narrowing) Metadata-protocol: narrowed @@ -141,7 +141,7 @@ **Supersedes the `user-field-foreign-reference` warning entry in this release.** That entry announced a `@objectstack/lint` advisory `user-field-foreign-reference`, the `USER_FIELD_FOREIGN_REFERENCE` export and its `os explain` entry, and said such a field would still parse. All three are withdrawn before release and never ship: a foreign `reference` on a `user` field is now refused by `FieldSchema` instead, so there is nothing left for the advisory to warn about. - **For `@objectstack/lint`:** no `user-field-foreign-reference` rule, no `USER_FIELD_FOREIGN_REFERENCE` export and no `RULE_EXPLANATIONS` entry for it. `OBJECT_REFERENCE_UNKNOWN` and every other export are unchanged. The refusal arrives as a `FieldSchema` issue at `reference`, not as a lint advisory. -- 3937697: feat(spec): a `page:tabs` item label gains a translation key, `pages.<page>.components.<tabsId>.items.<value>.label` +- 30d21f6: feat(spec): a `page:tabs` item label gains a translation key, `pages.<page>.components.<tabsId>.items.<value>.label` Clause-②: yes (widening) @@ -151,7 +151,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts the key over a declared `page:tabs` item `value`. It refuses it as `translation-target-unknown` over an unknown value (with "Did you mean"), over a component of another type (a `page:accordion` is pointed at the inline locale map, since its panels have no stable key), and under a component id the page does not declare. - **`os i18n extract` / coverage.** The extractor writes a slot for every valued tab item, and the coverage check demands it. An inline locale map on the item label is counted as authored, as before. - **Unchanged.** Every existing `pages` key, and an inline locale map on a tab label that the bundle does not key. -- 3937697: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language +- eddffc3: feat(spec): a form view's `title` is translated through `objects.<object>._views.<view>.title`, and `GET /forms/:slug` serves it in the visitor's language Clause-②: yes (widening) @@ -161,7 +161,7 @@ - **`objectstack validate`.** `@objectstack/lint`'s translation-reference check accepts a `title` key over a form view (a `formViews.<key>` entry, the default `form`, or a `viewKind: 'form'` item) and refuses it, as `translation-target-unknown`, over a list view, pointing at the view's `label` key. - **`os i18n extract`.** The CLI extractor emits `_views.<view>.title` for each form a view container serves (keyed by the composer's runtime name) and for a `viewKind: 'form'` item, so the skeleton carries the slot and the i18n coverage gate reports an authored title a supported locale leaves untranslated. - **Unchanged.** Every other `_views` key, the view `label` and `description` reads, and a form without a title. -- 3937697: spec!: `WebhookSchema` declares `secret` (a credential value) and `headers` (a credential map, as a whole) with `.meta({ credential: 'value' | 'map' })`, and `getMetadataTypeRedactor(type)` gains a third resolution — after explicit registrations and built-ins — a redactor derived from the credential markers on the type's registered schema. Every meta read door now withholds a webhook's `secret` and `headers`, with or without `@objectstack/plugin-webhooks` mounted (ruling B+ on #24966). +- e939357: spec!: `WebhookSchema` declares `secret` (a credential value) and `headers` (a credential map, as a whole) with `.meta({ credential: 'value' | 'map' })`, and `getMetadataTypeRedactor(type)` gains a third resolution — after explicit registrations and built-ins — a redactor derived from the credential markers on the type's registered schema. Every meta read door now withholds a webhook's `secret` and `headers`, with or without `@objectstack/plugin-webhooks` mounted (ruling B+ on #24966). **BREAKING:** the `/meta` read doors no longer serve a webhook's `secret` or `headers`. @@ -170,7 +170,7 @@ A metadata type that stores a credential in a declared field marks it on its schema instead of registering a redactor; a spec ratchet reds on a credential-named field that carries no marker. <!-- adr-0087: not-required (no-migration-prescription) no authorable key, export or stored shape is removed or renamed; the read doors serve less, and a stored webhook needs no migration --> -- 3937697: feat(spec): a failed flow run can carry the refusal its write node met — `AutomationResult.userMessage` / `AutomationResult.innerRefusal`, and one `FlowFailureDetailsSchema` for every door's `400 FLOW_FAILED` details +- 045858f: feat(spec): a failed flow run can carry the refusal its write node met — `AutomationResult.userMessage` / `AutomationResult.innerRefusal`, and one `FlowFailureDetailsSchema` for every door's `400 FLOW_FAILED` details Clause-②: yes (widening) @@ -182,7 +182,7 @@ - **Unchanged.** `error.message` keeps each door's wording byte for byte, `error.code` stays `FLOW_FAILED`, and `AutomationResult.code` stays the closed union the #9378 ruling settled. The inner code is nested in `innerRefusal`, so no new ledger code is added. Every new member is optional: an envelope without them parses exactly as before. **For consumers.** A flow runner can show a failed run's refusal the way a record form shows a save's refusal. Read the envelope's top-level `userMessage` when it is present. Otherwise read `details.innerRefusal` (`code` and `message`), and fall back to `message` last. A client running behind the server ignores the new members and keeps its current behaviour. -- 3937697: feat(spec)!: `defineStack` refuses a stack that declares a webhook while `requires` lacks `'webhooks'` or `'realtime'`, with `STACK_WEBHOOK_CAPABILITY_REQUIRED` +- baedcec: feat(spec)!: `defineStack` refuses a stack that declares a webhook while `requires` lacks `'webhooks'` or `'realtime'`, with `STACK_WEBHOOK_CAPABILITY_REQUIRED` A declared webhook is dispatched by two capabilities together: `'webhooks'` mounts `@objectstack/plugin-webhooks`, whose auto-enqueuer turns a record event into a delivery, and `'realtime'` mounts `@objectstack/service-realtime`, that auto-enqueuer's only source of record events. Neither token implies the other, and a scaffolded app's `requires` is `['automation', 'triggers']`, which carries neither. So a stack that declared a webhook without both validated, built and booted; the activation door answered `enabled: true`; every record write answered `200`; and no delivery was ever enqueued. The only trace was one boot `error`, after deploy. `defineStack` now refuses such a stack at load, the third declared-capability refusal beside `STACK_HIERARCHY_SCOPE_CAPABILITY_REQUIRED` and `STACK_TRIGGER_CAPABILITY_REQUIRED`, so every door that loads it (`os validate`, `os build`, `os serve` / `os dev`, an app's own `bootStack` tests) stops with the same sentence. @@ -196,7 +196,7 @@ - **TO:** `defineStack` throws `STACK_WEBHOOK_CAPABILITY_REQUIRED` (`status: 422`), header `defineStack webhook capability validation failed (N issues):`, with one `issues` entry per declared webhook naming the webhook and the missing token or tokens. One code for every arm: which token is missing is in the finding, not in the code. - **Unchanged:** a stack with no declared webhook owes neither token; `defineStack(config, { strict: false })` skips the judgement by contract; the activation door answers as before; and the boot `error` that `@objectstack/plugin-webhooks` logs for a host that wires a stack by hand, past `defineStack`, stays. Every declared webhook counts, `isActive: false` included, because the activation door can switch it on. - **The fix for an author:** add both tokens to the stack's `requires`, beside whatever it already declares, for example `requires: ['automation', 'triggers', 'webhooks', 'realtime']`. The refusal's own line names exactly the tokens to add. -- 3937697: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value +- 386f60f: fix(spec)!: the `Field.select` string shorthand keeps every character it does not document transforming, so an option such as `'no-overlay'` is refused instead of being declared as a different value Clause-②: no (narrowing: a `Field.select` shorthand string the helper used to rewrite silently, e.g. `'no-overlay'` → `nooverlay`, is refused instead) @@ -216,7 +216,7 @@ `@objectstack/metadata-core`: `sys_metadata_audit.lock_state` was the one in-tree column relying on the strip. It declared the options `none`, `nooverlay`, `nodelete` and `full`, while its writer stores the `MetadataLock` spelling (`none`, `no-overlay`, `no-delete`, `full`), so no `no-overlay` or `no-delete` row ever matched a declared option. It is now `Field.text({ maxLength: 255 })`, read-only as before. `GET /api/v1/meta/object/sys_metadata_audit` serves `lock_state` as `type: 'text'` with `maxLength: 255` and no `options`. No stored row is rewritten, the writer and reader are unchanged, and an existing `varchar(255)` column reports no schema drift on postgres, mysql or sqlite. `@objectstack/platform-objects`: the translation bundles drop the four `sys_metadata_audit.lock_state` option labels (`none`, `nooverlay`, `nodelete`, `full`), which the column no longer declares. The field label stays translated. -- 3937697: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext +- 28c9a2c: fix(spec,driver-turso)!: a turso datasource that declares `encryptionKey` on a local file or an embedded replica is refused where it is written and when the driver is built, instead of being accepted and written in plaintext Clause-②: no (narrowing) — the accept set of the `turso` `datasource.config` contract, of the published `TursoConfigSchema` mirror and of `new TursoDriver()` narrows by one key beside a `file:` url or `:memory:`, in every mode. No key is added, removed or renamed, and no exported symbol moves. `@objectstack/service-datasource` is graded `patch`: the TSDoc of its exported `TursoDriverConfigInput.encryptionKey` no longer promises an encrypted file, and nothing else in it changes. @@ -245,7 +245,7 @@ Blast radius, measured on this tree: no example, template, CLI scaffold or published skill authors the key, and no host default or environment variable sets it (a turso `encryptionKey` reaches the driver only from an authored `datasource.config`). Whether any out-of-repo deployment declares such a config is NOT measured and is not claimed to be zero. <!-- adr-0087: registered turso-config-local-encryption-key-refused --> -- 3937697: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource +- 2354058: feat(spec,driver-turso)!: turso `config.encryptionKey` is removed — it never encrypted anything, in any mode, and is now refused everywhere it is written instead of accepted on a remote datasource Clause-②: no (narrowing) @@ -285,7 +285,7 @@ ### Blast radius Measured on this tree: no example, template, CLI scaffold, published skill, host default or environment variable authors the key. A tree-scoped absence pin now holds that. Whether any out-of-repo deployment declares it is not measured, and is not claimed to be zero. -- 3937697: feat(spec)!: a `controlled_by_parent` object whose one required `master_detail` is marked `readonly: true` or `system: true` is refused at parse +- 02ad31a: feat(spec)!: a `controlled_by_parent` object whose one required `master_detail` is marked `readonly: true` or `system: true` is refused at parse Clause-②: no (narrowing) @@ -307,7 +307,7 @@ `@objectstack/spec/data`: `controlledByParentMasterRefusal` returns the new shape `master-not-writable` for this object, so a producer that asks it before writing `controlled_by_parent` gets the parse's verdict. `ControlledByParentMasterShape` gains that member. `isControlledByParentMasterField` is unchanged: a flagged required `master_detail` still counts as the master, so beside a second required one the object is still refused as having two. `@objectstack/lint`: the `relationship/master-detail-required` explanation (`os explain`) now says that the parse refuses every shape that leaves the object without exactly one writable required master, and that a shape on a second, non-required `master_detail` is this rule's report alone. -- 3937697: feat(spec)!: the docs-viewer keys are retired — `ApiDocumentationConfig.ui` (with `ApiTestingUiConfigSchema` / `ApiTestingUiType`) and the REST API plugin config's `openApi.uiPath` / `openApi.uiFramework` are refused with a prescription naming the OpenAPI document (ADR-0049) +- 14e7239: feat(spec)!: the docs-viewer keys are retired — `ApiDocumentationConfig.ui` (with `ApiTestingUiConfigSchema` / `ApiTestingUiType`) and the REST API plugin config's `openApi.uiPath` / `openApi.uiFramework` are refused with a prescription naming the OpenAPI document (ADR-0049) Clause-②: no (narrowing) Metadata-protocol: narrowed @@ -350,7 +350,7 @@ - the three tombstones and their retirement records (`packages/spec/src/api/documentation.zod.ts`, `packages/spec/src/api/plugin-rest-api.zod.ts`); the two value defs deleted; `REST_API_PLUGIN.md`'s example and feature list no longer name a viewer - pin test `docs-viewer-keys-retirement.test.ts`: `code`, `path` and the prescription at each door (each schema and `RestApiPluginConfigSchema.openApi`), the `tsc` channel, the live controls, zero holders for the retired names, the ADR-0087 registration, and a tree-scoped absence walk - generated artifacts follow the schema: `authorable-surface/`, `authorable-defaults/`, `json-schema.manifest/`, `api-surface/`, `export-origins/`, `declaration-map/`, the strictness-ledger counts and the reference pages for `api/documentation` and `api/plugin-rest-api` -- 3937697: fix(spec)!: an object's `external` binding on a managed datasource is refused at the parse and by `defineStack`, as ADR-0015 §4.2 declares +- fe0ec2b: fix(spec)!: an object's `external` binding on a managed datasource is refused at the parse and by `defineStack`, as ADR-0015 §4.2 declares Clause-②: no (narrowing) @@ -369,7 +369,7 @@ - A package `defaultDatasource` or a `datasourceMapping` rule does not make an object federated: they route its queries, while the boot validation and the write gate read the object's own `datasource`. - **Unchanged:** a binding on a datasource declared `schemaMode: 'external'` or `'validate-only'` is accepted. A binding on a datasource the stack does not declare (registered by the host or another package, or stored at runtime) gets no verdict at these doors, because they cannot see its `schemaMode`. `defineStack(config, { strict: false })` skips the stack-level judgement by contract. A stored object row in the refused shape still registers, under a `[metadata_spec_invalid]` diagnostic, and its next save is refused; `os migrate meta --stored` lists each such row under `object-external-binding-managed-datasource-refused`. - **The fix for an author:** set the object's `datasource` to the datasource that holds the remote table and declare that datasource with `schemaMode: 'external'` (or `'validate-only'`) and its `external` settings, for example `datasource: 'warehouse'` beside `defineDatasource({ name: 'warehouse', schemaMode: 'external', external: { … } })`. An object whose rows ObjectStack should own drops `external` instead. -- 3937697: feat(lint)!: `objectstack validate`, `compile` and the publish gate refuse a bulk action's `confirmText` hole over an unbound root, a single-brace token, a hole holding logic and a blank sentence (#25205) +- ecb4e69: feat(lint)!: `objectstack validate`, `compile` and the publish gate refuse a bulk action's `confirmText` hole over an unbound root, a single-brace token, a hole holding logic and a blank sentence (#25205) Clause-②: no (narrowing: a bulk action's `confirmText` that names an unbound root, carries a single-brace token, holds logic in a hole or is blank is refused at `objectstack validate`, `compile` and the publish gate; it ships now under the amended 「甲」, #6015 `6303865025`) Metadata-protocol: narrowed @@ -392,7 +392,7 @@ - Measured before crossing, through the built `@objectstack/lint` at `925fd0772c`: 0 in-repo producers carry such a sentence. The 6 bulk defs with a `confirmText` in `examples/app-showcase` (`project.view.ts`) draw 0 findings, against 1 for a planted unbound hole. HotCRM at `1e71d5e` declares 3 bulk `confirmText` sentences on `account.view.ts` (`{{count}}`, and `{{tier}}` on the def whose param is `tier`), all over bound roots: 0 findings. Its other 9 of the 12 are translations of those 3 in its locale bundles, which this pass does not read. <!-- adr-0087: not-required (no-migration-prescription) a refusal at `objectstack validate`, `compile` and the publish gate of a bulk action `confirmText` naming an unbound root, carrying a single-brace token, holding logic in a hole, or blank: no authorable key, spelling, export or stored shape moves, the parse is unchanged, and no stored row is read, rewritten or converted. A stored view whose sentence is refused keeps loading until it is next saved, and the repair is the author's rewrite of the sentence (which root a hole should name is the author's intent), which no ledger entry can derive. The other categories are closed on facts: the packages publish (not unpublished); no ADR-0087 id covers this verdict (not already-registered); and the change is a build and door verdict, not a declaration (not runtime-interface-only or type-surface-only). --> -- 3937697: fix(metadata-protocol)!: the metadata save doors and `composeStacks` refuse an object's `external` binding on a named managed datasource, from either side of the pair +- bda53bb: fix(metadata-protocol)!: the metadata save doors and `composeStacks` refuse an object's `external` binding on a named managed datasource, from either side of the pair Clause-②: yes (narrowing) @@ -417,7 +417,7 @@ This narrows the **Unchanged** bullet of the #25168 changeset, which said a binding on a datasource "registered by the host or another package, or stored at runtime" gets no verdict at the load doors: the metadata save doors now judge it, and `composeStacks` judges one another input declares. `@objectstack/spec/data`: exports `externalBindingDatasourceRefusal` and its result type `ExternalBindingDatasourceRefusal`, the one predicate behind the rule, so a runtime door resolves the datasource it can see and asks it rather than copying the judgement. Its behaviour is unchanged. -- 3937697: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it +- b964ea1: feat(spec,core,objectql): one package entry of a release artifact may state its own `source`, and the registry records it Clause-②: yes Metadata-protocol: added @@ -427,7 +427,7 @@ The `manifest` service registers each package with the `source` its entry states, so a merged artifact that carries marketplace installs beside the deployment's own code lists them as `marketplace` on `GET /api/v1/packages`. An entry that states nothing takes the registering door's statement as before (`register(artifact, { source })`, `code` when absent), so existing artifacts register unchanged. An entry's own statement wins over the door's. `@objectstack/core` adds `resolveArtifactPackageEntries(artifact)`, which returns each package to register as `{ manifest, source? }` in dependency order. `resolveArtifactPackageOrder` is unchanged and still returns the bodies alone. -- 3937697: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants +- 9019af9: feat: an `external` organization role for portal users, who read their own identity rows and reach data only through explicit grants Clause-②: yes (widening) Metadata-protocol: added @@ -445,7 +445,7 @@ - **`@objectstack/platform-objects`:** the `External` option label on the membership role pickers, translated. `org_external` is a reserved name from this release on, so a position can no longer be named `org_external`. -- 3937697: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS +- 45f9962: feat: a holder of the `external` organization role is the EXTERNAL principal — the org-wide default never widens it, and it reaches data only through shares, sharing rules and grant RLS Clause-②: yes (widening: `@objectstack/core` gains `owdForAudience`, `isExternalAudienceContext`, `externalGrantSpeaks` and the two grant-stamp keys; every narrowing below applies only to the `external` role, which no release has shipped yet) Metadata-protocol: semantic @@ -460,7 +460,7 @@ - **Directory doors.** `list-teams` and `get-full-organization`'s `teams` answer an external only the teams it sits on. `list-invitations`, which better-auth gates on membership alone, answers an external only invitations to its own email. Nothing changes for a principal that does not hold the `external` role. -- 3937697: feat(spec): a roster object can declare its membership keys, `ObjectSchema.membershipKeys` +- dc532e8: feat(spec): a roster object can declare its membership keys, `ObjectSchema.membershipKeys` Clause-②: yes (widening) Metadata-protocol: added @@ -474,7 +474,7 @@ - **`@objectstack/metadata-core`: the field-level-security projection classifies the new key.** When an object document is served to a caller who cannot read some of its fields, each membership key whose `userField`, `valueField` or `filter` names such a field is dropped whole from the served document; the others are served unchanged. - The row-level security docs no longer say the runtime stages `territory_account_ids` or `team_member_ids`: those are app-supplied keys, and the docs now say where a membership key comes from. - Additive: every object that parsed before still parses, and its parsed output is unchanged. -- 3937697: fix(lint)!: a page or view `visibleWhen` that hands `has()` an argument other than a field selection is refused at publish +- f5b6b3f: fix(lint)!: a page or view `visibleWhen` that hands `has()` an argument other than a field selection is refused at publish Clause-②: no (narrowing) @@ -490,7 +490,7 @@ - **TO:** each is refused as `visibility-predicate-has-argument`, an error, at those doors (the save doors answer `422 INVALID_METADATA`). The finding quotes the argument and the engine's wording, and its hint names the spelling to write. `os explain visibility-predicate-has-argument` says why. - **Unchanged:** `has(e.f)` for any `e`, including a selection over an indexed or called receiver (`has(record.items[0].name)`); every other predicate, and nothing about the types that flow through one is judged. A `has(status) && status == 'x'` keeps its `visibility-bare-identifier` finding on the unguarded `status`, beside the new one. A stored page or view row in the refused shape still loads and is served; its next save is refused, and `os migrate meta --stored` lists each such predicate under `visibility-predicate-has-argument-refused`. - **The fix for an author:** write `has(record.status)` or `'status' in record` for a field (`data` instead of `record` on a metadata-editing form), and `size(record.items) > 0` to ask whether a list has a first element (`'k' in e` for a bracketed string key). -- 3937697: feat(spec): declare the console flag `features.cloudManaged` — a `PUBLIC_AUTH_FEATURES` entry with a new hide-when-on gate semantics, and `AuthFeaturesConfigSchema` declares it +- f4112a7: feat(spec): declare the console flag `features.cloudManaged` — a `PUBLIC_AUTH_FEATURES` entry with a new hide-when-on gate semantics, and `AuthFeaturesConfigSchema` declares it Clause-②: yes (widening) Metadata-protocol: added @@ -502,7 +502,7 @@ - **`AuthFeaturesConfigSchema.cloudManaged`** is an optional boolean on the `GET /api/v1/auth/config` response's `features`. Absent means not managed. What to do: nothing. Every key and value accepted before is accepted unchanged, and every existing flag lowers to the same predicate as before. -- 3937697: fix(spec)!: a flow `get_record` node's `limit` is declared a positive integer, so a fraction, `0` or a negative is refused at every door that parses a flow +- 303aef0: fix(spec)!: a flow `get_record` node's `limit` is declared a positive integer, so a fraction, `0` or a negative is refused at every door that parses a flow Clause-②: no (narrowing) Metadata-protocol: narrowed @@ -522,7 +522,7 @@ Data at rest: a flow already stored with such a `limit` is refused whole when it registers. At boot it is skipped with a `warn` naming it and its trigger is not armed, while the flows beside it register. `objectstack migrate meta` reports it under `flow-builtin-node-config-values-refused`. No conversion rewrites it, because only the author knows the count they meant. No producer writes such a value: every `get_record` `limit` in this repository's examples and tests, and in HotCRM, is a positive whole number. -- 3937697: feat(spec): a dataset dimension may name its null bucket with `nullLabel` +- 7c68b10: feat(spec): a dataset dimension may name its null bucket with `nullLabel` Clause-②: yes (widening) Metadata-protocol: added @@ -532,7 +532,7 @@ - **What is accepted now.** `dimensions[].nullLabel` on a dataset, in either label form. Every dimension that parsed before parses unchanged, and the dimension still refuses any other undeclared key. - **What reads it.** Nothing yet. The chart renderer that draws the bucket under this label ships separately, and until it does the bucket keeps the renderer's own default label. The liveness ledger records the key as `planned`, so `os lint` and `os validate` warn when you set it. - **What to do.** Nothing. No existing key, value or default changes. -- 3937697: docs(spec): the flow `runAs` description says a `system` run's writes to the four identity-assignment objects are refused, and the ADR-0087 D3 entry records that change of meaning +- 025f6de: docs(spec): the flow `runAs` description says a `system` run's writes to the four identity-assignment objects are refused, and the ADR-0087 D3 entry records that change of meaning Clause-②: no (describe text and ADR registration only; no accept-set change) Metadata-protocol: semantic (records the change of meaning #25483 landed) @@ -548,7 +548,7 @@ ### Patch Changes -- 3937697: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) +- 448374d: feat(cloud-connection, plugin-security, spec, cli): a marketplace upgrade that would un-make an access choice is refused until it is confirmed (ADR-0126 §6 wall 3) Clause-②: yes (narrowing): a marketplace re-install that installed before is now refused `409` while it would un-make an access choice made in this system, until the same call confirms it (narrowing); the door gains the `confirmAccessUpgrade` body field and the `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` code, plugin-security gains the `security.accessUpgradeCheck` service and its exports, and the CLI gains `--confirm-access-upgrade <token>` (widening). Metadata-protocol: none @@ -566,7 +566,7 @@ - **Unchanged.** A fresh install is never checked. An upgrade with no finding installs exactly as before. The error-code ledger registers `ACCESS_UPGRADE_CONFIRMATION_REQUIRED` under `@objectstack/cloud-connection`. `@objectstack/plugin-security` exports `ACCESS_UPGRADE_CHECK_SERVICE`, `createAccessUpgradeCheck` and `accessUpgradeDelta`, and `SecurityPlugin` registers the check under `security.accessUpgradeCheck`. -- 3937697: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. +- df8bb40: **Shipped in 18.0.0**, whose CHANGELOG missed this entry; listed here one release late. feat!: an organization-less row on a tenant table no longer draws its autonumber from the `__global__` counter, and a production server boot with no auth secret is refused @@ -588,7 +588,7 @@ The retired export: - FROM `GLOBAL_TENANT` TO `GLOBAL_TENANT` imported from `@objectstack/driver-sql`, where the counter and the index emitters keep it (or the literal `'__global__'`). -- 3937697: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does +- 0091d84: fix: no shipped text says the SQL driver reads organization-less rows, and the in-memory HTTP outbox no longer does Clause-②: no (one fix and texts: the in-memory HTTP outbox's `redeliver()` now answers as `SqlHttpOutbox` already did; no accept set, served body or error code of a shipped composition moves) @@ -600,7 +600,7 @@ - **`@objectstack/lint`.** `os explain unique/legacy-organization-composite` now says that a new row carries its organization wherever the organization object is registered. A composition that registers no organization object still writes rows whose organization column is NULL. - **`@objectstack/spec`.** The TSDoc of `SharingRuleRow` no longer calls it a 1-to-1 stored shape: `deploymentWide` has no `sys_sharing_rule` column. The TSDoc of `DriverOptions.tenantIds` and of the events `organizationId` member describe the predicate without a NULL arm. - **The other packages.** Code comments only. -- 3937697: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database +- 5e9b100: feat(driver-sql,driver-turso)!: a table the driver creates carries its tenant column NOT NULL, so a write that names no organization is refused at the database Clause-②: yes (narrowing) Metadata-protocol: none @@ -615,7 +615,7 @@ - **Who sees it.** A composed `os serve` / `os dev` / `os start` with auth stamps every write with its organization, so nothing changes there. A production `os serve` whose `AuthPlugin` did not compose (no `OS_AUTH_SECRET`) and a lean embedding (`@objectstack/objectql/core` or `createStandaloneStack` over a SQL driver, with no organization object) used to write those rows with a NULL organization; now each such write fails, loudly. **The remedy.** Carry the organization on the write: `ql.insert(object, { ...row, organization_id: orgId })`, or `{ context: { tenantId: orgId } }`. Compose authentication (set `OS_AUTH_SECRET`) so the platform derives it. If the object's rows legitimately belong to no organization, declare it so and it has no tenant column: `systemFields: { tenant: false }` or `tenancy: { enabled: false }`. -- 3937697: feat(lint,spec): `os validate`, `os build` and `os lint` warn on a `user` field whose `reference` names an object other than `sys_user`, and `Field.user()` marks `reference` deprecated +- e7befa7: feat(lint,spec): `os validate`, `os build` and `os lint` warn on a `user` field whose `reference` names an object other than `sys_user`, and `Field.user()` marks `reference` deprecated Clause-②: yes (widening) @@ -625,24 +625,24 @@ - **Published.** `USER_FIELD_FOREIGN_REFERENCE` (`user-field-foreign-reference`) is exported from `@objectstack/lint` beside `OBJECT_REFERENCE_UNKNOWN`, and `RULE_EXPLANATIONS` gains its entry, so `os explain user-field-foreign-reference` prints why the field is half a link and half a user, and why the rewrite to a `lookup` is left to the author. - **Unchanged.** Parsing, the runtime's resolution of such a field (it still follows the authored `reference`), `Field.user()`'s output, and `user` fields written without `reference` or with `reference: 'sys_user'`. - **What to do.** Change a `user` field that points at another object to a `lookup` on that object. No in-repo app or package wrote this shape. Two test fixtures did: one is now a `lookup`, and the other deliberately pins the 18.x resolution. -- 3937697: docs(spec): `server.trustProxy`'s description names both consumers of the client-address rule +- 55d7aab: docs(spec): `server.trustProxy`'s description names both consumers of the client-address rule Clause-②: no The `.describe()` on `server.trustProxy` named only the inbound rate limiter. `objectstack serve` also passes the value to the authentication plugin, whose IP allow-list (`allowed_ip_ranges`) judges, and whose login audit stamps as `last_login_ip`, the address that the same rule establishes (`@objectstack/plugin-auth/client-address`). The description now names both. No key, type, default or accepted value changes. -- 3937697: fix(spec): `os lint` no longer tells authors to remove a declared webhook's `label` or `description` +- 0715fac: fix(spec): `os lint` no longer tells authors to remove a declared webhook's `label` or `description` Clause-②: no (a liveness-ledger re-grade: no schema, accept set, served body or error code moves; only the advisory `liveness-dead-property` warning on these two keys stops) The shipped liveness ledger (`liveness/webhook.json`) graded a declared webhook's `label` and `description` `dead` once the boot seeder that copied them into a `sys_webhook` row retired, and the advisory lint warned "Remove it" on every webhook that authored them. They are read: the Studio metadata list and quick-find show both keys, read off `GET /api/v1/meta/webhook`. Both rows are now `live`, so a declared webhook may keep its `label` and `description` and no warning is printed for them. Nothing else changes: the dispatcher still delivers on the same props as before. -- 3937697: fix(spec,plugin-sharing): the `DataEvent.organizationId` description and the sharing-rule Organization help stop describing organization-less rows that 18.x no longer writes +- 60b42cd: fix(spec,plugin-sharing): the `DataEvent.organizationId` description and the sharing-rule Organization help stop describing organization-less rows that 18.x no longer writes Clause-②: no (description and help text only: no response, status, outcome, boot verdict or export moves) Metadata-protocol: none (a schema description and a field's help text; nothing a metadata author writes changes) - **`DataEvent.organizationId` (`@objectstack/spec/api`).** The description said every event on a `single`-posture deployment carries no organization, because nothing stamps the column there. Since 18.x the engine stamps every tenant row on a single-organization deployment with its Default Organization, so those events carry it. The key is now described as absent in two cases: a row of an object outside the wall, and every row of a composition that registers no organization object. The schema itself is unchanged (`z.string().min(1).optional()`). - **`sys_sharing_rule.organization_id` (`@objectstack/plugin-sharing`).** The Setup help said "null = global". A stored rule always carries its organization; a rule that applies to every organization is a declared rule. The help now reads "The organization this rule belongs to.", with the translated locales updated to match. -- 3937697: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit +- 0b8bce4: fix(plugin-security): a `controlled_by_parent` detail's read scope is the engine's `ReadableIds` leaf over its master — one statement per read, no master id list, 200 past the dialect's bind limit Clause-②: no Metadata-protocol: none @@ -651,17 +651,17 @@ - **`@objectstack/service-analytics`.** The engine-bound merges (`ObjectQLStrategy.withReadScope`, its FK attribute map, and the plugin's record-label pass) admit the leaf and hand the scope to the engine, which composes it as a find does. `NativeSQLStrategy.canHandle` declines a query whose base or joined object's read scope carries the leaf, so a `controlled_by_parent` object's analytics query routes to the ObjectQL strategy and serves the find path's rows. `compileScopedFilterToSql` refuses a scope carrying the leaf by name, in its existing `READ_SCOPE_COMPILE_FAILED` / 500 envelope: the `/api/v1/analytics/sql` dry-run echo of a `controlled_by_parent` object now refuses where it rendered the bound id list — it runs no composition and shows no statement it would not run. A filter an author writes keeps its judgement on every face. - **`@objectstack/driver-turso`.** The remote face resolves a composed leaf nested inside a composed leaf's scope through `toRemoteWhere` with the outer read's options, so a two-level `controlled_by_parent` chain on a remote Turso datasource answers rows instead of `INTERNAL_ERROR` / 500. - **`@objectstack/spec`.** One nested-leaf row in `READABLE_IDS_CASES`, so every driver's conformance suite measures the shape, and the comparand-shape door's docblock names both callers that pass `admitReadableIds`. No schema, accept set or export of a metadata key moves. -- 3937697: fix(spec): the `script.config.template` tombstone points at the `notify` node's own `template` key +- 1862d8d: fix(spec): the `script.config.template` tombstone points at the `notify` node's own `template` key Clause-②: no (prose only: no shape, key, default or accepted value moves) The rejection an author sees for the retired `script.config.template` key said that stored templates live in the messaging service (`sys_notification_template`). That text predates the `notify` node's own `template` key. It now prescribes that key: name an email template (`email_template`) in a `notify` node's `template`, with `templateData` filling its placeholders, and the email and in-app inbox channels render it in each recipient's locale; otherwise the node carries inline `title`/`message`. It mentions `sys_notification_template` only as the rows the `email` and `sms` channels read, `email` only when the node names no template. The key stays rejected exactly as before, and the generated reference page carries the same text. -- 3937697: docs(spec): `ApprovalRequestRow`'s display labels are documented as the reader's-locale label +- 69712d5: docs(spec): `ApprovalRequestRow`'s display labels are documented as the reader's-locale label Clause-②: no (ledger and docblock text only: no shape, key, default, accepted value or export moves) The `ApprovalRequestRow` docblocks for `process_label`, `step_label`, `current_step_label` and `object_label` named the authored or schema label. Since plugin-approvals serves those members in the reader's locale, they now say so: the served value is the translation picked from `flows.<flow>.label`, `flows.<flow>.approvals.<node_id>.label` or `objects.<object>.label` in the read's `ExecutionContext.locale`, falling back to the stored snapshot (or the object's schema label). The stored `sys_approval_request` columns are unchanged. The `flows.approvals` translation liveness rows read `live`. No type, key or export changes. -- 3937697: fix(objectql)!: under `strictReadonlyWrites`, a write whose value a stored field's `expression` replaces (`stored_expression`) is refused, and nothing is written +- 03c12a5: fix(objectql)!: under `strictReadonlyWrites`, a write whose value a stored field's `expression` replaces (`stored_expression`) is refused, and nothing is written Clause-②: no (narrowing: under `strictReadonlyWrites`, a write whose value a stored expression replaces is refused instead of reported; it ships now under the amended 「甲」, #6015 `6303865025`) @@ -682,12 +682,12 @@ This supersedes the `strictReadonlyWrites` bullet of the `stored_expression` reason's entry, which deferred this refusal to a later major. Measured before the change: no non-test caller in this repository passes `strictReadonlyWrites` (the examples, dogfood suites and runtime doors pass none), so no in-repo producer moves. -- 3937697: docs(spec): `server.trustProxy`'s description names all three consumers of the client-address rule +- edcc8ce: docs(spec): `server.trustProxy`'s description names all three consumers of the client-address rule Clause-②: no (prose only: no shape, key, default or accepted value moves) The `.describe()` on `server.trustProxy` said the client-address rule had two consumers: the inbound rate limiter and the authentication plugin. There is a third. A declared endpoint (`apis:`) whose own `rateLimit` is enabled is metered by the endpoint policy chain, which keys anonymous callers by the same rule under the same `trustProxy`, whether or not `server.security.rateLimit.enabled` is set. The description and the TSDoc now name it. No key, type, default or accepted value changes. -- 3937697: feat(spec, plugin-email): `IEmailService.isConfigured()` answers whether mail sent through the service is actually delivered +- fccbd9d: feat(spec, plugin-email): `IEmailService.isConfigured()` answers whether mail sent through the service is actually delivered Clause-②: yes (widening: an optional member on `IEmailService`) Metadata-protocol: none @@ -696,7 +696,7 @@ - **Absent means unknown.** The member is optional, so every existing implementation stays valid. A consumer must never read an absent member as delivering: a flow whose success depends on a mail reaching someone treats absent the same as `false` and keeps its explicit refusal, so a service that is merely wired is never mistaken for one that delivers. - **The implementation.** `@objectstack/plugin-email`'s `EmailService.isConfigured()` answers `false` while its transport is the `LogTransport` (the default when no mail transport is configured) and `true` for any other transport. It follows the transport the plugin rebuilds from the `mail` settings, so saving an SMTP or API-provider configuration turns it `true` without a restart. - **Unchanged.** Sending, templates, persistence and the boot warning for the `log` transport behave as before. No consumer reads the member yet. -- 3937697: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number +- c8f4c43: fix(objectql, driver-sql, spec): a stored field whose `expression` reads an `autonumber` stores the value computed with the number Clause-②: yes (widening) Metadata-protocol: none @@ -708,7 +708,7 @@ - **A driver that owns its counter without the member** stores the readers computed without the number, as before, and the engine now says so once per object at `error` level, with the remedy. - **`ObjectQL.registerInsertRecomputeListener(id, fn)` (new).** Called per row after that second computation, on the row the driver is handed. `plugin-pinyin-search` registers on it, so a `__search` companion whose name field reads the record number is stamped from the value that carries the number, and `$search` finds the record by pinyin and by its number. - **One change in what a refused insert reports.** On an object whose stored expression reads the number, a SQL driver's collision that survives every retry now leaves as `ERR_AUTONUMBER_COLLISION` (the engine's three attempts) instead of `DUPLICATE_RECORD` (the driver's own retries). Every other object is unchanged. -- 3937697: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since +- 03966ce: fix(plugin-auth)!: lift the better-auth family from 1.7.3 to 1.7.12 for the security fixes published since `@objectstack/plugin-auth` declares the better-auth family exactly, so a fresh install resolves what this package tested. All five declared ranges (`better-auth`, `@better-auth/core`, `@better-auth/oauth-provider`, `@better-auth/scim`, `@better-auth/sso`) move from `1.7.3` to `1.7.12`, still exact. The lift takes the fixes published in 1.7.4 to 1.7.12 for packages this plugin mounts: GHSA-965c-763c-88jm and GHSA-r4xp-prcw-77qf (1.7.7), and the oauth-provider, SSO, SCIM, JWT and password-reset fixes up to 1.7.12. Every symbol this package imports from the family is still exported. It also pulls in `better-call` 1.4.4, `@better-auth/utils` 0.5.0 and `@better-fetch/fetch` 1.3.2, the versions 1.7.12 declares. @@ -738,7 +738,7 @@ - **`@objectstack/spec` and `@objectstack/cli` (patch, text only, not breaking):** the TSDoc on the organization schema's optional `updatedAt` now records that its better-auth measurement still holds on 1.7.12, and the `os migrate account-issuer` description no longer names a better-auth version. No schema, type, flag or behaviour changes in either package. - **`@objectstack/service-datasource` (patch, text only, not breaking):** the `resolveSqliteDriver` docs now describe the error better-sqlite3 13 actually throws for an addon that was never built: its loader's `require()` of the absent `build/Release/better_sqlite3.node`, which Node answers with `MODULE_NOT_FOUND`. The docs used to name a helper package's message that 13.x no longer produces. Development still steps down to wasm SQLite on that error, as before. No code changes. - **What to do as an operator:** tell users that a Magic Link, social, SSO or account-linking sign-in begun before the upgrade must be started again after it. Check each OIDC SSO provider's configured issuer against its discovery document and set it to the exact `issuer` string the document publishes. An OAuth client that branched on `401` for a PKCE failure should branch on `400 invalid_grant`. A browser client that read every non-`200` `/get-session` answer as "signed out" should treat a `500` as "try again". -- 3937697: docs(spec): `api.enableOpenApi` and the `api.documentation.enabled` refusal name only the OpenAPI document; the retired docs viewer page is no longer described +- e3aa111: docs(spec): `api.enableOpenApi` and the `api.documentation.enabled` refusal name only the OpenAPI document; the retired docs viewer page is no longer described Clause-②: no Metadata-protocol: none @@ -750,13 +750,13 @@ - **The `rest-api-config-dead-keys-retired` upgrade entry** (shown by `os migrate meta` and the upgrade guide) drops the viewer from its replacement and acceptance text the same way. No schema accepts or refuses anything new, no default changes, and no export moves. -- 3937697: docs(spec): the `systemFields` docblock no longer says `organization_id` stays NULL on single-tenant stacks +- 863c580: docs(spec): the `systemFields` docblock no longer says `organization_id` stays NULL on single-tenant stacks Clause-②: no (comment and docblock text only: no accept set, response, status, error, outcome or export moves) Metadata-protocol: none The `organization_id` bullet of `ObjectSchema`'s `systemFields` docblock now says what the runtime does: org-scoping stamps the tenant column on insert (under `single` with the Default Organization), and it is never NULL (ADR-0131 D1). Only the column's index is still gated on multi-tenant mode. No schema, `.describe()` text or behavior changes. -- 3937697: docs(spec, skills): the `titleFormat` description and the objectstack-data skill no longer steer a composite record title that must be queried into a formula field +- 7f5b19d: docs(spec, skills): the `titleFormat` description and the objectstack-data skill no longer steer a composite record title that must be queried into a formula field Clause-②: no Metadata-protocol: none @@ -766,7 +766,7 @@ The same skill's "Computed column" bullet (`rules/relationships.md`) said a stored field's `expression` is a client compute hint and the sent value is stored verbatim. The engine computes the expression from the row the write stores and stores the result, so a client-sent value never stands; the bullet now says so. No key, type, default or accepted value changes; only the text an author reads changes. -- 3937697: feat(spec): `ISharingRuleService` declares the optional `declaredRuleNamed` reader that the catalog activation door uses for declared sharing rules +- dfab597: feat(spec): `ISharingRuleService` declares the optional `declaredRuleNamed` reader that the catalog activation door uses for declared sharing rules Clause-②: yes (widening) Metadata-protocol: none @@ -774,7 +774,7 @@ - **The contract member.** `ISharingRuleService` (`@objectstack/spec/contracts`) gains an optional `declaredRuleNamed?(name)` member. It returns `Promise<{ name: string; packageId?: string } | null>`: the rule the application declares under that name, or `null` when nothing servable is declared under it. The answer covers every organization, and it does not depend on whether the activation ledger has the rule switched off. `POST /api/v1/security/_activation/sharing_rule/:name` reads it to confirm the name it is asked to switch. Before this change the door read the method by duck type, and the contract did not mention it. - **Optional, so no implementer breaks.** An implementation that serves no declared rules can leave it out. A caller probes for it and refuses fail-closed when it is absent. The activation door still answers `503 SERVICE_UNAVAILABLE` in that case, so the door's behaviour does not change. `@objectstack/plugin-sharing`'s `SharingRuleService` already implements it with a compatible signature. - **The ledger's field description.** On `sys_metadata_activation`, the `metadata_type` description now lists every type the ledger holds: `flow`, `action`, `position`, `permission`, `sharing_rule` and `webhook`. It used to stop at `flow`, `permission`, …. -- 3937697: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) +- 9127f23: fix(lint)!: `os build`, `os validate`, `os lint` and the email template publish door refuse a hole in an HTML body that sits where the mail renderer's encoding does not suit it (#25189) Clause-②: no (narrowing: an email template whose `bodyHtml` places a hole outside the supported placements is refused at the three CLI commands and at the publish door, where it passed) Metadata-protocol: none @@ -794,7 +794,7 @@ - **`@objectstack/formula` (patch):** the classifier the rule reads, `judgeMailHtmlHoles`, is exported with its supported-placement list and labels. `@objectstack/plugin-email`'s built-in template pin reads the same classifier and holds its hole grammar to the renderer's. - **`@objectstack/spec` (patch):** one conversion's example templates now declare their link variable with `type: 'url'` and place it in an `href`. No schema, conversion behaviour or export changes. - **The fix for an author:** move the hole into element text or a quoted plain-text attribute. For a link, declare the variable with `type: 'url'` and write it triple-braced as the whole double-quoted `href` value. -- 3937697: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected +- 24360dc: fix(plugin-sharing): the declared-rule organization walk ends on the rows read, and a row with no readable id answers unknown; texts that still described the retired NULL-organization reading are corrected Clause-②: no Metadata-protocol: none @@ -803,7 +803,7 @@ - **`@objectstack/plugin-security`.** The Organization help on `sys_user_position` and `sys_user_permission_set` no longer says an empty value means "global" or "applies in every org context". A grant or assignment applies only in its own organization, and one with no organization applies nowhere. The four locale bundles carry the new text. - **`@objectstack/cli`.** `os migrate organization-ownership`'s warning about rows whose owner cannot be derived reads "…while one stays NULL, except on a table whose column is not the tenancy anchor." where it read "(but on a table …)". - **`@objectstack/spec`.** Wording only, no schema moves: the upgrade guide's `driver-read-scope-follows-tenant-wall` entry names update and delete "by id or by predicate"; the `sharing-rule-declared-mirror-retired` entry no longer paraphrases ADR-0131 D13 as asking an entry of every retirement; `IEmailService`'s `organizationId` TSDoc no longer says an absent value leaves the row unstamped (the engine stamps the derivable organization or refuses the insert); a TSDoc citation in `schedule-organization.zod.ts` names the run store instead of a deleted file. -- 3937697: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster +- e5eab06: feat(plugin-security): a declared membership key is staged per request, so a policy reading `current_user.KEY` reads the roster Clause-②: no Metadata-protocol: semantic @@ -816,7 +816,7 @@ - **Explain.** The object-level `rls` layer names each key the policies read: its label and description, the roster object, `valueField`, `userField`, the filter, and the size it resolved to or why it did not, and the permission sets whose holders can write the roster object (whoever can write a roster row can grant the key). A record-grained rule reads `via: 'membership:KEY'`, and its detail names the roster row that links the record to the principal. - **`@objectstack/objectql`: an `extend` contribution cannot declare a membership key.** `SchemaRegistry.registerObject` refuses one that carries `membershipKeys`, with `INVALID_METADATA` (`status: 422`) and the error name `ExtensionMembershipKeysRefusedError`, naming the object and the extending package, beside the `defaultRowScope` refusal. The extension merge never carried the key onto the object, so it registered and then never resolved. The manifest path already refused it at authoring. - **`@objectstack/spec`**: the `membershipKeys` describe and the row-level security docs no longer say the key is not applied, and the liveness row is `live`. -- 3937697: fix(spec)!: the published list-query schemas declare the page window the Data API enforces — a non-negative integer — instead of any number +- 5f30f00: fix(spec)!: the published list-query schemas declare the page window the Data API enforces — a non-negative integer — instead of any number Clause-②: no (narrowing) Metadata-protocol: none @@ -831,7 +831,7 @@ - **Unchanged.** A well-formed window parses and pages exactly as before, `0` included (`$top=0` asks for the total alone). Windows inside `expand` and the engine and driver contracts (`QuerySchema`, `EngineQueryOptionsSchema`) are not narrowed: no door refuses those. **The remedy.** Send the window as a whole count of zero or more, or leave the parameter out. -- 3937697: fix(spec): `os migrate meta --stored` lists a stored object bound `external` to a stored or registered managed datasource +- 7db1697: fix(spec): `os migrate meta --stored` lists a stored object bound `external` to a stored or registered managed datasource Clause-②: yes (widening) @@ -841,7 +841,7 @@ - **Now:** for each stored `object` row carrying `external` and naming a datasource, the pass reads that datasource the way the object save door does (the environment's stored row, else the definition the code layer registers; both go through one read) and hands it to the chain. The row is listed under `rows[].todos` with this entry's id exactly when that door refuses its next save. A datasource declared `schemaMode: 'external'` or `'validate-only'`, and a datasource no layer holds, give no listing, as at the door. Nothing is rewritten. - **`@objectstack/spec`:** `ApplyConversionsOptions` (and so `StoredConversionOptions` for `applyConversionsToStoredItem`) gains an optional `knownDatasources`, a map of datasource definitions by name that the caller's door can see beyond the stack. Only the refused-shape listing reads it, so only when an `onTodo` sink is passed. A datasource the stack declares is read from the stack first. Without it, behaviour is unchanged. -- 3937697: feat: `ExecutionStatus` gains `missed`, the run status for a scheduled flow's due time that passed while no kernel was ticking +- d12e650: feat: `ExecutionStatus` gains `missed`, the run status for a scheduled flow's due time that passed while no kernel was ticking Clause-②: yes (widening) Metadata-protocol: none @@ -855,7 +855,7 @@ `@objectstack/plugin-approvals`: `RUN_STATUS_LIVENESS` maps `missed` to `terminal`, so an approval pending on a missed run is swept like one pending on any other finished run. This release only declares the value. The engine writes `missed` rows in a later release. -- 3937697: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" +- 830a63a: feat(analytics): a dataset answer carries each dimension column's null-bucket name, and System Overview names its null user bucket "System" Clause-②: no Metadata-protocol: none @@ -865,7 +865,7 @@ - **`@objectstack/spec`:** `AnalyticsResult.fields[]` and its mirror `AnalyticsResultResponseSchema` gain the optional response member `nullLabel?: string`, the display name of a dimension column's null bucket. It is a response member only; nothing an author writes changes. - **`@objectstack/service-analytics`:** the column-description pass shared by the live query and the draft-data preview sets `fields[].nullLabel` on a dimension column whose dataset dimension declares `nullLabel`, resolved to a string at the request locale by the same resolver as `label`. A dimension without one, and every measure column, carry no `nullLabel` key, so those answers are byte-identical to before. - **`@objectstack/platform-objects`:** the `sys_audit_log_metrics` dataset's `user_id` dimension declares `nullLabel: { en: 'System', 'zh-CN': '系统', 'ja-JP': 'システム', 'es-ES': 'Sistema' }`. The rows the platform writes itself carry no user, and System Overview's "Events by User" drew them, its largest bar, under the renderer's default "(None)". Once the console reads `fields[].nullLabel`, that bar reads "System". -- 3937697: fix(spec): a dataset dimension's `nullLabel` is live, so `os lint` stops warning that nothing draws it, and the dataset form offers it +- 1000cc7: fix(spec): a dataset dimension's `nullLabel` is live, so `os lint` stops warning that nothing draws it, and the dataset form offers it Clause-②: no (a liveness-ledger re-grade plus a form column for a key the schema already accepts: no schema, accept set, served body or error code moves) Metadata-protocol: none @@ -874,7 +874,7 @@ - **Liveness:** `liveness/dataset.json` re-grades `dimensions[].nullLabel` from `planned` to `live`, citing the console's reader at the pin and the server's carry as its producer. Its `authorWarn` goes with it, so the advisory lint no longer tells an author who sets `nullLabel` that no renderer draws the bucket under it. - **Dataset form:** the Dimensions repeater gains a Null Label column, the schema's own `.meta({ title })`. The form had left the key out only while nothing drew it. That reason went with the `planned` verdict, so its row in the form ↔ Zod reconciliation ledger is gone. -- 3937697: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources +- bdf762c: fix: Setup forms show option labels instead of machine values on Business Units, Sharing Rules and Datasources Clause-②: no Metadata-protocol: none @@ -884,7 +884,7 @@ - **`@objectstack/spec`:** the `autoMigrate` key of the SQLite, PostgreSQL and MySQL driver configs had no JSON-Schema `title`, so the New datasource form labelled the field with the raw key `autoMigrate`. It is now titled "Auto-migrate schema". The English labels flow into the generated translation bundles; the existing zh-CN, ja-JP and es-ES option translations are kept. -- 3937697: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both +- 27b3f1f: feat: the position list can say who holds each position and which permission sets it grants, read where the resolver enforces both Clause-②: yes (widening: `GET /meta/position?include=grants` adds two read-only served keys per position, `_holderCount` and `_grantedPermissionSets`; `ISecurityService` gains the optional `describePositionGrants`) Metadata-protocol: none diff --git a/packages/triggers/trigger-api/CHANGELOG.md b/packages/triggers/trigger-api/CHANGELOG.md index be34ce55c89..b5756f06c1c 100644 --- a/packages/triggers/trigger-api/CHANGELOG.md +++ b/packages/triggers/trigger-api/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/triggers/trigger-record-change/CHANGELOG.md b/packages/triggers/trigger-record-change/CHANGELOG.md index bfe2bdc2b80..5dc7159bdec 100644 --- a/packages/triggers/trigger-record-change/CHANGELOG.md +++ b/packages/triggers/trigger-record-change/CHANGELOG.md @@ -4,74 +4,74 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/triggers/trigger-schedule/CHANGELOG.md b/packages/triggers/trigger-schedule/CHANGELOG.md index d8f52f97708..527b2fbf482 100644 --- a/packages/triggers/trigger-schedule/CHANGELOG.md +++ b/packages/triggers/trigger-schedule/CHANGELOG.md @@ -4,77 +4,77 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [b42c621] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [644e4b2] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [d196748] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [303aef0] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] - @objectstack/spec@18.1.0 - @objectstack/core@18.1.0 diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 3aa916ace61..18dcc32657d 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- 3937697: feat: under a walled posture, `OS_PLATFORM_OWNER_ORGANIZATION` raises the access upgrade report in-app in the platform operators' own organization, beside the operator log line +- 915e940: feat: under a walled posture, `OS_PLATFORM_OWNER_ORGANIZATION` raises the access upgrade report in-app in the platform operators' own organization, beside the operator log line Clause-②: yes (widening: a new optional environment variable, `PLATFORM_OWNER_ORGANIZATION_ENV` and `resolvePlatformOwnerOrganization()` exported from `@objectstack/types`; unset, every posture behaves as before) Metadata-protocol: none @@ -18,66 +18,66 @@ - **Unchanged:** unset, the operator line is the only channel, worded as before. Under `single` the setting is ignored, and the Default Organization's administrators are told as before. The walled and `single` delivery now lives in one helper, `upgrade-report-delivery.ts`, so the non-access upgrade report (#24447) can raise its findings the same way. -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [448374d] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [925fd07] +- Updated dependencies [e7befa7] +- Updated dependencies [55d7aab] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0b8bce4] +- Updated dependencies [2069b81] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [69712d5] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [386f60f] +- Updated dependencies [28c9a2c] +- Updated dependencies [2354058] +- Updated dependencies [edcc8ce] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [02ad31a] +- Updated dependencies [03966ce] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [bda53bb] +- Updated dependencies [b964ea1] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [5f30f00] +- Updated dependencies [7db1697] +- Updated dependencies [f5b6b3f] +- Updated dependencies [f4112a7] +- Updated dependencies [303aef0] +- Updated dependencies [d12e650] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [7c68b10] +- Updated dependencies [025f6de] - @objectstack/spec@18.1.0 ## 18.0.0 diff --git a/packages/verify/CHANGELOG.md b/packages/verify/CHANGELOG.md index f3f7c27e8d2..6d8de51b7af 100644 --- a/packages/verify/CHANGELOG.md +++ b/packages/verify/CHANGELOG.md @@ -4,215 +4,215 @@ ### Patch Changes -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [54df640] +- Updated dependencies [448374d] +- Updated dependencies [e207b97] +- Updated dependencies [94842ba] +- Updated dependencies [7cacad5] +- Updated dependencies [df8bb40] +- Updated dependencies [0091d84] +- Updated dependencies [d5d8146] +- Updated dependencies [5e9b100] +- Updated dependencies [7532ea3] +- Updated dependencies [fde7456] +- Updated dependencies [de9cd1f] +- Updated dependencies [9a06f0b] +- Updated dependencies [f90ea67] +- Updated dependencies [7035682] +- Updated dependencies [d606fc1] +- Updated dependencies [c2d4072] +- Updated dependencies [a8b44d4] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [78ab647] +- Updated dependencies [abd5acd] +- Updated dependencies [6b9e6df] +- Updated dependencies [fbb42d9] +- Updated dependencies [73a2b52] +- Updated dependencies [950f949] +- Updated dependencies [5872450] +- Updated dependencies [9ea5afe] +- Updated dependencies [6440cf1] +- Updated dependencies [72518d2] +- Updated dependencies [e5b3de0] +- Updated dependencies [925fd07] +- Updated dependencies [ad8cf92] +- Updated dependencies [e7befa7] +- Updated dependencies [02e6d73] +- Updated dependencies [4cef6e2] +- Updated dependencies [28ff8a9] +- Updated dependencies [55d7aab] +- Updated dependencies [98c3d00] +- Updated dependencies [5050442] +- Updated dependencies [2b1382a] +- Updated dependencies [3fbef41] +- Updated dependencies [72a302a] +- Updated dependencies [fcb40ad] +- Updated dependencies [ba69b16] +- Updated dependencies [865d2c8] +- Updated dependencies [865d2c8] +- Updated dependencies [2941a19] +- Updated dependencies [3b3830c] +- Updated dependencies [abc25a3] +- Updated dependencies [e282f32] +- Updated dependencies [644e4b2] +- Updated dependencies [3d8960c] +- Updated dependencies [0715fac] +- Updated dependencies [60b42cd] +- Updated dependencies [ea08ce5] +- Updated dependencies [19e5338] +- Updated dependencies [9cfc575] +- Updated dependencies [b9a79ef] +- Updated dependencies [63085c3] +- Updated dependencies [0603bfa] +- Updated dependencies [0b8bce4] +- Updated dependencies [5d2c5a1] +- Updated dependencies [b811c73] +- Updated dependencies [066dabc] +- Updated dependencies [4b8f597] +- Updated dependencies [f802213] +- Updated dependencies [86d2360] +- Updated dependencies [688052e] +- Updated dependencies [5d27d32] +- Updated dependencies [6b656bf] +- Updated dependencies [2069b81] +- Updated dependencies [7f99616] +- Updated dependencies [9532e27] +- Updated dependencies [157ebd0] +- Updated dependencies [1862d8d] +- Updated dependencies [30d21f6] +- Updated dependencies [eddffc3] +- Updated dependencies [58cd58f] +- Updated dependencies [58cd58f] +- Updated dependencies [69712d5] +- Updated dependencies [dfe60e3] +- Updated dependencies [d68aab6] +- Updated dependencies [aaee084] +- Updated dependencies [42b60b9] +- Updated dependencies [e939357] +- Updated dependencies [045858f] +- Updated dependencies [baedcec] +- Updated dependencies [03c12a5] +- Updated dependencies [f8c5fb3] +- Updated dependencies [d96f618] +- Updated dependencies [b289090] +- Updated dependencies [386f60f] +- Updated dependencies [c24203f] +- Updated dependencies [d6a5fa3] +- Updated dependencies [27dc53b] +- Updated dependencies [28c9a2c] +- Updated dependencies [4bf079c] +- Updated dependencies [0f1eeee] +- Updated dependencies [f46ef4d] +- Updated dependencies [3782b2d] +- Updated dependencies [2354058] +- Updated dependencies [ba244f1] +- Updated dependencies [edcc8ce] +- Updated dependencies [e5f194b] +- Updated dependencies [2aaee3b] +- Updated dependencies [a39389e] +- Updated dependencies [9340181] +- Updated dependencies [9340181] +- Updated dependencies [2e242bb] +- Updated dependencies [fccbd9d] +- Updated dependencies [c8f4c43] +- Updated dependencies [4f97aeb] +- Updated dependencies [c4b49c3] +- Updated dependencies [db9c02a] +- Updated dependencies [284e048] +- Updated dependencies [c6bdcac] +- Updated dependencies [02ad31a] +- Updated dependencies [0148071] +- Updated dependencies [03966ce] +- Updated dependencies [1b3b65e] +- Updated dependencies [331613c] +- Updated dependencies [5801a4f] +- Updated dependencies [425c743] +- Updated dependencies [d609f60] +- Updated dependencies [6b44efa] +- Updated dependencies [a1e51d6] +- Updated dependencies [e3aa111] +- Updated dependencies [863c580] +- Updated dependencies [7f5b19d] +- Updated dependencies [8010b64] +- Updated dependencies [fb7501b] +- Updated dependencies [504d8b3] +- Updated dependencies [14e7239] +- Updated dependencies [fe0ec2b] +- Updated dependencies [dfab597] +- Updated dependencies [9127f23] +- Updated dependencies [1f78b64] +- Updated dependencies [bc5daf0] +- Updated dependencies [3a440b0] +- Updated dependencies [279fdcf] +- Updated dependencies [24360dc] +- Updated dependencies [ecb4e69] +- Updated dependencies [8dfd126] +- Updated dependencies [bda53bb] +- Updated dependencies [b62f959] +- Updated dependencies [b964ea1] - Updated dependencies [4395cbc] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [9019af9] +- Updated dependencies [45f9962] +- Updated dependencies [e5eab06] +- Updated dependencies [dc532e8] +- Updated dependencies [72fad92] +- Updated dependencies [d196748] +- Updated dependencies [9d60b42] +- Updated dependencies [a285ff2] +- Updated dependencies [829cb77] +- Updated dependencies [5f30f00] +- Updated dependencies [09e07c2] +- Updated dependencies [b9c7a8f] +- Updated dependencies [7db1697] +- Updated dependencies [b3fddd1] +- Updated dependencies [f5b6b3f] +- Updated dependencies [c109bfc] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [f4112a7] +- Updated dependencies [db1c7cc] +- Updated dependencies [258f4e6] +- Updated dependencies [882372d] +- Updated dependencies [303aef0] +- Updated dependencies [eee2f0d] +- Updated dependencies [b3034ee] +- Updated dependencies [d12e650] +- Updated dependencies [b3f3298] +- Updated dependencies [830a63a] +- Updated dependencies [1000cc7] +- Updated dependencies [ee63b47] +- Updated dependencies [bdf762c] +- Updated dependencies [27b3f1f] +- Updated dependencies [ab510f4] +- Updated dependencies [3306cad] +- Updated dependencies [c898bd8] +- Updated dependencies [4374f3c] +- Updated dependencies [d0a1361] +- Updated dependencies [431327b] +- Updated dependencies [97aa34e] +- Updated dependencies [2b7c331] +- Updated dependencies [8878c36] +- Updated dependencies [832a84e] +- Updated dependencies [832a84e] +- Updated dependencies [2581efb] +- Updated dependencies [8a49e37] +- Updated dependencies [7c68b10] +- Updated dependencies [915e940] +- Updated dependencies [0b8dbea] +- Updated dependencies [0ec4c5a] +- Updated dependencies [0fab7ba] +- Updated dependencies [35d942e] - Updated dependencies [a57643d] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [b8c9590] +- Updated dependencies [74496c6] +- Updated dependencies [aa2dbab] - Updated dependencies [4a25192] -- Updated dependencies [3937697] +- Updated dependencies [025f6de] - Updated dependencies [9f39094] -- Updated dependencies [3937697] -- Updated dependencies [3937697] -- Updated dependencies [3937697] +- Updated dependencies [6abee03] +- Updated dependencies [1361a5a] +- Updated dependencies [f7d7403] - @objectstack/plugin-security@18.1.0 - @objectstack/plugin-sharing@18.1.0 - @objectstack/spec@18.1.0