|
2 | 2 |
|
3 | 3 | Pre-1.0 note: while `pg_durable` is in major version `0`, minor releases may include breaking changes. |
4 | 4 |
|
5 | | -## Unreleased |
| 5 | +## [0.2.2] - 2026-05-28 |
6 | 6 |
|
7 | | -- Fix: `df.signal()` now propagates the event to running sub-orchestrations spawned by `df.race` / `df.join` / `df.join3`, so `df.wait_for_signal` inside a parallel branch wakes as expected. Known limitation: signals raised before the target sub-orchestration is in the `Running` state are not yet redelivered when it starts; a proper fix requires unmatched-event forwarding in duroxide (#154). |
8 | | -- Fix: `df.start()`, RLS policies on `df.instances` / `df.nodes` / `df.vars`, and `df.vars` reads/writes no longer fail with `role "..." does not exist` when `current_user` requires quoting (mixed case, spaces, embedded quotes). All `current_user::regrole` casts are now wrapped with `quote_ident()` so the role lookup preserves the original identifier casing (#161, #162). Schema upgrade DDL is in `sql/pg_durable--0.2.1--0.2.2.sql`. |
| 7 | +### Breaking Changes |
9 | 8 |
|
10 | | -- Behavior change (bug fix): `df.join` / `df.join3` results are now a proper JSON array of objects instead of an array of double-encoded JSON strings. Consumers that previously unescaped each element (e.g. `(elem #>> '{}')::jsonb`) must now read the element directly (#143) |
| 9 | +- **Provider compatibility boundary:** `pg_durable` now uses the crates.io `duroxide-pg` provider instead of the `duroxide-pg-opt` submodule. This is the first open-source release in the `duroxide-pg` provider line. Upgrade testing treats `v0.2.2` as the compatibility start for this line; Azure's fork owns upgrade compatibility for the earlier `duroxide-pg-opt` line (#158). |
| 10 | +- **`df.join` / `df.join3` result shape:** join results are now a proper JSON array of objects instead of an array of double-encoded JSON strings. Consumers that previously unescaped each element, for example `(elem #>> '{}')::jsonb`, must now read the element directly (#143). |
| 11 | + |
| 12 | +### Added |
| 13 | + |
| 14 | +- **Typed SQL result decoding:** SQL node execution now preserves richer PostgreSQL column types in JSON results instead of treating all values as strings (#135). |
| 15 | +- **Composite capture support:** `|=>` captures are now honored on composite THEN / IF / LOOP nodes (#163). |
| 16 | + |
| 17 | +### Changed |
| 18 | + |
| 19 | +- **Dependencies:** switched from `duroxide-pg-opt` to crates.io `duroxide-pg = 0.1.34` and bumped `duroxide` to `0.1.29` (#158). |
| 20 | +- **License:** changed project licensing from MIT to PostgreSQL License (#187). |
| 21 | +- **Cancel status spelling:** status handling and documentation now consistently use `cancelled` (#145, #160). |
| 22 | +- **Signal payloads:** `df.signal(text)` now accepts non-JSON text payloads as its SQL signature implies (#173). |
| 23 | + |
| 24 | +### Fixed |
| 25 | + |
| 26 | +- **JOIN/RACE branch state:** variables, labels, and named results now propagate correctly through JOIN/RACE subtrees (#137, #138). |
| 27 | +- **Instance status transition:** instances are marked `running` before graph execution begins, so monitoring reflects active work promptly (#136). |
| 28 | +- **Loop throttling:** `df.loop()` enforces a minimum iteration delay to avoid busy-spin behavior (#141). |
| 29 | +- **Branch breaks:** `df.break()` is no longer silently ignored inside JOIN/RACE branches (#140). |
| 30 | +- **Signals in sub-orchestrations:** `df.signal()` now propagates events to running sub-orchestrations spawned by `df.race`, `df.join`, and `df.join3`, so `df.wait_for_signal` inside a parallel branch wakes as expected. Known limitation: signals raised before the target sub-orchestration is in the `Running` state are not yet redelivered when it starts; a proper fix requires unmatched-event forwarding in duroxide (#154). |
| 31 | +- **Quoted role names:** `df.start()`, RLS policies on `df.instances` / `df.nodes` / `df.vars`, and `df.vars` reads/writes no longer fail with `role "..." does not exist` when `current_user` requires quoting, such as mixed case, spaces, or embedded quotes. Schema upgrade DDL is in `sql/pg_durable--0.2.1--0.2.2.sql` (#161, #162). |
| 32 | + |
| 33 | +### Security |
| 34 | + |
| 35 | +- **Workflow composition hardening:** variable setup helpers are rejected inside workflow composition where they would mutate session state during graph construction (#153). |
| 36 | +- **Dependency update:** bumped `openssl` from `0.10.78` to `0.10.80` (#176). |
| 37 | + |
| 38 | +### Documentation |
| 39 | + |
| 40 | +- Clarified that `df.break(value)` takes a literal value, not SQL (#157). |
| 41 | +- Clarified text payload guidance for `df.signal(text)` (#174). |
11 | 42 |
|
12 | 43 | ## v0.2.1 (Released) |
13 | 44 |
|
|
0 commit comments