# 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.
