# Protobuf Contracts The contracts project contains the public gRPC API and the gateway-to-worker IPC messages. The `.proto` files are the source of truth; generated C# files are recreated by the contracts project build. ## Files `src/MxGateway.Contracts/Protos/mxaccess_gateway.proto` defines the public `MxAccessGateway` gRPC service, command payloads, command replies, event DTOs, `MxValue`, `MxArray`, and `MxStatusProxy`. `src/MxGateway.Contracts/Protos/mxaccess_worker.proto` defines the named-pipe worker IPC envelope and control messages. It imports `mxaccess_gateway.proto` so the worker and gateway use the same command, reply, event, value, and status shapes. Generated C# output is written to `src/MxGateway.Contracts/Generated/`. Do not hand-edit generated files. Client generation inputs are published through `clients/proto/proto-inputs.json` and the descriptor set under `clients/proto/descriptors/`. See [Client Proto Generation](./client-proto-generation.md) for language-specific generation inputs, output directories, and golden protobuf JSON fixtures. ## Generation Run the contracts build to regenerate C# protobuf and gRPC code: ```bash dotnet build src/MxGateway.Contracts/MxGateway.Contracts.csproj ``` Run the focused contract tests after changing either `.proto` file: ```bash dotnet test src/MxGateway.Tests/MxGateway.Tests.csproj --filter ProtobufContractRoundTripTests ``` The full solution build also regenerates the C# contracts before compiling gateway and test projects: ```bash dotnet build src/MxGateway.sln ``` Regenerate the client descriptor after changing either `.proto` file: ```bash powershell -ExecutionPolicy Bypass -File scripts/publish-client-proto-inputs.ps1 ``` ## Related Documentation - [Client Proto Generation](./client-proto-generation.md) - [Gateway Process Detailed Design](./gateway-process-design.md) - [MXAccess Worker Instance Detailed Design](./mxaccess-worker-instance-design.md) - [Protobuf Style Guide](./style-guides/ProtobufStyleGuide.md)