solid_objects 0.14.2 → 0.14.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68d50b21673b5b8339754b9a0003500ac57c253877f04b26d4677d2adc260c1d
4
- data.tar.gz: 16dda2e055602604f8b8158558fba9a41790a32ec5235ee04ae450ee02217c14
3
+ metadata.gz: 0c919699e07e7e1bd517a9fe0fa748558262c0cfe8483bcb992f8b85f65cb857
4
+ data.tar.gz: 30a29702722638f5168664ecbb69f174564419f7308cc7596d71e9066baa2e76
5
5
  SHA512:
6
- metadata.gz: 774ce46b5448030d6b51d449e7ab18f9c2e68d42a1ce47496b8bc5223bb5588ac7350d1f2c47894dac1ea3d3b9c19b2d8b87c7eb7832aba28c3e5a71dcb436fd
7
- data.tar.gz: 5ec7bcc03c1a9875962642b8fc80d912472c9f1a10e088685f276542959e86f6057670f20d9085e2e554f0a8a06763b7c75f1ad7937b7280ea532c862ec3f50d
6
+ metadata.gz: b8eee4e1bd40b39d67c3a74b2860a0f874336285d7291dcc740b578f8b4a8fedd3d1323e716c47df71f3615faef832519cbd3541f505f9e0c00b413f01a9e9e5
7
+ data.tar.gz: 2b808b25de0a30d05da80b24451f1c12139c3be6bf90f4fb760f754d42b775e22cb60339e75ec8c750f341f89e6f50cbb05f809d6cea936070183a0b2cb8a3e8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.14.3 - 2026-08-29
4
+
5
+ - Cut one of the three full state copies a committed turn made. The executor
6
+ built the after image twice, once to answer whether the state changed and
7
+ once for the committed row, and a synchronous query built a third for the
8
+ mutation guard. One image now answers all three. Measured on SQLite,
9
+ committed throughput rises 4.8% at 13 KB of state, 3.1% at 116 KB, and 10.2%
10
+ at 1 MB. `benchmark/state_size.rb` is the scenario and `docs/benchmarks.md`
11
+ holds the numbers. The guard now compares the image taken after the
12
+ observables are read, so a query whose observable mutates state also fails
13
+ with `InvalidActor`.
14
+ - Stop building an encoded string that `Serialization.dump` discarded. The
15
+ method encoded every value to measure it, while most call sites pass no
16
+ `max_bytes`. It now encodes only when a limit applies. That encoding was also
17
+ the only check that a string held valid bytes, so `normalize` now checks the
18
+ encoding of every string and key it visits. A value it rejects raises
19
+ `InvalidPayload` at the call that staged it, as before, rather than a
20
+ `JSON::GeneratorError` from inside the commit transaction.
21
+ - Add `warn_state_bytes`, a soft threshold that defaults to 64 KB and must not
22
+ exceed `max_state_bytes`. A commit above it reports
23
+ `solid_objects.state.large` with the actor identity, the `byte_count`, and
24
+ the threshold. The event carries no application state, and it reports after
25
+ the commit. `max_state_bytes` keeps its 5 MB default, which measurement shows
26
+ is a limit rather than an operating point. The setting, the event, and its
27
+ payload match `warnStateBytes` in solid-objects-js, which defaults to 128 KB,
28
+ because the Node curve falls later than this one.
29
+ - Report a committed turn without letting a subscriber fail it. Every event
30
+ the executor emitted after its commit ran outside a rescue, so a subscriber
31
+ that raised turned a committed turn into a failed one: the runtime skipped
32
+ `message.completed`, tried to fail a message whose claim it had already
33
+ destroyed, and lost the worker pass. Those reports now go through
34
+ `instrument_after_commit`, which reports a raising subscriber as
35
+ `solid_objects.instrumentation.failed` and continues. This matches the
36
+ isolation `solid-objects-js` already applied to every event it emits.
37
+
38
+ - Align the use-case claims with solid-objects-js. "Is it worth installing
39
+ here?" listed long-lived workflows without a limit, while `docs/fit.md`
40
+ called a rate limiter an anti-pattern and the JS README sold per-key rate
41
+ limits. Both projects now say the same thing: a low-rate quota that a
42
+ reminder refills fits, because each check is one durable ordered message; a
43
+ limiter that every request touches does not; and a workflow fits when one
44
+ entity owns the mutable state and its mailbox holds the step order. A durable
45
+ execution engine that replays named steps from a step log remains a different
46
+ tool.
47
+ - Name Solid Objects Pro in `docs/fit.md` for the high-QPS cases the guide
48
+ rejects, and map its three capabilities onto them: grouped operations,
49
+ ephemeral operations, and reactive projections. The README already pointed
50
+ there; the fit guide stopped at "anti-pattern".
51
+ - Title the README "Solid Objects Ruby", matching "Solid Objects JS" in the
52
+ Node package, and give both the same two badges. The CI badge now pins
53
+ `?branch=main`, and a RubyGems version badge sits beside it. The gem name,
54
+ the module, and the published metadata do not change.
55
+
3
56
  ## 0.14.2 - 2026-08-25
4
57
 
5
58
  - Rewrite the first screen around the objection a reader actually has. The