diff --git a/docs/design/sdk-api.md b/docs/design/sdk-api.md index 2cceeeb..02741c4 100644 --- a/docs/design/sdk-api.md +++ b/docs/design/sdk-api.md @@ -564,6 +564,15 @@ public sealed interface BehaviorChain> // interchangeable, since rift 0.17.0 honours only the block one. When both are present both are // kept; `Behaviors.effectiveRepeat()` reports which applies. The DSL's `repeat(int)` emits the // block spelling. +// From rift 0.24.0 the write follows what that engine admits: a `_behaviors` object beside a +// response-level `repeat` is ignored (rift#1709), so the block is then written as the array; an +// array element may not hold `repeat` (rift#1582, rift#1672), so in the array form the effective +// `repeat` is written beside the response and any other is dropped; and an element may not hold a +// list of `copy`/`lookup` (rift#1639), so a list is written one item per element and read back the +// same way. This trades rift 0.17.0's block-only `repeat` for an imposter the pinned engine accepts. +// The read follows the same rule (rift#1709, Mountebank's upcast): a `behaviors` key (even `null`) +// or a response-level `repeat` voids a `_behaviors` object beside it, so the voided block is not +// read and a read + write never starts running it. The legacy `extra`-map constructors keep both. IsSpec templated() // rename of template(); _rift.templated // declarative flow-state writes after the response (_rift.stateOps, rift >= 0.18.0; #227). Run in // chain order after templating and behaviors; engine-version gated at create/replaceAll. diff --git a/pom.xml b/pom.xml index 089485d..57e1916 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 17 - 0.23.0 + 0.24.0