From b38c018b3af1784598f7b200a3fcb2eaec4584f3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 12:51:31 +0000 Subject: [PATCH 1/7] chore(deps): pin every @objectstack/* package to 18.0.0-next.1 All 23 @objectstack/* pins (19 dependencies, 4 devDependencies) move 18.0.0-next.0 -> 18.0.0-next.1 together, exact. The lockfile was regenerated by pnpm install, not edited by hand: 705 -> 707 package keys; the 55 @objectstack/* keys moved one for one, and @objectstack/connector-imap@18.0.0-next.1 plus postal-mime@4.0.6 arrive through @objectstack/service-mailbox. No other third-party package changed version. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- package.json | 46 +-- pnpm-lock.yaml | 1022 ++++++++++++++++++++++++------------------------ 2 files changed, 541 insertions(+), 527 deletions(-) diff --git a/package.json b/package.json index 98863efd..b9c618e3 100644 --- a/package.json +++ b/package.json @@ -36,35 +36,35 @@ }, "packageManager": "pnpm@10.33.0", "dependencies": { - "@objectstack/account": "18.0.0-next.0", - "@objectstack/cli": "18.0.0-next.0", - "@objectstack/core": "18.0.0-next.0", - "@objectstack/driver-sql": "18.0.0-next.0", - "@objectstack/driver-sqlite-wasm": "18.0.0-next.0", - "@objectstack/metadata": "18.0.0-next.0", - "@objectstack/objectql": "18.0.0-next.0", - "@objectstack/platform-objects": "18.0.0-next.0", - "@objectstack/plugin-approvals": "18.0.0-next.0", - "@objectstack/plugin-auth": "18.0.0-next.0", - "@objectstack/plugin-security": "18.0.0-next.0", - "@objectstack/plugin-sharing": "18.0.0-next.0", - "@objectstack/runtime": "18.0.0-next.0", - "@objectstack/service-analytics": "18.0.0-next.0", - "@objectstack/service-automation": "18.0.0-next.0", - "@objectstack/service-messaging": "18.0.0-next.0", - "@objectstack/service-storage": "18.0.0-next.0", - "@objectstack/spec": "18.0.0-next.0", - "@objectstack/trigger-record-change": "18.0.0-next.0" + "@objectstack/account": "18.0.0-next.1", + "@objectstack/cli": "18.0.0-next.1", + "@objectstack/core": "18.0.0-next.1", + "@objectstack/driver-sql": "18.0.0-next.1", + "@objectstack/driver-sqlite-wasm": "18.0.0-next.1", + "@objectstack/metadata": "18.0.0-next.1", + "@objectstack/objectql": "18.0.0-next.1", + "@objectstack/platform-objects": "18.0.0-next.1", + "@objectstack/plugin-approvals": "18.0.0-next.1", + "@objectstack/plugin-auth": "18.0.0-next.1", + "@objectstack/plugin-security": "18.0.0-next.1", + "@objectstack/plugin-sharing": "18.0.0-next.1", + "@objectstack/runtime": "18.0.0-next.1", + "@objectstack/service-analytics": "18.0.0-next.1", + "@objectstack/service-automation": "18.0.0-next.1", + "@objectstack/service-messaging": "18.0.0-next.1", + "@objectstack/service-storage": "18.0.0-next.1", + "@objectstack/spec": "18.0.0-next.1", + "@objectstack/trigger-record-change": "18.0.0-next.1" }, "optionalDependencies": { "better-sqlite3": "^13.0.3" }, "devDependencies": { "@changesets/cli": "^3.0.3", - "@objectstack/formula": "18.0.0-next.0", - "@objectstack/plugin-audit": "18.0.0-next.0", - "@objectstack/plugin-email": "18.0.0-next.0", - "@objectstack/verify": "18.0.0-next.0", + "@objectstack/formula": "18.0.0-next.1", + "@objectstack/plugin-audit": "18.0.0-next.1", + "@objectstack/plugin-email": "18.0.0-next.1", + "@objectstack/verify": "18.0.0-next.1", "@playwright/test": "^1.63.0", "@vitest/coverage-v8": "^4.1.10", "fumadocs-core": "16.15.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 335d81ec..93b09d38 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,78 +9,78 @@ importers: .: dependencies: '@objectstack/account': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/cli': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/core': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 '@objectstack/driver-sql': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 '@objectstack/driver-sqlite-wasm': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(better-sqlite3@13.0.3) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(better-sqlite3@13.0.3) '@objectstack/metadata': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/objectql': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/platform-objects': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/plugin-approvals': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/plugin-auth': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/plugin-security': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/plugin-sharing': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/runtime': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) '@objectstack/service-analytics': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 '@objectstack/service-automation': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/service-messaging': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/service-storage': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/spec': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 '@objectstack/trigger-record-change': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 devDependencies: '@changesets/cli': specifier: ^3.0.3 version: 3.0.3 '@objectstack/formula': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0 + specifier: 18.0.0-next.1 + version: 18.0.0-next.1 '@objectstack/plugin-audit': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/plugin-email': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(vitest@4.1.10) '@objectstack/verify': - specifier: 18.0.0-next.0 - version: 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + specifier: 18.0.0-next.1 + version: 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) '@playwright/test': specifier: ^1.63.0 version: 1.63.0 @@ -571,45 +571,48 @@ packages: '@nodable/entities@3.0.0': resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} - '@objectstack/account@18.0.0-next.0': - resolution: {integrity: sha512-ksyL5zNdABm0JTNpC9CYc5woT9YfT1Vzyh7DrN/TfyrhkSLb7ZEzoxMxRk0Njz4MpAaFcPjCxl2TMBAnrxyhxg==} + '@objectstack/account@18.0.0-next.1': + resolution: {integrity: sha512-1xi9C3W6kcs+3MqbK7NHncbLl2cHARAgWoQ4C3mXiAjP5Yj/QfsnchsZZRkyP1FV7RK9jWTLcbMRPyZmK/kWYQ==} engines: {node: '>=22.0.0'} - '@objectstack/cli@18.0.0-next.0': - resolution: {integrity: sha512-B8BWNfsBaXEaUUpVjsGIGxGxZRFnASHhie/Xfpn2OZEeh7WGnwFrYlN5apNZzE6aQIoDv54PsF4owutMNgKpTw==} + '@objectstack/cli@18.0.0-next.1': + resolution: {integrity: sha512-EX/GWCOCLI/Y0COj7WYJqdkxdazCHxrdCNHwbTx0XlhNQMUmuNROX40I0zqLBtzyDd78myzSjwFJGGjjv6wtSQ==} engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@objectstack/driver-turso': ^18.0.0-next.0 + '@objectstack/driver-turso': ^18.0.0-next.1 peerDependenciesMeta: '@objectstack/driver-turso': optional: true - '@objectstack/client@18.0.0-next.0': - resolution: {integrity: sha512-gFflUycBVPIvc1a44psjRBQ3z1NuaDkmfBOcVRhc6nvc7paVXr4kqYG1NdlmnmCwm8qfAvGL7BuftWCYUWqtYg==} + '@objectstack/client@18.0.0-next.1': + resolution: {integrity: sha512-3KlwtJUTV7yrtWeTqs/z19iWURmoKd5smuOY/KN7a82Ffll3GDliju25Nh6JOdF4UmuJtfaoblygflS/U+tgpw==} engines: {node: '>=22.0.0'} - '@objectstack/cloud-connection@18.0.0-next.0': - resolution: {integrity: sha512-bfsOi+wuokLt1eCEEOtn7Fn37HoV9kX2htdBw1+4JaNfAhxrZRYLbmQiXl9gIPTgin+tVXM56Jk3dB8q2ll3KQ==} + '@objectstack/cloud-connection@18.0.0-next.1': + resolution: {integrity: sha512-9nM3Vc/7RYa4RzI/v1wTKN7eO4Y5MkwM+Iov5nJg0xWsFdPqJONVsXwh4w/vcxYqce9IG8ZjYi0SE84odxNeJQ==} engines: {node: '>=22.0.0'} - '@objectstack/console@18.0.0-next.0': - resolution: {integrity: sha512-XJmwroBfyAoWqxoSX1M3YB0IFJXEoV+fMUlOsk5nTSB//dGGJSz4QkKZN8e6tuluwDTUMvMk1X/VDlQZa1fjhQ==} + '@objectstack/connector-imap@18.0.0-next.1': + resolution: {integrity: sha512-rgRrRg0+0samJhTdwpLTPA6Zup9KAWHVpxqitNDNnSFc+c/pL8YBSU5wQQqhn5KQlP1XfLYiSOR7qpyfAusx9g==} - '@objectstack/core@18.0.0-next.0': - resolution: {integrity: sha512-6Ms8bsOdnIKxY4EwXyVl2OfQ3ydB5eH0J/u7KA1lWXquZgSDggLk05upOzf7XtuUeLb8JSLbmG25OIKuamBi3Q==} + '@objectstack/console@18.0.0-next.1': + resolution: {integrity: sha512-aG1Jo3BQRYY3EeG+/CvLqlNY9Y/qRmqqY0/aFvX1aCAiUo5Imt4rDic099ILQ9Oz/5PGb54XHkDkofeSvRJ9QQ==} + + '@objectstack/core@18.0.0-next.1': + resolution: {integrity: sha512-+d+tGi0lWeIMC3TjI6leyDYt3uVlpthifwjsgXMWl1jjMNdD8Pw3Uc2Q7QipmrVXj3CcINKEH0cri5SCYIeNPw==} engines: {node: '>=22.0.0'} - '@objectstack/driver-memory@18.0.0-next.0': - resolution: {integrity: sha512-71UKxu9viBa+msMqXNLkjuwAOXZd8scXoIadAVYSM94U6WPIh9wNyZq41YeueykCPBoQbAuc2wXyKq8jAum8Bg==} + '@objectstack/driver-memory@18.0.0-next.1': + resolution: {integrity: sha512-TgV0AhLn8CI2zv5WCzCNKAcZVZy7ofM4JmcjCGPgCiM8tvBqjRdiT8/u17BtT9sPfSpMR8zjJ/rVKA8ptdhmZw==} engines: {node: '>=22.0.0'} - '@objectstack/driver-mongodb@18.0.0-next.0': - resolution: {integrity: sha512-8VLJ7fhjErvvkHlmh7XmRlfex/Zqu79vwKnj3JVxjJGoOJIp7kRKtiSArsefXcCgbfHr9xg5uny7l7ZNdkGa5A==} + '@objectstack/driver-mongodb@18.0.0-next.1': + resolution: {integrity: sha512-J6R04ebbpvQHhXgSvFpkdpbuRUsS5/NtS3FKTlySw5HT7/+IdmRVL8WNoqQ5IFXwGcKQ0lguQx7GhzDRDIhHiQ==} engines: {node: '>=22.0.0'} - '@objectstack/driver-sql@18.0.0-next.0': - resolution: {integrity: sha512-/ivgbTVBhiytmR8vMjFlXJOJUb3f/IiXvXr62LdZ0xFuCHZmM0Eu0/I0WzjymFMfz8GwOoHJNVUY6WGcLxlsnA==} + '@objectstack/driver-sql@18.0.0-next.1': + resolution: {integrity: sha512-Dv+FlRfM0TGom/l4YVM4qP0LqEH1dMkovUPf4CZqX2loQcu4QCr8hVxgFpllots1R/aYm2++oN+FBB+ElbAlOA==} engines: {node: '>=22.0.0'} peerDependencies: mysql2: ^3.0.0 @@ -623,23 +626,23 @@ packages: tedious: optional: true - '@objectstack/driver-sqlite-wasm@18.0.0-next.0': - resolution: {integrity: sha512-Wy51R7MSxNkeKkMt59w4uPrCmFb/VVMXDsMPfXtB0IixBaStxKdijqfCr94Q4Owbr5X9a/3iGmy96XosEHQ9Lg==} + '@objectstack/driver-sqlite-wasm@18.0.0-next.1': + resolution: {integrity: sha512-rvj2yKwG2fbk3Gk+IpgU0C8o7HbiCnkZANAZh2QYVdw76PwxR2Jnfgi4zAvKqDDJqDvnOmSBDa6mAgI2mIieqA==} engines: {node: '>=22.0.0'} - '@objectstack/formula@18.0.0-next.0': - resolution: {integrity: sha512-UyVOqJz1QLvjnr6qSCFnex6BiU1Ly3N6vLBiB6/8FmqHdnboozfNGdLgjhmS/m3wWq0ZGoY9d5RYkpDfC65UDQ==} + '@objectstack/formula@18.0.0-next.1': + resolution: {integrity: sha512-acgpTRlVuRkNHyVr+gaaKK9AhNhihyFM658qiYxMxZy0ynWHbOMTjJq6/3X18HSsWbgdAc68OILu3QJcf8Rr2g==} - '@objectstack/lint@18.0.0-next.0': - resolution: {integrity: sha512-cxEbba3qAbQ2Pvc76tcY+pqTMiO79XoruOo3uQCttR7w8abrikFFCXv2cprawXIEgYkshQeJaAExCdqp01aG6Q==} + '@objectstack/lint@18.0.0-next.1': + resolution: {integrity: sha512-/Ae71Tv3Nfk3xzBKMwZdGt89e32lI0+rnqHKWjuO5ZlcCvpZLIA3qPEvydwrsQV7ep7iYEjVG35cthgD/YbafQ==} engines: {node: '>=22.0.0'} - '@objectstack/mcp@18.0.0-next.0': - resolution: {integrity: sha512-/Kd4IV3AhlY1BQ4ce4r+9+k0un0jP2Wiuv8JnbA4H/oTGK6InckqpuZBmud7eOYTk5cSQ4UtZCpy6uPkaAUhug==} + '@objectstack/mcp@18.0.0-next.1': + resolution: {integrity: sha512-iPVgAo6K92qsYcEcUtIAGwqE5XAU+qft66Mrmwl7lb4W9jkjdIcOQkLQ4Nj+TkoL7VRoVAxmDCyccNgRtxjHYQ==} engines: {node: '>=22.0.0'} - '@objectstack/metadata-core@18.0.0-next.0': - resolution: {integrity: sha512-ujKVTmJpMSSAMskggarxIaFqXONfPq4+XlWNS078gtSVCokwYLTBPETUDQ+GwfNOMul6mlho5i4ImGx6Zn6ezA==} + '@objectstack/metadata-core@18.0.0-next.1': + resolution: {integrity: sha512-9UA4VwE3D46N3pzi8c1tUsxnoX4bU8merRXDHFuvqwI8br8asAu1Y+1JHaQgUiEqVBWmldWGddVSpL0DsRXy/A==} engines: {node: '>=22.0.0'} peerDependencies: vitest: ^4.0.0 @@ -647,98 +650,98 @@ packages: vitest: optional: true - '@objectstack/metadata-fs@18.0.0-next.0': - resolution: {integrity: sha512-UN5oFrxi/poqoDfPQS7wrr7ZhUMmfksOuSVsYGpbQzn6s+WtGa1tkdWhSCwVrLO41g7GJWo2tj8Stz4eO1PCYQ==} + '@objectstack/metadata-fs@18.0.0-next.1': + resolution: {integrity: sha512-m23wlHxQ593G/oE0Nm3InBQfiflCISnqeOGuiIgskbTPiqd1aBm3FGZiTXcck9scvAzxyVgZvguaoTvHiLzaNQ==} engines: {node: '>=22.0.0'} - '@objectstack/metadata-protocol@18.0.0-next.0': - resolution: {integrity: sha512-br3HL2FFYKnyX2NuMNUEcyqCK0L4j5vHDwMekmjyu0HSBH19CtX2DQlhVBSEsyYo/vohZVPolNyzvVeWHfiPtQ==} + '@objectstack/metadata-protocol@18.0.0-next.1': + resolution: {integrity: sha512-j44G4tWAwLNwsv9qm0Hx3nEuZVyKXwYwnWf3ote+jIx9PQ/CgG24N24QutTUeFXKLTDUaHUzOP2yzs48tDvgSg==} engines: {node: '>=22.0.0'} - '@objectstack/metadata@18.0.0-next.0': - resolution: {integrity: sha512-lwWwUj6vDZl+6iD7MPRg0lOGAvH//ANiPJAUmMD56L7tTEyKCJ406Z0bhPkw0P6op6v1QDl6oymqrt1kGHRzFw==} + '@objectstack/metadata@18.0.0-next.1': + resolution: {integrity: sha512-jMrxeFA9c3h3lbomegQv1jmhLvt/trxmRk29qlB/mvEHUeYzFpkdNoQWCUZ6wWawmRlfVOhWxBlPjjbSx0RwRA==} engines: {node: '>=22.0.0'} - '@objectstack/objectql@18.0.0-next.0': - resolution: {integrity: sha512-vwbswk/ueXy7roAE5x76NRxtqKocj1QphLR/U6u8V23+shSRFaOD+XmBiRomLPRolQX/DdO7xGVRCnPILswmfw==} + '@objectstack/objectql@18.0.0-next.1': + resolution: {integrity: sha512-GJJW8d/eCL0hG0kgKfJiGrsNcvrvrAhCHjNhCOsDyLTHWNeToUjr9B1v7Pl+NoOxomoCeTB7xw0EyDynC0ZvWA==} engines: {node: '>=22.0.0'} - '@objectstack/observability@18.0.0-next.0': - resolution: {integrity: sha512-EVK0fHAf7rAeDpazkW385oQMKXnJ+VdXDhv1DPHrv1C5Tsf1nekRcassbONuC6etZ2sgJGbbrDki/2liZ/2nPw==} + '@objectstack/observability@18.0.0-next.1': + resolution: {integrity: sha512-7KB2jlI/eG53u+NvSLTVC51rGTSY09Gjg4sfnIMxSrm0WgZEHTqb9Ck3Jx0o8e7/NWzeURTeKRthRABrA1QQDg==} engines: {node: '>=22.0.0'} - '@objectstack/platform-objects@18.0.0-next.0': - resolution: {integrity: sha512-nv+jOTCEn1i/BysfBjv+mzg4Hmh5NZ5ivwxy8ycMhHagI99jfEn5dRObaH+aCc52X08lz5Ts3I1leJPPXeEmEg==} + '@objectstack/platform-objects@18.0.0-next.1': + resolution: {integrity: sha512-iPqzwWLih1TVALccqkmK+l/rbpWw8/mYo9EDiW3zOAHXwd28BszFKNrvsalkq7cDtppJ14dUPlimPQ7RfF+TRg==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-approvals@18.0.0-next.0': - resolution: {integrity: sha512-6bYzbriwnwX6bN8Y1CX5LglOKb39VM1N9TFGDwaLvKlxl/hIlJv4IesMWZ3pQ2FZmGvkSxQcW047x7xQcV0LVg==} + '@objectstack/plugin-approvals@18.0.0-next.1': + resolution: {integrity: sha512-8/VL1cdRbui7Upn+ilQIB93+5m5NUGRXoSdRwDAG/Om77gQlgkOLu/3/HD6rFpPOVydOI9Q2XDmgfKa6cz2YSQ==} - '@objectstack/plugin-audit@18.0.0-next.0': - resolution: {integrity: sha512-wZK9hekRSMtAXtod2vNcFOBP0oMChVQJ6/Bp+dE1gm38fdX15tHn7X3NOK9RC75w/ZDBCPAtIXpO5mvYIzDZeA==} + '@objectstack/plugin-audit@18.0.0-next.1': + resolution: {integrity: sha512-/3mQ7fus99kvK/rlyR8oxpUzCpI+6QS7fOIrgmIEdPQB7DicYrnuPotJCXPoHxrkob1DYWFyAw2o+9ONTHzLOw==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-auth@18.0.0-next.0': - resolution: {integrity: sha512-r0nM8gdrz5Vj9SVA/0ZgS9mH3nyV77Pg7VOPhcTCVOsdcSY9L9iiSVnkkFwZB9IZDIX6djTDEhmtWjloVHyDDg==} + '@objectstack/plugin-auth@18.0.0-next.1': + resolution: {integrity: sha512-PI+4QJ6oSiELH9qTYlUc+3Li1KurgZlBliLobm/fWFW7JlA/FdW+D5lKR0LXbvZ7yRrH8CU/Hy9hhOdGJL96TA==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-email@18.0.0-next.0': - resolution: {integrity: sha512-rdawCbrUhRqLC1R9d30bGgx58n2VgQritHFLJTuN0E/yOfuzSNqIpPPeTW3c6Jg07HWn9ckNrgU4i2+BN12VEA==} + '@objectstack/plugin-email@18.0.0-next.1': + resolution: {integrity: sha512-0J8nBVFvgq9TWFomSqVJVy+Dhm0uzub/uXr6nAotMVP/wrmML2j9rN/yKQdRL/5tiW+D5CNaw2YJ76ApmBHqow==} - '@objectstack/plugin-hono-server@18.0.0-next.0': - resolution: {integrity: sha512-uZ9Y2LWCIzuxdqLhNY84UYAoCmDYk/YLpNQtDH8X9QRt8Ia6sPSPPZ6eHkdYjFB0GyKHI2S1cupENr53tUqd3A==} + '@objectstack/plugin-hono-server@18.0.0-next.1': + resolution: {integrity: sha512-4rFPxQO/X85gIbfIFy2RiRpCyMqlW+MOGDGf9fy8gQNbcAdJZRXEFtpBZMCZslkJ7M8fKl1pjuPEk9upo7KN5w==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-pinyin-search@18.0.0-next.0': - resolution: {integrity: sha512-QFPU4McLBnbExf3ZGDt8ValGvkmEtmZ/7rznSEKIpNUCOPi3O9ipTgiZgNUpFVZtVLsfro9UURHBtRX1FdO5EQ==} + '@objectstack/plugin-pinyin-search@18.0.0-next.1': + resolution: {integrity: sha512-1yT5iJ0g3Dpj5bXGoD/VudEKE2e14FzkSgWOQ5j/kf0IJnXgtP5yaU7SK2nQ1cAr1CKgLHn7Ya6OWnhKkxv3tA==} - '@objectstack/plugin-security@18.0.0-next.0': - resolution: {integrity: sha512-pReeT3XXcLV3SRYlytRcTSEpArPou/7m+i1pLhGd/JEcmYsQJbq1HVWgVK1NAMPOU/Oehg+g0vbSfDYgHc7xiQ==} + '@objectstack/plugin-security@18.0.0-next.1': + resolution: {integrity: sha512-bolHV5aYukl7RQ9G8pxow/bWauECPbhRBa6vWNC2Z2V8d1AXv6n9/4DRJ6jgeEKBGoRj5AFlSRE8rvpZGo03Zg==} engines: {node: '>=22.0.0'} - '@objectstack/plugin-sharing@18.0.0-next.0': - resolution: {integrity: sha512-mrtFslNwIpFrl3js01neH/F25mJ6teZ7X2SXFwVfSQtDeZvWwoYIC9NM3UtaC5xY+F5padMD1Pdv6wHNa0jx9Q==} + '@objectstack/plugin-sharing@18.0.0-next.1': + resolution: {integrity: sha512-JpfzCqY0nC65SaCDUytgbmkNKPgfRWdDv3Z/KJRMZWU0sMgeSeQy2cFRxFaipNzJ6+/f0tbbtpf6FKnWzfmS6Q==} - '@objectstack/plugin-webhooks@18.0.0-next.0': - resolution: {integrity: sha512-rbZFpJfFeI8azq2EupmruRQ+1TOI0enJpibXBwSWzx9+NOxkYJMy+cmooOTQUoHpXobxC7MrCGtNf/1rqCtv7w==} + '@objectstack/plugin-webhooks@18.0.0-next.1': + resolution: {integrity: sha512-1qwpGFEPrj4kTHlJhnh/tYn0hSzRnemUgvkuZH9ymB3aRhrHmFTYL+Ap4CadfQ+F/ih8z9J32FmxoyFoeHL4eQ==} - '@objectstack/rest@18.0.0-next.0': - resolution: {integrity: sha512-XftRfR8YvITE+o48LtZblA7rk1UlhJQHqP3U4kYf5GJ9feXD0KklkCW/EQ3YyW90bsQfAoJ8bQh9B3hIZzrgWg==} + '@objectstack/rest@18.0.0-next.1': + resolution: {integrity: sha512-eAkQEV9oMRABZlhHw2737bQ/Qtza0tJiLIGPqT7jDoMC+xtDCmXsl9DSylJHlFD4AESpOcTbl1TBISiN5z7IKA==} engines: {node: '>=22.0.0'} - '@objectstack/runtime@18.0.0-next.0': - resolution: {integrity: sha512-pQG/YApKiOumT4PW7I+TE85x38BJh1rRAaFTesUMP12cvvTspwJeCCP83DzyqZI0LO+G5y53/su6W3ACLxdhsA==} + '@objectstack/runtime@18.0.0-next.1': + resolution: {integrity: sha512-Ra04IJe8hehPU7r6uEDusp7Chlfo57A6NsOPVZJT6zimiQUR+I7oATlgx/a1AIfKunTnYGHriVOAiKbZiA3ZeQ==} engines: {node: '>=22.0.0'} peerDependencies: - '@objectstack/driver-turso': ^18.0.0-next.0 + '@objectstack/driver-turso': ^18.0.0-next.1 peerDependenciesMeta: '@objectstack/driver-turso': optional: true - '@objectstack/sdui-parser@18.0.0-next.0': - resolution: {integrity: sha512-fACYC57H+MbpW8cfjtY4J+0HDgaxBjnVgNTMVrJ742JP2FtGn3zsgLt34EMYYoMS41w+spwaBq+5s/sWt3xheA==} + '@objectstack/sdui-parser@18.0.0-next.1': + resolution: {integrity: sha512-Jc6brfLZjz3dFss3G4Qu0jTCASIKipCUM13I5v+/Tw/cClqMbFntkudbaDEbo588+WOnqf3gLtuvghabK3/kNA==} - '@objectstack/service-analytics@18.0.0-next.0': - resolution: {integrity: sha512-EiuZ4QqJV9ZTvvnTwJdO8QWLdTfXYB7QGRtIEbNsFEO+Y1pM6c6rmyHzy2uMjbfb8M2/qztJ/EnSG88fcIGzGQ==} + '@objectstack/service-analytics@18.0.0-next.1': + resolution: {integrity: sha512-Va+fXeCzVlWltfXe+0pWqmeQoca08MCkO+SHzOV+Z3ksVY46JcfvxH62VM6eBFLs34aqLGcYIqL/mQmViojAvw==} engines: {node: '>=22.0.0'} - '@objectstack/service-automation@18.0.0-next.0': - resolution: {integrity: sha512-86gr4wvanGrEkGqvNoCsIguPRCgTHuhdT2rTGofYerBx0jbmzq2hX9I6HzEBiJ/0hGVSUtxTrfdrTViGTAVyCg==} + '@objectstack/service-automation@18.0.0-next.1': + resolution: {integrity: sha512-407J9rb1Y6AZBX1IUiKT65mVWFunP3J5+ugvnFiA6CTPdq427HSwA8arSkrrknWQZRV1oBL9tGWm7hitcLsdkQ==} engines: {node: '>=22.0.0'} - '@objectstack/service-cache@18.0.0-next.0': - resolution: {integrity: sha512-7Y1gtXKCQHKf648Ijvqxrl0/i52IT+qTv/DBSXy0rEC/CHY6LDnHk6zuHjMzhd1nGa0JNNHWotwtBSPS7rZXHg==} + '@objectstack/service-cache@18.0.0-next.1': + resolution: {integrity: sha512-xBZakD7m43tilTvuvUanykanHaiAYHI2ZW50snVJwDQtgUSO8jB+5ikvx0FnF1J5i2TfyFDs2A+7EeYBpIvJZQ==} engines: {node: '>=22.0.0'} - '@objectstack/service-cluster@18.0.0-next.0': - resolution: {integrity: sha512-COO7cAKo02n0LnqUEIMlDEiZ+vu2ftm4xvrwK59xX94wesqgUcGnGZJeFs9Ravt+OuzGORTpLqCLTz0UFfbzZg==} + '@objectstack/service-cluster@18.0.0-next.1': + resolution: {integrity: sha512-jDuMldooxYAh+J7q/AYsRkKrylM8nncw3kN6JqQ5XQiUtcIQXgNvnegcb5KtGUHKl9YiThl5HtCT/ihVbkkXpw==} - '@objectstack/service-datasource@18.0.0-next.0': - resolution: {integrity: sha512-RdXgW0LxCT3clftK/UHS/LJPkhwU/OaVtY5LI4AXoPGyCBudXkZ5vP7ZaWPpcn0IEHx6z4MzP8PZtQq6siRPpA==} + '@objectstack/service-datasource@18.0.0-next.1': + resolution: {integrity: sha512-/OG+fAmnct6TzFIXnrq9Sq+tXTnOiaLWwiXyy4bjRtppe9FaWQCr3sH8gVU/cLc+xO2w+uzPDF0Z0K+6vrHSLg==} peerDependencies: - '@objectstack/driver-mongodb': ^18.0.0-next.0 - '@objectstack/driver-sqlite-wasm': ^18.0.0-next.0 - '@objectstack/driver-turso': ^18.0.0-next.0 + '@objectstack/driver-mongodb': ^18.0.0-next.1 + '@objectstack/driver-sqlite-wasm': ^18.0.0-next.1 + '@objectstack/driver-turso': ^18.0.0-next.1 peerDependenciesMeta: '@objectstack/driver-mongodb': optional: true @@ -747,43 +750,43 @@ packages: '@objectstack/driver-turso': optional: true - '@objectstack/service-i18n@18.0.0-next.0': - resolution: {integrity: sha512-ANTeJALVngZFGiCXpfvWGCHjcodjdunpATcwuOGrZ6LNsCYRTAGYiyr/0xkPQZ27C//+gCYFnVpVB9Gu0YfF2w==} + '@objectstack/service-i18n@18.0.0-next.1': + resolution: {integrity: sha512-O/lO1y7jAoxHp0w1sgHcZXx04rG0ixNOQ+iM54JVeALfsyeW1cxSCwafzx5kzQ7ZI1rOAHt+t5UtCMHIyg9DnA==} engines: {node: '>=22.0.0'} - '@objectstack/service-job@18.0.0-next.0': - resolution: {integrity: sha512-yll94nlwK058TBToPa2EIRg08BaFkq5RXkVkZ1ZeEwN0aq2VhVzydmkGFgyId5n3MniU1DsqJPBvwr7xTKQ1iQ==} + '@objectstack/service-job@18.0.0-next.1': + resolution: {integrity: sha512-uPadm41nIHmhZ83wy9G+etS9WVCO7fu46ISmLf/QiTj3iMWyGqfi4fXC7HSv1hVjbGGoWulpK/2ps6lbuHd4fg==} engines: {node: '>=22.0.0'} - '@objectstack/service-mailbox@18.0.0-next.0': - resolution: {integrity: sha512-FC+YJET3G7iVdoEiGFRW6mtADWlWzs745irP0u5SQuxwrXIjYrs6AWUUNARgnFQfWGpp7iy9lBZ8qKgF48rhDA==} + '@objectstack/service-mailbox@18.0.0-next.1': + resolution: {integrity: sha512-XEeHMhebF8nD3XQ7Ni0fS/7XSBLUImVP6M+NoBnrbkhtTwh/xLNv5nwasvBGuClxYK5mTAjUy54kVA3xYJgEgw==} engines: {node: '>=22.0.0'} - '@objectstack/service-messaging@18.0.0-next.0': - resolution: {integrity: sha512-GghKMb1JBLIIwlJZWDP4wrURglIqpliB+IvHkasYQzihpe684P/O7vIF48vn4GkTA2GMU2gXarNXaeGAND8Mzw==} + '@objectstack/service-messaging@18.0.0-next.1': + resolution: {integrity: sha512-0O/o3HhlYpiz5ZgZaX04Zjs6EZlx7vj7bJAdj5GuxwuctPfANk+sTIY0EnrNKDEhaH2gPlDs3foq9CtG2sQ4Iw==} engines: {node: '>=22.0.0'} - '@objectstack/service-package@18.0.0-next.0': - resolution: {integrity: sha512-rN67O0wb4DBYe5FN+qahgZkE7S0hScc3+isM/6jMyFwYNPWxwDmPw0nGUTuREf6aBmyTPVT3/byNzVXNjH0blA==} + '@objectstack/service-package@18.0.0-next.1': + resolution: {integrity: sha512-TG+6Qpwx09b3B45VzunmgA7OYVgPICBP8nCnKWxznCecuDHLUcqeS6iNNfe6lhc3c5uivgiSb9eXd0WQ86lzqw==} engines: {node: '>=22.0.0'} - '@objectstack/service-queue@18.0.0-next.0': - resolution: {integrity: sha512-FtJyRwRzSsRMf6uk2Ia1k8bc8dS+PhGo3TXfrAp8XlX8396kdadD01gPGkZRDjQloUSU39Q4kvSIBvyp/6Pl2w==} + '@objectstack/service-queue@18.0.0-next.1': + resolution: {integrity: sha512-afiW8B2sQ7KjCurD348USa3O2cV61pks3GY6t4HdfPo/PK2QqKnJnYYMLW1GUdkn3sn0VG9SAExtxWuIc5SkNw==} engines: {node: '>=22.0.0'} - '@objectstack/service-realtime@18.0.0-next.0': - resolution: {integrity: sha512-IbFcKvitdvrSlOCdr0wQuZLPiWPWoVtKGYGWf8a/41IwiLAobxgfz+zezTwaw3aHBWgs4/uV8YcA0XeyYFa4+g==} + '@objectstack/service-realtime@18.0.0-next.1': + resolution: {integrity: sha512-gMNqht5jkTfYZFNGmGmAtWAkSAq4rUs868w67BHlxU3z2tdkkCjvYbYvKABJqCKAjQzM1dud8lwtm3pn3Rc4Mg==} engines: {node: '>=22.0.0'} - '@objectstack/service-settings@18.0.0-next.0': - resolution: {integrity: sha512-4CDlu6VhI9I9GCIZFyxplypx6O3rqd94GgMucOWhw/kqLzOR6d+j2klcHNJXphBJfh2F9PTjKAnutkUGp9d4KA==} + '@objectstack/service-settings@18.0.0-next.1': + resolution: {integrity: sha512-d/Bna/3+Y1nsMUMhU5mdLN+1hJtrnd6fPOxLlwTvPRX974gQH4INoBLIuRx0DH4SxvZZlqkpyoqfDBz6m0kIiA==} engines: {node: '>=22.0.0'} - '@objectstack/service-sms@18.0.0-next.0': - resolution: {integrity: sha512-/53uIsALyPIcXE9KSddK7jnCt17Nw0CQPkFr5plJ2d7JsU97U6sqVmRSBFC4bwXC+eB0hvb7GFSgoZZzUUrC6A==} + '@objectstack/service-sms@18.0.0-next.1': + resolution: {integrity: sha512-mvT4j1rrJi+yr91BhuuixpHhjCE1oe/T0dxSA/06v/hwds0z9R0q//gXNmafihGedQdZh01LbV/l4BOVJmA54g==} - '@objectstack/service-storage@18.0.0-next.0': - resolution: {integrity: sha512-SBt2R0Rz8iYfOZBtquctxPOwjhITjbSCGLUvzECZ+WK9LuSu6lYhWUh47L23Ii56cR5uG0Xaqc4NVgRlFvkgzg==} + '@objectstack/service-storage@18.0.0-next.1': + resolution: {integrity: sha512-QckBWvCIcO/BoaRWklu+7ii8cEE3GQ6/5ok0VybtNGc4FThttj+i4d+Fr4y//2XPqtmob7dlGJLnQJkoAUAxdw==} engines: {node: '>=22.0.0'} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 @@ -794,12 +797,12 @@ packages: '@aws-sdk/s3-request-presigner': optional: true - '@objectstack/setup@18.0.0-next.0': - resolution: {integrity: sha512-TM0lorY5ICTV8AcAX93hwpqowvuNZzMyTv/xq35qRKFTEgBcF4QS5D79fIGAVJQ3S5AxAmdW7kl0+8V42h7ANA==} + '@objectstack/setup@18.0.0-next.1': + resolution: {integrity: sha512-0+rqTiMUmHEtaVDUIaqwdyN7J0kEVds7JTlfGSsENYw23Ae6MstRivNZFt4gpj0cJ+5ajmoHyh15Pd/gGQJQbg==} engines: {node: '>=22.0.0'} - '@objectstack/spec@18.0.0-next.0': - resolution: {integrity: sha512-ASTh6+q5jo2y8VhYT5osOb4H0JUyGAVYHIUPE39OnxSAD3fYg12x1YiNz09JA0aP+8JxigeA0otHWB3j16i2Ow==} + '@objectstack/spec@18.0.0-next.1': + resolution: {integrity: sha512-pDNzwgJz1/SzVr1K7WGA3kDIR/rBVrA/K8UpVIw2P4SWJ1ONdxVy/K3+IZzl2MC3/+ye1ChePbQFw9i4gvAhFg==} engines: {node: '>=22.0.0'} peerDependencies: ai: ^7.0.0 @@ -807,23 +810,23 @@ packages: ai: optional: true - '@objectstack/trigger-api@18.0.0-next.0': - resolution: {integrity: sha512-uByXoueumOequeQHJOdy+iSFaxLbQ157lqubRJvIJs8w/0rZHFb9L1PPSA6WMfWuAdYhBLv5jfQDNwz+iszsjw==} + '@objectstack/trigger-api@18.0.0-next.1': + resolution: {integrity: sha512-cJlm64OgCIxO7vGf0tZopfMKLme1oE+T1cx+qvdaRdoRej1nZJd+8j1GjAFSgL1C8QVGSQ5DYRaSSJGn9MY6/w==} - '@objectstack/trigger-record-change@18.0.0-next.0': - resolution: {integrity: sha512-IOqQXcT38ngQlBXc3LH6oIpiUGLUlwqiffNfTeY4TQo8mosWoDO2yK1rcyOMv1CwOw0Cudn/VG8GSNi4XXFDhQ==} + '@objectstack/trigger-record-change@18.0.0-next.1': + resolution: {integrity: sha512-oF+hem4thuGAR6ddkRfUwNhGZxmcj8DLxbEOhxDKay/0wVvg/TbIkvuY7mpmZSrO2NoFkjb3drHVtvqhSBrdJg==} engines: {node: '>=22.0.0'} - '@objectstack/trigger-schedule@18.0.0-next.0': - resolution: {integrity: sha512-bw2SuDAflsJrHiR9uiLG/N5ORabXxkxBLEdZwX5TuuJ12ZZEj62LV3z1XM9yujf+qj/qgh8c4RI8gDvvrYZqAA==} + '@objectstack/trigger-schedule@18.0.0-next.1': + resolution: {integrity: sha512-HejyUBnO7TOT9gJFy8UjhB+ST80Fu21wu1rAkLpxT+0uNMZ21k8MHPQyZGMPVULrlflc2hZQeb/kNgNyw+HcJQ==} engines: {node: '>=22.0.0'} - '@objectstack/types@18.0.0-next.0': - resolution: {integrity: sha512-rR+m5ZnBB4zSKn3RKiTKmiksTHjUa66Iz1etHVxUf57rW2qFrp8tQtH7UJlX4V5+5O0HjiRPvPnOgOK2mvV9Qw==} + '@objectstack/types@18.0.0-next.1': + resolution: {integrity: sha512-Mjulyi0JgLMT16Qf014sK6L/QufOzfQZe7yjVFHyiO9umDDCMA59s2hA4GsYdbOSNyS/YV2WBi3NAupjSX84NA==} engines: {node: '>=22.0.0'} - '@objectstack/verify@18.0.0-next.0': - resolution: {integrity: sha512-CQDr+H+T5G8GCOxewkKd6WAl4YcyA4wXus4ucAQGBDeEF7mn1etW/33mCFzLecZwE1ijpd0O2e5R9LY8nNUZeg==} + '@objectstack/verify@18.0.0-next.1': + resolution: {integrity: sha512-Zwl98ChP52sJLCYWV/d3Y/SUMD6BJQD+Ji5XuvCS87q10QzwdRB2ghED3L6Hw/bcYV+uwp9ryjMKro36cHTm7g==} engines: {node: '>=22.0.0'} '@oclif/core@5.1.2': @@ -1536,8 +1539,8 @@ packages: resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} engines: {node: '>= 10'} - create-objectstack@18.0.0-next.0: - resolution: {integrity: sha512-3z0Mezp+DOSxW3PoJ0ubpZ1cqidDgjxkSl7FMsuycQfASfmgLqN2Y8N6Ad8FXwYBdS52urnPjDHIkTVCYXTbxA==} + create-objectstack@18.0.0-next.1: + resolution: {integrity: sha512-DK+F3u1N/6Rn2zkrj9fGeT9K7fnvQwY5phm/rhteTZewuYBolGeam0RyUBJmcVLUPIYd52v/PGteY5hLGbKUug==} engines: {node: '>=22.0.0'} hasBin: true @@ -2634,6 +2637,10 @@ packages: engines: {node: '>=20'} hasBin: true + postal-mime@4.0.6: + resolution: {integrity: sha512-3ULO4UkSkxNURlfq4M8GvFotyJjMtuKT87sYu3OXUy+b/XEFhXne4mNVgcHLoUM6BGGFc8wAUFVchplOIhgV/g==} + engines: {node: '>=20'} + postcss@8.5.23: resolution: {integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==} engines: {node: ^10 || ^12 || >=14} @@ -3650,70 +3657,70 @@ snapshots: '@nodable/entities@3.0.0': {} - '@objectstack/account@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/account@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/cli@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/account': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/client': 18.0.0-next.0 - '@objectstack/cloud-connection': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/console': 18.0.0-next.0 - '@objectstack/core': 18.0.0-next.0 - '@objectstack/driver-memory': 18.0.0-next.0 - '@objectstack/driver-mongodb': 18.0.0-next.0 - '@objectstack/driver-sql': 18.0.0-next.0 - '@objectstack/driver-sqlite-wasm': 18.0.0-next.0(better-sqlite3@13.0.3) - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/lint': 18.0.0-next.0 - '@objectstack/mcp': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-approvals': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-audit': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-auth': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-email': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-hono-server': 18.0.0-next.0 - '@objectstack/plugin-pinyin-search': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-security': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-sharing': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-webhooks': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/rest': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/runtime': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-analytics': 18.0.0-next.0 - '@objectstack/service-automation': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-cache': 18.0.0-next.0 - '@objectstack/service-datasource': 18.0.0-next.0(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(vitest@4.1.10) - '@objectstack/service-job': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-mailbox': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-messaging': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-package': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-queue': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-realtime': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-settings': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-sms': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-storage': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/setup': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/trigger-api': 18.0.0-next.0 - '@objectstack/trigger-record-change': 18.0.0-next.0 - '@objectstack/trigger-schedule': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/types': 18.0.0-next.0 - '@objectstack/verify': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/cli@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/account': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/client': 18.0.0-next.1 + '@objectstack/cloud-connection': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/console': 18.0.0-next.1 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/driver-memory': 18.0.0-next.1 + '@objectstack/driver-mongodb': 18.0.0-next.1 + '@objectstack/driver-sql': 18.0.0-next.1 + '@objectstack/driver-sqlite-wasm': 18.0.0-next.1(better-sqlite3@13.0.3) + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/lint': 18.0.0-next.1 + '@objectstack/mcp': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-protocol': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-approvals': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-audit': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-auth': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-email': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-hono-server': 18.0.0-next.1 + '@objectstack/plugin-pinyin-search': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-security': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-sharing': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-webhooks': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/rest': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/runtime': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-analytics': 18.0.0-next.1 + '@objectstack/service-automation': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-cache': 18.0.0-next.1 + '@objectstack/service-datasource': 18.0.0-next.1(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(vitest@4.1.10) + '@objectstack/service-job': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-mailbox': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-messaging': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-package': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-queue': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-realtime': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-settings': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-sms': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-storage': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/setup': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/trigger-api': 18.0.0-next.1 + '@objectstack/trigger-record-change': 18.0.0-next.1 + '@objectstack/trigger-schedule': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/types': 18.0.0-next.1 + '@objectstack/verify': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) '@oclif/core': 5.1.2 bundle-require: 5.1.0(esbuild@0.28.2) chalk: 6.0.1 chokidar: 5.0.0 - create-objectstack: 18.0.0-next.0 + create-objectstack: 18.0.0-next.1 dotenv-flow: 4.1.0 esbuild: 0.28.2 ts-morph: 28.0.0 @@ -3767,22 +3774,22 @@ snapshots: - vitest - vue - '@objectstack/client@18.0.0-next.0': + '@objectstack/client@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/cloud-connection@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/cloud-connection@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/runtime': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-protocol': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/runtime': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -3827,30 +3834,32 @@ snapshots: - vitest - vue - '@objectstack/console@18.0.0-next.0': {} + '@objectstack/connector-imap@18.0.0-next.1': {} - '@objectstack/core@18.0.0-next.0': + '@objectstack/console@18.0.0-next.1': {} + + '@objectstack/core@18.0.0-next.1': dependencies: - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 zod: 4.6.5 transitivePeerDependencies: - ai - '@objectstack/driver-memory@18.0.0-next.0': + '@objectstack/driver-memory@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 mingo: 7.2.4 transitivePeerDependencies: - ai - '@objectstack/driver-mongodb@18.0.0-next.0': + '@objectstack/driver-mongodb@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 mongodb: 7.7.0 nanoid: 6.0.1 transitivePeerDependencies: @@ -3863,12 +3872,12 @@ snapshots: - snappy - socks - '@objectstack/driver-sql@18.0.0-next.0': + '@objectstack/driver-sql@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 knex: 3.3.0(better-sqlite3@13.0.3) nanoid: 6.0.1 optionalDependencies: @@ -3882,11 +3891,11 @@ snapshots: - sqlite3 - supports-color - '@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3)': + '@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/driver-sql': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/driver-sql': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 knex: 3.3.0(better-sqlite3@13.0.3) nanoid: 6.0.1 sql.js: 1.14.2 @@ -3903,18 +3912,18 @@ snapshots: - supports-color - tedious - '@objectstack/formula@18.0.0-next.0': + '@objectstack/formula@18.0.0-next.1': dependencies: '@marcbachmann/cel-js': 8.0.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/lint@18.0.0-next.0': + '@objectstack/lint@18.0.0-next.1': dependencies: - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/sdui-parser': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/sdui-parser': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 ajv: 8.20.0 ajv-formats: 3.0.1 sucrase: 3.35.1 @@ -3922,58 +3931,58 @@ snapshots: transitivePeerDependencies: - ai - '@objectstack/mcp@18.0.0-next.0': + '@objectstack/mcp@18.0.0-next.1': dependencies: '@modelcontextprotocol/sdk': 1.31.0 - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 zod: 4.6.5 transitivePeerDependencies: - '@cfworker/json-schema' - ai - supports-color - '@objectstack/metadata-core@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/metadata-core@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/spec': 18.0.0-next.1 zod: 4.6.5 optionalDependencies: vitest: 4.1.10(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(tsx@4.23.15)(yaml@2.9.1) transitivePeerDependencies: - ai - '@objectstack/metadata-fs@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/metadata-fs@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) chokidar: 5.0.0 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata-protocol@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/metadata-protocol@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/lint': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/sdui-parser': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/lint': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/sdui-parser': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/metadata@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/metadata@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-fs': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-fs': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 chokidar: 5.0.0 glob: 13.0.6 js-yaml: 5.4.2 @@ -3982,15 +3991,15 @@ snapshots: - ai - vitest - '@objectstack/objectql@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/objectql@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-protocol': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 ajv: 8.20.0 ajv-formats: 3.0.1 zod: 4.6.5 @@ -3998,57 +4007,57 @@ snapshots: - ai - vitest - '@objectstack/observability@18.0.0-next.0': + '@objectstack/observability@18.0.0-next.1': dependencies: - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/platform-objects@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/platform-objects@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-approvals@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-approvals@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-audit@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-audit@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-auth@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/plugin-auth@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: '@better-auth/core': 1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.12)(kysely@0.29.4)(nanostores@1.4.2) '@better-auth/oauth-provider': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.12)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.7.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) '@better-auth/scim': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.12)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.7.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) '@better-auth/sso': 1.7.3(@better-auth/core@1.7.3(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(jose@6.2.12)(kysely@0.29.4)(nanostores@1.4.2))(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-auth@1.7.3(better-sqlite3@13.0.3)(mongodb@7.7.0)(vitest@4.1.10))(better-call@1.4.0(zod@4.6.5)) '@noble/hashes': 2.4.0 - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/rest': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-messaging': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/rest': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-messaging': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 better-auth: 1.7.3(better-sqlite3@13.0.3)(mongodb@7.7.0)(vitest@4.1.10) jose: 6.2.12 transitivePeerDependencies: @@ -4080,115 +4089,115 @@ snapshots: - vitest - vue - '@objectstack/plugin-email@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-email@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 nodemailer: 10.0.12 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-hono-server@18.0.0-next.0': + '@objectstack/plugin-hono-server@18.0.0-next.1': dependencies: '@hono/node-server': 2.1.1(hono@4.13.11) - '@objectstack/core': 18.0.0-next.0 - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 hono: 4.13.11 transitivePeerDependencies: - ai - '@objectstack/plugin-pinyin-search@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-pinyin-search@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/types': 18.0.0-next.1 pinyin-pro: 3.29.4 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-security@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-security@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-sharing@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-sharing@18.0.0-next.1(vitest@4.1.10)': dependencies: '@noble/hashes': 2.4.0 - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/plugin-webhooks@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/plugin-webhooks@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-messaging': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-messaging': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/rest@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/rest@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-package': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-package': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 exceljs: 4.4.0 zod: 4.6.5 transitivePeerDependencies: - ai - vitest - '@objectstack/runtime@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/driver-memory': 18.0.0-next.0 - '@objectstack/driver-sql': 18.0.0-next.0 - '@objectstack/driver-sqlite-wasm': 18.0.0-next.0(better-sqlite3@13.0.3) - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/plugin-auth': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-security': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/rest': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-cluster': 18.0.0-next.0 - '@objectstack/service-datasource': 18.0.0-next.0(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(vitest@4.1.10) - '@objectstack/service-i18n': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/runtime@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/core': 18.0.0-next.1 + '@objectstack/driver-memory': 18.0.0-next.1 + '@objectstack/driver-sql': 18.0.0-next.1 + '@objectstack/driver-sqlite-wasm': 18.0.0-next.1(better-sqlite3@13.0.3) + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-protocol': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/plugin-auth': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-security': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/rest': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-cluster': 18.0.0-next.1 + '@objectstack/service-datasource': 18.0.0-next.1(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(vitest@4.1.10) + '@objectstack/service-i18n': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 quickjs-emscripten: 0.32.0 zod: 4.6.5 optionalDependencies: - '@objectstack/driver-mongodb': 18.0.0-next.0 + '@objectstack/driver-mongodb': 18.0.0-next.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@better-auth/utils' @@ -4232,56 +4241,56 @@ snapshots: - vitest - vue - '@objectstack/sdui-parser@18.0.0-next.0': {} + '@objectstack/sdui-parser@18.0.0-next.1': {} - '@objectstack/service-analytics@18.0.0-next.0': + '@objectstack/service-analytics@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/service-automation@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-automation@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/formula': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/metadata-protocol': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/formula': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/metadata-protocol': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-cache@18.0.0-next.0': + '@objectstack/service-cache@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/service-cluster@18.0.0-next.0': + '@objectstack/service-cluster@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/service-datasource@18.0.0-next.0(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(vitest@4.1.10)': + '@objectstack/service-datasource@18.0.0-next.1(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/driver-memory': 18.0.0-next.0 - '@objectstack/driver-sql': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/driver-memory': 18.0.0-next.1 + '@objectstack/driver-sql': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 pg-connection-string: 2.14.0 optionalDependencies: - '@objectstack/driver-mongodb': 18.0.0-next.0 - '@objectstack/driver-sqlite-wasm': 18.0.0-next.0(better-sqlite3@13.0.3) + '@objectstack/driver-mongodb': 18.0.0-next.1 + '@objectstack/driver-sqlite-wasm': 18.0.0-next.1(better-sqlite3@13.0.3) transitivePeerDependencies: - ai - mariadb @@ -4295,86 +4304,89 @@ snapshots: - tedious - vitest - '@objectstack/service-i18n@18.0.0-next.0': + '@objectstack/service-i18n@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/service-job@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-job@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-mailbox@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-mailbox@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/connector-imap': 18.0.0-next.1 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 + postal-mime: 4.0.6 transitivePeerDependencies: - ai - vitest - '@objectstack/service-messaging@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-messaging@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-package@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-package@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-queue@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-queue@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-realtime@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-realtime@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-settings@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-settings@18.0.0-next.1(vitest@4.1.10)': dependencies: '@noble/ciphers': 2.4.0 - '@objectstack/core': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/service-sms@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + '@objectstack/service-sms@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/plugin-auth': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/plugin-auth': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - '@better-auth/utils' - '@better-fetch/fetch' @@ -4404,97 +4416,97 @@ snapshots: - vitest - vue - '@objectstack/service-storage@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/service-storage@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/observability': 18.0.0-next.0 - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/observability': 18.0.0-next.1 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/setup@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/setup@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - vitest - '@objectstack/spec@18.0.0-next.0': + '@objectstack/spec@18.0.0-next.1': dependencies: pg-connection-string: 2.14.0 zod: 4.6.5 - '@objectstack/trigger-api@18.0.0-next.0': + '@objectstack/trigger-api@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/trigger-record-change@18.0.0-next.0': + '@objectstack/trigger-record-change@18.0.0-next.1': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/trigger-schedule@18.0.0-next.0(vitest@4.1.10)': + '@objectstack/trigger-schedule@18.0.0-next.1(vitest@4.1.10)': dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/metadata-core': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/types': 18.0.0-next.0 + '@objectstack/core': 18.0.0-next.1 + '@objectstack/metadata-core': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/types': 18.0.0-next.1 croner: 10.0.1 transitivePeerDependencies: - ai - vitest - '@objectstack/types@18.0.0-next.0': + '@objectstack/types@18.0.0-next.1': dependencies: - '@objectstack/spec': 18.0.0-next.0 + '@objectstack/spec': 18.0.0-next.1 transitivePeerDependencies: - ai - '@objectstack/verify@18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': - dependencies: - '@objectstack/core': 18.0.0-next.0 - '@objectstack/mcp': 18.0.0-next.0 - '@objectstack/metadata': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/objectql': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/platform-objects': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-approvals': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-audit': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-auth': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/plugin-email': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-hono-server': 18.0.0-next.0 - '@objectstack/plugin-pinyin-search': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-security': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-sharing': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/plugin-webhooks': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/rest': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/runtime': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-analytics': 18.0.0-next.0 - '@objectstack/service-automation': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-cache': 18.0.0-next.0 - '@objectstack/service-datasource': 18.0.0-next.0(@objectstack/driver-mongodb@18.0.0-next.0)(@objectstack/driver-sqlite-wasm@18.0.0-next.0(better-sqlite3@13.0.3))(vitest@4.1.10) - '@objectstack/service-job': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-mailbox': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-messaging': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-package': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-queue': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-realtime': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-settings': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/service-sms': 18.0.0-next.0(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) - '@objectstack/service-storage': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/spec': 18.0.0-next.0 - '@objectstack/trigger-api': 18.0.0-next.0 - '@objectstack/trigger-record-change': 18.0.0-next.0 - '@objectstack/trigger-schedule': 18.0.0-next.0(vitest@4.1.10) - '@objectstack/types': 18.0.0-next.0 + '@objectstack/verify@18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10)': + dependencies: + '@objectstack/core': 18.0.0-next.1 + '@objectstack/mcp': 18.0.0-next.1 + '@objectstack/metadata': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/objectql': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/platform-objects': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-approvals': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-audit': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-auth': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/plugin-email': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-hono-server': 18.0.0-next.1 + '@objectstack/plugin-pinyin-search': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-security': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-sharing': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/plugin-webhooks': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/rest': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/runtime': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-analytics': 18.0.0-next.1 + '@objectstack/service-automation': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-cache': 18.0.0-next.1 + '@objectstack/service-datasource': 18.0.0-next.1(@objectstack/driver-mongodb@18.0.0-next.1)(@objectstack/driver-sqlite-wasm@18.0.0-next.1(better-sqlite3@13.0.3))(vitest@4.1.10) + '@objectstack/service-job': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-mailbox': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-messaging': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-package': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-queue': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-realtime': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-settings': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/service-sms': 18.0.0-next.1(@better-auth/utils@0.4.2)(@better-fetch/fetch@1.3.1)(better-call@1.4.0(zod@4.6.5))(better-sqlite3@13.0.3)(kysely@0.29.4)(mongodb@7.7.0)(nanostores@1.4.2)(vitest@4.1.10) + '@objectstack/service-storage': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/spec': 18.0.0-next.1 + '@objectstack/trigger-api': 18.0.0-next.1 + '@objectstack/trigger-record-change': 18.0.0-next.1 + '@objectstack/trigger-schedule': 18.0.0-next.1(vitest@4.1.10) + '@objectstack/types': 18.0.0-next.1 transitivePeerDependencies: - '@aws-sdk/client-s3' - '@aws-sdk/credential-providers' @@ -5137,7 +5149,7 @@ snapshots: crc-32: 1.2.2 readable-stream: 3.6.2 - create-objectstack@18.0.0-next.0: + create-objectstack@18.0.0-next.1: dependencies: chalk: 6.0.1 commander: 15.0.0 @@ -6411,6 +6423,8 @@ snapshots: dependencies: playwright-core: 1.63.0 + postal-mime@4.0.6: {} + postcss@8.5.23: dependencies: nanoid: 3.3.16 From a972317b595ec067a771979aae3d3b4f48b6f70c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 12:51:32 +0000 Subject: [PATCH 2/7] chore(deps): adopt the 18.0.0-next.1 changes the app's metadata needs - crm_campaign_member, crm_event_attendee and crm_article_feedback are controlled_by_parent objects whose master was a required lookup. @objectstack/spec 18.0.0-next.1 (76815b9, #23100) derives a master from exactly one required master_detail and refuses the lookup shape at parse, so os validate exited 1. Each parent field becomes Field.masterDetail, as the release note's FROM -> TO table for these three objects prescribes: deleteBehavior 'restrict' on crm_campaign and crm_event (a parent with rows still cannot be deleted), 'cascade' kept on crm_knowledge_article. - specVersion and engines.protocol move to ^18.0.0-next.1 in objectstack.manifest.json, src/sales/index.ts and src/service/index.ts, as test/docs-declared-versions.test.ts holds them to the installed @objectstack/spec. The major is unchanged, so the handshake is too. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- objectstack.manifest.json | 4 +-- .../objects/campaign_member.object.ts | 15 ++++++--- src/sales/index.ts | 2 +- src/sales/objects/event_attendee.object.ts | 31 ++++++++++--------- src/service/index.ts | 2 +- .../objects/article_feedback.object.ts | 7 ++++- 6 files changed, 38 insertions(+), 23 deletions(-) diff --git a/objectstack.manifest.json b/objectstack.manifest.json index 0467ecf2..836062fa 100644 --- a/objectstack.manifest.json +++ b/objectstack.manifest.json @@ -1,9 +1,9 @@ { "$schema": "https://schemas.objectstack.dev/template-manifest.json", "name": "hotcrm", - "specVersion": "^18.0.0-next.0", + "specVersion": "^18.0.0-next.1", "engines": { - "protocol": "^18.0.0-next.0" + "protocol": "^18.0.0-next.1" }, "manifestId": "app.objectstack.hotcrm", "displayName": "HotCRM", diff --git a/src/marketing/objects/campaign_member.object.ts b/src/marketing/objects/campaign_member.object.ts index 3b6d996f..6bbf230b 100644 --- a/src/marketing/objects/campaign_member.object.ts +++ b/src/marketing/objects/campaign_member.object.ts @@ -35,9 +35,11 @@ export const CampaignMember = ObjectSchema.create({ description: 'Membership and response tracking for marketing campaigns', // ADR-0090 D1/D7: OWD is an authored decision. Membership is an attribute of - // the campaign, so record access DERIVES from it (ADR-0055). The relation - // resolver accepts the REQUIRED `crm_campaign` LOOKUP as the parent, so no - // master-detail conversion is needed. + // the campaign, so record access DERIVES from it (ADR-0055). The parent is + // `crm_campaign`, the object's ONE required `master_detail`: since + // @objectstack/spec 18.0.0-next.1 that is the only shape a controlled-by-parent + // object derives its master from (ADR-0055 §1). It was a required LOOKUP + // through 18.0.0-next.0, which next.1 refuses at parse (#2105). // // The derivation delivers exactly "members whose `crm_campaign` the caller // can read". ⚠️ Master accessibility resolves through the same paths a direct @@ -102,9 +104,14 @@ export const CampaignMember = ObjectSchema.create({ group: 'basic', }), - crm_campaign: Field.lookup('crm_campaign', { + // The master (see `sharingModel` above). `deleteBehavior: 'restrict'` keeps + // what the required lookup did: a campaign that still has members cannot + // be deleted. A `master_detail` left on its default would cascade instead + // and delete the campaign's membership history with it. + crm_campaign: Field.masterDetail('crm_campaign', { label: 'Campaign', required: true, + deleteBehavior: 'restrict', storage: { notNull: true }, group: 'basic', diff --git a/src/sales/index.ts b/src/sales/index.ts index 5ac76fd4..8c9f56d9 100644 --- a/src/sales/index.ts +++ b/src/sales/index.ts @@ -90,7 +90,7 @@ export const createHotCrmAppStack = ( // rc.3) moved the manifest and left this line behind (#728). Every package // of this artifact states the same protocol; `src/service/index.ts` // repeats it for the same reason. - engines: { protocol: '^18.0.0-next.0' }, + engines: { protocol: '^18.0.0-next.1' }, }, // ─── Platform capabilities this app needs ───────────────────────── diff --git a/src/sales/objects/event_attendee.object.ts b/src/sales/objects/event_attendee.object.ts index 99802423..aa912ca1 100644 --- a/src/sales/objects/event_attendee.object.ts +++ b/src/sales/objects/event_attendee.object.ts @@ -151,9 +151,11 @@ const partyFormHints = (column: string) => { * * # Access derives from the event * - * `sharingModel: 'controlled_by_parent'` (ADR-0055). The relation resolver - * accepts the REQUIRED `crm_event` lookup as the parent, so no master-detail - * conversion is needed — same construction as `crm_campaign_member`. + * `sharingModel: 'controlled_by_parent'` (ADR-0055). The parent is `crm_event`, + * the object's ONE required `master_detail` — same construction as + * `crm_campaign_member`. Since @objectstack/spec 18.0.0-next.1 that is the only + * shape a controlled-by-parent object derives its master from; it was a + * required lookup through 18.0.0-next.0, which next.1 refuses at parse (#2105). * * Reads are filtered to attendees whose `crm_event` the caller can read, and * adding or updating an attendee requires edit access to that event. ⚠️ That @@ -194,20 +196,21 @@ export const EventAttendee = ObjectSchema.create({ format: 'EA-{00000}', }), - // ⚠️ Deliberately left on the spec default, and NOT cascaded with the party - // lookups below. Because it is REQUIRED, the engine escalates the stored - // `set_null` to a refusal at delete time, with a message naming the real - // obstacle instead of an unrelated rule: "Cannot delete crm_event (...): 3 - // dependent crm_event_attendee record(s) reference it via crm_event - // (crm_event is required, so it cannot be cleared)." That is the correct - // answer on this side, for the same reason `crm_campaign_member.crm_campaign` - // keeps it: a meeting's attendee list is the meeting's historical record, - // not a per-person artefact. `test/event-attendee-cascade.test.ts` pins the - // resolved value so a copy-paste of the three cascades cannot reach here. - crm_event: Field.lookup('crm_event', { + // ⚠️ `restrict`, and NOT cascaded with the party lookups below. Deleting a + // meeting that still has attendees is refused, with a message naming the + // real obstacle instead of an unrelated rule. That is the correct answer on + // this side, for the same reason `crm_campaign_member.crm_campaign` keeps + // it: a meeting's attendee list is the meeting's historical record, not a + // per-person artefact. A `master_detail` left on its default would cascade + // and shred that history. Through 18.0.0-next.0 this was a required lookup + // on the `set_null` default, which the engine escalated to the same + // refusal. `test/event-attendee-cascade.test.ts` pins the resolved value so + // a copy-paste of the three cascades cannot reach here. + crm_event: Field.masterDetail('crm_event', { group: 'basic', label: 'Event', required: true, + deleteBehavior: 'restrict', storage: { notNull: true }, }), diff --git a/src/service/index.ts b/src/service/index.ts index 0fd10d06..e0602494 100644 --- a/src/service/index.ts +++ b/src/service/index.ts @@ -135,7 +135,7 @@ export const createHotCrmServiceStack = ( description: 'HotCRM support module — cases, knowledge articles, and the SLA surface.', // The same protocol as the app package (ADR-0087 handshake); bump it with // `specVersion` on every platform upgrade, exactly as the app's is. - engines: { protocol: '^18.0.0-next.0' }, + engines: { protocol: '^18.0.0-next.1' }, // The App package this module extends. dependencies: { 'app.objectstack.hotcrm': '^4.0.1' }, diff --git a/src/service/objects/article_feedback.object.ts b/src/service/objects/article_feedback.object.ts index b5fe4781..302a6173 100644 --- a/src/service/objects/article_feedback.object.ts +++ b/src/service/objects/article_feedback.object.ts @@ -129,8 +129,13 @@ export const ArticleFeedback = ObjectSchema.create({ * enrolled person became permanently undeletable. A required lookup that * defaults to `set_null` is that bug waiting to happen, so the behaviour is * spelled out here rather than inherited. + * + * It is the master of this `controlled_by_parent` object: its ONE required + * `master_detail` (ADR-0055 §1). It was a required lookup through + * 18.0.0-next.0, which @objectstack/spec 18.0.0-next.1 refuses at parse + * (#2105); `cascade` was already declared, so deletes behave as before. */ - crm_knowledge_article: Field.lookup('crm_knowledge_article', { + crm_knowledge_article: Field.masterDetail('crm_knowledge_article', { label: 'Article', required: true, storage: { notNull: true }, From 94d50ae68cc36a3e259d217fa25699627e7c23db Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 13:05:30 +0000 Subject: [PATCH 3/7] fix(flows): every scheduled notify names the record it is about 18.0.0-next.1 (24e064f, objectstack#23284) gives a notification the organization of what it is about and refuses one no organization owns. A schedule run carries no organization, so on an install holding more than one organization each scheduled notify was refused with ERR_SYSTEM_WRITE_ORGANIZATION_REQUIRED and the run abandoned that item at the notify node: contract_renewal opened no renewal deal and opportunity_stagnation wrote no nudge task (flow-scheduled-org-partition, red on the bump). Measured with a control: on the boot's one organization the same run notifies and writes the task. The release note's remedy is applied to all five schedule-run notify nodes (contract_renewal, contract_expiration, opportunity_stagnation, task_due_reminder, case_sla_monitor): sourceObject + sourceId name the loop record, the one actionUrl already links to. Record-change and screen flows keep the trigger record's organization and are unchanged. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- src/revenue/flows/contract-expiration.flow.ts | 4 ++++ src/revenue/flows/contract-renewal.flow.ts | 4 ++++ src/sales/flows/opportunity-stagnation.flow.ts | 4 ++++ src/sales/flows/task-due-reminder.flow.ts | 4 ++++ src/service/flows/case-sla-monitor.flow.ts | 4 ++++ 5 files changed, 20 insertions(+) diff --git a/src/revenue/flows/contract-expiration.flow.ts b/src/revenue/flows/contract-expiration.flow.ts index c8d09f2b..a3533bcd 100644 --- a/src/revenue/flows/contract-expiration.flow.ts +++ b/src/revenue/flows/contract-expiration.flow.ts @@ -54,6 +54,10 @@ export const ContractExpirationFlow: Flow = { template: 'crm.contract_expired', templateData: { contract_number: cel`currentContract.contract_number` }, actionUrl: '/crm_contract/{{currentContract.id}}', + // A schedule run has no organization: since 18.0.0-next.1 the + // notification takes its owner from this record (objectstack#23284). + sourceObject: 'crm_contract', + sourceId: cel`currentContract.id`, }, }, ], diff --git a/src/revenue/flows/contract-renewal.flow.ts b/src/revenue/flows/contract-renewal.flow.ts index ec20aaa4..4ec1916d 100644 --- a/src/revenue/flows/contract-renewal.flow.ts +++ b/src/revenue/flows/contract-renewal.flow.ts @@ -123,6 +123,10 @@ export const ContractRenewalFlow: Flow = { contract_number: cel`currentContract.contract_number`, end_date: cel`currentContract.end_date`, }, actionUrl: '/crm_contract/{{currentContract.id}}', + // A schedule run has no organization: since 18.0.0-next.1 the + // notification takes its owner from this record (objectstack#23284). + sourceObject: 'crm_contract', + sourceId: cel`currentContract.id`, }, }, { diff --git a/src/sales/flows/opportunity-stagnation.flow.ts b/src/sales/flows/opportunity-stagnation.flow.ts index 97d4f215..0328b88a 100644 --- a/src/sales/flows/opportunity-stagnation.flow.ts +++ b/src/sales/flows/opportunity-stagnation.flow.ts @@ -99,6 +99,10 @@ export const OpportunityStagnationFlow: Flow = { days_in_stage: cel`currentOpp.days_in_stage`, }, actionUrl: '/crm_opportunity/{{currentOpp.id}}', + // A schedule run has no organization: since 18.0.0-next.1 the + // notification takes its owner from this record (objectstack#23284). + sourceObject: 'crm_opportunity', + sourceId: cel`currentOpp.id`, }, }, { diff --git a/src/sales/flows/task-due-reminder.flow.ts b/src/sales/flows/task-due-reminder.flow.ts index e79bfe47..1320c516 100644 --- a/src/sales/flows/task-due-reminder.flow.ts +++ b/src/sales/flows/task-due-reminder.flow.ts @@ -79,6 +79,10 @@ export const TaskDueReminderFlow: Flow = { subject: cel`currentTask.subject`, reminder_date: cel`currentTask.reminder_date`, }, actionUrl: '/crm_task/{{currentTask.id}}', + // A schedule run has no organization: since 18.0.0-next.1 the + // notification takes its owner from this record (objectstack#23284). + sourceObject: 'crm_task', + sourceId: cel`currentTask.id`, }, }, { diff --git a/src/service/flows/case-sla-monitor.flow.ts b/src/service/flows/case-sla-monitor.flow.ts index ce4107e4..19b181c2 100644 --- a/src/service/flows/case-sla-monitor.flow.ts +++ b/src/service/flows/case-sla-monitor.flow.ts @@ -279,6 +279,10 @@ export const CaseSlaMonitorFlow: Flow = { case_number: cel`currentCase.case_number`, priority: cel`currentCase.priority`, }, actionUrl: '/crm_case/{{currentCase.id}}', + // A schedule run has no organization: since 18.0.0-next.1 the + // notification takes its owner from this record (objectstack#23284). + sourceObject: 'crm_case', + sourceId: cel`currentCase.id`, }, }, ], From 6b455e53da1f1d76ef0dcd2b60852ca349f8d171 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 13:09:35 +0000 Subject: [PATCH 4/7] test: adopt the 18.0.0-next.1 test-kit and data-door changes - The four reduced kernels that mount createIdentityObjectsPlugin() (cascade-guard-messages, case-creation-date, freeze-guard-reference-cleanup, lead-duplicate-link-cleanup) no longer insert their own Default Organization. 18.0.0-next.1 (917b1a0) has the plugin create it at boot under `single`, so the insert was refused on the slug and every suite failed in beforeAll; the release note says to drop the insert and read the one the boot created. - hierarchy-read-depth saves its three throwaway permission sets through PUT /api/v1/meta/permission/:name. 18.0.0-next.1 (66949b7) retires the sys_permission_set object and names that door as its replacement. The org-wide control arm still sees every seeded row, so the sets grant. - campaign-member-cascade and event-attendee-cascade pin the parent as a required master_detail on `restrict`, the shape the cbp change moved it to; the business fact they guard (a parent with rows refuses to delete) is unchanged, and the attendee suite's end-to-end refusal case passes on the new pin. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- test/campaign-member-cascade.test.ts | 21 +++++++++++--------- test/cascade-guard-messages.test.ts | 8 ++++---- test/case-creation-date.test.ts | 8 ++++---- test/event-attendee-cascade.test.ts | 22 ++++++++++++--------- test/freeze-guard-reference-cleanup.test.ts | 8 ++++---- test/hierarchy-read-depth.test.ts | 20 +++++++++++-------- test/lead-duplicate-link-cleanup.test.ts | 8 ++++---- 7 files changed, 53 insertions(+), 42 deletions(-) diff --git a/test/campaign-member-cascade.test.ts b/test/campaign-member-cascade.test.ts index 0a790a93..29901c63 100644 --- a/test/campaign-member-cascade.test.ts +++ b/test/campaign-member-cascade.test.ts @@ -85,17 +85,20 @@ describe('crm_campaign_member declares cascade on both party lookups', () => { }); /** - * The CAMPAIGN side is deliberately NOT cascade, and is not changed by #696. - * `crm_campaign` is a REQUIRED lookup, and the engine escalates a `set_null` - * default on a required lookup to `restrict` — a campaign with members - * refuses to delete, with a message that names the real obstacle. That is the - * correct answer there (a campaign's member list is its historical record, - * not a per-person artefact), and it is pinned so a copy-paste of the two - * lines above cannot silently start shredding campaign history. + * The CAMPAIGN side is deliberately NOT cascade, and is not changed by #696: + * a campaign with members refuses to delete, with a message that names the + * real obstacle. That is the correct answer there (a campaign's member list + * is its historical record, not a per-person artefact), and it is pinned so a + * copy-paste of the two lines above cannot silently start shredding campaign + * history. `crm_campaign` is the object's master, a required `master_detail` + * since 18.0.0-next.1 (#2105), which would cascade on its default, so it + * declares `restrict`. Through 18.0.0-next.0 it was a required lookup whose + * `set_null` default the engine escalated to the same refusal. */ - it('leaves the required campaign lookup on the default', () => { + it('keeps the required campaign master on restrict', () => { + expect(CAMPAIGN_MEMBER.fields.crm_campaign.type).toBe('master_detail'); expect(CAMPAIGN_MEMBER.fields.crm_campaign.required).toBe(true); - expect(CAMPAIGN_MEMBER.fields.crm_campaign.deleteBehavior).toBe('set_null'); + expect(CAMPAIGN_MEMBER.fields.crm_campaign.deleteBehavior).toBe('restrict'); }); }); diff --git a/test/cascade-guard-messages.test.ts b/test/cascade-guard-messages.test.ts index a5c6dd0f..fedc9b7b 100644 --- a/test/cascade-guard-messages.test.ts +++ b/test/cascade-guard-messages.test.ts @@ -119,10 +119,10 @@ beforeAll(async () => { // The install's one organization. Since 18.0.0-next.0 a system write on a // tenant-scoped object takes its organization from the install's ONE // organization and is refused when there is none (ADR-0131 D3/D9, - // `SystemWriteOrganizationRequiredError`). `plugin-auth` creates it at boot - // under the `single` posture; this kernel mounts no `plugin-auth`, so it - // writes the row itself. - await ql.insert('sys_organization', { name: 'Default Organization', slug: 'default' }, { context: { isSystem: true } }); + // `SystemWriteOrganizationRequiredError`). Since 18.0.0-next.1 + // `createIdentityObjectsPlugin()` creates it at boot under the `single` + // posture (objectstack 917b1a0), so this kernel no longer writes the row + // itself: a second one would make every system write ambiguous. const user = await insert('sys_user', { name: 'Acceptance Rep', email: 'rep@cascade-guards.test' }); // `isSystem` keeps the fixture out of the sharing model (not what this file diff --git a/test/case-creation-date.test.ts b/test/case-creation-date.test.ts index e6a06595..3c45ad43 100644 --- a/test/case-creation-date.test.ts +++ b/test/case-creation-date.test.ts @@ -131,10 +131,10 @@ describe('a case created without any date is counted', () => { // The install's one organization. Since 18.0.0-next.0 a system write on a // tenant-scoped object takes its organization from the install's ONE // organization and is refused when there is none (ADR-0131 D3/D9, - // `SystemWriteOrganizationRequiredError`). `plugin-auth` creates it at boot - // under the `single` posture; this kernel mounts no `plugin-auth`, so it - // writes the row itself. - await ql.insert('sys_organization', { name: 'Default Organization', slug: 'default' }, { context: { isSystem: true } }); + // `SystemWriteOrganizationRequiredError`). Since 18.0.0-next.1 + // `createIdentityObjectsPlugin()` creates it at boot under the `single` + // posture (objectstack 917b1a0), so this kernel no longer writes the row + // itself: a second one would make every system write ambiguous. const read = async (id: string): Promise => ((await ql.findOne('crm_case', { where: { id } }, { context: { isSystem: true } })) ?? {}) as AnyRec; diff --git a/test/event-attendee-cascade.test.ts b/test/event-attendee-cascade.test.ts index 758826f3..dc0924cd 100644 --- a/test/event-attendee-cascade.test.ts +++ b/test/event-attendee-cascade.test.ts @@ -148,18 +148,22 @@ describe('crm_event_attendee declares cascade on all three party lookups', () => }); /** - * The EVENT side is deliberately not cascade. `crm_event` is a REQUIRED - * lookup, and the engine escalates a `set_null` default on a required lookup - * to a refusal at delete time — with a message that names the real obstacle - * (see the last end-to-end test). That is the correct answer there, for the - * same reason `crm_campaign_member.crm_campaign` keeps it (#696): a meeting's + * The EVENT side is deliberately not cascade: deleting a meeting that has + * attendees is refused, with a message that names the real obstacle (see the + * last end-to-end test). That is the correct answer there, for the same + * reason `crm_campaign_member.crm_campaign` keeps it (#696): a meeting's * attendee list is the meeting's historical record, not a per-person - * artefact. Pinned so a copy-paste of the three lines above cannot reach here - * and start shredding meeting history. + * artefact. `crm_event` is the object's master, a required `master_detail` + * since 18.0.0-next.1 (#2105), which would cascade on its default, so it + * declares `restrict`; through 18.0.0-next.0 it was a required lookup whose + * `set_null` default the engine escalated to the same refusal. Pinned so a + * copy-paste of the three lines above cannot reach here and start shredding + * meeting history. */ - it('leaves the required event lookup on the default', () => { + it('keeps the required event master on restrict', () => { + expect(EVENT_ATTENDEE.fields.crm_event.type).toBe('master_detail'); expect(EVENT_ATTENDEE.fields.crm_event.required).toBe(true); - expect(EVENT_ATTENDEE.fields.crm_event.deleteBehavior).toBe('set_null'); + expect(EVENT_ATTENDEE.fields.crm_event.deleteBehavior).toBe('restrict'); }); }); diff --git a/test/freeze-guard-reference-cleanup.test.ts b/test/freeze-guard-reference-cleanup.test.ts index 7db16a14..2ceedfb6 100644 --- a/test/freeze-guard-reference-cleanup.test.ts +++ b/test/freeze-guard-reference-cleanup.test.ts @@ -291,10 +291,10 @@ beforeAll(async () => { // The install's one organization. Since 18.0.0-next.0 a system write on a // tenant-scoped object takes its organization from the install's ONE // organization and is refused when there is none (ADR-0131 D3/D9, - // `SystemWriteOrganizationRequiredError`). `plugin-auth` creates it at boot - // under the `single` posture; this kernel mounts no `plugin-auth`, so it - // writes the row itself. - await ql.insert('sys_organization', { name: 'Default Organization', slug: 'default' }, { context: { isSystem: true } }); + // `SystemWriteOrganizationRequiredError`). Since 18.0.0-next.1 + // `createIdentityObjectsPlugin()` creates it at boot under the `single` + // posture (objectstack 917b1a0), so this kernel no longer writes the row + // itself: a second one would make every system write ambiguous. const user = await insert('sys_user', { name: 'Erasure Rep', email: 'rep@freeze-cleanup.test' }); userCtx = { userId: user.id, isSystem: true } as AnyRec; diff --git a/test/hierarchy-read-depth.test.ts b/test/hierarchy-read-depth.test.ts index bb10ad72..e37f3548 100644 --- a/test/hierarchy-read-depth.test.ts +++ b/test/hierarchy-read-depth.test.ts @@ -86,8 +86,8 @@ process.env.OS_REGISTRY_LOG ??= 'silent'; const HIERARCHY_SCOPES = new Set(['unit', 'unit_and_below', 'own_and_reports']); /** - * The three throwaway grants. They exist only as rows this test inserts into - * `sys_permission_set`; ⛔ none of them is authored in `src/profiles/`, and the + * The three throwaway grants. They exist only as permission sets this test + * saves through the metadata door; ⛔ none of them is authored in `src/profiles/`, and the * #1378 ruling forbids adding one there. Each differs from the next in exactly * one field, so a difference in what their holders can read is attributable. */ @@ -282,17 +282,21 @@ beforeAll(async () => { // That absence is the whole subject of this file. verify = await bootStack(artifact); - // The throwaway permission sets, created as DATA. ⛔ Nothing here is authored - // in `src/profiles/`; #1378 rules that no profile may gain a hierarchy - // readScope, and this file must not become the reason one does. + // The throwaway permission sets, saved through the metadata door at boot. + // ⛔ Nothing here is authored in `src/profiles/`; #1378 rules that no profile + // may gain a hierarchy readScope, and this file must not become the reason + // one does. Through 18.0.0-next.0 they were `sys_permission_set` DATA rows; + // 18.0.0-next.1 retires that object (objectstack 66949b7, ADR-0131 D3) and + // names `PUT /api/v1/meta/permission/:name` as its replacement. + const admin = await verify.signIn(); for (const [name, grant] of Object.entries(PROBE_GRANTS)) { - id[`set_${name}`] = await insert('sys_permission_set', { + const res = await verify.apiAs(admin, 'PUT', `/meta/permission/${name}`, { name, label: `#1378 probe — ${name}`, description: 'Throwaway grant created by test/hierarchy-read-depth.test.ts. Not an app profile.', - object_permissions: JSON.stringify({ crm_opportunity: grant }), - active: true, + objects: { crm_opportunity: grant }, }); + expect(res.status, `saving the throwaway set ${name}: ${await res.clone().text()}`).toBeLessThan(300); } // Three managers, one per throwaway grant, so the three arms differ ONLY in diff --git a/test/lead-duplicate-link-cleanup.test.ts b/test/lead-duplicate-link-cleanup.test.ts index 8381d994..f42ed7f3 100644 --- a/test/lead-duplicate-link-cleanup.test.ts +++ b/test/lead-duplicate-link-cleanup.test.ts @@ -198,10 +198,10 @@ beforeAll(async () => { // The install's one organization. Since 18.0.0-next.0 a system write on a // tenant-scoped object takes its organization from the install's ONE // organization and is refused when there is none (ADR-0131 D3/D9, - // `SystemWriteOrganizationRequiredError`). `plugin-auth` creates it at boot - // under the `single` posture; this kernel mounts no `plugin-auth`, so it - // writes the row itself. - await ql.insert('sys_organization', { name: 'Default Organization', slug: 'default' }, { context: { isSystem: true } }); + // `SystemWriteOrganizationRequiredError`). Since 18.0.0-next.1 + // `createIdentityObjectsPlugin()` creates it at boot under the `single` + // posture (objectstack 917b1a0), so this kernel no longer writes the row + // itself: a second one would make every system write ambiguous. const user = await insert('sys_user', { name: 'Erasure Rep', email: 'rep@dupe-cleanup.test' }); userCtx = { userId: user.id, isSystem: true } as AnyRec; From f0fb5c71de206a37c505b762c5123dfb172359ef Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 13:09:35 +0000 Subject: [PATCH 5/7] docs: re-scope the claims that named 18.0.0-next.0 as the pin - docs/STATUS.md's runtime table and the three What's new pages state 18.0.0-next.1 and ^18.0.0-next.1 for the release after 4.0.1. - campaign-enrollment.flow.ts dates its "the pin" note per release. - The opportunity and quote line-item comments no longer say the relation resolver accepts a required lookup as the parent: next.1 derives a master from one required master_detail only. - service-agent.profile.ts marks its PositionSchema premise as dated: on next.1 PositionSchema accepts permissionSets (measured) and sys_position_permission_set is retired. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- content/docs/whats-new.mdx | 4 ++-- content/docs/whats-new.zh-Hans.mdx | 4 ++-- content/docs/whats-new.zh-Hant.mdx | 4 ++-- docs/STATUS.md | 2 +- src/marketing/flows/campaign-enrollment.flow.ts | 3 ++- src/revenue/objects/opportunity_line_item.object.ts | 5 +++-- src/revenue/objects/quote_line_item.object.ts | 4 ++-- src/sales/profiles/service-agent.profile.ts | 5 +++++ 8 files changed, 19 insertions(+), 12 deletions(-) diff --git a/content/docs/whats-new.mdx b/content/docs/whats-new.mdx index bbcf1f15..527f75b5 100644 --- a/content/docs/whats-new.mdx +++ b/content/docs/whats-new.mdx @@ -67,8 +67,8 @@ http://localhost:4001 and create the first admin account. **HotCRM 4.0.1** shipped on **ObjectStack 17.7.0** across every `@objectstack/*` package. The release after it runs on **ObjectStack -18.0.0-next.0**, a prerelease of the platform's next major, and its manifest -declares the matching `^18.0.0-next.0` protocol range, so a runtime on a +18.0.0-next.1**, a prerelease of the platform's next major, and its manifest +declares the matching `^18.0.0-next.1` protocol range, so a runtime on a different protocol major — a 17.x host included — refuses the load up front with a structured diagnostic instead of failing deep in a schema parse. diff --git a/content/docs/whats-new.zh-Hans.mdx b/content/docs/whats-new.zh-Hans.mdx index c49d8bee..7afebe61 100644 --- a/content/docs/whats-new.zh-Hans.mdx +++ b/content/docs/whats-new.zh-Hans.mdx @@ -48,8 +48,8 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh ## v4.0.1 —— 最新发布 **HotCRM 4.0.1** 发布时,全线 `@objectstack/*` 包运行在 **ObjectStack 17.7.0** 上。 -它之后的版本运行在 **ObjectStack 18.0.0-next.0** 上(平台下一个大版本的预发布版), -应用清单声明了与之匹配的 `^18.0.0-next.0` 协议区间,因此协议大版本不同的运行时 +它之后的版本运行在 **ObjectStack 18.0.0-next.1** 上(平台下一个大版本的预发布版), +应用清单声明了与之匹配的 `^18.0.0-next.1` 协议区间,因此协议大版本不同的运行时 (包括 17.x 的宿主)会在装载之初就带着结构化诊断拒绝加载,而不是在某次 schema 解析的深处才失败。 diff --git a/content/docs/whats-new.zh-Hant.mdx b/content/docs/whats-new.zh-Hant.mdx index 88f1a705..80d43256 100644 --- a/content/docs/whats-new.zh-Hant.mdx +++ b/content/docs/whats-new.zh-Hant.mdx @@ -50,8 +50,8 @@ HOTCRM_TOKEN=... ./scripts/wow1-live-schema.sh ## v4.0.1 —— 最新發行 **HotCRM 4.0.1** 發行時,全線 `@objectstack/*` 套件執行在 **ObjectStack 17.7.0** 上。 -它之後的版本執行在 **ObjectStack 18.0.0-next.0** 上(平台下一個大版本的預發行版), -應用清單宣告了與之相符的 `^18.0.0-next.0` 協定區間,因此協定大版本不同的執行時 +它之後的版本執行在 **ObjectStack 18.0.0-next.1** 上(平台下一個大版本的預發行版), +應用清單宣告了與之相符的 `^18.0.0-next.1` 協定區間,因此協定大版本不同的執行時 (包括 17.x 的宿主)會在載入之初就帶著結構化診斷拒絕載入,而不是在某次 schema 解析的深處才失敗。 diff --git a/docs/STATUS.md b/docs/STATUS.md index 6fc9a106..d294a0d7 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -73,7 +73,7 @@ pnpm verify | --- | --- | | Node.js | `^22.11 \|\| ^24 \|\| >=26` | | pnpm | `>=10.0.0` | -| ObjectStack packages | `18.0.0-next.0` | +| ObjectStack packages | `18.0.0-next.1` | | Local dev port | `4001` | Each row above is asserted against `package.json` (`engines`, the `@objectstack/*` diff --git a/src/marketing/flows/campaign-enrollment.flow.ts b/src/marketing/flows/campaign-enrollment.flow.ts index 18fa9364..b4c817b8 100644 --- a/src/marketing/flows/campaign-enrollment.flow.ts +++ b/src/marketing/flows/campaign-enrollment.flow.ts @@ -55,7 +55,8 @@ export const CampaignEnrollmentFlow: Flow = { * * ⚠️ Measured on the 17.1.0 spec, with the schema key re-checked on 17.2.0. * Neither that key nor the seeding behaviour was re-checked on 17.3.0 or - * 17.4.0 (PR #1814, #1807), nor on 17.5.0, 17.6.0, 17.7.0 or 18.0.0-next.0 (the pin since #2031). + * 17.4.0 (PR #1814, #1807), nor on 17.5.0, 17.6.0, 17.7.0, 18.0.0-next.0 (the pin from #2031) + * or 18.0.0-next.1 (the pin since #2105). * * ⛔ Never seed this with an assignment node instead. An assignment is * unconditional, so it CLOBBERS a supplied param — measured: launching with diff --git a/src/revenue/objects/opportunity_line_item.object.ts b/src/revenue/objects/opportunity_line_item.object.ts index 271c4a54..1007cc55 100644 --- a/src/revenue/objects/opportunity_line_item.object.ts +++ b/src/revenue/objects/opportunity_line_item.object.ts @@ -36,8 +36,9 @@ export const OpportunityLineItem = ObjectSchema.create({ // written to go red the day the platform widens them: with the master set // resolved from RLS policies alone, any caller without the private-deal // policy — `sales_rep` included — reaches EVERY opportunity's lines. - // ADR-0055's relation resolver accepts a REQUIRED LOOKUP as the parent, so - // this works without converting the relationship to master-detail. + // The master is `crm_opportunity`, this object's one required + // `master_detail`: since 18.0.0-next.1 the only shape ADR-0055's relation + // resolver derives a master from (a required lookup no longer counts). // // ⛔ Not `private`: this object has no owner of its own, so `private` falls // back to the platform's auto-stamped `owner_id` (whoever inserted the row) — diff --git a/src/revenue/objects/quote_line_item.object.ts b/src/revenue/objects/quote_line_item.object.ts index d848cd23..00e5bf76 100644 --- a/src/revenue/objects/quote_line_item.object.ts +++ b/src/revenue/objects/quote_line_item.object.ts @@ -35,8 +35,8 @@ export const QuoteLineItem = ObjectSchema.create({ // master RLS policies only, under a SYSTEM context, and no policy authored on // `crm_quote`, the master set is EVERY quote and a line item is readable — // and writable — by every holder of object-level read on this object. The - // relation resolver accepts a REQUIRED LOOKUP as the parent, so no - // master-detail conversion is needed. + // master is `crm_quote`, this object's one required `master_detail`: since + // 18.0.0-next.1 the only shape the relation resolver derives a master from. // // ⛔ Not `private`: with no owner field on this object that resolves to the // platform's auto-stamped `owner_id` — the row's inserter — so lines cloned diff --git a/src/sales/profiles/service-agent.profile.ts b/src/sales/profiles/service-agent.profile.ts index 3848970e..6386f875 100644 --- a/src/sales/profiles/service-agent.profile.ts +++ b/src/sales/profiles/service-agent.profile.ts @@ -119,6 +119,11 @@ export const ServiceAgentProfile = { * ⇒ For this app, "bind set X to position P" has exactly one spelling: declare * X's grants under the name P. Hence this export rather than a new file. * + * ⚠️ The schema half above is dated, not current: on 18.0.0-next.1 + * `PositionSchema` accepts `permissionSets` and the `sys_position_permission_set` + * object is retired (objectstack 66949b7). #2105 neither re-measured the name + * binding below on that pin nor decided whether to declare the binding instead. + * * ### Why a spread and not a copy * * `objects` and `fields` are carried by REFERENCE, so the two personas share From bf9d030f7624b6a082844ce733712cdf797ce5e5 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 13:10:08 +0000 Subject: [PATCH 6/7] chore(changeset): record the 18.0.0-next.1 upgrade Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- .changeset/2105-objectstack-18-next-1.md | 35 ++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .changeset/2105-objectstack-18-next-1.md diff --git a/.changeset/2105-objectstack-18-next-1.md b/.changeset/2105-objectstack-18-next-1.md new file mode 100644 index 00000000..6787f040 --- /dev/null +++ b/.changeset/2105-objectstack-18-next-1.md @@ -0,0 +1,35 @@ +--- +'hotcrm': minor +--- + +Upgrade the ObjectStack platform to 18.0.0-next.1 (prerelease) + +All 23 `@objectstack/*` dependencies move from 18.0.0-next.0 to 18.0.0-next.1 together, pinned +exact: 19 in `dependencies` and 4 in `devDependencies`. `specVersion` and `engines.protocol` follow +to `^18.0.0-next.1` in `objectstack.manifest.json` and in both package manifests (`src/sales`, +`src/service`). The protocol major is still 18, so any 18 runtime admits the artifact, and a 17.x +host still refuses it. `pnpm install` regenerated `pnpm-lock.yaml`: 705 `packages:` entries before, +707 after. The 55 `@objectstack/*` keys moved one for one. `@objectstack/connector-imap` and +`postal-mime@4.0.6` arrive with the platform's mailbox service. No other third-party package +changed version. + +The platform changes that reached this app: + +- **Campaign members, event attendees and article feedback now name their parent as a master.** + Access to each of these rows derives from its parent (the campaign, the meeting, the article). + Since 18.0.0-next.1 the platform derives that parent only from a required master-detail field, + and it refused the required lookup these three objects used. **Campaign** and **Event** are now + master-detail fields that refuse to delete a campaign or a meeting that still has members or + attendees, as before. **Article** is master-detail and still deletes the feedback with its + article, as before. +- **Scheduled notifications name the record they are about.** The contract renewal and expiry + reminders, the stalled-deal nudge, the task reminder and the case SLA alert now link their inbox + entry to the contract, deal, task or case. On 18.0.0-next.1 this link also decides which + organization owns the notification. Without it, an install holding more than one organization + would refuse each of these notifications on 18.0.0-next.1, and the sweep would abandon that + record: no renewal deal opened, no stalled-deal task written. + +The test suite moved with the platform. Test kits that mount the identity objects without the auth +plugin no longer create their own Default Organization, because the platform now creates it at boot. +The hierarchy read-depth suite saves its throwaway permission sets through the metadata API, because +the `sys_permission_set` data object is retired. From 19a5418f9f543d4547a649177110d865dfacd8aa Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 13:32:34 +0000 Subject: [PATCH 7/7] docs(profiles): record that the service_agent name binding resolves on 18.0.0-next.1 Measured in the #2105 browser pass: security/explain for a demo user holding only the service_agent position answers permissionSets [service_agent, member_default]. Claude-Session: https://claude.ai/code/session_01P8mZuzuyZAHSrgQKmv6ASv Co-authored-by: Claude --- src/sales/profiles/service-agent.profile.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/sales/profiles/service-agent.profile.ts b/src/sales/profiles/service-agent.profile.ts index 6386f875..5332e826 100644 --- a/src/sales/profiles/service-agent.profile.ts +++ b/src/sales/profiles/service-agent.profile.ts @@ -121,8 +121,11 @@ export const ServiceAgentProfile = { * * ⚠️ The schema half above is dated, not current: on 18.0.0-next.1 * `PositionSchema` accepts `permissionSets` and the `sys_position_permission_set` - * object is retired (objectstack 66949b7). #2105 neither re-measured the name - * binding below on that pin nor decided whether to declare the binding instead. + * object is retired (objectstack 66949b7). The name binding still resolves + * there: for a demo user holding the `service_agent` position and no grant, + * `POST /api/v1/security/explain` answers `permissionSets: [service_agent, + * member_default]` (measured in #2105). Whether to declare the binding + * instead was not decided there. * * ### Why a spread and not a copy *