diff --git a/.changeset/native-close-on-back-default.md b/.changeset/native-close-on-back-default.md
deleted file mode 100644
index 2ccedb2..0000000
--- a/.changeset/native-close-on-back-default.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@dunky.dev/native-dialog': minor
----
-
-Hardware Back now dismisses the dialog by default: `closeOnBack` defaults to `true` on the native substrate (the core default stays `false`).
-
-Back is Android's dismiss gesture for transient surfaces — native `Dialog`s are `cancelable` by default — and it plays the same role Escape does on the web, where `closeOnEscape` already defaults to `true`. Requiring an opt-in inverted that platform expectation. Opt out per dialog with `closeOnBack={false}`; the `onBackNavigation` veto is unchanged.
diff --git a/.changeset/native-substrate.md b/.changeset/native-substrate.md
deleted file mode 100644
index 042f910..0000000
--- a/.changeset/native-substrate.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-'@dunky.dev/native-dialog': minor
-'@dunky.dev/dialog': minor
-'@dunky.dev/react-dialog': patch
----
-
-Add `@dunky.dev/native-dialog` — the React Native binding for the dialog, the
-first package of the native substrate. Same compound API as the React
-binding; the parts translate the core's logical bindings into React Native
-props (`onPress`, `accessibilityState`, `accessibilityViewIsModal`), the
-Portal renders the host's `Modal`, and the hardware Back press reports
-through the core `closeOnBack` contract.
-
-```tsx
-import { Dialog } from '@dunky.dev/native-dialog'
-;
-```
-
-`@dunky.dev/dialog` now exports `dialogEffects` — the substrate-free effect
-list (the controlled-open echo) every binding consumes instead of
-re-implementing, so the controlled contract can't fork between substrates. A
-substrate composes its host-specific effects around it (the React binding
-adds its DOM Escape listener); the echo itself is written once, in core.
diff --git a/.changeset/state-machine-0-3-2.md b/.changeset/state-machine-0-3-2.md
deleted file mode 100644
index acb0536..0000000
--- a/.changeset/state-machine-0-3-2.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-'@dunky.dev/dialog': patch
-'@dunky.dev/react-dialog': patch
-'@dunky.dev/native-dialog': patch
----
-
-Update the state-machine runtime packages to 0.3.2.
-
-For `@dunky.dev/native-dialog` this fixes a native crash on Android: the runtime's `normalize` used to emit the machine's `role: 'dialog'` as the legacy `accessibilityRole` prop, which Android rejects at mount (`Invalid accessibility role value: dialog`). It now emits React Native's web-aligned `role` prop, which also restores the intended semantics on iOS (VoiceOver previously got no dialog traits at all). `hidden` now lands on `aria-hidden` instead of being silently ignored.
diff --git a/packages/core/dialog/CHANGELOG.md b/packages/core/dialog/CHANGELOG.md
index 980e09b..28044cc 100644
--- a/packages/core/dialog/CHANGELOG.md
+++ b/packages/core/dialog/CHANGELOG.md
@@ -1,5 +1,48 @@
# @dunky.dev/dialog
+## 0.3.0
+
+### Minor Changes
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`21cc0b8`](https://github.com/dunky-dev/ui/commit/21cc0b82d858789ea0e6a90a7e8d65f4a773d669) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Add `@dunky.dev/native-dialog` — the React Native binding for the dialog, the
+ first package of the native substrate. Same compound API as the React
+ binding; the parts translate the core's logical bindings into React Native
+ props (`onPress`, `accessibilityState`, `accessibilityViewIsModal`), the
+ Portal renders the host's `Modal`, and the hardware Back press reports
+ through the core `closeOnBack` contract.
+
+ ```tsx
+ import { Dialog } from '@dunky.dev/native-dialog'
+ ;
+ ```
+
+ `@dunky.dev/dialog` now exports `dialogEffects` — the substrate-free effect
+ list (the controlled-open echo) every binding consumes instead of
+ re-implementing, so the controlled contract can't fork between substrates. A
+ substrate composes its host-specific effects around it (the React binding
+ adds its DOM Escape listener); the echo itself is written once, in core.
+
+### Patch Changes
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`b02dc81`](https://github.com/dunky-dev/ui/commit/b02dc81c524e19dd660bf342ed9583ee91e6b6ee) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine runtime packages to 0.3.2.
+
+ For `@dunky.dev/native-dialog` this fixes a native crash on Android: the runtime's `normalize` used to emit the machine's `role: 'dialog'` as the legacy `accessibilityRole` prop, which Android rejects at mount (`Invalid accessibility role value: dialog`). It now emits React Native's web-aligned `role` prop, which also restores the intended semantics on iOS (VoiceOver previously got no dialog traits at all). `hidden` now lands on `aria-hidden` instead of being silently ignored.
+
## 0.2.1
### Patch Changes
diff --git a/packages/core/dialog/package.json b/packages/core/dialog/package.json
index e2fdd49..0df5913 100644
--- a/packages/core/dialog/package.json
+++ b/packages/core/dialog/package.json
@@ -1,6 +1,6 @@
{
"name": "@dunky.dev/dialog",
- "version": "0.2.1",
+ "version": "0.3.0",
"description": "Framework-agnostic dialog interaction, modeled as a state machine.",
"license": "MIT",
"repository": {
diff --git a/packages/native/dialog/CHANGELOG.md b/packages/native/dialog/CHANGELOG.md
new file mode 100644
index 0000000..4cb9e4a
--- /dev/null
+++ b/packages/native/dialog/CHANGELOG.md
@@ -0,0 +1,51 @@
+# @dunky.dev/native-dialog
+
+## 0.1.0
+
+### Minor Changes
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`8c0dde3`](https://github.com/dunky-dev/ui/commit/8c0dde3249d867de7fd556ba02f2bef26687f869) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Hardware Back now dismisses the dialog by default: `closeOnBack` defaults to `true` on the native substrate (the core default stays `false`).
+
+ Back is Android's dismiss gesture for transient surfaces — native `Dialog`s are `cancelable` by default — and it plays the same role Escape does on the web, where `closeOnEscape` already defaults to `true`. Requiring an opt-in inverted that platform expectation. Opt out per dialog with `closeOnBack={false}`; the `onBackNavigation` veto is unchanged.
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`21cc0b8`](https://github.com/dunky-dev/ui/commit/21cc0b82d858789ea0e6a90a7e8d65f4a773d669) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Add `@dunky.dev/native-dialog` — the React Native binding for the dialog, the
+ first package of the native substrate. Same compound API as the React
+ binding; the parts translate the core's logical bindings into React Native
+ props (`onPress`, `accessibilityState`, `accessibilityViewIsModal`), the
+ Portal renders the host's `Modal`, and the hardware Back press reports
+ through the core `closeOnBack` contract.
+
+ ```tsx
+ import { Dialog } from '@dunky.dev/native-dialog'
+ ;
+ ```
+
+ `@dunky.dev/dialog` now exports `dialogEffects` — the substrate-free effect
+ list (the controlled-open echo) every binding consumes instead of
+ re-implementing, so the controlled contract can't fork between substrates. A
+ substrate composes its host-specific effects around it (the React binding
+ adds its DOM Escape listener); the echo itself is written once, in core.
+
+### Patch Changes
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`b02dc81`](https://github.com/dunky-dev/ui/commit/b02dc81c524e19dd660bf342ed9583ee91e6b6ee) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine runtime packages to 0.3.2.
+
+ For `@dunky.dev/native-dialog` this fixes a native crash on Android: the runtime's `normalize` used to emit the machine's `role: 'dialog'` as the legacy `accessibilityRole` prop, which Android rejects at mount (`Invalid accessibility role value: dialog`). It now emits React Native's web-aligned `role` prop, which also restores the intended semantics on iOS (VoiceOver previously got no dialog traits at all). `hidden` now lands on `aria-hidden` instead of being silently ignored.
+
+- Updated dependencies [[`21cc0b8`](https://github.com/dunky-dev/ui/commit/21cc0b82d858789ea0e6a90a7e8d65f4a773d669), [`b02dc81`](https://github.com/dunky-dev/ui/commit/b02dc81c524e19dd660bf342ed9583ee91e6b6ee)]:
+ - @dunky.dev/dialog@0.3.0
diff --git a/packages/native/dialog/package.json b/packages/native/dialog/package.json
index 6b5e3ad..f47069c 100644
--- a/packages/native/dialog/package.json
+++ b/packages/native/dialog/package.json
@@ -1,6 +1,6 @@
{
"name": "@dunky.dev/native-dialog",
- "version": "0.0.0",
+ "version": "0.1.0",
"description": "React Native binding for @dunky.dev/dialog.",
"license": "MIT",
"repository": {
diff --git a/packages/react/dialog/CHANGELOG.md b/packages/react/dialog/CHANGELOG.md
index 6749270..d78ac99 100644
--- a/packages/react/dialog/CHANGELOG.md
+++ b/packages/react/dialog/CHANGELOG.md
@@ -1,5 +1,49 @@
# @dunky.dev/react-dialog
+## 0.2.2
+
+### Patch Changes
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`21cc0b8`](https://github.com/dunky-dev/ui/commit/21cc0b82d858789ea0e6a90a7e8d65f4a773d669) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Add `@dunky.dev/native-dialog` — the React Native binding for the dialog, the
+ first package of the native substrate. Same compound API as the React
+ binding; the parts translate the core's logical bindings into React Native
+ props (`onPress`, `accessibilityState`, `accessibilityViewIsModal`), the
+ Portal renders the host's `Modal`, and the hardware Back press reports
+ through the core `closeOnBack` contract.
+
+ ```tsx
+ import { Dialog } from '@dunky.dev/native-dialog'
+ ;
+ ```
+
+ `@dunky.dev/dialog` now exports `dialogEffects` — the substrate-free effect
+ list (the controlled-open echo) every binding consumes instead of
+ re-implementing, so the controlled contract can't fork between substrates. A
+ substrate composes its host-specific effects around it (the React binding
+ adds its DOM Escape listener); the echo itself is written once, in core.
+
+- [#33](https://github.com/dunky-dev/ui/pull/33) [`b02dc81`](https://github.com/dunky-dev/ui/commit/b02dc81c524e19dd660bf342ed9583ee91e6b6ee) Thanks [@ivanbanov](https://github.com/ivanbanov)! - Update the state-machine runtime packages to 0.3.2.
+
+ For `@dunky.dev/native-dialog` this fixes a native crash on Android: the runtime's `normalize` used to emit the machine's `role: 'dialog'` as the legacy `accessibilityRole` prop, which Android rejects at mount (`Invalid accessibility role value: dialog`). It now emits React Native's web-aligned `role` prop, which also restores the intended semantics on iOS (VoiceOver previously got no dialog traits at all). `hidden` now lands on `aria-hidden` instead of being silently ignored.
+
+- Updated dependencies [[`21cc0b8`](https://github.com/dunky-dev/ui/commit/21cc0b82d858789ea0e6a90a7e8d65f4a773d669), [`b02dc81`](https://github.com/dunky-dev/ui/commit/b02dc81c524e19dd660bf342ed9583ee91e6b6ee)]:
+ - @dunky.dev/dialog@0.3.0
+
## 0.2.1
### Patch Changes
diff --git a/packages/react/dialog/package.json b/packages/react/dialog/package.json
index 2e34be6..2febb6d 100644
--- a/packages/react/dialog/package.json
+++ b/packages/react/dialog/package.json
@@ -1,6 +1,6 @@
{
"name": "@dunky.dev/react-dialog",
- "version": "0.2.1",
+ "version": "0.2.2",
"description": "React binding for @dunky.dev/dialog.",
"license": "MIT",
"repository": {