CultLib/docs/cultmesh-provider-session.md
2026-07-14 23:47:30 +01:00

3.4 KiB

CultMesh Provider Session

Authority map

  • Owner: the provider-session broker owns registration, active lease fencing, accepted publication membership, command retention, receipt acceptance, and withdrawal.
  • Inputs: a physical CultNet session, an explicit registration-authorization decision, correlated typed operations, the broker clock, provider commands, and persistence callbacks. The current RUDP adapter does not itself provide an authenticated claim.
  • Outputs: leases, application acceptances, accepted raw documents, pushed typed commands, persisted receipts, and deterministic removals.
  • Derived state: socket sessions, retry schedules, connection health, and provider projections are observations. They do not authorize publications.
  • Forbidden writers: RUDP packet acknowledgements, source addresses, direct raw document callbacks, renderer-owned catalogs, and arrival-time freshness maps cannot create accepted provider truth.
  • Shared paths: initial connect and reconnect use provider.register; initial, replayed, and live documents use provider.publication.put; explicit withdrawal and lease expiry remove the broker-owned publication set; command retry ends only when provider.receipt.put is accepted.
  • Cut line: a receiver must stop accepting unleased provider raw puts before it claims this protocol as its ingress authority.

Wire contract

Provider lifecycle operations use the reliable ordered CultNet schema channel and the existing cultnet.operation_request.v0 / cultnet.operation_response.v0 envelopes with service id gamecult.mesh.provider_session. Inner payloads are camel-case MessagePack maps encoded as messagepack-base64.

The v1 operations are:

Operation Request payload Successful payload
provider.register gamecult.mesh.provider_registration.v1 gamecult.mesh.provider_lease.v1
provider.renew gamecult.mesh.provider_lease_renewal.v1 gamecult.mesh.provider_lease.v1
provider.publication.put gamecult.mesh.provider_publication_put.v1 gamecult.mesh.provider_mutation_acceptance.v1
provider.publication.delete gamecult.mesh.provider_publication_delete.v1 gamecult.mesh.provider_mutation_acceptance.v1
provider.receipt.put gamecult.mesh.provider_receipt_put.v1 gamecult.mesh.provider_mutation_acceptance.v1
provider.withdraw gamecult.mesh.provider_withdrawal.v1 gamecult.mesh.provider_mutation_acceptance.v1

Broker-to-provider commands are raw typed documents using gamecult.mesh.provider_command.v1. Asset bodies do not travel inside these operation payloads.

Responses use ok, conflict, expired, denied, or invalid. A transport ACK is never an application acceptance. Renewal issues a new lease id and immediately fences the previous id. The broker derives the set removed by full withdrawal; a provider cannot use a supplied list to hide owned publications.

Public deployment additionally requires a CultNet authentication claim that authorizes the provider identity. Until that claim is wired and checked, the TypeScript RUDP adapter is a private-development transport.

CultMeshProviderSessionBroker is an in-memory reference broker and socket proof. Its command and receipt retention does not survive process restart. Production receivers must persist that control-plane state atomically with accepted publication ownership; Odin must not substitute these volatile maps for its durable broker authority.