AlertsQBitAlertSink now calls core QAlerts directly (raise, resolve, heartbeat, plus QAlertTypeMetaData registration). No reflection, no apiPackage constructor, no Class.forName.
Behaviour is unchanged:
it stays quiet when no alerts implementation is installed;
custom sinks still win;
an alerting failure is logged once and never fails a backup.
Deletes the alerts/fakeapi test doubles; the tests use the real core types.
Renamed alert types, because RC.5 rejects underscores in alert names:
The dedup keys change the same way. Hosts with routing rules on the old names must update them.
TableFingerprints, TableReader and StandardRestoreWriter are tagged STAND-IN(..., removeBy=4.1.0-RC.6). They switch to core TableSchemaFingerprint/KeysetPager in the RC.6 bump, the second half of #19.
Tests
mvnw -B verify (Docker ITs included): 151 tests, 0 failures. Coverage is 87.22% instructions and 97.06% classes.
## Summary
The "now" part of #19 (architecture review QRun-IO/qqq#1150, finding F3).
- Bumps to **QQQ 4.1.0-RC.5**.
- `AlertsQBitAlertSink` now calls core `QAlerts` directly (`raise`, `resolve`, `heartbeat`, plus `QAlertTypeMetaData` registration). No reflection, no `apiPackage` constructor, no `Class.forName`.
- Behaviour is unchanged:
- it stays quiet when no alerts implementation is installed;
- custom sinks still win;
- an alerting failure is logged once and never fails a backup.
- Deletes the `alerts/fakeapi` test doubles; the tests use the real core types.
- **Renamed alert types**, because RC.5 rejects underscores in alert names:
- `backups.run.missing_in_storage` becomes `backups.run.missing-in-storage`;
- `backups.plan.owner_invalid` becomes `backups.plan.owner-invalid`.
The dedup keys change the same way. Hosts with routing rules on the old names must update them.
- `TableFingerprints`, `TableReader` and `StandardRestoreWriter` are tagged `STAND-IN(..., removeBy=4.1.0-RC.6)`. They switch to core `TableSchemaFingerprint`/`KeysetPager` in the RC.6 bump, the second half of #19.
## Tests
`mvnw -B verify` (Docker ITs included): 151 tests, 0 failures. Coverage is 87.22% instructions and 97.06% classes.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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 "now" part of #19 (architecture review QRun-IO/qqq#1150, finding F3).
Bumps to QQQ 4.1.0-RC.5.
AlertsQBitAlertSinknow calls coreQAlertsdirectly (raise,resolve,heartbeat, plusQAlertTypeMetaDataregistration). No reflection, noapiPackageconstructor, noClass.forName.Behaviour is unchanged:
Deletes the
alerts/fakeapitest doubles; the tests use the real core types.Renamed alert types, because RC.5 rejects underscores in alert names:
backups.run.missing_in_storagebecomesbackups.run.missing-in-storage;backups.plan.owner_invalidbecomesbackups.plan.owner-invalid.The dedup keys change the same way. Hosts with routing rules on the old names must update them.
TableFingerprints,TableReaderandStandardRestoreWriterare taggedSTAND-IN(..., removeBy=4.1.0-RC.6). They switch to coreTableSchemaFingerprint/KeysetPagerin the RC.6 bump, the second half of #19.Tests
mvnw -B verify(Docker ITs included): 151 tests, 0 failures. Coverage is 87.22% instructions and 97.06% classes.🤖 Generated with Claude Code