|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 0.17.0 - 2026-10-03 |
| 4 | + |
| 5 | +- Publish RBS types for portable events, metric samples, actor diagnostics, and |
| 6 | + event observers in `sig/public/telemetry.rbs`, and a `json_value` type for |
| 7 | + message results and actor state. Observer blocks, diagnostics, and results now |
| 8 | + type-check against these contracts instead of `untyped`. |
| 9 | +- **Breaking:** `solid_objects.activation.started` now fires before the actor's |
| 10 | + `activate` hook. Before, it fired after a successful hook. The new |
| 11 | + `solid_objects.activation.completed` event takes that meaning, and |
| 12 | + `solid_objects.activation.failed` reports a failed hook. JavaScript changes |
| 13 | + the same events. Move a subscriber that reads `activation.started` as a |
| 14 | + finished activation to `activation.completed`. |
| 15 | +- **Breaking:** Active Support payloads no longer carry `error_message`. This |
| 16 | + applies to `commit_action.failed`, `activation.deactivation_failed`, |
| 17 | + `supervisor.monitor_failed`, `supervisor.retention_failed`, |
| 18 | + `supervisor.redrive_failed`, and `wake_up.failed`. The |
| 19 | + `solid_objects.worker.error` log entry also omits it. Each keeps |
| 20 | + `error_class`. Exception text can contain actor state, so JavaScript already |
| 21 | + reports only the error name. |
| 22 | + |
| 23 | +- **Breaking:** rename `solid_objects.payload_broadcast_failed` to |
| 24 | + `solid_objects.payload_broadcast.failed`, the dotted form that every other |
| 25 | + event uses. Update Active Support subscribers to the new name. The portable |
| 26 | + event names the payload `payload`. |
| 27 | +- Match portable event attributes to JavaScript through the shared |
| 28 | + `compatibility/telemetry-events.json` contract. Message events carry |
| 29 | + `operation` and `deliveryMode`, `message.failed` carries `retryable` and |
| 30 | + `outcome`, commit action events carry the message fields and `commitAction`, |
| 31 | + and `reminder.enqueued` carries `operation`. `outbox.age` carries the effect or |
| 32 | + broadcast identity, `sync.enqueue_timeout` carries `timeoutMilliseconds`, and |
| 33 | + polling intervals are integers. `realtime.connected` carries only actor fields. |
| 34 | +- Log `solid_objects.instrumentation.failed` when an exporter or observer raises. |
| 35 | + Observers require a block, a process accepts at most 1,000 observers, and |
| 36 | + `SolidObjects.reset!` removes them. Pin reserved JSON keys through actor |
| 37 | + arguments, state, and retained results. |
| 38 | + |
| 39 | +- Guard personalized payload projections against state changes, staged work, |
| 40 | + and application database writes. Each payload gets an isolated actor from |
| 41 | + the committed snapshot and honors `max_payload_bytes`, matching JavaScript. |
| 42 | +- Preserve timeout wait reasons, activation owner IDs, and activation generations |
| 43 | + in portable telemetry using the shared camelCase fields and reason values. |
| 44 | +- Use a yielding SQLite busy handler for background transactions so concurrent |
| 45 | + writers can finish on Rails 7.1 and 7.2. Preserve configured wait limits and |
| 46 | + synchronous deadlines; cover contention with a coordinated lock regression. |
| 47 | + |
| 48 | +- **Breaking:** reject query and observable state mutation and staged durable |
| 49 | + work with terminal `QueryMutatedState` errors. Cover individual snapshot |
| 50 | + projections and preserve ordinary operations' already-staged work while |
| 51 | + reading projections, including replacements that leave the intent count |
| 52 | + unchanged. |
| 53 | +- Pin reserved JSON property names with shared Ruby/JS fixtures. Document the |
| 54 | + reminder-name limit difference and the authorized dead-transmit retry API. |
| 55 | + |
| 56 | +- **Breaking:** reauthorize every message-reference status, result, and outcome |
| 57 | + read against the original invocation. Pass `authorization_context:` on every |
| 58 | + read. |
| 59 | +- **Breaking:** retain immutable JSON results for background and internal |
| 60 | + messages as well as synchronous calls. All operations now enforce result |
| 61 | + serialization and size limits; return `nil` explicitly when an operation does |
| 62 | + not need a result. `result` raises terminal rejection/failure errors; |
| 63 | + `outcome` exposes them as data. |
| 64 | +- Preserve polling transition intervals in milliseconds and string reasons in |
| 65 | + portable telemetry. Pin transmit staging order and null-argument validation |
| 66 | + against the shared JavaScript contract. |
| 67 | + |
| 68 | +- Add portable telemetry, isolated observer hooks, metric definitions, and bounded authorized actor diagnostics matching JavaScript. |
| 69 | + |
3 | 70 | ## 0.16.1 - 2026-10-02 |
4 | 71 |
|
5 | 72 | - Fix the SQLite join order of the claimed-message scan. The query in |
|
0 commit comments