From cffaa7e5ed908ad7dec3f779b047e233c3733c6d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Nov 2026 00:54:50 +0000 Subject: [PATCH] Version Packages (alpha) --- .../auth-adapter-update-empty-where.md | 0 .../auth-adapter-update-scaffolder.md | 0 .../{ => pre}/brisk-ledgers-scaffold.md | 0 .changeset/{ => pre}/brisk-ledgers-total.md | 0 .changeset/{ => pre}/brisk-packs-align.md | 0 .changeset/{ => pre}/brisk-packs-scaffold.md | 0 .changeset/{ => pre}/calm-pens-stamp.md | 0 .changeset/{ => pre}/calm-scaffold-refresh.md | 0 .changeset/{ => pre}/calm-tabs-refuse.md | 0 .changeset/{ => pre}/calm-tabs-scaffold.md | 0 .changeset/{ => pre}/empty-boxes-scaffold.md | 0 .changeset/{ => pre}/empty-boxes-settle.md | 0 .../{ => pre}/fix-access-changes-plan.md | 0 .../{ => pre}/fix-singleton-relationship.md | 0 .../{ => pre}/focused-forms-scaffold.md | 0 .changeset/{ => pre}/fresh-owls-reload.md | 0 .changeset/{ => pre}/gentle-rows-scaffold.md | 0 .changeset/{ => pre}/gentle-rows-yield.md | 0 .changeset/{ => pre}/honest-doors-close.md | 0 .changeset/{ => pre}/honest-doors-scaffold.md | 0 .changeset/{ => pre}/level-quills-align.md | 0 .changeset/{ => pre}/level-quills-scaffold.md | 0 .changeset/{ => pre}/narrow-drawers-open.md | 0 .../{ => pre}/narrow-drawers-scaffold.md | 0 .changeset/{ => pre}/narrow-rows-scaffold.md | 0 .changeset/{ => pre}/narrow-rows-withheld.md | 0 .changeset/{ => pre}/plain-comets-bind.md | 0 .changeset/{ => pre}/plain-rules-scaffold.md | 0 .changeset/{ => pre}/plain-rules-ui.md | 0 .changeset/{ => pre}/plain-rules-withhold.md | 0 .changeset/{ => pre}/quiet-filters-invert.md | 0 .../{ => pre}/quiet-filters-scaffold.md | 0 .changeset/{ => pre}/quiet-hollow-where.md | 0 .changeset/{ => pre}/quiet-loops-refuse.md | 0 .../refresh-scaffolder-access-changes.md | 0 .changeset/{ => pre}/scaffold-pnpm-builds.md | 0 .changeset/{ => pre}/steady-forms-land.md | 0 .changeset/{ => pre}/steady-forms-refuse.md | 0 .changeset/{ => pre}/steady-forms-scaffold.md | 0 .changeset/{ => pre}/steady-herons-sort.md | 0 .changeset/{ => pre}/steady-keys-land.md | 0 .changeset/{ => pre}/steady-keys-scaffold.md | 0 .changeset/{ => pre}/steady-weeks-align.md | 0 .changeset/{ => pre}/steady-weeks-scaffold.md | 0 .changeset/{ => pre}/strict-mime-essence.md | 0 .../{ => pre}/strict-mime-scaffolder.md | 0 .changeset/{ => pre}/tidy-rows-act.md | 0 .changeset/{ => pre}/tidy-rows-scaffold.md | 0 .changeset/{ => pre}/tidy-tables-fold.md | 0 .changeset/{ => pre}/tidy-tables-scaffold.md | 0 .../{ => pre}/ui-rethrow-next-redirect.md | 0 .../{ => pre}/write-rule-withheld-key.md | 0 packages/auth/CHANGELOG.md | 21 ++ packages/auth/package.json | 2 +- packages/cli/CHANGELOG.md | 32 +++ packages/cli/package.json | 2 +- packages/core/CHANGELOG.md | 137 ++++++++++++ packages/core/package.json | 2 +- packages/create-opensaas-app/CHANGELOG.md | 55 +++++ packages/create-opensaas-app/package.json | 2 +- packages/rag/CHANGELOG.md | 17 ++ packages/rag/package.json | 2 +- packages/storage-s3/CHANGELOG.md | 4 + packages/storage-s3/package.json | 2 +- packages/storage-vercel/CHANGELOG.md | 4 + packages/storage-vercel/package.json | 2 +- packages/storage/CHANGELOG.md | 9 + packages/storage/package.json | 2 +- packages/tiptap/CHANGELOG.md | 47 ++++ packages/tiptap/package.json | 2 +- packages/ui/CHANGELOG.md | 210 ++++++++++++++++++ packages/ui/package.json | 2 +- 72 files changed, 546 insertions(+), 10 deletions(-) rename .changeset/{ => pre}/auth-adapter-update-empty-where.md (100%) rename .changeset/{ => pre}/auth-adapter-update-scaffolder.md (100%) rename .changeset/{ => pre}/brisk-ledgers-scaffold.md (100%) rename .changeset/{ => pre}/brisk-ledgers-total.md (100%) rename .changeset/{ => pre}/brisk-packs-align.md (100%) rename .changeset/{ => pre}/brisk-packs-scaffold.md (100%) rename .changeset/{ => pre}/calm-pens-stamp.md (100%) rename .changeset/{ => pre}/calm-scaffold-refresh.md (100%) rename .changeset/{ => pre}/calm-tabs-refuse.md (100%) rename .changeset/{ => pre}/calm-tabs-scaffold.md (100%) rename .changeset/{ => pre}/empty-boxes-scaffold.md (100%) rename .changeset/{ => pre}/empty-boxes-settle.md (100%) rename .changeset/{ => pre}/fix-access-changes-plan.md (100%) rename .changeset/{ => pre}/fix-singleton-relationship.md (100%) rename .changeset/{ => pre}/focused-forms-scaffold.md (100%) rename .changeset/{ => pre}/fresh-owls-reload.md (100%) rename .changeset/{ => pre}/gentle-rows-scaffold.md (100%) rename .changeset/{ => pre}/gentle-rows-yield.md (100%) rename .changeset/{ => pre}/honest-doors-close.md (100%) rename .changeset/{ => pre}/honest-doors-scaffold.md (100%) rename .changeset/{ => pre}/level-quills-align.md (100%) rename .changeset/{ => pre}/level-quills-scaffold.md (100%) rename .changeset/{ => pre}/narrow-drawers-open.md (100%) rename .changeset/{ => pre}/narrow-drawers-scaffold.md (100%) rename .changeset/{ => pre}/narrow-rows-scaffold.md (100%) rename .changeset/{ => pre}/narrow-rows-withheld.md (100%) rename .changeset/{ => pre}/plain-comets-bind.md (100%) rename .changeset/{ => pre}/plain-rules-scaffold.md (100%) rename .changeset/{ => pre}/plain-rules-ui.md (100%) rename .changeset/{ => pre}/plain-rules-withhold.md (100%) rename .changeset/{ => pre}/quiet-filters-invert.md (100%) rename .changeset/{ => pre}/quiet-filters-scaffold.md (100%) rename .changeset/{ => pre}/quiet-hollow-where.md (100%) rename .changeset/{ => pre}/quiet-loops-refuse.md (100%) rename .changeset/{ => pre}/refresh-scaffolder-access-changes.md (100%) rename .changeset/{ => pre}/scaffold-pnpm-builds.md (100%) rename .changeset/{ => pre}/steady-forms-land.md (100%) rename .changeset/{ => pre}/steady-forms-refuse.md (100%) rename .changeset/{ => pre}/steady-forms-scaffold.md (100%) rename .changeset/{ => pre}/steady-herons-sort.md (100%) rename .changeset/{ => pre}/steady-keys-land.md (100%) rename .changeset/{ => pre}/steady-keys-scaffold.md (100%) rename .changeset/{ => pre}/steady-weeks-align.md (100%) rename .changeset/{ => pre}/steady-weeks-scaffold.md (100%) rename .changeset/{ => pre}/strict-mime-essence.md (100%) rename .changeset/{ => pre}/strict-mime-scaffolder.md (100%) rename .changeset/{ => pre}/tidy-rows-act.md (100%) rename .changeset/{ => pre}/tidy-rows-scaffold.md (100%) rename .changeset/{ => pre}/tidy-tables-fold.md (100%) rename .changeset/{ => pre}/tidy-tables-scaffold.md (100%) rename .changeset/{ => pre}/ui-rethrow-next-redirect.md (100%) rename .changeset/{ => pre}/write-rule-withheld-key.md (100%) diff --git a/.changeset/auth-adapter-update-empty-where.md b/.changeset/pre/auth-adapter-update-empty-where.md similarity index 100% rename from .changeset/auth-adapter-update-empty-where.md rename to .changeset/pre/auth-adapter-update-empty-where.md diff --git a/.changeset/auth-adapter-update-scaffolder.md b/.changeset/pre/auth-adapter-update-scaffolder.md similarity index 100% rename from .changeset/auth-adapter-update-scaffolder.md rename to .changeset/pre/auth-adapter-update-scaffolder.md diff --git a/.changeset/brisk-ledgers-scaffold.md b/.changeset/pre/brisk-ledgers-scaffold.md similarity index 100% rename from .changeset/brisk-ledgers-scaffold.md rename to .changeset/pre/brisk-ledgers-scaffold.md diff --git a/.changeset/brisk-ledgers-total.md b/.changeset/pre/brisk-ledgers-total.md similarity index 100% rename from .changeset/brisk-ledgers-total.md rename to .changeset/pre/brisk-ledgers-total.md diff --git a/.changeset/brisk-packs-align.md b/.changeset/pre/brisk-packs-align.md similarity index 100% rename from .changeset/brisk-packs-align.md rename to .changeset/pre/brisk-packs-align.md diff --git a/.changeset/brisk-packs-scaffold.md b/.changeset/pre/brisk-packs-scaffold.md similarity index 100% rename from .changeset/brisk-packs-scaffold.md rename to .changeset/pre/brisk-packs-scaffold.md diff --git a/.changeset/calm-pens-stamp.md b/.changeset/pre/calm-pens-stamp.md similarity index 100% rename from .changeset/calm-pens-stamp.md rename to .changeset/pre/calm-pens-stamp.md diff --git a/.changeset/calm-scaffold-refresh.md b/.changeset/pre/calm-scaffold-refresh.md similarity index 100% rename from .changeset/calm-scaffold-refresh.md rename to .changeset/pre/calm-scaffold-refresh.md diff --git a/.changeset/calm-tabs-refuse.md b/.changeset/pre/calm-tabs-refuse.md similarity index 100% rename from .changeset/calm-tabs-refuse.md rename to .changeset/pre/calm-tabs-refuse.md diff --git a/.changeset/calm-tabs-scaffold.md b/.changeset/pre/calm-tabs-scaffold.md similarity index 100% rename from .changeset/calm-tabs-scaffold.md rename to .changeset/pre/calm-tabs-scaffold.md diff --git a/.changeset/empty-boxes-scaffold.md b/.changeset/pre/empty-boxes-scaffold.md similarity index 100% rename from .changeset/empty-boxes-scaffold.md rename to .changeset/pre/empty-boxes-scaffold.md diff --git a/.changeset/empty-boxes-settle.md b/.changeset/pre/empty-boxes-settle.md similarity index 100% rename from .changeset/empty-boxes-settle.md rename to .changeset/pre/empty-boxes-settle.md diff --git a/.changeset/fix-access-changes-plan.md b/.changeset/pre/fix-access-changes-plan.md similarity index 100% rename from .changeset/fix-access-changes-plan.md rename to .changeset/pre/fix-access-changes-plan.md diff --git a/.changeset/fix-singleton-relationship.md b/.changeset/pre/fix-singleton-relationship.md similarity index 100% rename from .changeset/fix-singleton-relationship.md rename to .changeset/pre/fix-singleton-relationship.md diff --git a/.changeset/focused-forms-scaffold.md b/.changeset/pre/focused-forms-scaffold.md similarity index 100% rename from .changeset/focused-forms-scaffold.md rename to .changeset/pre/focused-forms-scaffold.md diff --git a/.changeset/fresh-owls-reload.md b/.changeset/pre/fresh-owls-reload.md similarity index 100% rename from .changeset/fresh-owls-reload.md rename to .changeset/pre/fresh-owls-reload.md diff --git a/.changeset/gentle-rows-scaffold.md b/.changeset/pre/gentle-rows-scaffold.md similarity index 100% rename from .changeset/gentle-rows-scaffold.md rename to .changeset/pre/gentle-rows-scaffold.md diff --git a/.changeset/gentle-rows-yield.md b/.changeset/pre/gentle-rows-yield.md similarity index 100% rename from .changeset/gentle-rows-yield.md rename to .changeset/pre/gentle-rows-yield.md diff --git a/.changeset/honest-doors-close.md b/.changeset/pre/honest-doors-close.md similarity index 100% rename from .changeset/honest-doors-close.md rename to .changeset/pre/honest-doors-close.md diff --git a/.changeset/honest-doors-scaffold.md b/.changeset/pre/honest-doors-scaffold.md similarity index 100% rename from .changeset/honest-doors-scaffold.md rename to .changeset/pre/honest-doors-scaffold.md diff --git a/.changeset/level-quills-align.md b/.changeset/pre/level-quills-align.md similarity index 100% rename from .changeset/level-quills-align.md rename to .changeset/pre/level-quills-align.md diff --git a/.changeset/level-quills-scaffold.md b/.changeset/pre/level-quills-scaffold.md similarity index 100% rename from .changeset/level-quills-scaffold.md rename to .changeset/pre/level-quills-scaffold.md diff --git a/.changeset/narrow-drawers-open.md b/.changeset/pre/narrow-drawers-open.md similarity index 100% rename from .changeset/narrow-drawers-open.md rename to .changeset/pre/narrow-drawers-open.md diff --git a/.changeset/narrow-drawers-scaffold.md b/.changeset/pre/narrow-drawers-scaffold.md similarity index 100% rename from .changeset/narrow-drawers-scaffold.md rename to .changeset/pre/narrow-drawers-scaffold.md diff --git a/.changeset/narrow-rows-scaffold.md b/.changeset/pre/narrow-rows-scaffold.md similarity index 100% rename from .changeset/narrow-rows-scaffold.md rename to .changeset/pre/narrow-rows-scaffold.md diff --git a/.changeset/narrow-rows-withheld.md b/.changeset/pre/narrow-rows-withheld.md similarity index 100% rename from .changeset/narrow-rows-withheld.md rename to .changeset/pre/narrow-rows-withheld.md diff --git a/.changeset/plain-comets-bind.md b/.changeset/pre/plain-comets-bind.md similarity index 100% rename from .changeset/plain-comets-bind.md rename to .changeset/pre/plain-comets-bind.md diff --git a/.changeset/plain-rules-scaffold.md b/.changeset/pre/plain-rules-scaffold.md similarity index 100% rename from .changeset/plain-rules-scaffold.md rename to .changeset/pre/plain-rules-scaffold.md diff --git a/.changeset/plain-rules-ui.md b/.changeset/pre/plain-rules-ui.md similarity index 100% rename from .changeset/plain-rules-ui.md rename to .changeset/pre/plain-rules-ui.md diff --git a/.changeset/plain-rules-withhold.md b/.changeset/pre/plain-rules-withhold.md similarity index 100% rename from .changeset/plain-rules-withhold.md rename to .changeset/pre/plain-rules-withhold.md diff --git a/.changeset/quiet-filters-invert.md b/.changeset/pre/quiet-filters-invert.md similarity index 100% rename from .changeset/quiet-filters-invert.md rename to .changeset/pre/quiet-filters-invert.md diff --git a/.changeset/quiet-filters-scaffold.md b/.changeset/pre/quiet-filters-scaffold.md similarity index 100% rename from .changeset/quiet-filters-scaffold.md rename to .changeset/pre/quiet-filters-scaffold.md diff --git a/.changeset/quiet-hollow-where.md b/.changeset/pre/quiet-hollow-where.md similarity index 100% rename from .changeset/quiet-hollow-where.md rename to .changeset/pre/quiet-hollow-where.md diff --git a/.changeset/quiet-loops-refuse.md b/.changeset/pre/quiet-loops-refuse.md similarity index 100% rename from .changeset/quiet-loops-refuse.md rename to .changeset/pre/quiet-loops-refuse.md diff --git a/.changeset/refresh-scaffolder-access-changes.md b/.changeset/pre/refresh-scaffolder-access-changes.md similarity index 100% rename from .changeset/refresh-scaffolder-access-changes.md rename to .changeset/pre/refresh-scaffolder-access-changes.md diff --git a/.changeset/scaffold-pnpm-builds.md b/.changeset/pre/scaffold-pnpm-builds.md similarity index 100% rename from .changeset/scaffold-pnpm-builds.md rename to .changeset/pre/scaffold-pnpm-builds.md diff --git a/.changeset/steady-forms-land.md b/.changeset/pre/steady-forms-land.md similarity index 100% rename from .changeset/steady-forms-land.md rename to .changeset/pre/steady-forms-land.md diff --git a/.changeset/steady-forms-refuse.md b/.changeset/pre/steady-forms-refuse.md similarity index 100% rename from .changeset/steady-forms-refuse.md rename to .changeset/pre/steady-forms-refuse.md diff --git a/.changeset/steady-forms-scaffold.md b/.changeset/pre/steady-forms-scaffold.md similarity index 100% rename from .changeset/steady-forms-scaffold.md rename to .changeset/pre/steady-forms-scaffold.md diff --git a/.changeset/steady-herons-sort.md b/.changeset/pre/steady-herons-sort.md similarity index 100% rename from .changeset/steady-herons-sort.md rename to .changeset/pre/steady-herons-sort.md diff --git a/.changeset/steady-keys-land.md b/.changeset/pre/steady-keys-land.md similarity index 100% rename from .changeset/steady-keys-land.md rename to .changeset/pre/steady-keys-land.md diff --git a/.changeset/steady-keys-scaffold.md b/.changeset/pre/steady-keys-scaffold.md similarity index 100% rename from .changeset/steady-keys-scaffold.md rename to .changeset/pre/steady-keys-scaffold.md diff --git a/.changeset/steady-weeks-align.md b/.changeset/pre/steady-weeks-align.md similarity index 100% rename from .changeset/steady-weeks-align.md rename to .changeset/pre/steady-weeks-align.md diff --git a/.changeset/steady-weeks-scaffold.md b/.changeset/pre/steady-weeks-scaffold.md similarity index 100% rename from .changeset/steady-weeks-scaffold.md rename to .changeset/pre/steady-weeks-scaffold.md diff --git a/.changeset/strict-mime-essence.md b/.changeset/pre/strict-mime-essence.md similarity index 100% rename from .changeset/strict-mime-essence.md rename to .changeset/pre/strict-mime-essence.md diff --git a/.changeset/strict-mime-scaffolder.md b/.changeset/pre/strict-mime-scaffolder.md similarity index 100% rename from .changeset/strict-mime-scaffolder.md rename to .changeset/pre/strict-mime-scaffolder.md diff --git a/.changeset/tidy-rows-act.md b/.changeset/pre/tidy-rows-act.md similarity index 100% rename from .changeset/tidy-rows-act.md rename to .changeset/pre/tidy-rows-act.md diff --git a/.changeset/tidy-rows-scaffold.md b/.changeset/pre/tidy-rows-scaffold.md similarity index 100% rename from .changeset/tidy-rows-scaffold.md rename to .changeset/pre/tidy-rows-scaffold.md diff --git a/.changeset/tidy-tables-fold.md b/.changeset/pre/tidy-tables-fold.md similarity index 100% rename from .changeset/tidy-tables-fold.md rename to .changeset/pre/tidy-tables-fold.md diff --git a/.changeset/tidy-tables-scaffold.md b/.changeset/pre/tidy-tables-scaffold.md similarity index 100% rename from .changeset/tidy-tables-scaffold.md rename to .changeset/pre/tidy-tables-scaffold.md diff --git a/.changeset/ui-rethrow-next-redirect.md b/.changeset/pre/ui-rethrow-next-redirect.md similarity index 100% rename from .changeset/ui-rethrow-next-redirect.md rename to .changeset/pre/ui-rethrow-next-redirect.md diff --git a/.changeset/write-rule-withheld-key.md b/.changeset/pre/write-rule-withheld-key.md similarity index 100% rename from .changeset/write-rule-withheld-key.md rename to .changeset/pre/write-rule-withheld-key.md diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md index 082ca16d7..6544d09a3 100644 --- a/packages/auth/CHANGELOG.md +++ b/packages/auth/CHANGELOG.md @@ -1,5 +1,26 @@ # @opensaas/stack-auth +## 0.44.0-alpha.6 + +### Minor Changes + +- [#2201](https://github.com/OpenSaasAU/stack/pull/2201) [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73) Thanks [@dependabot](https://github.com/apps/dependabot)! - Upgrade to Prisma ORM 8.0.0-rc.22 and the `prisma` CLI to 8.0.0-rc.30 + + The stack's date and time columns are unchanged: `timestamp()` and `calendarDay()` keep reading and writing ISO strings, and `contract.json` is byte-identical. Prisma ORM now refuses to run from two installed copies, so every `@prisma/orm-*` package and the `prisma` CLI must move together: + + ```json + { + "dependencies": { "@prisma/orm-postgres": "8.0.0-rc.22" }, + "devDependencies": { "prisma": "8.0.0-rc.30" } + } + ``` + + Then run `pnpm generate` and commit what it writes. A project using `ragPlugin` or another pgvector declaration gets a new head for `migrations/pgvector/`: run `prisma db migrate` on each database to move the pack's marker. + +### Patch Changes + +- [#2144](https://github.com/OpenSaasAU/stack/pull/2144) [`8bbaeae`](https://github.com/OpenSaasAU/stack/commit/8bbaeaef7e544c69cb17756ca67813521e0ef490) Thanks [@borisno2](https://github.com/borisno2)! - Auth adapter `update` and `incrementOne` now throw `AuthWhereError` on an empty `where` instead of silently no-oping (completes [#1980](https://github.com/OpenSaasAU/stack/issues/1980)). + ## 0.44.0-alpha.5 No changes in this release. diff --git a/packages/auth/package.json b/packages/auth/package.json index 2a88de4c9..fb3fafddd 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-auth", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "Better-auth integration for OpenSaas Stack", "type": "module", "engines": { diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 8cf2cc6d8..5d239df20 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,37 @@ # @opensaas/stack-cli +## 0.44.0-alpha.6 + +### Minor Changes + +- [#2201](https://github.com/OpenSaasAU/stack/pull/2201) [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73) Thanks [@dependabot](https://github.com/apps/dependabot)! - Upgrade to Prisma ORM 8.0.0-rc.22 and the `prisma` CLI to 8.0.0-rc.30 + + The stack's date and time columns are unchanged: `timestamp()` and `calendarDay()` keep reading and writing ISO strings, and `contract.json` is byte-identical. Prisma ORM now refuses to run from two installed copies, so every `@prisma/orm-*` package and the `prisma` CLI must move together: + + ```json + { + "dependencies": { "@prisma/orm-postgres": "8.0.0-rc.22" }, + "devDependencies": { "prisma": "8.0.0-rc.30" } + } + ``` + + Then run `pnpm generate` and commit what it writes. A project using `ragPlugin` or another pgvector declaration gets a new head for `migrations/pgvector/`: run `prisma db migrate` on each database to move the pack's marker. + +### Patch Changes + +- [#2142](https://github.com/OpenSaasAU/stack/pull/2142) [`bb87f3b`](https://github.com/OpenSaasAU/stack/commit/bb87f3bf253f31c9aee6b91338f54057ee923ffe) Thanks [@borisno2](https://github.com/borisno2)! - Fix the dev loop reading `accessWidening` instead of the `accessChanges` the Prisma CLI reports, so access changes now count as destructive and reach the plan id and `--allow`. + +- [#2196](https://github.com/OpenSaasAU/stack/pull/2196) [`80c9ac0`](https://github.com/OpenSaasAU/stack/commit/80c9ac0f721058b566dc93dea1caf97d39c1cc94) Thanks [@borisno2](https://github.com/borisno2)! - Fix `opensaas dev` freezing on stale config after a failed load; `db update --plan ` now refuses a plan the current config no longer wants. + +- [#2205](https://github.com/OpenSaasAU/stack/pull/2205) [`dec240b`](https://github.com/OpenSaasAU/stack/commit/dec240b2e1596cb7edfa4da21cb7c2e146d05ab4) Thanks [@borisno2](https://github.com/borisno2)! - Render the admin's Sign Out control only with an `onSignOut` handler, instead of a button that only redirected, warn the user if the handler rejects, and reload an admin page restored from the back-forward cache. + The feature generator now emits `signOutAction` and tells you to pass it as `onSignOut`. + +- [#2209](https://github.com/OpenSaasAU/stack/pull/2209) [`4a8b631`](https://github.com/OpenSaasAU/stack/commit/4a8b631e7dcfb3bf5e3eb118193722b2e31d842e) Thanks [@borisno2](https://github.com/borisno2)! - Fix `opensaas generate` failing with "gen is not defined" when a config uses the `cuid` id strategy and no list uses `uuid7`, `cuid2` or `updatedAt` + +- [#2146](https://github.com/OpenSaasAU/stack/pull/2146) [`28650ed`](https://github.com/OpenSaasAU/stack/commit/28650ed4cd7a8e31343732b8ff15194be0afd0dd) Thanks [@borisno2](https://github.com/borisno2)! - `opensaas generate` now refuses to write live artifacts while an `opensaas dev` loop is running for the project, so a parked destructive change is no longer promoted over the loop's database. +- Updated dependencies [[`eaeee36`](https://github.com/OpenSaasAU/stack/commit/eaeee363778e5717371720deec7c4518dfaa80e1), [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73), [`357f9bb`](https://github.com/OpenSaasAU/stack/commit/357f9bbf16499fd1d7da1a02e5c9370d60ae661a), [`ddb9e8c`](https://github.com/OpenSaasAU/stack/commit/ddb9e8cdbf67e42467ec3fec98f22c037f2a5de2), [`0dd7eb4`](https://github.com/OpenSaasAU/stack/commit/0dd7eb4b4a9e5b3ec338b39f8ca83e135de36480), [`4a8b631`](https://github.com/OpenSaasAU/stack/commit/4a8b631e7dcfb3bf5e3eb118193722b2e31d842e), [`fa03c43`](https://github.com/OpenSaasAU/stack/commit/fa03c4313851a5f2caf016190843bb8a21f15f41), [`fb1a7a6`](https://github.com/OpenSaasAU/stack/commit/fb1a7a63429586f3ead4fbd9ab506e9aa9b50847), [`a854243`](https://github.com/OpenSaasAU/stack/commit/a85424322701f3db9682b0f54acdc51bee404912), [`af04b65`](https://github.com/OpenSaasAU/stack/commit/af04b65745d55e0e174c2b95b04f0577651f0861), [`93fd6c9`](https://github.com/OpenSaasAU/stack/commit/93fd6c9f4fe136b0a987ffdf436566de9f50b1ba), [`ca51e67`](https://github.com/OpenSaasAU/stack/commit/ca51e67ed52a803cfeac60b2084c5409c7815f5a)]: + - @opensaas/stack-core@0.44.0-alpha.6 + ## 0.44.0-alpha.5 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 194f63b59..579d97232 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-cli", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "CLI tools for OpenSaas Stack", "type": "module", "engines": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 98dd400a2..79cc53a3e 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,142 @@ # @opensaas/stack-core +## 0.44.0-alpha.6 + +### Minor Changes + +- [#2201](https://github.com/OpenSaasAU/stack/pull/2201) [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73) Thanks [@dependabot](https://github.com/apps/dependabot)! - Upgrade to Prisma ORM 8.0.0-rc.22 and the `prisma` CLI to 8.0.0-rc.30 + + The stack's date and time columns are unchanged: `timestamp()` and `calendarDay()` keep reading and writing ISO strings, and `contract.json` is byte-identical. Prisma ORM now refuses to run from two installed copies, so every `@prisma/orm-*` package and the `prisma` CLI must move together: + + ```json + { + "dependencies": { "@prisma/orm-postgres": "8.0.0-rc.22" }, + "devDependencies": { "prisma": "8.0.0-rc.30" } + } + ``` + + Then run `pnpm generate` and commit what it writes. A project using `ragPlugin` or another pgvector declaration gets a new head for `migrations/pgvector/`: run `prisma db migrate` on each database to move the pack's marker. + +- [#2232](https://github.com/OpenSaasAU/stack/pull/2232) [`fa03c43`](https://github.com/OpenSaasAU/stack/commit/fa03c4313851a5f2caf016190843bb8a21f15f41) Thanks [@borisno2](https://github.com/borisno2)! - A field's `read` rule now denies when it reaches for a relation the row does not carry, closing a count, a `combine` of counts or an absent relation making a rule fail open. + + This changes what rules see. A relation the read did not deliver whole — not included, narrowed by the caller with `where`, `limit`, `offset`, `orderBy`, `select` or a nested `include`, or reduced to counts with no rows — is withheld, and reading it denies that rule. A foreign key's rule takes the same decision on the same rows as every other rule on the row. + + ```typescript + const notes = relationship({ + ref: 'Note.ticket', + many: true, + access: { read: ({ item }) => !item.notes?.some((note) => note.private) }, + }) + + await context.db.Ticket.include('notes').all() // decides on the rows, as before + await context.db.Ticket.include('notes', (rows) => rows.count()).all() // denies, and used to pass + await context.db.Ticket.include('notes', (rows) => rows.limit(10)).all() // denies, and used to pass + ``` + + - A rule that throws the `TypeError` of reading it, like `item.logs.length`, denies rather than failing the read, so the admin item view renders where it showed "Item not found". The section says it can't be shown, and the list view shows no count, rather than a false empty or `0`. + - An included to-one the related list's access left out is withheld, not `null`, so `!item.owner?.banned` no longer grants under `include('owner')`. `null` on a to-one with no foreign key set is a real answer. The inverse side of a one-to-one has no column to tell the two apart, so a rule reading it denies whenever the related list's access can leave a row out, even where there is no row. Rules that never read a relation, like an ownership check, are unaffected. + - A rule that catches a throw from `item` is now row-dependent, so `select` and `where` can no longer open it. + - A rule that enumerates or spreads `item` denies on a row withholding any relation, and a rule that writes through `item` denies and changes nothing. Use `toSorted()` rather than `sort()` on a relation. + - Everything a rule can see of a related list is what the session can see, so never grant on an absence there. Grant on a row the session can see, or keep the fact in a column on the row that only rises. See "What a read rule sees" in the access control docs and ADR-0082. + +- [#2258](https://github.com/OpenSaasAU/stack/pull/2258) [`fb1a7a6`](https://github.com/OpenSaasAU/stack/commit/fb1a7a63429586f3ead4fbd9ab506e9aa9b50847) Thanks [@borisno2](https://github.com/borisno2)! - Core owns one structured filter query, with a parser and serialiser that are true inverses (ADR-0083) + + Breaking: `FilterToken` drops `value` and `raw` for `kind`, `negated`, `values` and `quoted`, and `parseFilterQuery`, `serializeFilterQuery` and `buildFilterWhere` now take or return a `FilterQuery`. `@opensaas/stack-ui` removes `queryToState`, `stateToQuery`, `FilterRow` and `FilterBuilderState`. + + Migrating from the removed UI helpers and the old token shape: + + ```ts + // Before + import { queryToState, stateToQuery } from '@opensaas/stack-ui' + const state = queryToState(search) + const next = stateToQuery(state) + token.value + + // After + import { + isFieldConditionToken, + parseFilterQuery, + serializeFilterQuery, + } from '@opensaas/stack-core' + const query = parseFilterQuery(search) + const rows = query.terms.filter((token) => isFieldConditionToken(token, operatorsFor)) + const next = serializeFilterQuery(query) + token.values[0] + ``` + + `parseFilterQuery` returns a `FilterQuery`, an AND of terms, and `serializeFilterQuery` and `buildFilterWhere` take one. The grammar is today's: a parsed token is never negated and carries exactly one value, and a leading `-` or a `,` is part of the value. The parser never throws, and for every query it returns, `parseFilterQuery(serializeFilterQuery(query))` gives that query back, with `quoted` set where the serialiser had to quote. `isEmptyFilterToken` and `isFieldConditionToken` are exported so callers share the engine's rules for which tokens filter nothing and which map through a field. + + ```ts + import { parseFilterQuery, serializeFilterQuery } from '@opensaas/stack-core' + + const query = parseFilterQuery('title:"Ada \\"the Countess\\"" "status:draft"') + // query.terms[0]: { kind: 'token', field: 'title', operator: 'eq', negated: false, + // values: ['Ada "the Countess"'], quoted: true } + // query.terms[1]: { kind: 'token', field: null, ..., values: ['status:draft'], quoted: true } + serializeFilterQuery(query) // 'title:"Ada \\"the Countess\\"" "status:draft"' + ``` + + Two round-trip defects are fixed: an embedded quote is written as `\"` inside a quoted value, and a quoted `"status:draft"` stays a free-text word instead of coming back as a `status` filter. + + Some existing `?search=` URLs now read differently: + + - Inside a quoted value, `\"` is a literal quote and `\\` a literal backslash, so a quoted value containing either reads differently. A value the old serialiser wrote ending in a backslash, `name:"my dir\" beta`, no longer closes its quote. + - Every whitespace character, including a non-breaking space, separates tokens. + + `serializeFilterQuery` now writes every term, so a token with an empty value is written as `field:` or `""` instead of being dropped. Remove empty tokens before serialising, with `isEmptyFilterToken`, when the result should not carry them. It also quotes a value containing a comma or any whitespace, and a free-text word starting with `-`, so `title:a,b` is written `title:"a,b"` with the same meaning. + + `FilterBuilder` builds on core's parser and serialiser directly. Its props are unchanged. It keeps an unchanged query in the order it was written and never writes an empty row or empty token into the URL. + +- [#2260](https://github.com/OpenSaasAU/stack/pull/2260) [`93fd6c9`](https://github.com/OpenSaasAU/stack/commit/93fd6c9f4fe136b0a987ffdf436566de9f50b1ba) Thanks [@borisno2](https://github.com/borisno2)! - Add Row actions to the admin list view + + Each row now has a menu with the built-in Edit, Copy link and Delete (confirmed through `ConfirmDialog`), and the row title links to the item page. The previous per-row Edit link moves into that menu. A list declares its own actions under `ui.listView.rowActions`, each with a key unique within the list (`config()` throws on a duplicate): + + ```ts + ui: { + listView: { + rowActions: [ + { + key: 'publish', + label: 'Publish now', + icon: 'send', + hasAccess: ({ session }) => session !== null, + isAvailable: ({ item }) => item.status !== 'published', + handler: async ({ id, context }) => { + const post = await context.db.Post.update({ where: { id }, data: { status: 'published' } }) + return { message: post ? 'Published' : 'Not published' } + }, + }, + ], + }, + } + ``` + + `hasAccess` is resolved once per request and the synchronous `isAvailable` per row on the server, over a read in the same shape dispatch re-reads the row in; only the available keys reach the client, and handlers never do. Running one dispatches the new `serverAction` operation `{ action: 'rowAction', key, id }`, which re-checks `hasAccess` before touching the row (a refused session never takes a lock), then opens a transaction, takes a row lock on the row (`.forUpdate()`), re-reads it through the secured context and re-runs `isAvailable` before the handler runs. The list view and dispatch evaluate `isAvailable` through one helper: a throw, or a result that is not a boolean (a Promise from an async check), is logged and treated as unavailable in both. The handler runs inside that transaction with a transaction-bound `context`, so its writes commit atomically with the checks and a throw rolls them back; a concurrent dispatch of a one-shot action waits on the lock and then answers "not run". The lock is held while the handler runs, so keep slow external calls short or make them after it returns. The handler's `id` is the list's own id type (`RowActionContext['id']`, a `number` on an `int autoincrement` list). A missing, denied or no-longer-eligible row, or a `hasAccess` or `isAvailable` that throws, answers `{ rowAction: false, error: 'This action was not run' }` alike. Outcomes appear in the list's status line; a dispatch that fails in transit reports an unknown result and refreshes the list. + + `@opensaas/stack-ui/primitives` gains a `DropdownMenu` primitive on the existing Radix dependency, with `dropdown-menu-*` slots. The list view adds the `row-actions-trigger` and `row-title-link` slots. + +### Patch Changes + +- [#2217](https://github.com/OpenSaasAU/stack/pull/2217) [`eaeee36`](https://github.com/OpenSaasAU/stack/commit/eaeee363778e5717371720deec7c4518dfaa80e1) Thanks [@borisno2](https://github.com/borisno2)! - Fix `create`, `update` and `delete` throwing or returning a wrong value on a list whose computed field declares a relation in `needs`; a write now returns that field exactly as `first()` does. + +- [#2218](https://github.com/OpenSaasAU/stack/pull/2218) [`357f9bb`](https://github.com/OpenSaasAU/stack/commit/357f9bbf16499fd1d7da1a02e5c9370d60ae661a) Thanks [@borisno2](https://github.com/borisno2)! - Fix optional JSON, select and text admin fields not clearing to `null`; `json()` now refuses a `null` for a NOT NULL column with an error on the field. + A hook on an optional text field now receives `null`, not `''`, when it's emptied in the admin, so an `=== ''` check no longer fires. Guard with `typeof value === 'string'`, not `?.`, which turns `null` into `undefined` and silently drops the write. + +- [#2195](https://github.com/OpenSaasAU/stack/pull/2195) [`ddb9e8c`](https://github.com/OpenSaasAU/stack/commit/ddb9e8cdbf67e42467ec3fec98f22c037f2a5de2) Thanks [@borisno2](https://github.com/borisno2)! - Root `update` locks `FOR NO KEY UPDATE`, fixing the deadlock between racers that insert a child and update its parent. + A transaction that then needs `FOR UPDATE` on that row, or changes a column in a unique index, can now deadlock with a racer holding its foreign-key lock (ADR-0078). + +- [#2208](https://github.com/OpenSaasAU/stack/pull/2208) [`0dd7eb4`](https://github.com/OpenSaasAU/stack/commit/0dd7eb4b4a9e5b3ec338b39f8ca83e135de36480) Thanks [@borisno2](https://github.com/borisno2)! - Fix a caller-shaped `combine()` rows branch, or an MCP `count` beside `take: 0`, bypassing a relationship's own `read` rule and revealing the count. + A `combine()` with a rows branch now strips as the plain include does. + +- [#2209](https://github.com/OpenSaasAU/stack/pull/2209) [`4a8b631`](https://github.com/OpenSaasAU/stack/commit/4a8b631e7dcfb3bf5e3eb118193722b2e31d842e) Thanks [@borisno2](https://github.com/borisno2)! - Fix `opensaas generate` failing with "gen is not defined" when a config uses the `cuid` id strategy and no list uses `uuid7`, `cuid2` or `updatedAt` + +- [#2143](https://github.com/OpenSaasAU/stack/pull/2143) [`a854243`](https://github.com/OpenSaasAU/stack/commit/a85424322701f3db9682b0f54acdc51bee404912) Thanks [@borisno2](https://github.com/borisno2)! - MCP `where` relation predicates into a list with `mcp.enabled: false`, `mcp.tools.read: false` or denied query access are now refused as an unknown key. + +- [#2211](https://github.com/OpenSaasAU/stack/pull/2211) [`af04b65`](https://github.com/OpenSaasAU/stack/commit/af04b65745d55e0e174c2b95b04f0577651f0861) Thanks [@borisno2](https://github.com/borisno2)! - Fix admin lists emptying on a sort the column cannot take: sorting now follows the ORM's own `order` answer per column, and `orderBy` refuses a virtual or multi-column field as a `ValidationError`. + A failed list read now shows an error state rather than the first-run empty state. + +- [#2239](https://github.com/OpenSaasAU/stack/pull/2239) [`ca51e67`](https://github.com/OpenSaasAU/stack/commit/ca51e67ed52a803cfeac60b2084c5409c7815f5a) Thanks [@borisno2](https://github.com/borisno2)! - An `update`/`delete` operation rule and a field `update` rule that reach for a relation the write did not deliver now deny instead of reading absence as permission ([#2233](https://github.com/OpenSaasAU/stack/issues/2233)). A rule that enumerates `item` (spread, `Object.keys`) on a list with a relationship denies too. + ## 0.44.0-alpha.5 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 193856b42..66855ca21 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-core", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "Core stack for OpenSaas - schema definition, access control, and runtime utilities", "type": "module", "sideEffects": false, diff --git a/packages/create-opensaas-app/CHANGELOG.md b/packages/create-opensaas-app/CHANGELOG.md index 49b87a5fa..1f22ae8af 100644 --- a/packages/create-opensaas-app/CHANGELOG.md +++ b/packages/create-opensaas-app/CHANGELOG.md @@ -1,5 +1,60 @@ # create-opensaas-app +## 0.4.0-alpha.4 + +### Patch Changes + +- [#2144](https://github.com/OpenSaasAU/stack/pull/2144) [`8bbaeae`](https://github.com/OpenSaasAU/stack/commit/8bbaeaef7e544c69cb17756ca67813521e0ef490) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2217](https://github.com/OpenSaasAU/stack/pull/2217) [`eaeee36`](https://github.com/OpenSaasAU/stack/commit/eaeee363778e5717371720deec7c4518dfaa80e1) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2201](https://github.com/OpenSaasAU/stack/pull/2201) [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73) Thanks [@dependabot](https://github.com/apps/dependabot)! - Scaffold projects on Prisma ORM 8.0.0-rc.22 and the `prisma` CLI 8.0.0-rc.30. + +- [#2196](https://github.com/OpenSaasAU/stack/pull/2196) [`80c9ac0`](https://github.com/OpenSaasAU/stack/commit/80c9ac0f721058b566dc93dea1caf97d39c1cc94) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2143](https://github.com/OpenSaasAU/stack/pull/2143) [`a854243`](https://github.com/OpenSaasAU/stack/commit/a85424322701f3db9682b0f54acdc51bee404912) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2141](https://github.com/OpenSaasAU/stack/pull/2141) [`2f287d5`](https://github.com/OpenSaasAU/stack/commit/2f287d5624fdcf107dddf68d52843d3d43c49f6e) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2218](https://github.com/OpenSaasAU/stack/pull/2218) [`357f9bb`](https://github.com/OpenSaasAU/stack/commit/357f9bbf16499fd1d7da1a02e5c9370d60ae661a) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2230](https://github.com/OpenSaasAU/stack/pull/2230) [`ad45bd0`](https://github.com/OpenSaasAU/stack/commit/ad45bd0bf8dcaf63f023344f9de7d376205be697) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2195](https://github.com/OpenSaasAU/stack/pull/2195) [`ddb9e8c`](https://github.com/OpenSaasAU/stack/commit/ddb9e8cdbf67e42467ec3fec98f22c037f2a5de2) Thanks [@borisno2](https://github.com/borisno2)! - Scaffold against the stack release with the root update lock fix. + +- [#2205](https://github.com/OpenSaasAU/stack/pull/2205) [`dec240b`](https://github.com/OpenSaasAU/stack/commit/dec240b2e1596cb7edfa4da21cb7c2e146d05ab4) Thanks [@borisno2](https://github.com/borisno2)! - The with-auth template wires a real sign-out into the admin UI. + +- [#2202](https://github.com/OpenSaasAU/stack/pull/2202) [`bd03766`](https://github.com/OpenSaasAU/stack/commit/bd03766d61aff8c72423bd9255f0b5b9d736ff50) Thanks [@dependabot](https://github.com/apps/dependabot)! - Refresh templates for the latest stack release. + +- [#2219](https://github.com/OpenSaasAU/stack/pull/2219) [`9a87cfa`](https://github.com/OpenSaasAU/stack/commit/9a87cfa75c464b1940908d20c0fe16c2a30ebf60) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2208](https://github.com/OpenSaasAU/stack/pull/2208) [`0dd7eb4`](https://github.com/OpenSaasAU/stack/commit/0dd7eb4b4a9e5b3ec338b39f8ca83e135de36480) Thanks [@borisno2](https://github.com/borisno2)! - Stamp the stack version carrying the `combine()` read-rule fix into new projects. + +- [#2209](https://github.com/OpenSaasAU/stack/pull/2209) [`4a8b631`](https://github.com/OpenSaasAU/stack/commit/4a8b631e7dcfb3bf5e3eb118193722b2e31d842e) Thanks [@borisno2](https://github.com/borisno2)! - Fix `opensaas generate` failing with "gen is not defined" when a config uses the `cuid` id strategy and no list uses `uuid7`, `cuid2` or `updatedAt` + +- [#2232](https://github.com/OpenSaasAU/stack/pull/2232) [`fa03c43`](https://github.com/OpenSaasAU/stack/commit/fa03c4313851a5f2caf016190843bb8a21f15f41) Thanks [@borisno2](https://github.com/borisno2)! - Templates pick up the read-rule fix for withheld relations. + +- [#2258](https://github.com/OpenSaasAU/stack/pull/2258) [`fb1a7a6`](https://github.com/OpenSaasAU/stack/commit/fb1a7a63429586f3ead4fbd9ab506e9aa9b50847) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2142](https://github.com/OpenSaasAU/stack/pull/2142) [`bb87f3b`](https://github.com/OpenSaasAU/stack/commit/bb87f3bf253f31c9aee6b91338f54057ee923ffe) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2236](https://github.com/OpenSaasAU/stack/pull/2236) [`384e007`](https://github.com/OpenSaasAU/stack/commit/384e0074f26f05f50cd279fcc0bea81c4aa24c7e) Thanks [@borisno2](https://github.com/borisno2)! - Scaffolds write an allowed-builds `pnpm-workspace.yaml`, and ignored build scripts no longer abort setup on current pnpm. + +- [#2212](https://github.com/OpenSaasAU/stack/pull/2212) [`bea32ad`](https://github.com/OpenSaasAU/stack/commit/bea32adade0c2aa73ab4a923692656929165d020) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2211](https://github.com/OpenSaasAU/stack/pull/2211) [`af04b65`](https://github.com/OpenSaasAU/stack/commit/af04b65745d55e0e174c2b95b04f0577651f0861) Thanks [@borisno2](https://github.com/borisno2)! - Fix admin lists emptying on a sort the column cannot take: sorting now follows the ORM's own `order` answer per column, and `orderBy` refuses a virtual or multi-column field as a `ValidationError`. + A failed list read now shows an error state rather than the first-run empty state. + +- [#2222](https://github.com/OpenSaasAU/stack/pull/2222) [`97a9e88`](https://github.com/OpenSaasAU/stack/commit/97a9e882a52733d3a8217fdf15b045a6a73220f8) Thanks [@borisno2](https://github.com/borisno2)! - Templates pick up the admin's keyboard and labelling fixes. + +- [#2231](https://github.com/OpenSaasAU/stack/pull/2231) [`5177197`](https://github.com/OpenSaasAU/stack/commit/517719783862d3e6034611c9c5889f47e3575546) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2198](https://github.com/OpenSaasAU/stack/pull/2198) [`1a6333f`](https://github.com/OpenSaasAU/stack/commit/1a6333f188b51d240048c7255fd28321d8a429f9) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2260](https://github.com/OpenSaasAU/stack/pull/2260) [`93fd6c9`](https://github.com/OpenSaasAU/stack/commit/93fd6c9f4fe136b0a987ffdf436566de9f50b1ba) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + +- [#2259](https://github.com/OpenSaasAU/stack/pull/2259) [`f2af7cb`](https://github.com/OpenSaasAU/stack/commit/f2af7cb048f4c0000c44bbae209d4cc987037834) Thanks [@borisno2](https://github.com/borisno2)! - Refresh templates for the latest stack release. + ## 0.4.0-alpha.3 ### Patch Changes diff --git a/packages/create-opensaas-app/package.json b/packages/create-opensaas-app/package.json index d841af28c..9d38e6853 100644 --- a/packages/create-opensaas-app/package.json +++ b/packages/create-opensaas-app/package.json @@ -1,6 +1,6 @@ { "name": "create-opensaas-app", - "version": "0.4.0-alpha.3", + "version": "0.4.0-alpha.4", "description": "Create a new OpenSaas Stack application", "type": "module", "engines": { diff --git a/packages/rag/CHANGELOG.md b/packages/rag/CHANGELOG.md index 74b0b5186..60674f5ee 100644 --- a/packages/rag/CHANGELOG.md +++ b/packages/rag/CHANGELOG.md @@ -1,5 +1,22 @@ # @opensaas/stack-rag +## 0.44.0-alpha.6 + +### Minor Changes + +- [#2201](https://github.com/OpenSaasAU/stack/pull/2201) [`0933b4b`](https://github.com/OpenSaasAU/stack/commit/0933b4bb6e19f56a2629623c3e5facb28fe8af73) Thanks [@dependabot](https://github.com/apps/dependabot)! - Upgrade to Prisma ORM 8.0.0-rc.22 and the `prisma` CLI to 8.0.0-rc.30 + + The stack's date and time columns are unchanged: `timestamp()` and `calendarDay()` keep reading and writing ISO strings, and `contract.json` is byte-identical. Prisma ORM now refuses to run from two installed copies, so every `@prisma/orm-*` package and the `prisma` CLI must move together: + + ```json + { + "dependencies": { "@prisma/orm-postgres": "8.0.0-rc.22" }, + "devDependencies": { "prisma": "8.0.0-rc.30" } + } + ``` + + Then run `pnpm generate` and commit what it writes. A project using `ragPlugin` or another pgvector declaration gets a new head for `migrations/pgvector/`: run `prisma db migrate` on each database to move the pack's marker. + ## 0.44.0-alpha.5 ### Patch Changes diff --git a/packages/rag/package.json b/packages/rag/package.json index d18f5a859..7f4794816 100644 --- a/packages/rag/package.json +++ b/packages/rag/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-rag", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "RAG and AI embeddings integration for OpenSaas Stack", "type": "module", "engines": { diff --git a/packages/storage-s3/CHANGELOG.md b/packages/storage-s3/CHANGELOG.md index 028092b2e..9b66461a0 100644 --- a/packages/storage-s3/CHANGELOG.md +++ b/packages/storage-s3/CHANGELOG.md @@ -1,5 +1,9 @@ # @opensaas/stack-storage-s3 +## 0.44.0-alpha.6 + +No changes in this release. + ## 0.44.0-alpha.5 No changes in this release. diff --git a/packages/storage-s3/package.json b/packages/storage-s3/package.json index 4089e306a..c4a515417 100644 --- a/packages/storage-s3/package.json +++ b/packages/storage-s3/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-storage-s3", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "AWS S3 storage provider for OpenSaas Stack file uploads", "type": "module", "engines": { diff --git a/packages/storage-vercel/CHANGELOG.md b/packages/storage-vercel/CHANGELOG.md index 31db8180d..52a06a465 100644 --- a/packages/storage-vercel/CHANGELOG.md +++ b/packages/storage-vercel/CHANGELOG.md @@ -1,5 +1,9 @@ # @opensaas/stack-storage-vercel +## 0.44.0-alpha.6 + +No changes in this release. + ## 0.44.0-alpha.5 No changes in this release. diff --git a/packages/storage-vercel/package.json b/packages/storage-vercel/package.json index c856150c2..b09974a5f 100644 --- a/packages/storage-vercel/package.json +++ b/packages/storage-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-storage-vercel", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "Vercel Blob storage provider for OpenSaas Stack file uploads", "type": "module", "engines": { diff --git a/packages/storage/CHANGELOG.md b/packages/storage/CHANGELOG.md index 09151f1a7..a585861b5 100644 --- a/packages/storage/CHANGELOG.md +++ b/packages/storage/CHANGELOG.md @@ -1,5 +1,14 @@ # @opensaas/stack-storage +## 0.44.0-alpha.6 + +### Patch Changes + +- [#2141](https://github.com/OpenSaasAU/stack/pull/2141) [`2f287d5`](https://github.com/OpenSaasAU/stack/commit/2f287d5624fdcf107dddf68d52843d3d43c49f6e) Thanks [@borisno2](https://github.com/borisno2)! - Refuse whitespace and control characters in stored file/image urls, closing `"/\t/host"` resolving to another host. + +- [#2198](https://github.com/OpenSaasAU/stack/pull/2198) [`1a6333f`](https://github.com/OpenSaasAU/stack/commit/1a6333f188b51d240048c7255fd28321d8a429f9) Thanks [@borisno2](https://github.com/borisno2)! - Fix stored XSS where a malformed declared type such as `text/html x` passed the active-content check; one strict parser now serves the check and the stored extension, and a malformed or browser-sniffed type (`unknown/unknown`, `application/unknown`, `*/*`) is stored as `application/octet-stream`. + `text/xsl` and the remaining WHATWG JavaScript essences are now refused by default, and `isActiveMimeType` returns `true` for a non-empty type that is not a usable essence. + ## 0.44.0-alpha.5 ### Patch Changes diff --git a/packages/storage/package.json b/packages/storage/package.json index 4253ef8ad..21c498d99 100644 --- a/packages/storage/package.json +++ b/packages/storage/package.json @@ -1,6 +1,6 @@ { "name": "@opensaas/stack-storage", - "version": "0.44.0-alpha.5", + "version": "0.44.0-alpha.6", "description": "File and image upload field types with pluggable storage providers for OpenSaas Stack", "type": "module", "engines": { diff --git a/packages/tiptap/CHANGELOG.md b/packages/tiptap/CHANGELOG.md index 4d34d2ea4..439487df9 100644 --- a/packages/tiptap/CHANGELOG.md +++ b/packages/tiptap/CHANGELOG.md @@ -1,5 +1,52 @@ # @opensaas/stack-tiptap +## 0.44.0-alpha.6 + +### Minor Changes + +- [#2222](https://github.com/OpenSaasAU/stack/pull/2222) [`97a9e88`](https://github.com/OpenSaasAU/stack/commit/97a9e882a52733d3a8217fdf15b045a6a73220f8) Thanks [@borisno2](https://github.com/borisno2)! - The admin now works by keyboard: relationship pickers are ARIA comboboxes, sort headers are buttons, every control is named, and a failed submit focuses the first error. + + `FieldRenderer` passes each field an `id` that is unique to the form, so a create drawer and the form under it can share a field name. A built-in field's control no longer has `id` equal to `name`, so a host's `#title` selector or `