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 +4 -4
- data/CHANGELOG.md +53 -0
- data/README.md +121 -522
- data/benchmark/state_size.rb +5 -0
- data/benchmark/support.rb +63 -0
- data/docs/adr/0006-at-least-once-delivery.md +1 -1
- data/docs/architecture.md +7 -6
- data/docs/authorization.md +4 -4
- data/docs/benchmarks.md +48 -3
- data/docs/correctness.md +2 -2
- data/docs/fit.md +24 -7
- data/docs/local-testing.md +3 -3
- data/docs/migrating-existing-state.md +1 -1
- data/docs/operations.md +32 -4
- data/docs/realtime.md +2 -2
- data/docs/reminders.md +6 -6
- data/docs/research/solid_queue.md +1 -1
- data/docs/roadmap.md +9 -1
- data/lib/solid_objects/configuration.rb +7 -0
- data/lib/solid_objects/executor.rb +37 -16
- data/lib/solid_objects/instrumentation.rb +33 -0
- data/lib/solid_objects/serialization.rb +18 -5
- data/lib/solid_objects/version.rb +1 -1
- data/sig/generated/lib/solid_objects/configuration.rbs +7 -3
- data/sig/generated/lib/solid_objects/executor.rbs +7 -4
- data/sig/generated/lib/solid_objects/instrumentation.rbs +11 -0
- data/sig/generated/lib/solid_objects/serialization.rbs +16 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0c919699e07e7e1bd517a9fe0fa748558262c0cfe8483bcb992f8b85f65cb857
|
|
4
|
+
data.tar.gz: 30a29702722638f5168664ecbb69f174564419f7308cc7596d71e9066baa2e76
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|