Appearance
Readiness checklist
Work through the lines that apply to you (see Which parts apply to you). Each points at the page that tests it. When your lines are ticked, you have a result you can share with a publisher.
Every producer
| Check | Page |
|---|---|
| My test suite validates envelope and payload against the pinned SOM 1.0 schemas, with format assertion on | Validate |
| All 18 published positive examples pass my validator; all 20 negative ones fail | Prove your error paths |
My product sends som_version: "1.0.0", a UUID message_id per message and a SOM system_type | The envelope |
system_id is configurable per installation | Plan your integration |
| The token is cached and refreshed before expiry; the secret lives in a secret store and is rotated | Credentials |
Every message for a story carries its correlation_id; reactions carry causation_id | Run a whole story |
| My product never sends two messages for the same story at once | Run a whole story |
Retries reuse the same message_id and body, only for timeouts, 429 and 5xx, with backoff | Retries and idempotency |
400, 403 and 413 alert and don't retry | Handle the bus's answers |
| No media or long content in messages: references only, well under 240,000 bytes | The envelope |
| The policy cases behave as documented | Prove your error paths |
Producers of story.context
| Check | Page |
|---|---|
| Every snapshot is the whole story; the portal's diff between snapshots shows only intended changes | Run a whole story |
sequence_number strictly increases and updated_at never goes back, across restarts and failovers | Run a whole story |
| A whole story of seven or more snapshots is accepted end to end | Run a whole story |
Terminal stories can't be revived, and the 409 is shown to the user sensibly | Run a whole story |
After a 409 my product resynchronises from current state instead of resending | Handle the bus's answers |
| Every sequence case behaves as documented | Prove your error paths |
Consumers
| Check | Page |
|---|---|
| Acknowledge after handling; enough visibility for slow work; alert on the dead-letter queue | HTTPS pull API, Dead-letter queues and replay |
Snapshots are applied as whole replacements; the highest sequence_number per story wins | Order, duplicates and snapshots |
Idempotent on message_id: a replay changes nothing | Order, duplicates and snapshots |
Unknown message types, extensions, fields and enum values are ignored; no branching on som_version | Order, duplicates and snapshots |
| Consumer tests T1 to T7 end in the expected state | Test your consumer |
| Every consumer scenario of a test run passes | Test runs |
Skill executors
| Check | Page |
|---|---|
Warnings validate: UUID warning_id, string skill_warning_ref, a SOM system_type | A warning that validates |
| Trigger, no-trigger, redelivery and killed-story tests behave as documented | Test a skill by hand |
| Every case of the skill harness passes, apart from pending spec | Test runs |
| Dependencies on message types without a 1.0 schema are listed as provisional | Topics without a 1.0 schema |
Validate in your own tests
Catch schema mistakes before the bus sees them:
- Take the schemas from the SOM repository at the 1.0 release, and pin the commit. The bus uses
7297fef9adc6d14a74bdd7550c78decaa099a1ad. - Use a JSON Schema 2020-12 validator, with format assertion on for
uuidanddate-time. Most validators only annotate formats by default: then amessage_idof"msg-1"passes your tests and fails on the bus withenvelope.format.uuid. - Validate the envelope with
envelope.schema.json, then the payload with the schema chosen only bymessage_type(see Message families). - Add the one rule the schema can't express:
som_versionmust not be before 1.0. Send"1.0.0". - Run the published positive and negative examples through it. If your validator disagrees with any of them, it isn't set up like the bus.
Share your result
Publishers compare vendors on this evidence: see how they read it in Evaluate your vendors.
The cases the bus grades itself go into a results statement: made from your complete test runs, in fixed words, and shared with a publisher or by link until a date you choose.
For everything else on this checklist, write it up. Keep it short and factual, so a publisher can compare vendors:
Product: Acme NCS 4.2.0
Environment: SOM Managed Bus Sandbox, 2026-09-24
Suite: som-1.0.0+lib-0.2.2 (SOM schema pack 7297fef)
Roles tested: producer story.context, system.audit; consumer skill.warning.raised, telling.*
Result: passes som-bus suite som-1.0.0+lib-0.2.2, on the checks listed below
Checks: [the ticked lines above]
Not tested: [what doesn't apply, or isn't available yet]
Known gaps: [anything unticked, and why]- Say "passes som-bus suite
som-1.0.0+lib-0.2.2", and list the checks. Never "SOM certified" or "SOM compliant": SOM defines no certification, and RND certifies nothing. - Name what you didn't test. Publishers trust a result more when it states its limits.
- Keep the
message_ids of your key test messages. RND can confirm verdicts from them.