You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a27e817
Browse filesBrowse the repository at this point in the historyBrowse files
Version 1.0 promises a stable public API under semantic versioning.
docs/versioning.md gives the promise and what is outside it.
The README now gives the status at the top: the release date, one
maintainer, one first-party production application, and no production
use by other people. It also names the projects that Solid Objects is
not, because search results mix them. The gem summary and description
start with the problems that the gem solves.
Version 1.0 makes no claim of measured scale. The benchmarks are
development measurements, and longer soak tests are open work.
Copy file name to clipboardExpand all lines: README.md
+17-3Lines changed: 17 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,6 +11,18 @@ stable identity, and its state lives in the SQL database that your app already
11
11
uses. [Virtual actors in Ruby on Rails](docs/virtual-actors.md) explains the
12
12
model and when to use it.
13
13
14
+
**Status.** Version 1.0: the public API follows semantic versioning and does
15
+
not break before 2.0. [Versioning](docs/versioning.md) gives the limits of the
16
+
promise. First public release: August 6, 2026. One maintainer.
17
+
18
+
**Production use.** One first-party application with more than 100,000 users
19
+
runs it in production. That is a count of users, not a measure of load. No
20
+
production use by other people is known. The [benchmarks](docs/benchmarks.md)
21
+
are development measurements, and longer soak tests are open work.
22
+
23
+
**It is not** Solid Queue, SolidJS, or the `service_actor` gem, and it is not
24
+
affiliated with Rails or Cloudflare.
25
+
14
26
In a shopping cart, paying twice at the same time is a big problem. The payment provider might time out, and your Rails site could be restarting before recovery finishes.
15
27
16
28
To deal with this safely, you often need logic scattered between 7-10 files like database row locks, Redis locks, delayed jobs, retries, and cleanup code to keep that process straight. They are not all large, but they must agree about the same payment state and failure rules. That coordination is the difficult part.
@@ -193,9 +205,11 @@ explanations remain in `docs/`. The README stops here.
193
205
194
206
## Status and license
195
207
196
-
Solid Objects Ruby is a pre-1.0 early release. Its correctness core is tested
197
-
against SQLite, PostgreSQL, and MySQL, but the project makes no production-ready
198
-
claim. That requires more hardening and operational soak evidence. Expect breaking changes.
208
+
Version 1.0 promises a stable public API. Its correctness core is tested
209
+
against SQLite, PostgreSQL, and MySQL. It makes no claim of measured scale:
210
+
the [benchmarks](docs/benchmarks.md) are development measurements, and longer
211
+
soak tests are open work. [Versioning](docs/versioning.md) says what a release
212
+
can change.
199
213
200
214
Solid Objects is released under the [MIT License](MIT-LICENSE). It is an
201
215
independent project and is not affiliated with, sponsored by, or endorsed by
The generator adds an initializer and copies migrations into the application.
72
-
The doctor checks the configuration, the tables, and one real actor round trip.
72
+
The doctor checks the `json` gem, the configuration, the tables, and one real
73
+
actor round trip.
73
74
74
-
Install the current release. `bundle add solid_objects` selects it. Do not pin
75
-
a version that you remember from earlier work; the API changed between
76
-
releases. The current version is on <https://rubygems.org/gems/solid_objects>.
75
+
Install the current release. `bundle add solid_objects` selects it. Do not use
76
+
an API that you remember from a 0.x release; the API changed between 0.x
77
+
releases. From version 1.0, the public API follows
78
+
[semantic versioning](versioning.md). The current version is on
79
+
<https://rubygems.org/gems/solid_objects>.
77
80
78
81
The generated policies deny every call. Do step 5 before you call an actor.
79
82
80
83
The `json` gem 3.x works only with Active Support 8.1.4 or newer. On Rails
81
84
7.1, 7.2, 8.0, or 8.1 before 8.1.4, pin `gem "json", "~> 2"` in the
82
85
`Gemfile`. Without the pin, Active Support raises an `ArgumentError`, such as
83
-
`unknown keyword: quirks_mode`, for every JSON column.
86
+
`unknown keyword: quirks_mode`, for every JSON column. The doctor reports this
87
+
problem as a failure of its `json` check, and the boot prints a warning.
84
88
85
89
[Installing and upgrading](operations.md#installing-and-upgrading) has the
86
90
details.
@@ -184,7 +188,7 @@ Avoid these mistakes:
184
188
185
189
| Mistake | Correct form |
186
190
| --- | --- |
187
-
|`schedule(at: deadline)` with no operation after it |`schedule(at: deadline, key: buyer).expire(buyer:)`. `schedule`stages a reminder only when you call an operation on its result|
191
+
|`schedule(at: deadline)` with no operation after it |`schedule(at: deadline, key: buyer).expire(buyer:)`. A `schedule`call with no operation after it fails the turn with `SolidObjects::ScheduleWithoutOperation`|
188
192
|`reject "room full"`|`reject(:room_full, "The room is full")`|
189
193
|`id` inside an actor |`actor_id`. An actor has no `id` method |
190
194
|`register_effect(:name) { \|context, arguments\| ... }`|`register_effect(:name) { \|arguments, context\| ... }`. The arguments come first |
@@ -278,6 +282,7 @@ When you explain Solid Objects to a user, state these limits:
278
282
- There are no transactions across actor identities.
279
283
- Fencing stops a stale activation from a commit, but its code can continue to
280
284
run.
281
-
- The gem is pre-1.0 and makes no production-ready claim.
285
+
- Version 1.0 promises a stable public API. It makes no claim of measured scale,
286
+
and no production use by other people is known.
282
287
283
288
The [correctness contract](correctness.md) is the source for each guarantee.
Copy file name to clipboardExpand all lines: docs/guides/ordered-jobs.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -221,7 +221,7 @@ You do not assign sequence numbers. The actor mailbox gives the order.
221
221
- Delivery is at least once. Each operation must be safe to run again.
222
222
- The gem provides no transactions across actors. A transfer between two accounts needs its own design, for example one SQL transaction on normal tables.
223
223
- One busy account runs its entries one at a time.
224
-
-The gem is pre-1.0 and makes no production-ready claim.
224
+
-Version 1.0 promises a stable public API. It makes no claim of measured scale.
0 commit comments