diff --git a/docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md b/docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md index 7dabdc4..d741dae 100644 --- a/docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md +++ b/docs/plans/2026-06-01-zb-mom-ww-configuration-shared-library.md @@ -8,8 +8,11 @@ startup-options-validation toolkit — a failure-accumulating `IValidateOptions< rule primitives, a bind+validate+`ValidateOnStart` DI helper, and a pre-host `ConfigPreflight` aggregator — removing the duplicated validation plumbing the three sister apps each hand-roll. -**Architecture:** A new standalone nested repo (`~/Desktop/scadaproj/ZB.MOM.WW.Configuration`), -.NET 10, one library project `ZB.MOM.WW.Configuration` with four public types +**Architecture:** A new self-contained solution directory committed into the outer `scadaproj` +repo at `~/Desktop/scadaproj/ZB.MOM.WW.Configuration` (same layout as the sibling +`ZB.MOM.WW.Telemetry`/`Health`/`Auth`/`Theme` — regular tracked files, **not** a submodule and +**not** a separate `.git`; build output `bin/`/`obj/`/`artifacts/` is gitignored). .NET 10, one +library project `ZB.MOM.WW.Configuration` with four public types (`OptionsValidatorBase`, `ValidationBuilder`, `ServiceCollectionExtensions`, `ConfigPreflight`) over one internal `Checks` helper that keeps rule wording identical across the two front-ends (options-object validation vs raw-`IConfiguration` preflight). Scope is **startup @@ -61,9 +64,10 @@ format is `" "`. **Conventions for every task:** TDD — failing test first, minimal impl, green, commit. File-scoped namespaces, `sealed` by default, XML doc comments on public members (match the sibling libs). -Library work is committed inside the nested repo `~/Desktop/scadaproj/ZB.MOM.WW.Configuration`; -docs/registry work is committed in the outer `scadaproj` repo. The `Files:` block IS the -`files_to_edit` contract. +**All work — library and docs — is committed to the outer `scadaproj` repo on branch +`feat/zb-mom-ww-configuration`** (the library is tracked files inside it, like the sibling libs; +there is no separate nested `.git`). `dotnet build`/`test` may `cd` into the library dir, but every +`git commit` targets the outer repo. The `Files:` block IS the `files_to_edit` contract. **Source references (read-only, to verify current-state against — do NOT modify):** - OtOpcUa: `~/Desktop/OtOpcUa/src/Core/ZB.MOM.WW.OtOpcUa.Configuration/Validation/{DraftValidator,DraftSnapshot}.cs` (draft validation stays per-project) @@ -243,17 +247,17 @@ plan; README status table links resolve. ``` -**Step 6: init repo + verify restore/build** +**Step 6: verify restore/build** (NO `git init` — the library is tracked inside the outer repo) ```bash -cd ~/Desktop/scadaproj/ZB.MOM.WW.Configuration && git init -q +cd ~/Desktop/scadaproj/ZB.MOM.WW.Configuration dotnet build ZB.MOM.WW.Configuration.slnx ``` Expected: build succeeds (0 source files yet → empty assembly is fine). -**Step 7: Commit** (nested repo) +**Step 7: Commit** (outer repo, branch `feat/zb-mom-ww-configuration`) ```bash -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration add -A -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration commit -m "chore: scaffold ZB.MOM.WW.Configuration solution" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "chore: scaffold ZB.MOM.WW.Configuration solution" ``` --- @@ -463,8 +467,8 @@ cd ~/Desktop/scadaproj/ZB.MOM.WW.Configuration && dotnet test **Step 6: Commit** (nested repo) ```bash -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration add -A -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration commit -m "feat: Checks primitives + ValidationBuilder" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "feat: Checks primitives + ValidationBuilder" ``` --- @@ -559,11 +563,11 @@ public abstract class OptionsValidatorBase : IValidateOptions" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "feat: OptionsValidatorBase" ``` --- @@ -669,11 +673,11 @@ public static class ServiceCollectionExtensions } ``` -**Step 4: Run — expect PASS**, then **Commit** (nested repo) +**Step 4: Run — expect PASS**, then **Commit** (outer repo) ```bash cd ~/Desktop/scadaproj/ZB.MOM.WW.Configuration && dotnet test -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration add -A -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration commit -m "feat: AddValidatedOptions bind+validate+ValidateOnStart" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "feat: AddValidatedOptions bind+validate+ValidateOnStart" ``` --- @@ -825,11 +829,11 @@ public sealed class ConfigPreflight } ``` -**Step 4: Run — expect PASS**, then **Commit** (nested repo) +**Step 4: Run — expect PASS**, then **Commit** (outer repo) ```bash cd ~/Desktop/scadaproj/ZB.MOM.WW.Configuration && dotnet test -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration add -A -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration commit -m "feat: ConfigPreflight raw-config aggregator" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "feat: ConfigPreflight raw-config aggregator" ``` --- @@ -862,8 +866,8 @@ Expected: all tests green; exactly one `.nupkg` at `0.1.0`. **Step 4: Commit** (nested repo) ```bash -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration add -A -git -C ~/Desktop/scadaproj/ZB.MOM.WW.Configuration commit -m "docs: README + CLAUDE.md; verify 0.1.0 pack" +git -C ~/Desktop/scadaproj add ZB.MOM.WW.Configuration +git -C ~/Desktop/scadaproj commit -m "docs: README + CLAUDE.md; verify 0.1.0 pack" ``` ---