# OPS-001B persistent notification verification Date: 2026-08-02 Status: `IMPLEMENTED — NOT VERIFIED`. Repository, real-SQLite and generated provider checks pass. MariaDB execution, owner API/UI/browser checks and production rollout remain. ## Verified locally - Terminal success, permanent failure and cancellation each persist exactly one generic owner notification. - The terminal operation mutation and notification insert share one relational transaction. A synthetic notification `SaveChanges` failure rolls the operation back to `running` and leaves no notification. - Retryable failure creates no premature notification; duplicate completion/cancellation creates no duplicate. - Lease-expiry failure/cancellation and queued-deadline failure use the same terminal transaction path. - Owner query filters deny cross-user list/read/dismiss mutations. Unread, read and dismissed states behave consistently across file-backed SQLite contexts. - Notifications contain bounded generic text and references only; no raw operation or private failure content is copied. - The additive migration upgrades, downgrades and re-upgrades a disposable SQLite database. The model snapshot is current. - Generated SQLite and MariaDB up/down scripts are under `docs/audits/evidence/ops-001b/`. MariaDB DDL uses bounded strings and `datetime(6)`; it was inspected but not executed. ## Commands and results - `dotnet test ... --filter FullyQualifiedName~UserOperationStoreTests`: PASS — 9/9. - `dotnet test JobTrackerApi.Tests/JobTrackerApi.Tests.csproj --no-restore`: PASS — 541/541. - `dotnet ef migrations script ...` for SQLite and MariaDB up/down: PASS after correcting the design-time MariaDB connection-string key; the invalid first output was overwritten. - `dotnet ef database update` notification/up, operation/down, notification/up against disposable SQLite: PASS. - `dotnet ef migrations has-pending-model-changes ... --no-build`: PASS — none. - `git diff --check`: PASS — line-ending notices only. ## Limitations No MariaDB server, production environment or browser localhost access is available. No email was sent and no worker was enabled. API/UI verification belongs to OPS-001C; feature handlers and production canaries remain later packages.