Surfaced by the first real CI run on the self-hosted runner:
- scripts/check-codegen.ps1: `git status --porcelain` returns $null on a clean
tree, so `.Trim()` threw "cannot call a method on a null-valued expression" —
i.e. Check 2 could never report success. Pipe through Out-String (null -> '').
- clients/rust/protos/mxaccess_worker.proto: genuinely stale — missing the
canonical `max_frame_bytes` field. Refreshed from
src/ZB.MOM.WW.MxGateway.Contracts/Protos (Check 3 drift guard, added in P1).
- ci.yml java job: act cannot resolve the gradle/actions monorepo action
(`unsupported object type` on the v4 tag); install Gradle 9.5.1 directly instead
(matches the local build) since the repo has no gradle wrapper.
Claude-Session: https://claude.ai/code/session_01DMXXvNuPekkkrTEyPNxEkW
build.rs resolved the .proto files via a monorepo-relative path and packaging
relied on `cargo publish --no-verify` to hide the resulting failure. Vendor the
three canonical protos into clients/rust/protos/, resolve them via
CARGO_MANIFEST_DIR (in-repo path preferred, vendored fallback for the packaged
crate), ship them via Cargo.toml `include`, and drop `--no-verify` from
pack-clients.ps1.
archreview: CLI-02 (P1). Verified: cargo fmt/check/test (28) + clippy -D warnings,
and `cargo package` (no --no-verify) compiles standalone in the isolated staging
dir — the out-of-repo proof. Vendored-proto drift is guarded by check-codegen.ps1.