Files
mxaccessgw/docs/audit/fragments/11-clients.md
T

342 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: 5152
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: 159160
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: 193194, 201, 217, 225227
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:2526 — `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 <session-id> --max-messages 1 --json`
CLAIM_TYPE: command
VERDICT: wrong
EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:282295 — `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 <session-id> --alarm-reference "\\Galaxy\Area001.Pump001.PumpFault" --json`
CLAIM_TYPE: command
VERDICT: wrong
EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:298311 — `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: 3536
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:911) 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: 2830
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 <prefix>] [--max-events <n>]`
CLAIM_TYPE: command
VERDICT: accurate
EVIDENCE: clients/rust/crates/mxgw-cli/src/main.rs:282295 — `StreamAlarms` struct has `filter_prefix: Option<String>`, `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:140 — 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:1516 — `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: 2223
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 — `<Version>0.1.0</Version>`; clients/dotnet/ZB.MOM.WW.MxGateway.Client/ZB.MOM.WW.MxGateway.Client.csproj:21 — `<PackageId>ZB.MOM.WW.MxGateway.Client</PackageId>`
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: 310312
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 2529 — `-Version` and `-Push` parameters exist
CODE_AREA: client.go
SEVERITY: low
PROPOSED_FIX: flag only
---
DOC: clients/python/README.md
LINES: 288290
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: 257274
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: 297299
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: 3940
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: 265267
CLAIM: Build and test with `gradle test` from `clients/java`
CLAIM_TYPE: command
VERDICT: accurate
EVIDENCE: clients/java/settings.gradle:2526 — `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