Repository navigation
docs: name Solid Objects a virtual actor library - #83
Conversation
An agent asked "does Ruby have a virtual actor library" answered no. The architecture guide already used that category, but the README, the gem metadata, and the website did not. A baseline of 80 agent runs found the project in 15 of 64 suitable runs. Name the category where people and agents look first: - The README opening and the gemspec summary and description call Solid Objects a SQL-backed virtual actor library for Ruby on Rails. - The gem homepage links to https://solidobjects.dev/ruby. The site root redirects to the Node page. - docs/virtual-actors.md answers the category question. It has the definition, an example, fit and poor-fit criteria, comparisons with checked sources, and an Orleans concept map. - docs/agents.md gives coding agents setup, authorization, effect idempotency, verification, and troubleshooting steps. - context7.json limits Context7 to the consumer documentation. Add examples/quickstart and `rake quickstart`. The check builds the gem, installs it into a new Rails app from vendor/cache, and proves by checksum and load path that the app loads the built gem. It then proves that eight concurrent holds give one winner, and that a due reminder waits while the runtime is stopped and runs after a restart. It fails when a TicketSale sample in the README or docs/ drifts from the actor that it runs. CI runs it, and the release job waits for it. Correct docs/operations.md: json 3.0.2 breaks only Active Support 8.1.3.1 and earlier. Active Support 8.1.4 decodes correctly.
|
The compatibility matrix runs bundle lock --update. On October 3 it still resolved json 2.21.2, because rubocop 1.88.2 and standard 1.56.0 held json below 3. rubocop 1.91.0 and standard 1.57.0 allow json 3, so the matrix now resolves json 3.0.2, and every Rails 7.1, 7.2, and 8.0 job fails with "unknown keyword: quirks_mode". main fails the same way today. The break is in Active Support, not in Solid Objects. Local checks with json 3.0.2 show that Active Support 7.1.6 and 8.0.5.1 fail to encode and decode, 8.1.3.1 fails to decode, and only 8.1.4 works. An application on those Rails lines must pin json 2.x, so the matrix now pins it too and tests the configuration that the guide prescribes. The Rails 7.1 suite passes with the pin: 873 runs, 0 failures. Correct the json note in docs/operations.md, docs/agents.md, the quickstart README, and context7.json. The earlier note named only the 8.1 releases before 8.1.4.
Review feedback on #83. The recipe promises that four policies stay denied, but the smoke check verified only three. Add authorize_transmission to DENIED_POLICIES. With the generator template changed to grant transmissions, rake quickstart now fails with "authorize_transmission stays denied"; with the real template it passes. Remove two guards that cannot fire: __dir__ is never nil when Ruby loads the file, and initialize sets @root before call runs. Name the Integer values that the two proof methods return instead of untyped.
|
@greptileai Please review the latest commit 9f11cdf. It answers all three findings: DENIED_POLICIES now includes authorize_transmission (rake quickstart fails with "authorize_transmission stays denied" when the template grants it), the two guards that cannot fire are gone, and both proof methods return Hash[Symbol, Integer]. The branch also adds 7d2202f, which pins json 2.x for the Rails 7.1, 7.2, and 8.0 compatibility jobs and documents the json 3 requirement, and 143297c, which prepares 0.17.1. |
Why
An agent asked "does Ruby have a virtual actor library" answered no. The architecture guide already called Solid Objects a database-backed virtual actor runtime, but the README, the gem metadata, and the website did not use the category. A frozen baseline of 80 agent runs (two environments, 20 prompts, two runs each) found the project in 15 of 64 suitable runs before this change.
What changes
https://solidobjects.dev/ruby. The old value, the site root, redirects to the Node page.docs/virtual-actors.mdis the category guide. It gives the short answer, the definition, an example, fit and poor-fit criteria, comparisons with sources checked on October 7, 2026, and an Orleans concept map.docs/agents.mdis a consumer guide for coding agents. It covers fit, package identity, installation, authorization, the runtime process, effect idempotency, verification, and troubleshooting.examples/quickstart/andrake quickstartprove the published recipe against the built gem in a new Rails app. A newquickstartCI job runs it, and the release job now waits for it.context7.jsonlimits Context7 indexing to the consumer documentation.docs/operations.mdcorrects thejson3.0.2 note. Only Active Support 8.1.3.1 and earlier fail; Active Support 8.1.4 decodes correctly.AGENTS.mdadds the release step that refreshes the site snapshot and the Context7 index.Effects
quickstartjob, which needs rubygems.org access.How the quickstart proves the artifact
rake quickstartbuilds the gem, runsrails new --minimal --skip-bundlewith SQLite, copies the built.gemintovendor/cache, and runsbundle install --local. It confirms that the Gemfile has nopath:, that theGemfile.lockchecksum equals the built gem's SHA-256, and that the loadedsolid_objects/version.rbis inside the temporary bundle path. It runs the generator, the migrations, and the doctor. Eightbin/rails runnerprocesses hold the same event whilesolid_objects startruns, and exactly one hold commits. A due reminder waits while the runtime is stopped and releases the hold once after the restart. The check fails when aTicketSalesample in the README ordocs/differs from the actor that it runs.Observed failures before the fixes
test/unit/gem_specification_test.rb:Expected /virtual actors?/i to match "Cloudflare Durable Objects, ported to Rails".andexpected "https://solidobjects.dev/ruby", actual"https://solidobjects.dev". The packaging test failed withto include "docs/agents.md"when the guide was moved aside.rake quickstartbefore the recipe existed:quickstart proof failed: examples/quickstart/README.md exists (QuickstartSmoke::Failure). Each key assertion was also shown to fail when its condition breaks: installing the published gem instead of the built one, skipping the restart, and leaving the runtime running.Validation
bundle exec rake: 873 runs, 3310 assertions, 0 failures, 0 errors, 28 skips (PostgreSQL and MySQL suites without a database URL). Standard, RuboCop, RBS, Steep, and Brakeman are clean.bundle exec rake quickstart: passed on Ruby 4.0.5 and Ruby 3.3.9 (local runs, not hosted CI).bundle exec rake build: the built gem containsdocs/agents.mdanddocs/virtual-actors.md, and its metadata homepage ishttps://solidobjects.dev/ruby.git diff --check: clean.Roadmap: no change. This changes documentation positioning and adds an onboarding proof. It does not change a runtime capability.
Release and CI fix
chore: prepare version 0.17.1moves the changelog into a dated 0.17.1 section.ci: pin json 2 for Rails before 8.1: the compatibility matrix now resolves json 3.0.2, because rubocop 1.91.0 and standard 1.57.0 no longer hold json below 3. With json 3.0.2, Active Support 7.1.6 and 8.0.5.1 fail to encode and decode (unknown keyword: quirks_mode), and only Active Support 8.1.4 works.mainfails the same way today. The matrix now pins json 2.x for Rails 7.1, 7.2, and 8.0, the configuration that the guide now prescribes. The Rails 7.1 suite passes locally with the pin: 873 runs, 0 failures.