# Cluster 11 — Clients Auditor: automated read-only audit Date: 2026-06-03 Scope: clients/dotnet, clients/go, clients/java, clients/python, clients/rust — README.md, *ClientDesign.md; docs/ClientLibrariesDesign.md; docs/ClientPackaging.md --- DOC: docs/ClientPackaging.md LINES: 51–52 CLAIM: Build and test commands reference `clients/dotnet/ZB.MOM.WW.MxGateway.Client.sln` (`.sln` extension) CLAIM_TYPE: command VERDICT: wrong EVIDENCE: clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx:1 — only a `.slnx` file exists; no `.sln` file is present CODE_AREA: client.dotnet SEVERITY: high PROPOSED_FIX: Replace `.sln` with `.slnx` in both `dotnet build` and `dotnet test` lines: `dotnet build clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx` / `dotnet test clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx --no-build` --- DOC: docs/ClientPackaging.md LINES: 159–160 CLAIM: "The Python package is `mxaccess-gateway-client`. Generated modules live under `clients/python/src/mxgateway/generated`." CLAIM_TYPE: config-key VERDICT: wrong EVIDENCE: clients/python/pyproject.toml:6 — `name = "zb-mom-ww-mxaccess-gateway-client"`; clients/python/src/zb_mom_ww_mxgateway/generated/ — actual generated path CODE_AREA: client.python SEVERITY: high PROPOSED_FIX: Correct both: package name → `zb-mom-ww-mxaccess-gateway-client`; generated path → `clients/python/src/zb_mom_ww_mxgateway/generated` --- DOC: docs/ClientPackaging.md LINES: 187 CLAIM: `python -m mxgateway_cli version --json` CLAIM_TYPE: command VERDICT: wrong EVIDENCE: clients/python/src/zb_mom_ww_mxgateway_cli/__main__.py — actual module is `zb_mom_ww_mxgateway_cli`; clients/python/pyproject.toml:48 — entry point `zb_mom_ww_mxgateway_cli.commands:main` CODE_AREA: client.python SEVERITY: high PROPOSED_FIX: Replace with `python -m zb_mom_ww_mxgateway_cli version --json` --- DOC: docs/ClientPackaging.md LINES: 193–194, 201, 217, 225–227 CLAIM: Java workspace uses `mxgateway-client` and `mxgateway-cli` as subproject names; Gradle task paths use `:mxgateway-client:generateProto`, `:mxgateway-client:jar`, `:mxgateway-cli:installDist`, `:mxgateway-cli:run` CLAIM_TYPE: command VERDICT: wrong EVIDENCE: clients/java/settings.gradle:25–26 — `include 'zb-mom-ww-mxgateway-client'` and `include 'zb-mom-ww-mxgateway-cli'`; Gradle task paths are derived from subproject names CODE_AREA: client.java SEVERITY: high PROPOSED_FIX: Replace all `:mxgateway-client:` references with `:zb-mom-ww-mxgateway-client:` and `:mxgateway-cli:` with `:zb-mom-ww-mxgateway-cli:` throughout ClientPackaging.md --- DOC: clients/rust/README.md LINES: 65 CLAIM: `cargo run -p mxgw-cli -- stream-alarms --session-id --max-messages 1 --json` CLAIM_TYPE: command VERDICT: wrong EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:282–295 — `StreamAlarms` struct has fields `filter_prefix`, `max_events`, `json`, `jsonl` (via `ConnectionArgs`); no `session_id`, flag is `--max-events` not `--max-messages` CODE_AREA: client.rust SEVERITY: high PROPOSED_FIX: Replace with `cargo run -p mxgw-cli -- stream-alarms --max-events 1 --json` (no `--session-id`; change `--max-messages` to `--max-events`) --- DOC: clients/rust/README.md LINES: 66 CLAIM: `cargo run -p mxgw-cli -- acknowledge-alarm --session-id --alarm-reference "\\Galaxy\Area001.Pump001.PumpFault" --json` CLAIM_TYPE: command VERDICT: wrong EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:298–311 — `AcknowledgeAlarm` struct has fields `reference`, `comment`, `operator`, `json` (via `ConnectionArgs`); flag is `--reference` not `--alarm-reference`, and `session_id` is absent CODE_AREA: client.rust SEVERITY: high PROPOSED_FIX: Replace with `cargo run -p mxgw-cli -- acknowledge-alarm --reference "\\Galaxy\Area001.Pump001.PumpFault" --json` --- DOC: clients/go/README.md LINES: 143 CLAIM: `import pb "gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go/internal/generated/galaxy_repository/v1"` CLAIM_TYPE: path VERDICT: wrong EVIDENCE: clients/go/internal/generated/ — flat directory; all .pb.go files are `package generated`. Actual import path used in library code: `"gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go/internal/generated"` (clients/go/mxgateway/galaxy.go:11, types.go:3, session.go:13) CODE_AREA: client.go SEVERITY: high PROPOSED_FIX: Replace the import path with `pb "gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go/internal/generated"` (drop the `/galaxy_repository/v1` suffix) --- DOC: docs/ClientLibrariesDesign.md LINES: 410 CLAIM: Python generated code lives under `clients/python/src/mxgateway/generated` CLAIM_TYPE: path VERDICT: wrong EVIDENCE: clients/python/src/zb_mom_ww_mxgateway/generated/ — actual path; no `mxgateway` directory under `src/` CODE_AREA: client.python SEVERITY: high PROPOSED_FIX: Replace with `clients/python/src/zb_mom_ww_mxgateway/generated` --- DOC: clients/dotnet/DotnetClientDesign.md LINES: 35–36 CLAIM: Layout includes `ZB.MOM.WW.MxGateway.Client.IntegrationTests/` project CLAIM_TYPE: path VERDICT: wrong EVIDENCE: `ls clients/dotnet/` — directory does not exist; `.slnx` file (clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx:9–11) contains only three projects (Client, Cli, Tests) CODE_AREA: client.dotnet SEVERITY: medium PROPOSED_FIX: Remove the `ZB.MOM.WW.MxGateway.Client.IntegrationTests/` entry from the layout section, or note it as "not yet created" --- DOC: clients/python/PythonClientDesign.md LINES: 215 CLAIM: "Publishable package name should be stable, for example: `mxaccess-gateway-client`" CLAIM_TYPE: config-key VERDICT: stale EVIDENCE: clients/python/pyproject.toml:6 — actual name is `zb-mom-ww-mxaccess-gateway-client`; the "example" name was never adopted CODE_AREA: client.python SEVERITY: medium PROPOSED_FIX: Update the example to `zb-mom-ww-mxaccess-gateway-client` to reflect the chosen name --- DOC: clients/dotnet/DotnetClientDesign.md LINES: 55 CLAIM: "`Grpc.Tools` for generation" listed as an expected package CLAIM_TYPE: config-key VERDICT: stale EVIDENCE: clients/dotnet/ZB.MOM.WW.MxGateway.Client/ZB.MOM.WW.MxGateway.Client.csproj — no `Grpc.Tools` reference; the client uses a project reference to the shared contracts csproj for generated types. clients/dotnet/README.md:17 correctly notes this is "reserved for future use" CODE_AREA: client.dotnet SEVERITY: medium PROPOSED_FIX: Remove `Grpc.Tools` from the "Expected packages" list or qualify it as "future, if client-local generation is adopted" --- DOC: clients/go/GoClientDesign.md LINES: 28–30 CLAIM: `internal/generated/` contains only `mxaccess_gateway.pb.go` and `mxaccess_gateway_grpc.pb.go` CLAIM_TYPE: path VERDICT: stale EVIDENCE: clients/go/internal/generated/ — 5 files present: `galaxy_repository.pb.go`, `galaxy_repository_grpc.pb.go`, `mxaccess_gateway.pb.go`, `mxaccess_gateway_grpc.pb.go`, `mxaccess_worker.pb.go` CODE_AREA: client.go SEVERITY: medium PROPOSED_FIX: Add the missing galaxy_repository and mxaccess_worker generated files to the layout listing --- DOC: docs/ClientPackaging.md LINES: 116 CLAIM: "The Rust workspace builds the `mxgateway-client` library crate and the `mxgw` CLI crate." CLAIM_TYPE: term VERDICT: wrong EVIDENCE: clients/rust/Cargo.toml:2 — `name = "zb-mom-ww-mxgateway-client"`; crates/mxgw-cli/Cargo.toml:4 — package name `mxgw-cli`, binary name `mxgw` CODE_AREA: client.rust SEVERITY: medium PROPOSED_FIX: Change "mxgateway-client" to "zb-mom-ww-mxgateway-client" (the library crate name); "mxgw CLI crate" is acceptable since the binary is named `mxgw` --- DOC: clients/rust/RustClientDesign.md LINES: 278 CLAIM: `mxgw stream-alarms [--filter-prefix ] [--max-events ]` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:282–295 — `StreamAlarms` struct has `filter_prefix: Option`, `max_events: usize`; test at line 2053 confirms `--max-events` flag name CODE_AREA: client.rust SEVERITY: low PROPOSED_FIX: flag only — design doc is accurate; the discrepancy is in README.md (already captured above) --- DOC: docs/ClientPackaging.md LINES: (no entry) CLAIM: (gap) `scripts/pack-clients.ps1` — the canonical multi-language pack and publish script — is not mentioned in ClientPackaging.md CLAIM_TYPE: behavior-rule VERDICT: gap EVIDENCE: scripts/pack-clients.ps1:1–40 — packs all five clients into `dist/`, supports `-Publish` to upload to Gitea feeds; ClientPackaging.md has no reference to it CODE_AREA: client.packaging SEVERITY: medium PROPOSED_FIX: Add a "Packing all clients at once" section to ClientPackaging.md pointing to `scripts/pack-clients.ps1` with the example invocations from the script's `.SYNOPSIS` --- DOC: docs/ClientPackaging.md LINES: (no entry for Python build method) CLAIM: (gap) Python README and ClientPackaging.md document `pip wheel . --no-deps` as the build command; `scripts/pack-clients.ps1` uses `python -m build` (the PEP 517 standard tool). The dev dependency `build>=1.2,<2` is listed in pyproject.toml but the README's wheel command bypasses it. CLAIM_TYPE: command VERDICT: gap EVIDENCE: clients/python/pyproject.toml:43 — `"build>=1.2,<2"` in dev deps; scripts/pack-clients.ps1:156 — `python -m build`; clients/python/README.md:43 — `pip wheel . --no-deps` CODE_AREA: client.python SEVERITY: low PROPOSED_FIX: Note in Python README and ClientPackaging.md that `python -m build` (using the `build` package already in dev deps) is the canonical wheel-build method; `pip wheel` is an alternative --- DOC: clients/java/README.md LINES: 37 CLAIM: `gradle :zb-mom-ww-mxgateway-client:generateProto` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: clients/java/settings.gradle:25 — `include 'zb-mom-ww-mxgateway-client'`; build.gradle:4 — `id 'com.google.protobuf'` applied to that subproject CODE_AREA: client.java SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/java/README.md LINES: 314 CLAIM: `implementation 'com.zb.mom.ww.mxgateway:zb-mom-ww-mxgateway-client:0.1.0'` CLAIM_TYPE: config-key VERDICT: accurate EVIDENCE: clients/java/build.gradle:15–16 — `group = 'com.zb.mom.ww.mxgateway'`, `version = '0.1.0'`; subproject name `zb-mom-ww-mxgateway-client` is the artifact ID CODE_AREA: client.java SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/rust/README.md LINES: 83 CLAIM: "tonic 0.13.1 exposes no public hook to inject a custom certificate verifier" CLAIM_TYPE: version VERDICT: accurate EVIDENCE: clients/rust/Cargo.toml:40 — `tonic = { version = "0.13.1", features = ["transport", "tls-ring"] }` CODE_AREA: client.rust SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/dotnet/README.md LINES: 22–23 CLAIM: Build and test with `dotnet build clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx` / `dotnet test clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx --no-build` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: clients/dotnet/ZB.MOM.WW.MxGateway.Client.slnx:1 — file exists with `.slnx` extension CODE_AREA: client.dotnet SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/dotnet/README.md LINES: 331 CLAIM: `dotnet add package ZB.MOM.WW.MxGateway.Client --version 0.1.0` CLAIM_TYPE: version VERDICT: accurate EVIDENCE: clients/dotnet/Directory.Build.props:14 — `0.1.0`; clients/dotnet/ZB.MOM.WW.MxGateway.Client/ZB.MOM.WW.MxGateway.Client.csproj:21 — `ZB.MOM.WW.MxGateway.Client` CODE_AREA: client.dotnet SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/go/README.md LINES: 292, 297 CLAIM: `go get gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go@v0.1.0`; import `"gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go/mxgateway"` CLAIM_TYPE: path VERDICT: accurate EVIDENCE: clients/go/go.mod:1 — `module gitea.dohertylan.com/dohertj2/mxaccessgw/clients/go`; `mxgateway/` subdirectory exists CODE_AREA: client.go SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/go/README.md LINES: 310–312 CLAIM: `pwsh scripts/tag-go-module.ps1 -Version v0.1.1 -Push` creates an annotated tag `clients/go/v0.1.1` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: scripts/tag-go-module.ps1:39 — `$tag = "clients/go/$Version"`; line 54 — `git tag -a $tag`; line 25–29 — `-Version` and `-Push` parameters exist CODE_AREA: client.go SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/python/README.md LINES: 288–290 CLAIM: `pip install --index-url https://gitea.dohertylan.com/api/packages/dohertj2/pypi/simple/ zb-mom-ww-mxaccess-gateway-client` CLAIM_TYPE: path VERDICT: accurate EVIDENCE: clients/python/pyproject.toml:6 — `name = "zb-mom-ww-mxaccess-gateway-client"` matches the pip install name CODE_AREA: client.python SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/rust/README.md LINES: 257–274 CLAIM: Gitea Cargo registry at `sparse+https://gitea.dohertylan.com/api/packages/dohertj2/cargo/`, registry name `dohertj2-gitea`, crate `zb-mom-ww-mxgateway-client = { version = "0.1.0", registry = "dohertj2-gitea" }` CLAIM_TYPE: path VERDICT: accurate EVIDENCE: clients/rust/Cargo.toml:14 — `publish = ["dohertj2-gitea"]`; version = "0.1.0"; registry name matches CODE_AREA: client.rust SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/java/README.md LINES: 297–299 CLAIM: Maven feed at `https://gitea.dohertylan.com/api/packages/dohertj2/maven`; publish via `gradle :zb-mom-ww-mxgateway-client:publish` CLAIM_TYPE: path VERDICT: accurate EVIDENCE: clients/java/build.gradle:72 — `url = 'https://gitea.dohertylan.com/api/packages/dohertj2/maven'`; `maven-publish` plugin applied to `zb-mom-ww-mxgateway-client` CODE_AREA: client.java SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/go/README.md LINES: 39–40 CLAIM: Build and test with `go test ./...` / `go build ./...` / `go vet ./...` from `clients/go` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: clients/go/go.mod:1 — module root at clients/go; standard Go toolchain commands apply CODE_AREA: client.go SEVERITY: low PROPOSED_FIX: flag only --- DOC: clients/java/README.md LINES: 265–267 CLAIM: Build and test with `gradle test` from `clients/java` CLAIM_TYPE: command VERDICT: accurate EVIDENCE: clients/java/settings.gradle:25–26 — `include 'zb-mom-ww-mxgateway-client'` and `include 'zb-mom-ww-mxgateway-cli'`; root `build.gradle` applies `useJUnitPlatform()` to all java subprojects CODE_AREA: client.java SEVERITY: low PROPOSED_FIX: flag only