diff --git a/docs/v2/dev-environment.md b/docs/v2/dev-environment.md index c0bf25c..c38ef39 100644 --- a/docs/v2/dev-environment.md +++ b/docs/v2/dev-environment.md @@ -59,8 +59,8 @@ Running record of every v2 dev service stood up on this developer machine. Updat | Service | Container / Process | Version | Host:Port | Credentials (dev-only) | Data location | Status | |---------|---------------------|---------|-----------|------------------------|---------------|--------| | **Central config DB** | Docker container `otopcua-mssql` (image `mcr.microsoft.com/mssql/server:2022-latest`) | 16.0.4250.1 (RTM-CU24-GDR, KB5083252) | `localhost:14330` (host) → `1433` (container) — remapped from 1433 to avoid collision with the native MSSQL14 instance that hosts the Galaxy `ZB` DB (both bind 0.0.0.0:1433; whichever wins the race gets connections) | User `sa` / Password `OtOpcUaDev_2026!` | Docker named volume `otopcua-mssql-data` (mounted at `/var/opt/mssql` inside container) | ✅ Running — `InitialSchema` migration applied, 16 entity tables live | -| Dev Galaxy (AVEVA System Platform) | Local install on this dev box | v1 baseline | Local COM via MXAccess | Windows Auth | Galaxy repository DB `ZB` on local SQL Server (separate instance from `otopcua-mssql` — legacy v1 Galaxy DB, not related to v2 config DB) | ✅ Available (per CLAUDE.md) | -| GLAuth (LDAP) | Local install at `C:\publish\glauth\` | v1 baseline | `localhost:3893` (LDAP) / `3894` (LDAPS) | Bind DN `cn=admin,dc=otopcua,dc=local` / password in `glauth-otopcua.cfg` | `C:\publish\glauth\` | Pending — v2 test users + groups config not yet seeded (Phase 1 Stream E task) | +| Dev Galaxy (AVEVA System Platform) | Local install on this dev box — full ArchestrA + Historian + OI-Server stack | v1 baseline | Local COM via MXAccess (`C:\Program Files (x86)\ArchestrA\Framework\bin\ArchestrA.MXAccess.dll`); Historian via `aaH*` services; SuiteLink via `slssvc` | Windows Auth | Galaxy repository DB `ZB` on local SQL Server (separate instance from `otopcua-mssql` — legacy v1 Galaxy DB, not related to v2 config DB) | ✅ **Fully available — Phase 2 lift unblocked.** 27 ArchestrA / AVEVA / Wonderware services running incl. `aaBootstrap`, `aaGR` (Galaxy Repository), `aaLogger`, `aaUserValidator`, `aaPim`, `ArchestrADataStore`, `AsbServiceManager`, `AutoBuild_Service`; full Historian set (`aahClientAccessPoint`, `aahGateway`, `aahInSight`, `aahSearchIndexer`, `aahSupervisor`, `InSQLStorage`, `InSQLConfiguration`, `InSQLEventSystem`, `InSQLIndexing`, `InSQLIOServer`, `InSQLManualStorage`, `InSQLSystemDriver`, `HistorianSearch-x64`); `slssvc` (Wonderware SuiteLink); `OI-Gateway` install present at `C:\Program Files (x86)\Wonderware\OI-Server\OI-Gateway\` (decision #142 AppServer-via-OI-Gateway smoke test now also unblocked) | +| GLAuth (LDAP) | Local install at `C:\publish\glauth\` | v2.4.0 | `localhost:3893` (LDAP) / `3894` (LDAPS, disabled) | Direct-bind `cn={user},dc=lmxopcua,dc=local` per `auth.md`; users `readonly`/`writeop`/`writetune`/`writeconfig`/`alarmack`/`admin`/`serviceaccount` (passwords in `glauth.cfg` as SHA-256) | `C:\publish\glauth\` | ✅ Running (NSSM service `GLAuth`). Phase 1 Admin uses GroupToRole map `ReadOnly→ConfigViewer`, `WriteOperate→ConfigEditor`, `AlarmAck→FleetAdmin`. v2-rebrand to `dc=otopcua,dc=local` is a future cosmetic change | | OPC Foundation reference server | Not yet built | — | `localhost:62541` (target) | `user1` / `password1` (reference-server defaults) | — | Pending (needed for Phase 5 OPC UA Client driver testing) | | FOCAS TCP stub | Not yet built | — | `localhost:8193` (target) | n/a | — | Pending (built in Phase 5) | | Modbus simulator (`oitc/modbus-server`) | — | — | `localhost:502` (target) | n/a | — | Pending (needed for Phase 3 Modbus driver; moves to integration host per two-tier model) | diff --git a/docs/v2/implementation/phase-2-partial-exit-evidence.md b/docs/v2/implementation/phase-2-partial-exit-evidence.md index efa7599..11c11f5 100644 --- a/docs/v2/implementation/phase-2-partial-exit-evidence.md +++ b/docs/v2/implementation/phase-2-partial-exit-evidence.md @@ -4,14 +4,29 @@ > deferred. See `phase-2-galaxy-out-of-process.md` for the full task plan; this is the as-built > delta. -## Status: **Streams A + B + C scaffolded and test-green. Streams D + E deferred.** +## Status: **Streams A + B + C scaffolded and test-green. Streams D + E deferred — runtime now in place.** The goal per the plan is "parity, not regression" — the phase exit gate requires v1 IntegrationTests to pass against the v2 Galaxy.Proxy + Galaxy.Host topology byte-for-byte. Achieving that requires live MXAccess runtime plus the Galaxy code lift out of the legacy -`OtOpcUa.Host`. Both are operations that need a dev Galaxy up and a parity test cycle to verify. -Without that cycle, deleting the legacy Host would break the 494 passing v1 tests that are the -parity baseline. +`OtOpcUa.Host`. Without that cycle, deleting the legacy Host would break the 494 passing v1 +tests that are the parity baseline. + +> **Update 2026-04-17 — runtime confirmed local.** The dev box has the full AVEVA stack required +> for the LmxOpcUa breakout: 27 ArchestrA / Wonderware / AVEVA services running including +> `aaBootstrap`, `aaGR` (Galaxy Repository), `aaLogger`, `aaUserValidator`, `aaPim`, +> `ArchestrADataStore`, `AsbServiceManager`; the full Historian set +> (`aahClientAccessPoint`, `aahGateway`, `aahInSight`, `aahSearchIndexer`, `InSQLStorage`, +> `InSQLConfiguration`, `InSQLEventSystem`, `InSQLIndexing`, `InSQLIOServer`, +> `HistorianSearch-x64`); SuiteLink (`slssvc`); MXAccess COM at +> `C:\Program Files (x86)\ArchestrA\Framework\bin\ArchestrA.MXAccess.dll`; and the OI-Gateway +> install at `C:\Program Files (x86)\Wonderware\OI-Server\OI-Gateway\` (so the +> AppServer-via-OI-Gateway smoke test from decision #142 is *also* runnable here, not blocked +> on a dedicated AVEVA test box). +> +> The "needs a dev Galaxy" prerequisite is therefore satisfied. Stream D + E can start whenever +> the team is ready to take the parity-cycle hit on the 494 v1 tests; no environmental blocker +> remains. What *is* done: all scaffolding, IPC contracts, supervisor logic, and stability protections needed to hang the real MXAccess code onto. Every piece has unit-level or IPC-level test @@ -151,13 +166,20 @@ Requires live MXAccess + Galaxy runtime and the above lift complete. Work items: ## Next-session checklist for Stream D + E -1. Stand up dev Galaxy; capture Client.CLI walkthrough baseline against v1. -2. Move Galaxy-specific files from `OtOpcUa.Host` into `Driver.Galaxy.Host`, renaming +1. Verify the local AVEVA stack is still green (`Get-Service aaGR, aaBootstrap, slssvc` → + Running) and the Galaxy `ZB` repository is reachable from `sqlcmd -S localhost -d ZB -E`. + The runtime is already on this machine — no install step needed. +2. Capture Client.CLI walkthrough baseline against v1 (the parity reference). +3. Move Galaxy-specific files from `OtOpcUa.Host` into `Driver.Galaxy.Host`, renaming namespaces. Replace `StubFrameHandler` with the real one. -3. Wire up the real Win32 pump inside `StaPump` (lift from scadalink-design's +4. Wire up the real Win32 pump inside `StaPump` (lift from scadalink-design's `LmxProxy.Host` reference per CLAUDE.md). -4. Run v1 IntegrationTests against the v2 topology — iterate on parity defects until green. -5. Run Client.CLI walkthrough and diff. -6. Regression tests for the four stability findings. -7. Delete legacy `OtOpcUa.Host`; update `.slnx`; update installer scripts. -8. Adversarial review; `exit-gate-phase-2.md` recorded; PR merged. +5. Run v1 IntegrationTests against the v2 topology — iterate on parity defects until green. +6. Run Client.CLI walkthrough and diff. +7. Regression tests for the four 2026-04-13 stability findings. +8. Delete legacy `OtOpcUa.Host`; update `.slnx`; update installer scripts. +9. Optional but valuable now that the runtime is local: AppServer-via-OI-Gateway smoke test + (decision #142 / Phase 1 Task E.10) — the OI-Gateway install at + `C:\Program Files (x86)\Wonderware\OI-Server\OI-Gateway\` is in place; the test was deferred + for "needs live AVEVA runtime" reasons that no longer apply on this dev box. +10. Adversarial review; `exit-gate-phase-2.md` recorded; PR merged. diff --git a/docs/v2/plan.md b/docs/v2/plan.md index c7676fc..b6282ce 100644 --- a/docs/v2/plan.md +++ b/docs/v2/plan.md @@ -234,6 +234,8 @@ All of these stay in the Galaxy Host process (.NET 4.8 x86). The `GalaxyProxy` i - Refactor is **incremental**: extract `IDriver` / `ISubscribable` / `ITagDiscovery` etc. against the existing `LmxNodeManager` first (still in-process on v2 branch), validate the system still runs, *then* move the implementation behind the IPC boundary into Galaxy.Host. Keeps the system runnable at each step and de-risks the out-of-process move. - **Parity test**: run the existing v1 IntegrationTests suite against the v2 Galaxy driver (same Galaxy, same expectations) **plus** a scripted Client.CLI walkthrough (connect / browse / read / write / subscribe / history / alarms) on a dev Galaxy. Automated regression + human-observable behavior. +**Dev environment for the LmxOpcUa breakout:** the Phase 0/1 dev box (`DESKTOP-6JL3KKO`) hosts the full AVEVA stack required to execute Phase 2 Streams D + E — 27 ArchestrA / Wonderware / AVEVA services running including `aaBootstrap`, `aaGR` (Galaxy Repository), `aaLogger`, `aaUserValidator`, `aaPim`, `ArchestrADataStore`, `AsbServiceManager`; the full Historian set (`aahClientAccessPoint`, `aahGateway`, `aahInSight`, `aahSearchIndexer`, `InSQLStorage`, `InSQLConfiguration`, `InSQLEventSystem`, `InSQLIndexing`, `InSQLIOServer`, `HistorianSearch-x64`); SuiteLink (`slssvc`); MXAccess COM at `C:\Program Files (x86)\ArchestrA\Framework\bin\ArchestrA.MXAccess.dll`; and OI-Gateway at `C:\Program Files (x86)\Wonderware\OI-Server\OI-Gateway\` — so the Phase 1 Task E.10 AppServer-via-OI-Gateway smoke test (decision #142) is also runnable on the same box, no separate AVEVA test machine required. Inventory captured in `dev-environment.md`. + --- ### 4. Configuration Model — Centralized MSSQL + Local Cache