Repository navigation
Prepare version 1.0.0 - #74
Conversation
A turn that called schedule() and then called no operation on the result stored no reminder and gave no error. The hold or the timeout that the author intended did not exist, and nothing reported it. Three fresh agent sessions found this mistake in a published sample. The turn now fails with ScheduleWithoutOperation. The error is not retryable, because a retry cannot change the actor code. The turn can keep the result and call the operation later in the same turn. The Cloudflare backend uses the same turn code and has the same rule. The parity ledger records the rule, and it records the Ruby json gem check as not applicable to Node.js. BREAKING CHANGE: a turn with a schedule call that has no operation after it becomes a dead letter. Correct code does not change.
Version 1.0 promises a stable public API under semantic versioning. docs/versioning.md gives the promise and what is outside it. The Cloudflare backend stays experimental and is outside the promise. 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 package description starts with the problems that the package solves. "No daemon" was not accurate: reminders, effects, and queued messages run only while a process calls runtime.run(signal). The text now says that no separate actor service is necessary and names that process.
|
Docs7 for cardmagic/solid-objects-js
Commit |
|
The check for a schedule call with no operation ran directly after the operation. An observable that called schedule() only after the state changed was read later, so the turn committed with no reminder and no error. The open call stayed on the retained actor and made the next turn fail, although that turn did nothing wrong. The projection guard now counts an open schedule call as staged work. The turn that reads the observable fails with QueryMutatedState, and the failure path clears the open call. The error text also kept the Date object of the caller. Code that changed that date to an invalid value afterward made toISOString() throw RangeError, which the runtime retried. The call now keeps the timestamp that schedule() already checked.
|
@greptileai Please review the current head 46e582b. Finding 1: the projection guard now includes the open schedule calls, so a |
Summary
This pull request prepares
solid-objects1.0.0. Version 1.0 freezes the public API under semantic versioning. It makes no claim of measured scale. The Cloudflare backend stays experimental and is outside the promise.No tag is in this pull request. The tag follows after the maintainer approves the release text. The Ruby pull request is cardmagic/solid-objects-ruby#91.
Changes
schedule()call with no operation fails the turn. A turn that calledthis.schedule({ at, key })and then called no operation on the result stored no reminder and gave no error. The turn now fails withScheduleWithoutOperation, aNonRetryableError. The message becomes a dead letter after one attempt, and the turn commits no state and no reminder. The turn can keep the result and call the operation later. The Cloudflare backend uses the same turn code and has the same rule.docs/parity.mdrecords the schedule rule asNative. It records the Rubyjsongem check asNot applicable, because Node.js hasJSONbuilt in.docs/versioning.mdis new. The README gives the status at the top and names the projects that Solid Objects is not. The package description starts with the problems that the package solves, and three keywords are new. Each "pre-1.0" statement is replaced.runtime.run(signal). The README and the category guide now say that no separate actor service is necessary, and they name that process.Compatibility
this.schedule({ at }).expire()does not change.ScheduleWithoutOperationis a new export.What version 1.0 does not claim
The benchmarks are development measurements. Longer soak tests are open work. The project has one maintainer, and no production use by other people is known.
Validation
pnpm run format:check,pnpm run check: pass.pnpm run test:coverage: 76 files, 673 tests pass, 32 skipped (database and Redis tests that need a server).pnpm run test:cloudflare: 61 tests pass.pnpm run build,pnpm run check:cloudflare,pnpm run pack:check,pnpm run test:package,pnpm run test:recovery: pass.test/schedule-without-operation.test.ts(7), one test intest/cloudflare/runtime.test.ts, and two tests intest/package-metadata.test.ts.