Docs & Rules

RedHatInsights/notifications-backendGitHubLast refreshed Oct 3, 2026

This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works

master5fe6929listed 8h ago

Is this yours? Install to manage it

Once installed, Striff checks every pull request.

75
51
1
2
3
3
2
1
7
1
4
27
23
23
1
25 docs, listed Oct 3
RedHatInsights/notifications-backendOpen repository

RedHatInsights/notifications-backend — documented rules

75 of 75 rules, printed October 3, 2026.

The sentence in your docs
Read Oct 2
the SnakeCasePhysicalNamingStrategy in common translates to snake_case column names automatically.
SnakeCasePhysicalNamingStrategy is in common
Holds
Read Oct 2
Domain-specific page types (e.g., EndpointPage) extend Page<T>.
EndpointPage extends Page
Holds
Read Oct 2
**MessageHandler** -- Override handle(IncomingCloudEventMetadata<JsonObject>) to perform the external call. Return HandledMessageDetails (or HandledHttpMessageDetails for HTTP connectors). Mark as @ApplicationScoped.
MessageHandler is annotated with ApplicationScoped
Holds
Read Oct 2
EventConsumer reads from the ingress channel with @Incoming and @Blocking.
EventConsumer is annotated with Incoming, and EventConsumer is annotated with Blocking
HoldsPR #4157 · Oct 2
Read Oct 2
Connector configs extend the inheritance chain: ConnectorConfig -> HttpConnectorConfig -> specific connector config (e.g., EmailConnectorConfig).
HttpConnectorConfig extends ConnectorConfig
Holds
Read Oct 2
Connector configs extend the inheritance chain: ConnectorConfig -> HttpConnectorConfig -> specific connector config (e.g., EmailConnectorConfig).
EmailConnectorConfig extends HttpConnectorConfig
Holds
Read Oct 2
For org-scoped toggles, build context via UnleashContextBuilder.buildUnleashContextWithOrgId(orgId).
UnleashContextBuilder has a buildUnleashContextWithOrgId method
Holds
Read Oct 2
Use @JsonIgnoreProperties(ignoreUnknown = true) on request models that may receive extra fields from clients (e.g., CreateBehaviorGroupRequest, UpdateBehaviorGroupRequest, SettingsValuesByEventType).
CreateBehaviorGroupRequest is annotated with JsonIgnoreProperties
Holds
Read Oct 2
Use @JsonIgnoreProperties(ignoreUnknown = true) on request models that may receive extra fields from clients (e.g., CreateBehaviorGroupRequest, UpdateBehaviorGroupRequest, SettingsValuesByEventType).
UpdateBehaviorGroupRequest is annotated with JsonIgnoreProperties
Holds
Read Oct 2
Use @JsonIgnoreProperties(ignoreUnknown = true) on request models that may receive extra fields from clients (e.g., CreateBehaviorGroupRequest, UpdateBehaviorGroupRequest, SettingsValuesByEventType).
SettingsValuesByEventType is annotated with JsonIgnoreProperties
Holds
Read Oct 2
Override additionalPrePersist() for entity-specific initialization (e.g., generating UUIDs in Endpoint).
Endpoint has an additionalPrePersist method
Holds
Read Oct 2
For large result sets, fetch IDs first, then load full entities by ID list (see EventRepository.getEvents two-query pattern).
EventRepository has getEvents
Holds
Read Oct 2
MessageConsumer reads from incomingmessages channel, filters by x-rh-notifications-connector header, and delegates to MessageHandler.handle().
MessageConsumer depends on MessageHandler
HoldsPR #4157 · Oct 2
Read Oct 2
RbacClientResponseFilter and LogLevelManager use java.util.logging.Logger because they interact with JUL-level APIs directly.
RbacClientResponseFilter imports java.util.logging.Logger
Holds
Read Oct 2
RbacClientResponseFilter and LogLevelManager use java.util.logging.Logger because they interact with JUL-level APIs directly.
LogLevelManager imports java.util.logging.Logger
Holds
Read Oct 2
RbacClientResponseFilter and LogLevelManager use java.util.logging.Logger because they interact with JUL-level APIs directly.
RbacClientResponseFilter uses java.util.logging.Logger
Holds
Read Oct 2
RbacClientResponseFilter and LogLevelManager use java.util.logging.Logger because they interact with JUL-level APIs directly.
LogLevelManager uses java.util.logging.Logger
Holds
Read Oct 2
The LogLevelManager class in common-unleash handles this.
LogLevelManager is in common-unleash
HoldsPR #4157 · Oct 2
Read Oct 2
ValkeyHealthCheck is both @Readiness and @Liveness.
ValkeyHealthCheck is annotated with Readiness
Holds
Read Oct 2
ValkeyHealthCheck is both @Readiness and @Liveness.
ValkeyHealthCheck is annotated with Liveness
Holds
Read Oct 2
ExportEventListener imports io.smallrye.common.annotation.Blocking instead.
ExportEventListener imports io.smallrye.common.annotation.Blocking
HoldsPR #4157 · Oct 2
Read Oct 2
The RbacServiceToService interface has two implementations following the dual-client pattern: **OIDC** (RbacServiceToServiceOidc): annotated with @OidcClientFilter, config key rbac-s2s-oidc.
RbacServiceToServiceOidc is annotated with OidcClientFilter
HoldsPR #4157 · Oct 2
Read Oct 2
Both follow the same OIDC/PSK dual-client pattern: **OIDC** (SourcesOidcClient): config key sources-oidc, uses @OidcClientFilter.
SourcesOidcClient is annotated with OidcClientFilter
Holds
Read Oct 2
**PSK** (RbacServiceToServicePsk): uses AuthRequestFilter to inject x-rh-rbac-psk and x-rh-rbac-client-id headers, config key rbac-s2s.
RbacServiceToServicePsk depends on AuthRequestFilter
HoldsPR #4157 · Oct 2
Read Oct 2
**OIDC** (RbacWorkspacesOidcClient): config key rbac-authentication-oidc, uses @OidcClientFilter.
RbacWorkspacesOidcClient is annotated with OidcClientFilter
HoldsPR #4157 · Oct 2
Read Oct 2
Templates are registered in static Map<TemplateDefinition, String> fields inside mapping classes under com.redhat.cloud.notifications.qute.templates.mapping. Each mapping class corresponds to a product bundle: Mapping class Rhel, Bundle rhel
Rhel is in com.redhat.cloud.notifications.qute.templates.mapping
Holds
Read Oct 2
Mapping class OpenShift, Bundle openshift
OpenShift is in com.redhat.cloud.notifications.qute.templates.mapping
Holds
Read Oct 2
Mapping class Console, Bundle console
Console is in com.redhat.cloud.notifications.qute.templates.mapping
Holds
Read Oct 2
Mapping class SubscriptionServices, Bundle subscription-services
SubscriptionServices is in com.redhat.cloud.notifications.qute.templates.mapping
Holds
Read Oct 2
Extension class ActionExtension, Methods available in templates context.propertyName (dynamic property access on Context ), payload.propertyName (on Payload ), action.toPrettyJson()
ActionExtension is in com.redhat.cloud.notifications.qute.templates.extensions
Holds
Read Oct 2
Extension class ActionExtension, Methods available in templates context.propertyName (dynamic property access on Context ), payload.propertyName (on Payload ), action.toPrettyJson()
ActionExtension has a toPrettyJson method
Holds
Read Oct 2
Extension class LocalDateTimeExtension, Methods available in templates date.toUtcFormat() , date.toStringFormat() , date.toTimeAgo() , string.toUtcFormat() , string.toStringFormat() , string.toTimeAgo()
LocalDateTimeExtension is in com.redhat.cloud.notifications.qute.templates.extensions
Holds
Read Oct 2
Extension class LocalDateTimeExtension, Methods available in templates date.toUtcFormat() , date.toStringFormat() , date.toTimeAgo() , string.toUtcFormat() , string.toStringFormat() , string.toTimeAgo()
LocalDateTimeExtension has a toUtcFormat method
Holds
Read Oct 2
Extension class LocalDateTimeExtension, Methods available in templates date.toUtcFormat() , date.toStringFormat() , date.toTimeAgo() , string.toUtcFormat() , string.toStringFormat() , string.toTimeAgo()
LocalDateTimeExtension has a toStringFormat method
Holds
Read Oct 2
Extension class LocalDateTimeExtension, Methods available in templates date.toUtcFormat() , date.toStringFormat() , date.toTimeAgo() , string.toUtcFormat() , string.toStringFormat() , string.toTimeAgo()
LocalDateTimeExtension has a toTimeAgo method
Holds
Read Oct 2
Extension class SeverityExtension, Methods available in templates string.severityAsEmailTitle() , string.toTitleCase() , string.asSeverityEmoji() , string.asPatternFlySeverity()
SeverityExtension is in com.redhat.cloud.notifications.qute.templates.extensions
Holds
Read Oct 2
Extension class SeverityExtension, Methods available in templates string.severityAsEmailTitle() , string.toTitleCase() , string.asSeverityEmoji() , string.asPatternFlySeverity()
SeverityExtension has a severityAsEmailTitle method
Holds
Read Oct 2
Extension class SeverityExtension, Methods available in templates string.severityAsEmailTitle() , string.toTitleCase() , string.asSeverityEmoji() , string.asPatternFlySeverity()
SeverityExtension has a toTitleCase method
Holds
Read Oct 2
Extension class SeverityExtension, Methods available in templates string.severityAsEmailTitle() , string.toTitleCase() , string.asSeverityEmoji() , string.asPatternFlySeverity()
SeverityExtension has an asSeverityEmoji method
Holds
Read Oct 2
Extension class SeverityExtension, Methods available in templates string.severityAsEmailTitle() , string.toTitleCase() , string.asSeverityEmoji() , string.asPatternFlySeverity()
SeverityExtension has an asPatternFlySeverity method
Holds
Read Oct 2
Extension class UrlEncodingExtension, Methods available in templates string.urlEncode()
UrlEncodingExtension is in com.redhat.cloud.notifications.qute.templates.extensions
Holds
Read Oct 2
Extension class UrlEncodingExtension, Methods available in templates string.urlEncode()
UrlEncodingExtension has an urlEncode method
Holds
Read Oct 2
Extension class ErrataSortExtension, Methods available in templates list.sortErrataSecurityArray() , list.sortErrataArray()
ErrataSortExtension is in com.redhat.cloud.notifications.qute.templates.extensions
Holds
Read Oct 2
Extension class ErrataSortExtension, Methods available in templates list.sortErrataSecurityArray() , list.sortErrataArray()
ErrataSortExtension has a sortErrataSecurityArray method
Holds
Read Oct 2
Extension class ErrataSortExtension, Methods available in templates list.sortErrataSecurityArray() , list.sortErrataArray()
ErrataSortExtension has a sortErrataArray method
Holds
Read Oct 2
Extension class ApplicationServicesSortExtension, Methods available in templates map.sortByProductDescription() , list.sortByEventTypeDisplayName()
ApplicationServicesSortExtension has a sortByProductDescription method
Holds
Read Oct 2
Extension class ApplicationServicesSortExtension, Methods available in templates map.sortByProductDescription() , list.sortByEventTypeDisplayName()
ApplicationServicesSortExtension has a sortByEventTypeDisplayName method
Holds
Read Oct 2
TemplateService is an @ApplicationScoped CDI bean initialized at @Startup.
TemplateService is annotated with ApplicationScoped, and TemplateService is annotated with Startup
Holds
Read Oct 2
Method renderTemplate(TemplateDefinition, Map<String, Object>), Use case Drawer/Slack/Teams/Chat data map is passed under "data" key
TemplateService has a renderTemplate method
Holds
Read Oct 2
Method renderTemplateWithCustomDataMap(TemplateDefinition, Map<String, Object>), Use case Email full context map with keys like action , environment , pendo_message , ignore_user_preferences
TemplateService has a renderTemplateWithCustomDataMap method
Holds
Read Oct 2
Method isValidTemplateDefinition(TemplateDefinition), Use case Checks if a template exists without throwing
TemplateService has an isValidTemplateDefinition method
Holds
Read Oct 2
Method convertActionToContextMap(Action), Use case Converts Action.context to Map for aggregation templates
TemplateService has a convertActionToContextMap method
Holds
Read Oct 2
getIntegrations, getIntegration, getIntegrationHistory, getIntegrationHistoryDetails
IntegrationTools has getIntegrations
Holds
Read Oct 2
getIntegrations, getIntegration, getIntegrationHistory, getIntegrationHistoryDetails
IntegrationTools has getIntegration
Holds
Read Oct 2
getIntegrations, getIntegration, getIntegrationHistory, getIntegrationHistoryDetails
IntegrationTools has getIntegrationHistory
Holds
Read Oct 2
getIntegrations, getIntegration, getIntegrationHistory, getIntegrationHistoryDetails
IntegrationTools has getIntegrationHistoryDetails
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has createIntegration
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has updateIntegration
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has enableIntegration
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has disableIntegration
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has testIntegration
Holds
Read Oct 2
createIntegration, updateIntegration, enableIntegration, disableIntegration, testIntegration, deleteIntegration
IntegrationTools has deleteIntegration
Holds
Read Oct 2
addEventTypeToIntegration, deleteEventTypeFromIntegration, updateEventTypesLinkedToIntegration
IntegrationTools has addEventTypeToIntegration
Holds
Read Oct 2
addEventTypeToIntegration, deleteEventTypeFromIntegration, updateEventTypesLinkedToIntegration
IntegrationTools has deleteEventTypeFromIntegration
Holds
Read Oct 2
addEventTypeToIntegration, deleteEventTypeFromIntegration, updateEventTypesLinkedToIntegration
IntegrationTools has updateEventTypesLinkedToIntegration
Holds
Read Oct 2
**RhIdentity** - Record holding parsed identity fields (type, orgId, accountId, userId, username)
RhIdentity has a type field
Holds
Read Oct 2
**RhIdentity** - Record holding parsed identity fields (type, orgId, accountId, userId, username)
RhIdentity has an orgId field
Holds
Read Oct 2
**RhIdentity** - Record holding parsed identity fields (type, orgId, accountId, userId, username)
RhIdentity has an accountId field
Holds
Read Oct 2
**RhIdentity** - Record holding parsed identity fields (type, orgId, accountId, userId, username)
RhIdentity has an userId field
Holds
Read Oct 2
**RhIdentity** - Record holding parsed identity fields (type, orgId, accountId, userId, username)
RhIdentity has an username field
Holds
Read Oct 2
Health (/q/health) and metrics (/q/metrics) paths are exempt — see McpAuthMechanism.ANONYMOUS_PATHS.
McpAuthMechanism has ANONYMOUS_PATHS
Holds
Read Oct 2
parseUuid(paramName, value) - Parse and validate UUID parameters
McpToolUtils has a parseUuid method
Holds
Read Oct 2
parseDate(paramName, value) - Parse yyyy-MM-dd date strings to LocalDate
McpToolUtils has a parseDate method
Holds
Read Oct 2
executeRestCall(toolName, principal, restCall, registry) - Execute REST calls with error handling and metrics
McpToolUtils has an executeRestCall method
Holds
Read Oct 2
httpErrorMessage(status) - User-friendly error messages for HTTP status codes
McpToolUtils has a httpErrorMessage method
Holds
75 rules from 12 docs

See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.