Skip to content

docs: name Solid Objects a virtual actor library - #63

Merged
cardmagic merged 4 commits into
mainfrom
docs/agent-discoverability
Oct 8, 2026
Merged

cardmagic merged 4 commits into
mainfrom
docs/agent-discoverability

Conversation

@cardmagic

@cardmagic cardmagic commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

Why

A frozen baseline of 80 agent runs found the Node package in 3 of 32 TypeScript and Node runs. The README and the npm metadata did not use the category words that people and agents search for.

What changes

  • The README opening and the npm description name the category: a SQL-backed virtual actor library for TypeScript and Node.js.
  • package.json adds the virtual-actors and actor-model keywords, keeps the existing ones, and sets homepage to https://solidobjects.dev/js.
  • docs/virtual-actors.md is the category guide. It gives the short answer, the definition, a runnable example, fit and poor-fit criteria, comparisons, an Orleans concept map, and separate compatibility statements for the Node runtime, the browser client, the browser runtime, and the Cloudflare backend.
  • docs/agents.md is a consumer guide for coding agents. It covers fit, package identity, installation, authorization, background roles, effect idempotency, verification, and troubleshooting.
  • docs/comparisons.md adds Dapr actors, Temporal, a comparison vocabulary, and primary references checked on October 7, 2026.
  • examples/ticket-sale.ts is the guide's example. pnpm run test:package runs it against the packed tarball and asserts that exactly one of two concurrent holds wins.
  • scripts/check-documentation.mjs fails when the guide no longer embeds the example, and it now reads every docs/*.md file instead of a fixed list. That change also brings effect-recovery.md and observability.md under the link check.
  • docs/parity.md records the clean-install artifact proof, which Ruby now matches with rake quickstart.
  • docs/releasing.md adds the step that reviews the guides before a tag and refreshes the site snapshot after it.
  • context7.json limits Context7 indexing to the consumer documentation.

Effects

  • API: none. Runtime code does not change.
  • Correctness and security: none. The guides keep deny-by-default authorization and state at-least-once delivery, no cross-actor transactions, and pre-1.0 status.
  • Compatibility: the npm metadata changes on the next release.

Observed failures before the fixes

  • test/package-metadata.test.ts: three failures, for the description (expected 'Race-free realtime state per applicat…' to match /SQL-backed virtual actor library for …/), the keywords, and the homepage (expected undefined to be 'https://solidobjects.dev/js').
  • pnpm run test:package: AssertionError [ERR_ASSERTION]: package is missing docs/agents.md.
  • scripts/check-documentation.mjs: it failed with docs/virtual-actors.md does not embed the current examples/ticket-sale.ts after a one-character change to the example, and with links to missing nothing-here.md for a planted broken link.

Validation

  • pnpm run format:check, pnpm run check: passed.
  • pnpm test: 66 files, 588 passed, 32 skipped (database-server suites without a URL).
  • pnpm run pack:check, pnpm run test:package: passed. The tarball contains docs/agents.md, docs/virtual-actors.md, and examples/ticket-sale.ts.
  • git diff --check: clean.

Release and audit fix

  • chore: prepare version 0.17.1 moves the changelog into a dated 0.17.1 section and updates docs/parity.md to reference Ruby 0.17.1.
  • fix: patch the sharp and source-map-js advisories: pnpm audit --audit-level=high failed on two advisories published after October 3. Both come only from development tooling. The overrides follow the Undici pattern in 48aec85. pnpm audit reports no known vulnerabilities; pnpm test (588 passed) and pnpm run test:cloudflare (60 passed) pass.

A baseline of 80 agent runs found the Node package in 3 of 32
TypeScript and Node runs. The README and the npm metadata never used
the category words that people and agents search for.

Name the category where people and agents look first:

- The README opening and the npm description call Solid Objects a
  SQL-backed virtual actor library for TypeScript and Node.js. The
  package adds the virtual-actors and actor-model keywords and points
  its homepage at https://solidobjects.dev/js.
- docs/virtual-actors.md answers the category question. It has the
  definition, a runnable example, fit and poor-fit criteria,
  comparisons, an Orleans concept map, and separate compatibility
  statements for the Node runtime, the browser client, the browser
  runtime, and the Cloudflare backend.
- docs/agents.md gives coding agents setup, authorization, effect
  idempotency, verification, and troubleshooting steps.
- docs/comparisons.md adds Dapr actors, Temporal, and a comparison
  vocabulary, with sources checked on October 7, 2026.
- context7.json limits Context7 to the consumer documentation.

Keep the published example honest. examples/ticket-sale.ts is the
guide's example, and test:package runs it against the packed tarball.
The documentation check fails when the guide no longer embeds it, and
it now reads every docs/*.md file instead of a fixed list.
@greptile-apps

greptile-apps Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

[Low risk] Documentation and metadata updates for version 0.17.1.

The PR appears safe to merge; all three previous findings are fixed and no new actionable issues remain.

What we checked:

  • Earlier holds consume the test ticket: The two runs use different database files, so the new check starts with its own ticket.

Summary

The PR names Solid Objects as a SQL-backed virtual actor library and adds consumer guides, a packaged example, and documentation checks.

  • The latest commit fixes all three previous findings.
  • The branch prepares 0.17.1 and updates development dependency overrides.
  • No new actionable issues were found.

Reviews (2) · Last reviewed commit: "fix: check ticket holds with Object.hasO..." · Reviewed by Greptile

Comment thread examples/ticket-sale.ts Outdated
Comment thread docs/agents.md Outdated
Comment thread docs/agents.md Outdated
pnpm audit --audit-level=high now fails on main. Two high advisories
appeared after the last green run on October 3: a librsvg issue in
sharp below 0.35.5 and an event-loop denial of service in
source-map-js below 1.2.2. Both reach this repository only through
development tooling: sharp through Miniflare, and source-map-js
through Vite, PostCSS, and magicast. The published package depends on
neither.

Override both with the patched releases, the same pattern as the
Undici patch in 48aec85. source-map-js 1.2.2 is younger than the
minimum release age, so it joins the exclusion list. pnpm audit
reports no known vulnerabilities, and pnpm test and test:cloudflare
pass.
Review feedback on #63. The ticket sale examples tested holds with
`buyer in this.holds`. The `in` operator also matches names that
Object.prototype supplies, so a buyer named "constructor" could not
hold the free ticket, and expire could add a ticket that no hold had
taken. Before the fix, `node examples/ticket-sale.ts hold constructor`
printed [{"held":false,"available":1}]. It now prints
[{"held":true,"available":0}]. Use Object.hasOwn in the example, both
guides, and the README.

The example now takes buyer names after `hold`, with ada and grace as
the default, and test:package holds a ticket for "constructor"
against the packed tarball.

Two fixes in docs/agents.md:

- The production policy read userId from an unchecked cast, so a null
  authorization context threw a TypeError instead of a denial. It now
  narrows the context and returns false for any malformed value.
- runDueReminders requires { now }. The verification step now passes
  a Date and drains the actor role, as the test helper requires.

Both snippets type-check against the package.
@cardmagic

Copy link
Copy Markdown
Owner Author

@greptileai Please review the latest commit 9214427. It answers all three findings: the example, both guides, and the README use Object.hasOwn, and test:package now holds a ticket for a buyer named constructor; the production policy narrows authorizationContext and returns false for null or malformed values; and the verification step calls runDueReminders({ now }) and then drain({ roles: ["actors"] }). The branch also adds f453d3b, which overrides the sharp and source-map-js advisories, and 018b43a, which prepares 0.17.1.

@cardmagic
cardmagic merged commit 3f409da into main Oct 8, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant