Appearance
Rule catalogue
Every refusal and every warning from the bus carries a source and a stable rule id. This page lists all 104 of them, in the gateway's order of checks, with a page for each. It is generated from the gateway's code and the SOM 1.0 schemas it validates against, so it can't fall behind them.
Branch on the rule id, never on the violation's message text. How verdicts work: Verdicts and refusals.
source | Meaning |
|---|---|
schema | The SOM 1.0 JSON Schema says no. The message is not valid SOM 1.0. |
conformance | SOM 1.0 conformance rules that the schema cannot express. |
sequence | SOM 1.0 conformance on snapshot order, checked against the story's previous snapshot. |
policy | This bus's operational rules (identity, grants, size, idempotency, story ownership). Not a verdict of the SOM standard. |
Schema rules are named <schema>.<keyword>: the schema that failed (envelope, or the payload's family) and the JSON Schema keyword. The part after the dot says what kind of rule failed.
Firewall and rate limits
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
quota.exceeded | policy | 429 | Your connection has used its daily request allowance. |
rate.limited | policy | 429 | Too many requests: the bus asks you to slow down. |
request.blocked | policy | 403 | The bus's firewall refused the request. |
Size
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
message.too_large | policy | 413 | The request body is larger than the bus accepts. |
Identity
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
principal.not_verified | policy | 403 | The AWS role is registered but has not proved it is yours yet. |
producer.not_registered | policy | 403 | Valid credentials, but the app has no grants on this bus yet. |
producer.unauthenticated | policy | 401 | The bus could not establish who is calling. |
tenant.mismatch | policy | 403 | The workspace in the URL is not the one your credentials belong to. |
JSON
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
message.not_json | schema | 400 | The body is not JSON. |
SOM envelope, version and payload
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
delivery-media-available.additionalProperties | schema | 400 | A field the schema does not allow, in the delivery-media-available payload schema. |
delivery-media-available.anyOf | schema | 400 | None of the alternatives match, in the delivery-media-available payload schema. |
delivery-media-available.const | schema | 400 | A value that must be one fixed value, in the delivery-media-available payload schema. |
delivery-media-available.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the delivery-media-available payload schema. |
delivery-media-available.format.uuid | schema | 400 | Not a UUID, in the delivery-media-available payload schema. |
delivery-media-available.pattern | schema | 400 | A string that does not match the required pattern, in the delivery-media-available payload schema. |
delivery-media-available.required | schema | 400 | A required field is missing, in the delivery-media-available payload schema. |
delivery-media-available.type | schema | 400 | The wrong JSON type, in the delivery-media-available payload schema. |
envelope.additionalProperties | schema | 400 | A field the schema does not allow, in the SOM 1.0 envelope. |
envelope.anyOf | schema | 400 | None of the alternatives match, in the SOM 1.0 envelope. |
envelope.enum | schema | 400 | A value not in the allowed list, in the SOM 1.0 envelope. |
envelope.false_schema | schema | 400 | A field SOM 1.0 explicitly forbids, in the SOM 1.0 envelope. |
envelope.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the SOM 1.0 envelope. |
envelope.format.uuid | schema | 400 | Not a UUID, in the SOM 1.0 envelope. |
envelope.pattern | schema | 400 | A string that does not match the required pattern, in the SOM 1.0 envelope. |
envelope.required | schema | 400 | A required field is missing, in the SOM 1.0 envelope. |
envelope.type | schema | 400 | The message, or a field of its envelope, has the wrong JSON type. |
link-event.additionalProperties | schema | 400 | A field the schema does not allow, in the link-event payload schema. |
link-event.const | schema | 400 | A value that must be one fixed value, in the link-event payload schema. |
link-event.enum | schema | 400 | A value not in the allowed list, in the link-event payload schema. |
link-event.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the link-event payload schema. |
link-event.format.uuid | schema | 400 | Not a UUID, in the link-event payload schema. |
link-event.if | schema | 400 | A conditional rule failed: because of one field's value, another rule applies, in the link-event payload schema. |
link-event.not | schema | 400 | The value matches something the schema forbids, in the link-event payload schema. |
link-event.required | schema | 400 | A required field is missing, in the link-event payload schema. |
link-event.type | schema | 400 | The wrong JSON type, in the link-event payload schema. |
message_type.unknown | policy | 400 | No SOM 1.0 schema for this message_type, on a bus that refuses those. |
payload.message_type_mismatch | policy | 400 | payload.message_type disagrees with the envelope's message_type. |
payload.unvalidated | policy | tolerated | Accepted, but the payload was not checked: SOM 1.0 has no schema for this message_type. |
skill-warning.additionalProperties | schema | 400 | A field the schema does not allow, in the skill-warning payload schema. |
skill-warning.const | schema | 400 | A value that must be one fixed value, in the skill-warning payload schema. |
skill-warning.enum | schema | 400 | A value not in the allowed list, in the skill-warning payload schema. |
skill-warning.false_schema | schema | 400 | A field SOM 1.0 explicitly forbids, in the skill-warning payload schema. |
skill-warning.format.uuid | schema | 400 | Not a UUID, in the skill-warning payload schema. |
skill-warning.pattern | schema | 400 | A string that does not match the required pattern, in the skill-warning payload schema. |
skill-warning.required | schema | 400 | A required field is missing, in the skill-warning payload schema. |
skill-warning.type | schema | 400 | The wrong JSON type, in the skill-warning payload schema. |
som_version.pre_1_0 | conformance | 400 | som_version is from before SOM 1.0. |
som_version.unsupported_major | policy | 400 | som_version is 2.0 or later. |
story-context.additionalProperties | schema | 400 | A field the schema does not allow, in the story-context payload schema. |
story-context.anyOf | schema | 400 | None of the alternatives match, in the story-context payload schema. |
story-context.const | schema | 400 | A value that must be one fixed value, in the story-context payload schema. |
story-context.enum | schema | 400 | A value not in the allowed list, in the story-context payload schema. |
story-context.false_schema | schema | 400 | A field SOM 1.0 explicitly forbids, in the story-context payload schema. |
story-context.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the story-context payload schema. |
story-context.format.uri | schema | 400 | Not a URI, in the story-context payload schema. |
story-context.if | schema | 400 | A conditional rule failed: because of one field's value, another rule applies, in the story-context payload schema. |
story-context.maximum | schema | 400 | A number above its maximum, in the story-context payload schema. |
story-context.maxLength | schema | 400 | A string longer than allowed, in the story-context payload schema. |
story-context.minimum | schema | 400 | A number below its minimum, in the story-context payload schema. |
story-context.minLength | schema | 400 | A string shorter than allowed, in the story-context payload schema. |
story-context.not | schema | 400 | The value matches something the schema forbids, in the story-context payload schema. |
story-context.pattern | schema | 400 | A string that does not match the required pattern, in the story-context payload schema. |
story-context.required | schema | 400 | A required field is missing, in the story-context payload schema. |
story-context.type | schema | 400 | The wrong JSON type, in the story-context payload schema. |
story-context.uniqueItems | schema | 400 | An array with repeated items, in the story-context payload schema. |
system-audit.additionalProperties | schema | 400 | A field the schema does not allow, in the system-audit payload schema. |
system-audit.const | schema | 400 | A value that must be one fixed value, in the system-audit payload schema. |
system-audit.enum | schema | 400 | A value not in the allowed list, in the system-audit payload schema. |
system-audit.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the system-audit payload schema. |
system-audit.format.uuid | schema | 400 | Not a UUID, in the system-audit payload schema. |
system-audit.required | schema | 400 | A required field is missing, in the system-audit payload schema. |
system-audit.type | schema | 400 | The wrong JSON type, in the system-audit payload schema. |
telling-event.additionalProperties | schema | 400 | A field the schema does not allow, in the telling-event payload schema. |
telling-event.anyOf | schema | 400 | None of the alternatives match, in the telling-event payload schema. |
telling-event.const | schema | 400 | A value that must be one fixed value, in the telling-event payload schema. |
telling-event.enum | schema | 400 | A value not in the allowed list, in the telling-event payload schema. |
telling-event.format.date-time | schema | 400 | Not an RFC 3339 date-time, in the telling-event payload schema. |
telling-event.format.uuid | schema | 400 | Not a UUID, in the telling-event payload schema. |
telling-event.if | schema | 400 | A conditional rule failed: because of one field's value, another rule applies, in the telling-event payload schema. |
telling-event.not | schema | 400 | The value matches something the schema forbids, in the telling-event payload schema. |
telling-event.pattern | schema | 400 | A string that does not match the required pattern, in the telling-event payload schema. |
telling-event.required | schema | 400 | A required field is missing, in the telling-event payload schema. |
telling-event.type | schema | 400 | The wrong JSON type, in the telling-event payload schema. |
Grants
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
producer.message_type_not_allowed | policy | 403 | Your app may not publish this message_type. |
producer.system_id_not_allowed | policy | 403 | Your app may not publish as this originating_system.system_id. |
registry.unavailable | policy | 503 | The bus could not look up your app's grants just now. |
Idempotency
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
message_id.reused | policy | 409 | This message_id was already used for a different message. |
message.in_flight | policy | 503 | An earlier attempt of this message was recorded moments ago and its publication is not confirmed yet. |
message.superseded | policy | 409 | This snapshot was recorded but never published, and its story has moved on since. |
Snapshot sequence
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
asset.type_changed | sequence | 409 | An asset_id changed its asset_type. |
correlation_id.changed | sequence | tolerated | The story arrived under a different correlation_id than before. |
sequence_number.gap | sequence | tolerated | sequence_number jumped by more than one. |
sequence_number.not_increasing | sequence | 409 | sequence_number is not greater than the story's last accepted snapshot. |
snapshot.assets_dropped | sequence | 409 | An asset present in the last snapshot is missing now. |
snapshot.members_missing | sequence | 409 | A top-level member present in the last snapshot is missing now. |
story_type.left_terminal | sequence | 409 | The story was KILLED, SPIKED or ARCHIVED, and this snapshot says otherwise. |
updated_at.backwards | sequence | 409 | updated_at is earlier than the last accepted snapshot's. |
Story ownership
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
story.not_owner | policy | tolerated, or 409 if the workspace chooses | A system that does not own the story published a snapshot of it. |
Commit
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
commit.contention | policy | 409 | Another writer updated the same story at the same moment, several times running. |
Publish
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
bus.publish_failed | policy | 503 | The bus could not publish the message; it was not delivered. |
Pull API (consumers)
| Rule | Source | Outcome | Meaning |
|---|---|---|---|
consumer.not_owner | policy | 403 | The consumer in the URL is not the connection your credentials belong to. |
consumer.queue_unavailable | policy | 503 | The bus could not reach your queue just now. |
pull.bad_request | policy | 400 | The pull API request is malformed. |
skills.unavailable | policy | 503 | The bus could not read your executor's skill registrations just now. |