docs: final-review nits — test-stub wording, README tech-stack row, UI-audit follow-up

This commit is contained in:
Joseph Doherty
2026-08-10 07:07:00 -04:00
parent 05d0631cdd
commit ba994a59c5
2 changed files with 7 additions and 2 deletions
+1 -1
View File
@@ -16,7 +16,7 @@ This repository is the full **implementation** project for ScadaBridge — the C
| Central Database | MS SQL Server, Entity Framework Core | | Central Database | MS SQL Server, Entity Framework Core |
| Site Storage | SQLite (deployed configs, S&F buffer, event logs) | | Site Storage | SQLite (deployed configs, S&F buffer, event logs) |
| Authentication | Direct LDAP/AD bind (LDAPS/StartTLS), JWT sessions | | Authentication | Direct LDAP/AD bind (LDAPS/StartTLS), JWT sessions |
| Notifications | Delivered from the central cluster (Email via SMTP/OAuth2-M365; SMS via Twilio REST); store-and-forwarded from sites | | Notifications | Delivered from the central cluster (Email via SMTP/OAuth2-M365 or on-prem Exchange EWS; SMS via Twilio REST); store-and-forwarded from sites |
| Hosting | Windows Server, Windows Service | | Hosting | Windows Server, Windows Service |
| Cluster | Akka.NET Cluster (active/standby, keep-oldest SBR) | | Cluster | Akka.NET Cluster (active/standby, keep-oldest SBR) |
| Logging | Serilog (structured) | | Logging | Serilog (structured) |
@@ -137,7 +137,7 @@ call (~200 lines including classification).
three fields are now pinned. three fields are now pinned.
### 4.5 Testing (owner decision: fake stub + live gate) ### 4.5 Testing (owner decision: fake stub + live gate)
- **Unit:** `EwsSoapMailSender` against an in-process fake EWS endpoint (Kestrel `TestServer`) - **Unit:** `EwsSoapMailSender` against a stubbed `HttpMessageHandler` (in-process fake EWS endpoint)
asserting the Basic header, envelope shape (BCC-only, SendOnly, escaping) and driving canned asserting the Basic header, envelope shape (BCC-only, SendOnly, escaping) and driving canned
`CreateItemResponse` success / SOAP-fault / HTTP-error bodies through the sender's `CreateItemResponse` success / SOAP-fault / HTTP-error bodies through the sender's
classification (see §4.3 — no standalone classifier type); classification (see §4.3 — no standalone classifier type);
@@ -184,3 +184,8 @@ Raised while implementing; none blocking, none scheduled here.
scrubbed on its own; EWS messages are still covered by the packed `username:password` and scrubbed on its own; EWS messages are still covered by the packed `username:password` and
base64 Basic-auth scrubs, which comfortably exceed the floor. Revisit if a code path ever base64 Basic-auth scrubs, which comfortably exceed the floor. Revisit if a code path ever
surfaces a bare short password. surfaces a bare short password.
4. **Central UI SMTP page bypasses audit.** `SmtpConfiguration.razor` writes through
`INotificationRepository` directly (pre-existing pattern), so a UI change to `Transport` or the
EWS credential produces no audit row, while the same change via CLI/API is audited by
`ManagementActor`. Made more consequential by EWS; route the page through
`UpdateSmtpConfigCommand` (or add a direct audit call) in a follow-up.