Skip to content

Commit 30bf741

Browse files
committed
fix: Share the portable event contract
A parity audit found portable events with different names and fields in Ruby and JavaScript. Only the timeout event had a shared fixture, so no test found the difference. compatibility/telemetry-events.json now holds the attribute allowlist and the exact keys of each core SQL event. Both test suites read the same file. - Rename payload_broadcast_failed to payload_broadcast.failed, the dotted form that all other events use. - Send operation, deliveryMode, retryable, outcome, commitAction, and the outbox identity, as JavaScript already does. - Log exporter and observer failures. Ruby discarded them before. - Require an observer block and accept at most 1,000 observers. - Pin reserved JSON keys through actor arguments, state, and results.
1 parent 6771a76 commit 30bf741

30 files changed

Lines changed: 886 additions & 64 deletions

‎CHANGELOG.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
## Unreleased
44

5+
- Rename `solid_objects.payload_broadcast_failed` to
6+
`solid_objects.payload_broadcast.failed`, the dotted form that every other
7+
event uses. Update Active Support subscribers to the new name. The portable
8+
event names the payload `payload`.
9+
- Match portable event attributes to JavaScript through the shared
10+
`compatibility/telemetry-events.json` contract. Message events carry
11+
`operation` and `deliveryMode`, `message.failed` carries `retryable` and
12+
`outcome`, commit action events carry the message fields and `commitAction`,
13+
and `reminder.enqueued` carries `operation`. `outbox.age` carries the effect or
14+
broadcast identity, `sync.enqueue_timeout` carries `timeoutMilliseconds`, and
15+
polling intervals are integers. `realtime.connected` carries only actor fields.
16+
- Log `solid_objects.instrumentation.failed` when an exporter or observer raises.
17+
Observers require a block, a process accepts at most 1,000 observers, and
18+
`SolidObjects.reset!` removes them. Pin reserved JSON keys through actor
19+
arguments, state, and retained results.
20+
521
- Guard personalized payload projections against state changes, staged work,
622
and application database writes. Each payload gets an isolated actor from
723
the committed snapshot and honors `max_payload_bytes`, matching JavaScript.

0 commit comments

Comments
 (0)