Skip to content

The envelope

What every bus message carries about itself. This is its data dictionary at contract v24: one entry for every field of its messages a plugin meets, saying what the field is for, what a value means and does not mean, what empty means, who fills it, its bounds and the operations a write must carry it on. Each entry is anchored by its name, the name a refusal's path resolves to and a declaration names, which never changes.

Its messages are declared in meridian/v1/bus.proto, meridian/v1/envelope.proto. A field's entry is the same whatever carries it: a typed operation's parameters take the entries of the message they are made from.

Records

The messages this store keeps and answers.

Record What it is
Envelope the frame one bus message travels in: its metadata, its type and its bytes
MessageMeta what every bus message carries about itself, to route, correlate and audit it

Envelope

meridian.v1.Envelope, a record.

meta

message MessageMeta · since v2 · stable

Carries what the message says about itself.

  • Means: its identifiers, topic, publisher, time and the person and scope the sidecar stamped
  • Does not mean: the payload
  • Empty: never unset
  • Filled: stamped, by sidecar

payload_type

text · since v2 · stable

Names the payload's message.

  • Means: its full name, which a subscriber checks before decoding rather than guessing from the topic
  • Does not mean: the topic
  • Empty: never empty
  • Filled: stamped, by sidecar

payload

bytes · since v2 · stable

Carries the message itself.

  • Means: the payload message, serialised
  • Does not mean: a oneof over every message: the bus carries any payload without being compiled against it
  • Empty: empty for a message with no field set
  • Filled: stamped, by sidecar

MessageMeta

meridian.v1.MessageMeta, a record.

message_id

identifier message · since v2 · stable

Identifies the message.

  • Means: unique per message: the idempotency key a handler that has seen it may drop the message by
  • Does not mean: a business identifier on the payload
  • Empty: never empty
  • Filled: stamped, by sidecar

correlation_id

identifier message · since v2 · stable

Ties together every message one originating action caused.

  • Means: constant across them, so a person can follow a sync all the way to a position update
  • Does not mean: the message that caused this one, which causation_id names
  • Empty: empty where the publisher began nothing to correlate
  • Filled: stamped, by sidecar

causation_id

identifier message · since v2 · stable

Names the message that caused this one.

  • Means: its message_id: correlation gives the set, causation the shape of the tree inside it
  • Does not mean: the originating action
  • Empty: empty for a message nothing on the bus caused
  • Filled: stamped, by sidecar

publisher_instance_id

identifier instance · since v2 · stable

Names the instance that published the message.

  • Means: provenance, and the reply address for a request
  • Does not mean: the person it was sent for
  • Empty: never empty
  • Filled: stamped, by sidecar

topic

text · since v2 · stable

Names the topic the message was published on.

  • Means: kept so a message stays interpretable once captured away from its subscription
  • Does not mean: the payload's type
  • Empty: never empty
  • Filled: stamped, by sidecar

schema_version

text · since v2 · stable

Says which contract version the publisher was built against.

  • Means: v and a number, as the publisher declared it
  • Does not mean: the payload's own version
  • Empty: empty where the publisher did not say
  • Filled: stamped, by sidecar

published_at_ns

moment · since v2 · stable

Records when the message was published.

  • Means: the publisher's wall clock at publish: observation time
  • Does not mean: when something happened in the world, which only the payload can say
  • Empty: never 0
  • Filled: stamped, by sidecar
  • Unit: nanoseconds since the epoch, UTC

acting_for_subject

text · since v2 · stable

Names the person, or from v21 the service account, a command was sent for.

  • Means: the deployment-local subject the sidecar verified (W4.9), so the store records who made the change; acting_for_kind says which kind of user
  • Does not mean: anything a plugin supplies: stamped by the sidecar alone (decisions/014)
  • Empty: empty when the plugin acted as itself
  • Filled: stamped, by sidecar

Changes: v21, clarified: a service account's SA- subject where acting_for_kind says so.

acting_through_delegation

text · since v9 · stable

Names the delegation the person acted through.

  • Means: the delegation the assertion named (W4.9, decisions/029), set beside acting_for_subject
  • Does not mean: the actor, who stays the person
  • Empty: empty for a person at the dashboard, and for a plugin acting as itself
  • Filled: stamped, by sidecar

acting_through_client

text · since v10 · stable

Names the client the person acted through.

  • Means: the client's registered name as the assertion named it, so a store records the person through that client without a second read
  • Does not mean: a person or a plugin instance
  • Empty: empty where acting_through_delegation is
  • Filled: stamped, by sidecar

account_scope

repeated identifier account · since v2 · stable

Carries the accounts the publishing plugin may read, on a read; from v22 the accounts it may write, on a command naming a record by its ID alone.

  • Means: a core store answers only for these; on a command naming an order, a placement, a change request or a locate by its ID alone (W4.9, W11), the sending instance's write scope narrowed to the person's write access where it acts for one, and the book refuses, changing nothing, a command whose record's account is outside it (PERMISSION_DENIED, no reason code)
  • Does not mean: the accounts the person may read
  • Empty: empty is nothing when account_scope_applies; unread otherwise
  • Filled: stamped, by sidecar

Changes: v22, clarified: also stamped on a command naming a record by its ID alone, the write scope the book checks the record's account against (the order-path plan's protos, point 8).

account_scope_applies

boolean · since v7 · stable

Says the account scope applies, so an empty one is nothing.

  • Means: set by the sidecar on every query it sends for a plugin (W4.11), and from v22 on every command naming a record by its ID alone; a store answers a query whose scope is empty with nothing, and refuses one naming an account outside it
  • Does not mean: anything a core component sets
  • Empty: false on a core component's read, which no scope cuts
  • Filled: stamped, by sidecar

Changes: v22, clarified: also set on a command naming a record by its ID alone (W4.9, W11).

prepared_call_id

text · since v20 · preview

Names the prepared change a command for a person was made from.

  • Means: the PC- ID the assertion named (W4.9, W6.27), set beside acting_for_subject and any delegation, which the store keeps
  • Does not mean: the actor, who stays the person; or anything the plugin chose: it cannot set it
  • Empty: empty unless the person made the command from a prepared change, and for a plugin acting as itself
  • Filled: stamped, by sidecar

acting_for_kind

enum SubjectKind · since v21 · preview

Says the kind of user a command was sent for.

  • Means: the claims' subject_kind, stamped beside acting_for_subject (W4.9), so a store records a service account, never a person
  • Does not mean: anything a plugin supplies: stamped by the sidecar alone
  • Empty: unspecified: a person acted, or the plugin acted as itself
  • Filled: stamped, by sidecar
Value Means
SUBJECT_KIND_UNSPECIFIED a person, or nobody where acting_for_subject is empty
SUBJECT_KIND_SERVICE_ACCOUNT a service account: acting_for_subject is its SA- subject

owner_subject

text · since v21 · preview

Names the person answerable for the service account a command was sent for.

  • Means: the claims' owner_subject, stamped beside acting_for_subject, which the store keeps on the actor
  • Does not mean: who acted, which is the service account
  • Empty: empty unless acting_for_kind is a service account
  • Filled: stamped, by sidecar

connectivity_allowed

boolean · since v22 · preview

Carries the sending ems sidecar's verdict on a placement's connectivity link.

  • Means: true when the placement's connectivity plugin is linked to the stamped ems instance, its link not withdrawn, and the acting user — person, service account or a user group they are in — among the link's users: the placement's connectivity instance is in the caller's CallerClaims.connectivity_instance_ids (W4.9, W11.8); the book refuses a placement stamped false with REFUSAL_REASON_CONNECTIVITY_NOT_ALLOWED and records the refusal
  • Does not mean: anything a plugin supplies, or a verdict read on any other command
  • Empty: false on every message but a CreatePlacement, where false is the sidecar's refusal of the link
  • Filled: stamped, by sidecar

algorithm_id

text · since v22 · preview

Names the algorithm a service account's call named.

  • Means: the claims' algorithm_id, stamped beside owner_subject after the sidecar checked it against the version's algorithms; the book copies it to the entry's ServiceAccountActor
  • Does not mean: anything a plugin supplies: stamped by the sidecar alone
  • Empty: empty for a person, and where the call named none
  • Filled: stamped, by sidecar

Generated from boundaries/fields.json in meridian-schema at a6a0af7, contract v24.