diff --git a/CLAUDE.md b/CLAUDE.md index bf44902..12fef36 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -15,6 +15,42 @@ The architecture is a two-process design — read `gateway.md` before making str The worker must do all MXAccess COM calls on its dedicated STA thread, and the STA loop must pump Windows messages (`MsgWaitForMultipleObjectsEx` + `PeekMessage`/`DispatchMessage`) so MXAccess events deliver. A plain blocking queue on an STA is not enough. +## Sister Projects (scadaproj umbrella) + +`mxaccessgw` is one of a family of related SCADA / OT / Wonderware / OPC UA **sister +projects** cloned as sibling directories under `~/Desktop/`. They are **separate repos +and separate processes**, coupled at runtime over wire protocols (gRPC + OPC UA) — not +by project/compile references — and share the `ZB.MOM.WW.*` product namespace. **mxaccessgw +is the linchpin**: the only component that loads 32-bit MXAccess COM, so the others depend +on it over gRPC rather than touching COM directly. + +- **`~/Desktop/scadaproj`** ([`../scadaproj/CLAUDE.md`](../scadaproj/CLAUDE.md)) — the + umbrella/index workspace that aggregates the whole family (purpose, location, stack, + primary commands per project) and hosts the shared `ZB.MOM.WW.*` libraries, the dev/test + GLAuth (`10.100.0.35:3893`, source of truth `scadaproj/infra/glauth/`), and the shared + **`ZB.MOM.WW.GalaxyRepository`** package this gateway consumes. **This repo is indexed + there** — see the MxAccessGateway entry in `../scadaproj/CLAUDE.md`. +- **`~/Desktop/OtOpcUa`** (`lmxopcua`, [`../OtOpcUa/CLAUDE.md`](../OtOpcUa/CLAUDE.md)) — OPC + UA server whose in-process `GalaxyDriver` **depends on this gateway** for live Galaxy + read/write/subscribe and Galaxy Repository browse. +- **`~/Desktop/ScadaBridge`** ([`../ScadaBridge/CLAUDE.md`](../ScadaBridge/CLAUDE.md)) — + distributed SCADA platform whose Data Connection Layer has a dedicated **MxGateway + adapter** that talks to this gateway directly (native MxAccess data + A&C alarms), + bypassing OtOpcUa. +- **`~/Desktop/HistorianGateway`** (`historiangw`, + [`../HistorianGateway/CLAUDE.md`](../HistorianGateway/CLAUDE.md)) — single-process gRPC + sidecar **patterned on this gateway** (session model, dashboard shell, auth interceptor, + Galaxy SQL browse) but with no COM / no x86 worker. It also consumes the shared + `ZB.MOM.WW.GalaxyRepository` package — the same library mxaccessgw adopted (2026-06-25), + so the `galaxy_repository.v1` wire contract is served from one implementation. + +**Propagate cross-repo changes to the umbrella index.** When a fact the index records about +mxaccessgw changes here — remote/push status, the `.proto` contracts (`mxaccess_gateway.proto`, +`mxaccess_worker.proto`, `galaxy_repository.proto`), the two-process architecture, shared-lib +consumption, or per-project commands — update the **MxAccessGateway entry in +[`../scadaproj/CLAUDE.md`](../scadaproj/CLAUDE.md)** in the same change so the umbrella index +never drifts from this repo. (Mirrors the same rule in the peer repos.) + ## Build, Test, Run ```powershell