# The usage context store, proved end to end (novox/hq ADR 0054). A postgres PROVIDER and the # model-usage CONSUMER ride one node; the foundation (store, broker, control) owns the other. As in # two-node-db, the app-postgres provider and the mesh's own foundation store both want host port 5432, # so they cannot share a machine — the foundation lives on `anchor` and NOTHING else, and `laptop` # runs postgres plus model-usage. Provider and consumer are co-located on laptop, so only enrolment # crosses to anchor, over the underlay both machines already share. # # The property the bed proves: a usage event emitted into the mesh is upserted into model-usage's # provisioned postgres store, at BOTH grains (licence and session, differing only in `consumer`), # LATEST-per-key, and IN THE CLEAR — an ordinary select returns the numeric value and its raw payload. # # MESH_LAB_HOST_BINARY=.../mesh-host MESH_LAB_BUNDLE=.../examples/foundation-first-node.lock # Build BOTH runtime images into the local daemon first (the scenario stocks and serves them by # digest, which is where the host pulls them from): # scripts/build-module-runtime.sh postgres /tmp/postgres.tar # scripts/build-module-runtime.sh model-usage /tmp/model-usage.tar scenario: model-usage-bed segments: hosting: kind: public cidr: [192.0.2.0/24] machines: # The foundation ONLY: store, broker, control — three containers. anchor: at: { segment: hosting, address: [192.0.2.10] } egress: true inbound: allow memory: 4GiB cpus: 4 # The postgres PROVIDER (server + broker-bound runtime) and the model-usage CONSUMER (its run-once # migrate and its long-lived event runtime). The 5432-vs-foundation conflict is gone because the # foundation store is on the OTHER node. The runtime images plus postgres:17-alpine are pulled from # the internet over the uplink; forty gigabytes holds them with room to spare. laptop: at: { segment: hosting, address: [192.0.2.20] } egress: true inbound: allow memory: 4GiB cpus: 4 disk: 40GiB images: - mesh-controller:development # The per-module runtimes, built by scripts/build-module-runtime.sh and stocked here. Each carries # its module's code — postgres its provisioner, model-usage its consumer, tools and run-once migrate. - mesh-runtime-postgres:development - mesh-runtime-model-usage:development place: all: [host, runtime]