diff --git a/ZB.MOM.WW.Secrets/CHANGELOG.md b/ZB.MOM.WW.Secrets/CHANGELOG.md new file mode 100644 index 0000000..e9c7571 --- /dev/null +++ b/ZB.MOM.WW.Secrets/CHANGELOG.md @@ -0,0 +1,67 @@ +# Changelog + +All notable changes to the `ZB.MOM.WW.Secrets` family are recorded here. Format loosely +follows [Keep a Changelog](https://keepachangelog.com/); versions are shared across every +package in the family (see `Directory.Build.props`) even when a given release only touches +one of them. + +## 0.4.0 — 2026-08-07 + +### Added + +- **New package `ZB.MOM.WW.Secrets.Replicator.Grpc`** — a central-hosted `secrets_hub.v1` + gRPC hub for the sites-talk-to-central production topology (scadaproj#3; design doc + [`docs/plans/2026-08-07-secrets-production-topology-and-grpc-hub.md`](../docs/plans/2026-08-07-secrets-production-topology-and-grpc-hub.md)). + - **Pull-only by construction**: the proto exposes no write RPC. Updates originate at + central only; a site never pushes a secret upstream. + - **Fail-closed bearer auth** on the hub server: constant-time comparison, uniform denial + response (no signal distinguishing "wrong token" from "missing token"), a warn-once log + on an unconfigured/empty token rather than a silent open door. + - `GetSecrets` enforces a batch-size cap, rejecting an oversized request with + `ResourceExhausted` instead of serving it partially or unbounded. + - Site-side `GrpcSecretSyncService` sweeps the hub on an interval with **per-row parse + isolation** — one malformed/undecryptable row logs and is skipped, it does not fault the + whole sweep. + - Keyed `GrpcChannel` registration so multiple hub targets can be wired in one process + without channel collisions. + - **Offline behavior is last-known-good**: if the hub is unreachable, the site keeps + serving the most recently synced values rather than failing secret resolution. + +### Unchanged + +- `ZB.MOM.WW.Secrets.Abstractions`, `ZB.MOM.WW.Secrets`, `ZB.MOM.WW.Secrets.Ui`, + `ZB.MOM.WW.Secrets.Replicator.SqlServer`, and `ZB.MOM.WW.Secrets.Replicator.AkkaDotNet` are + behaviorally unchanged in this release — no breaking changes to any existing package. + +## 0.3.0 — 2026-07-19 + +- Menu-driven Spectre.Console interactive operator console added to the `secret` CLI (list / + set / reveal / delete, reference audit & seed, KEK doctor, ciphertext-only bundle + export/import). See + [`docs/operations/interactive-console.md`](docs/operations/interactive-console.md). + +## 0.2.3 — 2026-07-19 + +- `ZB.MOM.WW.Secrets.Ui`: fixed the delete-confirmation modal being permanently invisible on + every Bootstrap host (`ConfirmDeleteModal` used bare `class="modal"` with no shipped CSS; + Bootstrap's `.modal{display:none}` hid it everywhere but mxaccessgw). Fixed via a + `zb-secrets-modal*` class rename plus a component-emitted `