c72271aa8a
Claude-Session: https://claude.ai/code/session_01Wzg6NUCWHipSexLs2cgRFv
108 lines
6.0 KiB
Markdown
108 lines
6.0 KiB
Markdown
# ZB.MOM.WW.Configuration
|
|
|
|
Startup configuration-validation library for the **ZB.MOM.WW SCADA family** (OtOpcUa, MxAccessGateway, ScadaBridge). These are **libraries, not a service** — the package is linked directly into the consuming application at build time. There is no central validation process; all validation runs in-process at startup.
|
|
|
|
The library normalizes the three-project configuration-validation surface: a failure-accumulating `IValidateOptions` base, reusable rule primitives, a bind+validate+`ValidateOnStart` DI extension, and a pre-host `ConfigPreflight` aggregator for raw `IConfiguration` — so the plumbing is written once and domain rules stay per-project.
|
|
|
|
**Built at 0.1.0. Adopted by OtOpcUa, MxAccessGateway, and ScadaBridge on 2026-06-01** (local default branches; not yet pushed to remotes). Adoption tracked in `~/Desktop/scadaproj/components/configuration/GAPS.md`.
|
|
|
|
---
|
|
|
|
## Package
|
|
|
|
| Package | Responsibilities | Key Dependencies |
|
|
|---|---|---|
|
|
| `ZB.MOM.WW.Configuration` | `OptionsValidatorBase<TOptions>` (abstract `IValidateOptions` base, failure-accumulating), `ValidationBuilder` (rule primitives: `Required`, `Port`, `HostPort`, `PositiveTimeSpan`, `OneOf`, `MinCount`, `RequireThat`, `Add`), `ServiceCollectionExtensions.AddValidatedOptions` (bind + validator + `ValidateOnStart` in one call), `ConfigPreflight` (fluent pre-host raw-`IConfiguration` checker). | `Microsoft.Extensions.Options`, `Microsoft.Extensions.Options.ConfigurationExtensions`, `Microsoft.Extensions.Configuration.Abstractions`, `Microsoft.Extensions.DependencyInjection.Abstractions` |
|
|
|
|
Single package; no ASP.NET Core framework reference.
|
|
|
|
---
|
|
|
|
## Build, test, and pack commands
|
|
|
|
```bash
|
|
# From ZB.MOM.WW.Configuration/
|
|
|
|
# Build
|
|
dotnet build ZB.MOM.WW.Configuration.slnx
|
|
|
|
# Test (no external dependencies required)
|
|
dotnet test ZB.MOM.WW.Configuration.slnx
|
|
|
|
# Pack (one .nupkg lands in artifacts/)
|
|
dotnet pack ZB.MOM.WW.Configuration.slnx -c Release -o ./artifacts
|
|
```
|
|
|
|
Test breakdown:
|
|
|
|
| Assembly | Tests |
|
|
|---|---|
|
|
| `ZB.MOM.WW.Configuration.Tests` | 27 |
|
|
| **Total** | **27** |
|
|
|
|
`GeneratePackageOnBuild` is off — pack explicitly with the command above.
|
|
|
|
---
|
|
|
|
## Source layout
|
|
|
|
```
|
|
ZB.MOM.WW.Configuration/
|
|
├── Directory.Build.props # version (0.1.0), TFM (net10.0), central package mgmt
|
|
├── Directory.Packages.props # pinned package versions
|
|
├── ZB.MOM.WW.Configuration.slnx # solution file
|
|
├── src/
|
|
│ └── ZB.MOM.WW.Configuration/ # library project
|
|
│ ├── OptionsValidatorBase.cs
|
|
│ ├── ValidationBuilder.cs
|
|
│ ├── Checks.cs # internal shared rule wording
|
|
│ ├── ServiceCollectionExtensions.cs
|
|
│ └── ConfigPreflight.cs
|
|
└── tests/
|
|
└── ZB.MOM.WW.Configuration.Tests/ # xUnit test project (27 tests)
|
|
```
|
|
|
|
---
|
|
|
|
## Status
|
|
|
|
Part of the **scadaproj component-normalization family** — this is the configuration + validation component. Built at **0.1.0**. **Adopted by OtOpcUa, MxAccessGateway, and ScadaBridge on 2026-06-01** (local default branches; not yet pushed to remotes) — per-app result is tracked in:
|
|
|
|
- `~/Desktop/scadaproj/components/configuration/GAPS.md`
|
|
|
|
Design documentation:
|
|
|
|
- `~/Desktop/scadaproj/components/configuration/spec/SPEC.md` — normalized validation target
|
|
- `~/Desktop/scadaproj/components/configuration/shared-contract/ZB.MOM.WW.Configuration.md` — proposed shared-library API
|
|
- `~/Desktop/scadaproj/components/configuration/current-state/` — per-project current state (code-verified)
|
|
|
|
## Index history (migrated from the scadaproj root CLAUDE.md)
|
|
|
|
> Moved verbatim out of the scadaproj root `CLAUDE.md` on 2026-09-03 so it loads only when needed. **This file is now the authoritative place for this history — append new entries here and keep the root index row short.**
|
|
|
|
### Narrative
|
|
|
|
The configuration component is fully populated: a normalized [`spec`](components/configuration/spec/SPEC.md), a
|
|
[`shared-contract`](components/configuration/shared-contract/ZB.MOM.WW.Configuration.md), three
|
|
[`current-state`](components/configuration/current-state/) docs, and an adoption [`GAPS`](components/configuration/GAPS.md)
|
|
backlog. Shared = the `IValidateOptions<T>` failure-accumulation base (`OptionsValidatorBase<T>`) +
|
|
reusable rule primitives (`ValidationBuilder`: port / host:port / required / positive-duration / one-of /
|
|
min-count) + `AddValidatedOptions<TOptions,TValidator>()` (bind + validate + `ValidateOnStart`) + the
|
|
pre-host `ConfigPreflight` aggregator (generalizes ScadaBridge's `StartupValidator`, byte-compatible
|
|
message); left per-project = each app's options classes + domain rules, and OtOpcUa's
|
|
draft/generation-content validation (DB-side `sp_ValidateDraft`; its C# `DraftValidator` is dormant).
|
|
|
|
The shared library is **built and lives in this repo** at [`ZB.MOM.WW.Configuration/`](ZB.MOM.WW.Configuration/)
|
|
(.NET 10; single package `ZB.MOM.WW.Configuration`; 42 tests (verified 2026-07-18); `dotnet pack` → 1 nupkg @ 0.1.0).
|
|
The implementation plan is at
|
|
[`docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md`](docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md).
|
|
**Adopted across all three apps on 2026-06-01** (OtOpcUa, MxAccessGateway, ScadaBridge) on each repo's
|
|
local default branch (`main`/`master`) — merged, **not yet pushed** to remotes; the package was first
|
|
published to the Gitea feed. Behaviour-preserving onto `OptionsValidatorBase`/`AddValidatedOptions`
|
|
for MxGateway + ScadaBridge (validator messages byte-identical), `StartupValidator` → `ConfigPreflight`
|
|
for ScadaBridge, and net-new `Ldap`/`OpcUa` validators for OtOpcUa. Per-app result tracked in
|
|
[`components/configuration/GAPS.md`](components/configuration/GAPS.md).
|
|
Build/test from `ZB.MOM.WW.Configuration/`: `dotnet test`. Consumer matrix: all three apps consume the
|
|
single package; ScadaBridge is the heaviest adopter (per-module validators + `StartupValidator` →
|
|
`ConfigPreflight`); OtOpcUa adoption is additive (it has no `IValidateOptions` usage today).
|