Repository navigation
chore: version packages - #217
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
October 31, 2026 10:15
17aaf8c to
efc3103
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 31, 2026 10:40
efc3103 to
3e98812
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 31, 2026 11:11
3e98812 to
55afb88
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@bounda-dev/cli@0.3.0
Minor Changes
runtime.overrides.<aggregate>.snapshot: { every }. Asnapshot:<aggregate>subscriber writes them in the background, and a command loads the snapshot and folds only the events after it. A snapshot is a cache of the fold and never the source of truth: it is valid only for thestateFingerprintthe generator now writes to the registry, a digest of the modules that shape the state and of the type inferred for it, plus the configuredsnapshot.version; one that is missing, from other code, unreadable or past the stream's head is ignored, and a share of the loads (snapshot.verify,0.01by default) is checked against a fold of the whole stream, which drops a snapshot that folds to another state. An app fromcreateTestAppchecks every load and throwsSnapshotError. The state is kept with its types (Date,Map,Set,bigint). Every adapter gains asnapshotstable andStorage.snapshotStore, which keeps the newest snapshot of a fingerprint whatever order two writers put theirs in;loadwithfromVersionin the SQL event stores now reads the stream's head before the events, bounded by it, so an append landing between the two reads can no longer report a head past the events returned.payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.Patch Changes
@bounda-dev/cloudflare@0.3.0
Minor Changes
payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.Patch Changes
@bounda-dev/core@0.3.0
Minor Changes
runtime.overrides.<aggregate>.snapshot: { every }. Asnapshot:<aggregate>subscriber writes them in the background, and a command loads the snapshot and folds only the events after it. A snapshot is a cache of the fold and never the source of truth: it is valid only for thestateFingerprintthe generator now writes to the registry, a digest of the modules that shape the state and of the type inferred for it, plus the configuredsnapshot.version; one that is missing, from other code, unreadable or past the stream's head is ignored, and a share of the loads (snapshot.verify,0.01by default) is checked against a fold of the whole stream, which drops a snapshot that folds to another state. An app fromcreateTestAppchecks every load and throwsSnapshotError. The state is kept with its types (Date,Map,Set,bigint). Every adapter gains asnapshotstable andStorage.snapshotStore, which keeps the newest snapshot of a fingerprint whatever order two writers put theirs in;loadwithfromVersionin the SQL event stores now reads the stream's head before the events, bounded by it, so an append landing between the two reads can no longer report a head past the events returned.commands.x(payload, { idempotencyKey })remembers what the first dispatch under a key answered, in the same transaction as the events it
stores, and every later dispatch with the same key, command, payload and
delayanswers the same,its rejection included, without running the handler; two racing for one key store the events once.
The same key for another command, payload or
delayrejects withIdempotencyKeyConflictError(
IDEMPOTENCY_KEY_CONFLICT). A key livesruntime.commands.idempotencyKeyLifetime, 24 hours bydefault, in a new
bounda_idempotency_keystable of every adapter, which the scheduled-commandworker purges.
StorageandStorageTransactiongain anidempotencyStore, with its contracttest in
@bounda-dev/core/adapter/testing. The React Router middleware gives every command of a requesta key derived from its
Idempotency-Keyheader and the command's name,idempotencyKeyFor(header, name), so an action that dispatches two commands keys each apart, andfailure()answers aconflict with a 422. The in-memory adapter now answers, inside a transaction, the positions its events commit
with, as the SQL adapters do.
payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.@bounda-dev/postgresql@0.3.0
Minor Changes
runtime.overrides.<aggregate>.snapshot: { every }. Asnapshot:<aggregate>subscriber writes them in the background, and a command loads the snapshot and folds only the events after it. A snapshot is a cache of the fold and never the source of truth: it is valid only for thestateFingerprintthe generator now writes to the registry, a digest of the modules that shape the state and of the type inferred for it, plus the configuredsnapshot.version; one that is missing, from other code, unreadable or past the stream's head is ignored, and a share of the loads (snapshot.verify,0.01by default) is checked against a fold of the whole stream, which drops a snapshot that folds to another state. An app fromcreateTestAppchecks every load and throwsSnapshotError. The state is kept with its types (Date,Map,Set,bigint). Every adapter gains asnapshotstable andStorage.snapshotStore, which keeps the newest snapshot of a fingerprint whatever order two writers put theirs in;loadwithfromVersionin the SQL event stores now reads the stream's head before the events, bounded by it, so an append landing between the two reads can no longer report a head past the events returned.commands.x(payload, { idempotencyKey })remembers what the first dispatch under a key answered, in the same transaction as the events it
stores, and every later dispatch with the same key, command, payload and
delayanswers the same,its rejection included, without running the handler; two racing for one key store the events once.
The same key for another command, payload or
delayrejects withIdempotencyKeyConflictError(
IDEMPOTENCY_KEY_CONFLICT). A key livesruntime.commands.idempotencyKeyLifetime, 24 hours bydefault, in a new
bounda_idempotency_keystable of every adapter, which the scheduled-commandworker purges.
StorageandStorageTransactiongain anidempotencyStore, with its contracttest in
@bounda-dev/core/adapter/testing. The React Router middleware gives every command of a requesta key derived from its
Idempotency-Keyheader and the command's name,idempotencyKeyFor(header, name), so an action that dispatches two commands keys each apart, andfailure()answers aconflict with a 422. The in-memory adapter now answers, inside a transaction, the positions its events commit
with, as the SQL adapters do.
payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.Patch Changes
@bounda-dev/react-router@0.3.0
Minor Changes
commands.x(payload, { idempotencyKey })remembers what the first dispatch under a key answered, in the same transaction as the events it
stores, and every later dispatch with the same key, command, payload and
delayanswers the same,its rejection included, without running the handler; two racing for one key store the events once.
The same key for another command, payload or
delayrejects withIdempotencyKeyConflictError(
IDEMPOTENCY_KEY_CONFLICT). A key livesruntime.commands.idempotencyKeyLifetime, 24 hours bydefault, in a new
bounda_idempotency_keystable of every adapter, which the scheduled-commandworker purges.
StorageandStorageTransactiongain anidempotencyStore, with its contracttest in
@bounda-dev/core/adapter/testing. The React Router middleware gives every command of a requesta key derived from its
Idempotency-Keyheader and the command's name,idempotencyKeyFor(header, name), so an action that dispatches two commands keys each apart, andfailure()answers aconflict with a 422. The in-memory adapter now answers, inside a transaction, the positions its events commit
with, as the SQL adapters do.
payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.Patch Changes
@bounda-dev/sqlite@0.3.0
Minor Changes
payloadreceivespersonalandpersonnext toz:personal(schema)marks a field as personal data, stored encrypted (AES-256-GCM through WebCrypto, on Node and inworkerd) with a key of the person the event names,person(schema)marks the field that names them, and without it the aggregate's id does.app.forget(personId), on everyBoundaClient, deletes the key and appendsPersonalDataForgottento the streambounda:<personId>, in one transaction: from then on every personal field of theirs reads asnull, typedT | nullin every handler. A read model that projects an event with personal fields must handle it fromprojections/bounda/personal-data-forgotten.ts, which the generator checks in.bounda/types.ts; a policy may react to it frompolicies/bounda/. The adapters keep the keys, with their fingerprints, in a newpersonal_keystable,StorageandStorageTransactiongainpersonalKeys, and the storage contracts cover it. The global stream shows the fields as stored, encrypted. A command that loaded a person's data beforeforgetand appends after it fails withConcurrencyErrorand is decided again, instead of writing their data back under the new key another command may have given them meanwhile: the state remembers the key each person's data was read under, andAppendArgsgainspersons({ person, fingerprint }) for this, which a store ignores. Snapshots and remembered rejections name the same and are written only while that key is still the person's; in PostgreSQL a GIN index on theirpersonsletsforgetfind them without reading every row.Patch Changes
create-bounda@0.3.0
No changes in this release.