From a89b102955dfec4978b3349cf19cd49d01a92d77 Mon Sep 17 00:00:00 2001 From: Lucas Carlson Date: Sat, 29 Aug 2026 09:47:29 -0700 Subject: [PATCH 1/2] docs: record the Ruby state warning in the ledger The row said the Ruby gem has no soft threshold. It carries the same solid_objects.state.large event from 0.14.3, as warn_state_bytes, and the same 5 MB hard default. Its threshold defaults to 64 KB rather than 128 KB, because the measured Ruby curve falls sooner: the gem keeps 55% of its empty-state throughput at 13 KB of state, where this package keeps 98% at 16 KB. --- docs/parity.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/parity.md b/docs/parity.md index c64ccd0..1a6b9a7 100644 --- a/docs/parity.md +++ b/docs/parity.md @@ -63,20 +63,20 @@ such boundary between a gem and its dependents. ## Operations -| Capability | Status | TypeScript shape or remaining work | -| ----------------------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Process registration, heartbeats, stale claim recovery, and graceful shutdown | Native | Runtime roles persist host, PID, runtime versions, draining and stopped transitions, cooperative cancellation, and a bounded shutdown deadline; cleanup recovers stale claims. | -| Failed-role replacement | Native | Built-in and registered roles are rebuilt through their factories with capped backoff; shutdown is the terminal replacement boundary. | -| Additional supervised components | Native | `registerComponent()` builds, validates, runs, and stops application components with the runtime. | -| Dead-letter inspection and retry | Native | `runtime.deadLetters` provides deny-by-default immutable inspection and idempotent durable retry linkage. | -| Reconciliation reads | Native | Authorized cursor pages cover active, quiet, and orphaned instances; bounded state batches are migrated and deeply frozen. | -| Message, process, and opt-in instance retention | Native | Supervised scheduling bounds message and process growth; authorized manual APIs add preview and keep destructive instance expiration explicit. | -| Doctor and schema verification | Native | Structured checks cover configuration, schema/version shape, adapter server versions, neutral-context policy probes, live roles, and a targeted round trip. | -| CLI | Native | The packaged executable loads an application runtime and exposes start, diagnostics, processes, dead letters, reminders, and explicit retention pruning as JSON. | -| Operator dashboard | Native | The opt-in `solid-objects/web` export provides Fetch and Node/Connect mounting, authorized runtime views and actions, session-backed CSRF, filtering, paging, charts, and immutable extension hooks. Matches the Ruby dashboard's own documented limits: no audit trail of admin actions, dead-letter retry is one at a time, and pause sets a flag rather than interrupting an in-flight turn. | -| Structured instrumentation | Native | An isolated transport-neutral sink emits immutable lifecycle metadata and structurally excludes application payloads. | -| Large committed state warning | Native | `warnStateBytes` reports one `solid_objects.state.large` event, holding the actor type, actor ID, byte count, and threshold, when a committed image passes a 128 KB soft threshold. The event holds no application state. The Ruby gem shares the 5 MB hard default and has no soft threshold yet; the Ruby port is tracked at cardmagic/solid-objects-ruby#57. | -| Public test helper | Native | `runtime.testing` provides role-selective deterministic draining, explicit-time due-reminder execution, and dependency-ordered reset without relying on cascades. | +| Capability | Status | TypeScript shape or remaining work | +| ----------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Process registration, heartbeats, stale claim recovery, and graceful shutdown | Native | Runtime roles persist host, PID, runtime versions, draining and stopped transitions, cooperative cancellation, and a bounded shutdown deadline; cleanup recovers stale claims. | +| Failed-role replacement | Native | Built-in and registered roles are rebuilt through their factories with capped backoff; shutdown is the terminal replacement boundary. | +| Additional supervised components | Native | `registerComponent()` builds, validates, runs, and stops application components with the runtime. | +| Dead-letter inspection and retry | Native | `runtime.deadLetters` provides deny-by-default immutable inspection and idempotent durable retry linkage. | +| Reconciliation reads | Native | Authorized cursor pages cover active, quiet, and orphaned instances; bounded state batches are migrated and deeply frozen. | +| Message, process, and opt-in instance retention | Native | Supervised scheduling bounds message and process growth; authorized manual APIs add preview and keep destructive instance expiration explicit. | +| Doctor and schema verification | Native | Structured checks cover configuration, schema/version shape, adapter server versions, neutral-context policy probes, live roles, and a targeted round trip. | +| CLI | Native | The packaged executable loads an application runtime and exposes start, diagnostics, processes, dead letters, reminders, and explicit retention pruning as JSON. | +| Operator dashboard | Native | The opt-in `solid-objects/web` export provides Fetch and Node/Connect mounting, authorized runtime views and actions, session-backed CSRF, filtering, paging, charts, and immutable extension hooks. Matches the Ruby dashboard's own documented limits: no audit trail of admin actions, dead-letter retry is one at a time, and pause sets a flag rather than interrupting an in-flight turn. | +| Structured instrumentation | Native | An isolated transport-neutral sink emits immutable lifecycle metadata and structurally excludes application payloads. | +| Large committed state warning | Native | `warnStateBytes` reports one `solid_objects.state.large` event, holding the actor type, actor ID, byte count, and threshold, when a committed image passes a 128 KB soft threshold. The event holds no application state, and it reports after the commit. The Ruby gem carries the same event and the same 5 MB hard default from `0.14.3`, as `warn_state_bytes`. Its threshold defaults to 64 KB rather than 128 KB, because its measured curve falls sooner: it keeps 55% of its empty-state throughput at 13 KB, where this package keeps 98% at 16 KB. | +| Public test helper | Native | `runtime.testing` provides role-selective deterministic draining, explicit-time due-reminder execution, and dependency-ordered reset without relying on cascades. | ## Databases and wake-up From 47a06335f465765df24bc82659ebbf7b04215b30 Mon Sep 17 00:00:00 2001 From: Lucas Carlson Date: Sat, 29 Aug 2026 09:53:35 -0700 Subject: [PATCH 2/2] chore: release 0.14.5 A parity ledger correction with no runtime change, so this is a patch. --- CHANGELOG.md | 10 ++++++++++ package.json | 2 +- src/version.ts | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e71b929..069a3e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.14.5 - 2026-08-29 + +- Record the Ruby state warning in the parity ledger. The row said the Ruby gem + has no soft threshold. It carries the same `solid_objects.state.large` event + and the same 5 MB hard default from `0.14.3`, as `warn_state_bytes`. Its + threshold defaults to 64 KB rather than 128 KB, because the measured Ruby + curve falls sooner: the gem keeps 55% of its empty-state throughput at 13 KB + of state, where this package keeps 98% at 16 KB. Documentation only; no + runtime change. + ## 0.14.4 - 2026-08-29 - Cut the per-turn state traversals from eight to four. The runtime built the diff --git a/package.json b/package.json index f33535a..bb08605 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solid-objects", - "version": "0.14.4", + "version": "0.14.5", "description": "Race-free realtime state per application identity, backed by your SQL database", "type": "module", "license": "MIT", diff --git a/src/version.ts b/src/version.ts index d2ef35b..d7f0246 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = "0.14.4" +export const VERSION = "0.14.5"