The backend logs, at Error level on startup, that the MediatR commercial license has expired:
[Error] Your license for the Lucky Penny software MediatR expired 1 days ago.
[Error] Please visit https://luckypennysoftware.com to obtain a valid license for the Lucky Penny software MediatR.
MediatR (now Lucky Penny Software) is paid-licensed from v13+, and it mediates effectively all CQRS commands/queries in SpikerSoft.Business. The license lapsed ~1 day ago.
Why fix proactively
Compliance: running a commercial library on an expired license.
Risk: license enforcement currently logs errors; depending on the MediatR version's enforcement policy this can escalate (nagging → startup refusal in future versions). Since MediatR is on the hot path for nearly every request, any hard enforcement would be a broad outage.
It's cluttering the Seq Error stream on every startup (triage noise).
Actions
Renew / obtain a valid MediatR (Lucky Penny) license key and configure it (typically services.AddMediatR(cfg => cfg.LicenseKey = "...") or the LuckyPenny:LicenseKey config the version expects). Store it as a secret, not in appsettings.json.
If the licensing cost isn't wanted, evaluate pinning to the last MIT-licensed MediatR (v12.x) or migrating to an OSS alternative — but that's a larger change; renewal is the immediate fix.
Confirm the expired Error stops appearing in Seq after deploy.
Where
SpikerSoft.Business MediatR registration (the AddMediatR(...) call in the API/Business DI setup).
Filed proactively by automated health check (Seq centralized error audit).
## Summary
The backend logs, at `Error` level on startup, that the **MediatR commercial license has expired**:
```
[Error] Your license for the Lucky Penny software MediatR expired 1 days ago.
[Error] Please visit https://luckypennysoftware.com to obtain a valid license for the Lucky Penny software MediatR.
```
MediatR (now Lucky Penny Software) is paid-licensed from v13+, and it mediates effectively all CQRS commands/queries in `SpikerSoft.Business`. The license lapsed ~1 day ago.
## Why fix proactively
- **Compliance:** running a commercial library on an expired license.
- **Risk:** license enforcement currently logs errors; depending on the MediatR version's enforcement policy this can escalate (nagging → startup refusal in future versions). Since MediatR is on the hot path for nearly every request, any hard enforcement would be a broad outage.
- It's cluttering the Seq `Error` stream on every startup (triage noise).
## Actions
1. Renew / obtain a valid MediatR (Lucky Penny) license key and configure it (typically `services.AddMediatR(cfg => cfg.LicenseKey = "...")` or the `LuckyPenny:LicenseKey` config the version expects). Store it as a secret, not in `appsettings.json`.
2. If the licensing cost isn't wanted, evaluate pinning to the last MIT-licensed MediatR (v12.x) or migrating to an OSS alternative — but that's a larger change; renewal is the immediate fix.
3. Confirm the `expired` Error stops appearing in Seq after deploy.
## Where
`SpikerSoft.Business` MediatR registration (the `AddMediatR(...)` call in the API/Business DI setup).
---
_Filed proactively by automated health check (Seq centralized error audit)._
Resolved in spikersoft-backend PR #212 (merged to master): Joey's renewed Lucky Penny key installed (decoded exp 2027-07-12 — calendar the next renewal for early July 2027). Also fixed along the way: the config section was typo'd MediaR (code + appsettings renamed to MediatR in lockstep), and the Notifications worker — the one other deployed MediatR host — had no license wiring at all and now reads MediatR:LicenseKey. Verification: after CI rolls the API + notifications images, the two 'license expired' Error events disappear from Seq startup logs. Key remains committed-config per the existing pattern; the README §9 Docker-secrets migration should take it along when it happens. Closing.
Resolved in spikersoft-backend PR #212 (merged to master): Joey's renewed Lucky Penny key installed (decoded exp 2027-07-12 — calendar the next renewal for early July 2027). Also fixed along the way: the config section was typo'd MediaR (code + appsettings renamed to MediatR in lockstep), and the Notifications worker — the one other deployed MediatR host — had no license wiring at all and now reads MediatR:LicenseKey. Verification: after CI rolls the API + notifications images, the two 'license expired' Error events disappear from Seq startup logs. Key remains committed-config per the existing pattern; the README §9 Docker-secrets migration should take it along when it happens. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
The backend logs, at
Errorlevel on startup, that the MediatR commercial license has expired:MediatR (now Lucky Penny Software) is paid-licensed from v13+, and it mediates effectively all CQRS commands/queries in
SpikerSoft.Business. The license lapsed ~1 day ago.Why fix proactively
Errorstream on every startup (triage noise).Actions
services.AddMediatR(cfg => cfg.LicenseKey = "...")or theLuckyPenny:LicenseKeyconfig the version expects). Store it as a secret, not inappsettings.json.expiredError stops appearing in Seq after deploy.Where
SpikerSoft.BusinessMediatR registration (theAddMediatR(...)call in the API/Business DI setup).Filed proactively by automated health check (Seq centralized error audit).
Resolved in spikersoft-backend PR #212 (merged to master): Joey's renewed Lucky Penny key installed (decoded exp 2027-07-12 — calendar the next renewal for early July 2027). Also fixed along the way: the config section was typo'd MediaR (code + appsettings renamed to MediatR in lockstep), and the Notifications worker — the one other deployed MediatR host — had no license wiring at all and now reads MediatR:LicenseKey. Verification: after CI rolls the API + notifications images, the two 'license expired' Error events disappear from Seq startup logs. Key remains committed-config per the existing pattern; the README §9 Docker-secrets migration should take it along when it happens. Closing.