Repository navigation
Add Restate, DBOS, RivetKit, Graphile comparisons - #78
Conversation
An evaluation on 2026-10-15 found that Claude Code, with web search, searched only for libraries it already knew (Restate, DBOS, RivetKit, Graphile Worker) and never found Solid Objects. Each new page targets those searches, compares one real task, and says when the other system is the better choice. The Solid Objects code on each page lives in examples/compare/ and runs in the test suite. The documentation check now requires each page to embed its current examples, link only to files and headings that exist, and use no em or en dash.
|
Docs7 for cardmagic/solid-objects-js
Commit |
[Low impact] The PR appears safe to merge; all four previous findings are addressed. SummaryAdds comparisons with Restate, DBOS, RivetKit, and Graphile Worker, backed by three runnable examples.
Diagram%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Checkout] --> B[Paying]
B --> C{Charge result}
C -->|Paid| D[Paid]
C -->|Declined| E[Open]
C -->|Attempts exhausted| F[Checking]
F --> G[Look up original charge key]
G -->|Paid| D
G -->|Not found| E
G -->|Attempts exhausted| H[Dead letter available for retry]
Reviews (2) · Last reviewed commit: "fix: close gaps found in comparison revi..." · Reviewed by Greptile |
Greptile found four defects in the examples: - A caller with no credentials could join and post with a null ID. - A cart reopened after every payment response was lost, so a second checkout could charge again with a new key. It now checks the charge with the same key before it reopens. - A reminder queued behind newer activity could archive a room or release a cart. Each reminder now carries an activity count. - A pinned message lost its text after 200 newer posts. The accuracy review also corrected source claims on the pages, such as DBOS datasource transactions, Rivet Cloud and Workflows, and the commercial add-ons of each project.
|
@greptileai Please review the current head 7489a71. Finding 1: |
Why
An evaluation on 2026-10-15 ran Claude Code (Opus 5.5, high effort) on six use cases that fit Solid Objects. With web search on, it searched 30 times. Each search named a library that it already knew, for example "Restate virtual objects TypeScript SDK delayed calls state", "RivetKit actors PostgreSQL driver self-host Node.js", "DBOS TypeScript partitioned queue send recv ordering durable sleep", and "Graphile Worker queue_name serial execution job_key run_at". No result showed Solid Objects.
These pages target those searches. Each page compares one real task, says when the other system is the better choice, and links the primary sources (checked 2026-10-15).
Changes
docs/compare/restate.md,dbos.md,rivetkit.md,graphile-worker.md.examples/compare/: anAgentSessionactor (model call as an effect, follow-up reminder), aShoppingCartactor (payment effect, 30-minute idle release), and aChatRoomactor (ordered posts, unread counts, archive reminder).test/compare-*.test.ts: 21 tests for the three examples.tsconfig.jsonandtsconfig.examples.jsontreattest/compare-*.test.tslike the guide tests.scripts/check-documentation.mjschecksdocs/compare/: embedded examples, links and headings, no em or en dash, and a link fromdocs/comparisons.mdto each page.docs/comparisons.mdand the README link the pages.chore: prepare version 1.0.2. No API change. The site shows guides only from release tags.Measured before release
A new eval condition put the new README and the first version of these pages (before the review fixes) beside the published README in the trial folder. The prompt was the same as the docs condition. All 30 trials opened a comparison page.
Solid Objects was the top library in 8 of 15 Node answers, up from 5. It was the first choice once (AI sessions). The intervals overlap a little, so the change can be chance at 5 trials per case. Maturity is still the main reason against it.
Validation
pnpm run checkpnpm test: 80 files, 699 passed, 32 skipped (database jobs, as onmain)pnpm run format:checkpnpm run pack:checkEach new test failed before its example existed. Removing the newest-turn guard in
AgentSessionmakes "keeps only the reply for the newest turn" fail.Accuracy review
A separate review checked every claim against the current Restate, DBOS, Rivet, and Graphile Worker docs and this repository. The pages carry its corrections, for example: DBOS datasource transactions run once, Rivet Cloud and Rivet Workflows exist, Graphile Worker can unlock jobs early with
forceUnlockWorkers, the commercial add-ons of each project (including Solid Objects Pro), and the full production sentence.Greptile fixes
Greptile found four defects in the examples. Each fix has a test that failed first:
nullmember ID.check_payment) before it opens again. A declined card is a result, not a failure.