Skip to content

Rule Catalogue

nfr-review ships 125 rules across 6 categories (security, reliability, performance, maintainability, observability, structure) and 3 analysis bands:

Band Name How it works
1 Static Pattern-matching on files, manifests, and ASTs — no external data needed
2 Composite Combines multiple collectors or uses LLM analysis for deeper inference
3 Dynamic Analyses runtime traces collected via OpenTelemetry

Use the search box and filters below to find rules relevant to your stack. Click a column header to sort.

Showing 125 of 125 rules

Rule IDSevBandCategoryDescriptionTagsCompliance
actuator-exposure-riskcritical1securityFlags Spring Boot actuator endpoints exposed without access restriction.javaspringactuatorISO 25010:SecurityOWASP:A01
apim-auth-policy-missingcritical1securityFlags Azure API Management policies that lack authentication configuration.apimazureauthISO 25010:SecurityOWASP:A01
dockerfile-secret-leakagecritical1securityFlags Dockerfiles that COPY/ADD secret files or expose secrets via ARG/ENV.dockersecretsISO 25010:SecurityOWASP:A02
helm-secret-leakagecritical1securityFlags plaintext secrets in Helm values.yaml and rendered manifest templates.helmsecretsISO 25010:SecurityOWASP:A02
istio-mtls-strictcritical1securityFlags Istio meshes where PeerAuthentication does not enforce STRICT mTLS.istiomtlsservice-meshISO 25010:SecurityOWASP:A02
pii-in-log-statementscritical2securityFlags log statements that emit PII fields (email, SSN, credit card) using regex and.javapiiloggingllmISO 25010:SecurityOWASP:A01
terraform-iam-policycritical1securityFlags IAM policies with wildcard (*) actions or resources in Terraform definitions.terraformiamcloudISO 25010:SecurityOWASP:A01
apim-rate-limit-missinghigh1securityFlags APIM policies without rate limiting in the inbound section.apimazurerate-limitingISO 25010:SecurityOWASP:A04
architectural-drift-from-adrhigh2maintainabilityDetects divergence between architecture decision records and actual codebase.adrarchitecturellmISO 25010:Maintainability
bare-except-catch-allhigh1reliabilityFlags bare except blocks and overly broad exception catch-alls across Java, Python,.error-handlingcross-languageISO 25010:Reliability
ci-security-scan-missinghigh1securityFlags CI pipelines that lack a security scanning step (SAST, DAST, or dependency.cisecurity-scanningISO 25010:SecurityOWASP:A06
ci-test-stage-missinghigh1reliabilityFlags CI pipelines that lack a test execution step.citestingISO 25010:Reliability
cmake-fetchcontent-pinninghigh1securityFlags FetchContent dependencies that use unpinned branches instead of specific.cmakecppsupply-chainISO 25010:Security
cpp-exception-safetyhigh1reliabilityFlags C++ code with exception-safety concerns including missing noexcept and unsafe.cpperror-handlingISO 25010:Reliability
cpp-raw-memoryhigh1reliabilityFlags raw new/delete and malloc/free usage that should use smart pointers or RAII.cppmemory-safetyISO 25010:Reliability
csharp-async-voidhigh1reliabilityFlags async void methods that should be async Task to avoid unobserved exceptions.csharpasyncISO 25010:Reliability
csharp-blocking-asynchigh1performanceFlags synchronous blocking on async operations (.Result, .Wait()) that risk thread.csharpasyncthreadingISO 25010:Performance
csharp-disposable-no-usinghigh1reliabilityFlags IDisposable object creation not wrapped in a using statement, risking.csharpresource-managementISO 25010:Reliability
dockerfile-base-pinninghigh1securityFlags Docker base images using floating tags instead of pinned versions or digests.dockersupply-chainISO 25010:SecurityOWASP:A08
dockerfile-k8s-user-conflicthigh1securityFlags Kubernetes deployments that override a Dockerfile non-root USER with.dockerkubernetessecurityISO 25010:SecurityOWASP:A05
dockerfile-user-directivehigh1securityFlags Dockerfiles that lack a USER directive, causing containers to run as root.dockersecurityISO 25010:SecurityOWASP:A05
dyn-adr-drifthigh3reliabilityCross-references observed runtime service topology from traces against ADR-declared architecture, flagging undocumented coupling and dead architecture.otelobservabilitydynamic-analysisadrtopologydriftISO 25010:Maintainability
dyn-latency-p95high3performanceComputes p95 latency per HTTP route from server spans and compares against declared targets in nfr_targets.latency_p95_ms.otelobservabilitydynamic-analysislatencyperformanceISO 25010:Performance
dyn-n-plus-1high3performanceDetects N+1 query patterns by counting child database spans per request span, flagging when identical DB calls exceed the threshold.otelobservabilitydynamic-analysisn-plus-1databaseISO 25010:Performance
exception-handling-antipatternhigh1reliabilityFlags catch blocks that swallow Exception/Throwable without rethrowing or logging.javaerror-handlingISO 25010:Reliability
go-defer-in-loophigh1reliabilityFlags defer statements inside for loops that accumulate deferred calls until.goresource-managementISO 25010:Reliability
go-error-ignoredhigh1reliabilityFlags Go error return values explicitly discarded via blank identifier assignment.goerror-handlingISO 25010:Reliability
go-goroutine-leakhigh1reliabilityFlags goroutine launches without explicit lifecycle management (context, WaitGroup,.goconcurrencyISO 25010:Reliability
go-http-no-timeouthigh1reliabilityFlags HTTP calls using http.DefaultClient or custom Client without Timeout.gohttptimeoutISO 25010:Reliability
health-endpoint-missinghigh1reliabilityFlags Java services with no @RestController exposing a health-check endpoint.javahealthobservabilityISO 25010:Reliability
istio-circuit-breakerhigh1reliabilityFlags DestinationRules that lack outlierDetection for circuit breaking.istioresilienceservice-meshISO 25010:Reliability
JDEP-CYCLEhigh1maintainabilityFlags Java package cycles detected by JDepend analysis.javajdependarchitectureISO 25010:Maintainability
network-policy-missinghigh1securityFlags Kubernetes namespaces with no NetworkPolicy resources defined.kubernetesnetworkISO 25010:SecurityOWASP:A05
nodejs-callback-error-ignoredhigh1reliabilityFlags Node.js callbacks that receive an error parameter but never check or.nodejserror-handlingISO 25010:Reliability
nodejs-floating-promisehigh1reliabilityFlags promise chains without .catch() that risk unhandled promise rejections.nodejsasyncerror-handlingISO 25010:Reliability
nodejs-promise-no-catchhigh1reliabilityFlags .then() chains without .catch() error handling.nodejsasyncerror-handlingISO 25010:Reliability
non-root-container-violationhigh1securityFlags Kubernetes containers without securityContext.runAsNonRoot=true.kubernetessecurityISO 25010:SecurityOWASP:A05
otel-exporter-confighigh1reliabilityFlags OTel Collector configs where no production exporter is configured.otelobservabilityISO 25010:Reliability
PATCH-ARCH-001high1reliabilityFlags Deployment/StatefulSet resources running with a single replica, making.kubernetespatchingavailabilityISO 25010:Reliability
PATCH-ARCH-002high1reliabilityFlags workloads missing preStop hooks or with insufficient.kubernetespatchinggraceful-shutdownISO 25010:Reliability
PATCH-ARCH-003high1reliabilityFlags workloads with missing or unsafe update/rollout strategy (e.g. Recreate.kubernetespatchingrolloutISO 25010:Reliability
PATCH-DEPS-003high1reliabilityDetects cross-ring dependency direction violations in patch deployment ordering.kubernetespatchingdependenciesISO 25010:Reliability
PATCH-HEALTH-001high1reliabilityChecks readiness/liveness probes in the context of patching safety and rolling.kubernetespatchingprobesISO 25010:Reliability
PATCH-HEALTH-003high1reliabilityChecks startup probe presence for patching safety with slow-starting containers.kubernetespatchingprobesISO 25010:Reliability
PATCH-TRAFFIC-001high1reliabilityDetects progressive traffic shifting configuration (canary/blue-green) in service.patchingtrafficservice-meshISO 25010:Reliability
probes-missinghigh1reliabilityFlags Kubernetes containers missing livenessProbe or readinessProbe.kuberneteshealthprobesISO 25010:Reliability
proto-field-numberinghigh1maintainabilityFlags protobuf messages where field number gaps exist without matching reserved.grpcprotobufapiISO 25010:Maintainability
python-async-fire-and-forgethigh1reliabilityFlags asyncio.create_task() calls where the returned Task reference is not stored.pythonasyncconcurrencyISO 25010:Reliability
python-broad-except-silenthigh1reliabilityFlags catch blocks that silently swallow Exception/BaseException without logging or.pythonerror-handlingISO 25010:Reliability
python-mutable-defaulthigh1reliabilityFlags function definitions using mutable default arguments (list, dict, set).pythoncorrectnessISO 25010:Reliability
resilience-annotation-missinghigh1reliabilityFlags classes that import HTTP clients but lack resilience annotations (@Retry,.javaresilienceISO 25010:Reliability
resource-limits-missinghigh1reliabilityFlags Kubernetes containers without resources.limits defined.kubernetesresource-managementISO 25010:Reliability
spring-profile-misconfigurationhigh1securityFlags production Spring profiles with debug logging, in-memory databases, or.javaspringconfigurationISO 25010:Security
terraform-provider-pinninghigh1securityFlags Terraform providers that lack version constraints, risking uncontrolled.terraformsupply-chainISO 25010:Security
terraform-state-backendhigh1securityFlags Terraform repos that store state locally instead of using a remote backend.terraformstateISO 25010:Security
thread-pool-misconfigurationhigh1performanceFlags ThreadPoolExecutor instances without bounded queue or rejection policy.javathreadingconcurrencyISO 25010:Performance
adr-gapmedium2maintainabilityFlags implicit architectural decisions in code that lack a corresponding ADR.adrarchitectureISO 25010:Maintainability
apim-hardcoded-backend-urlmedium1maintainabilityFlags APIM policies using hardcoded backend URLs instead of named values.apimazureconfigISO 25010:Maintainability
cmake-build-configmedium1maintainabilityFlags CMake projects with missing or misconfigured build type settings.cmakecppbuildISO 25010:Maintainability
correlation-id-missingmedium1reliabilityFlags Java projects with no distributed tracing or correlation-ID library.javaobservabilitytracingISO 25010:Reliability
cpp-dormant-classesmedium2maintainabilityFlags C++ classes with high method-to-call ratio suggesting dead or underused code.cppdead-codeISO 25010:Maintainability
cpp-sanitizer-cimedium1reliabilityFlags C++ CI pipelines that lack address/thread/memory sanitizer builds.cppcisanitizersISO 25010:Reliability
dep-freshnessmedium2securityGraduated staleness and dead library detection across Python, Node.js, Java, Go,.dependenciessupply-chaincross-languageISO 25010:SecurityOWASP:A06
dep-upgrade-pathmedium2maintainabilityN-1 ceiling detection with upgrade path recommendations via constraint solving.dependenciessupply-chaincross-languageISO 25010:Maintainability
dockerfile-k8s-image-driftmedium1reliabilityFlags mismatches between Dockerfile base image tags and Kubernetes container image.dockerkubernetesconsistencyISO 25010:Reliability
dyn-correlation-propagationmedium3reliabilityVerifies correlation-ID attribute consistency across all spans in a trace, flagging broken propagation from root to leaf spans.otelobservabilitydynamic-analysiscorrelationtracingISO 25010:Reliability
gatling-performance-thresholdsmedium2performanceEvaluates Gatling load test results against configurable performance thresholds.performance-testinggatlingISO 25010:Performance
go-dormant-classesmedium2maintainabilityFlags Go types with high method count but low usage, suggesting dead or underused.godead-codeISO 25010:Maintainability
go-package-subdivisionmedium2maintainabilityFlags Go projects with oversized or poorly organized packages, detecting god packages and mixed domain concerns within Go's flat package convention.gopackage-structurearchitecturedomainISO 25010:Maintainability
health-probe-separationmedium1reliabilityFlags Kubernetes containers whose liveness and readiness probes are identically.kuberneteshealthprobesISO 25010:Reliability
helm-values-validationmedium1reliabilityFlags Helm charts with missing resource limits, replica counts, or.helmconfigurationISO 25010:Reliability
istio-traffic-policymedium1performanceFlags DestinationRules that lack trafficPolicy with connectionPool settings.istiotrafficservice-meshISO 25010:Performance
jacoco-coverage-actualmedium2reliabilityEvaluates actual line and branch coverage from JaCoCo XML reports against.javatestingcoverageISO 25010:Reliability
jacoco-threshold-missingmedium1reliabilityFlags Java projects with no JaCoCo dependency or plugin configured.javatestingcoverageISO 25010:Reliability
java-dormant-classesmedium2maintainabilityFlags Java classes with high method count but low usage, suggesting dead or.javadead-codeISO 25010:Maintainability
java-package-subdivisionmedium2maintainabilityFlags Java projects with flat or insufficiently subdivided package hierarchies, detecting god packages, single-depth structures, and mixed domain concerns.javapackage-structurearchitecturedomainISO 25010:Maintainability
JDEP-DISTANCEmedium1maintainabilityFlags Java packages with distance from main sequence (D) above 0.5.javajdependarchitectureISO 25010:Maintainability
JDEP-INSTABILITYmedium1performanceFlags Java packages with high instability (I > 0.8) and low abstractness.javajdependarchitectureISO 25010:Performance
logging-config-missingmedium1reliabilityFlags Spring Boot apps without structured logging (JSON/logstash encoder).javaspringloggingobservabilityISO 25010:Reliability
logging-to-stdoutmedium1reliabilityFlags direct stdout/stderr writes that should use a structured logging framework.loggingobservabilitycross-languageISO 25010:Reliability
nodejs-sync-fs-apimedium1performanceFlags synchronous fs and child_process calls that block the Node.js event loop.nodejsperformanceasyncISO 25010:Performance
otel-fault-injection-testsmedium1reliabilityFlags repos with resilience patterns but no fault-injection tests.testingresiliencechaosISO 25010:Reliability
otel-file-exportermedium1reliabilityFlags repos without an OTel file exporter configured for CI trace capture.otelobservabilityciISO 25010:Reliability
otel-integration-test-coveragemedium1reliabilityFlags repos where API endpoints lack corresponding integration tests.testingcoverageobservabilityISO 25010:Reliability
otel-pipeline-completenessmedium1reliabilityFlags OTel Collector configs where not all signal types (traces, metrics, logs).otelobservabilityISO 25010:Reliability
otel-resource-attrsmedium1reliabilityFlags repos without required OTel resource attributes.otelobservabilitytracingISO 25010:Reliability
otel-samplingmedium1performanceFlags OTel Collector configs without sampling or rate-limiting processors.otelobservabilityperformanceISO 25010:Performance
otel-test-agentmedium1reliabilityFlags repos where test profiles don't attach the OTel agent.otelobservabilitytestingISO 25010:Reliability
otel-test-observabilitymedium1reliabilityFlags test configs that don't produce OTel traces for dynamic analysis.oteltestingobservabilityISO 25010:Reliability
otel-w3c-propagationmedium1reliabilityFlags repos without W3C trace-context propagation configured.otelobservabilitytracingISO 25010:Reliability
PATCH-ARCH-004medium1reliabilityFlags multi-replica Deployments/StatefulSets with no matching PodDisruptionBudget.kubernetespatchingpdbISO 25010:Reliability
PATCH-DEPS-002medium1reliabilityDetects shared-fate indicators across workloads (common volumes, configmaps,.kubernetespatchingdependenciesISO 25010:Reliability
PATCH-HEALTH-002medium2reliabilityFlags readiness probes that are likely trivial or overly fragile during patching.kubernetespatchingprobesISO 25010:Reliability
PATCH-HEALTH-004medium1reliabilityFlags workloads with insufficient terminationGracePeriodSeconds for safe patching.kubernetespatchinggraceful-shutdownISO 25010:Reliability
PATCH-ROLL-001medium1maintainabilityChecks for rollback/disaster-recovery documentation in the repository root.patchingrollbackdocumentationISO 25010:Maintainability
PATCH-ROLL-002medium1reliabilityChecks that at least one CI pipeline has a rollback or revert stage.patchingrollbackciISO 25010:Reliability
PATCH-ROLL-003medium2maintainabilityDetects migration tooling without corresponding rollback evidence.patchingrollbackmigrationsISO 25010:Maintainability
PATCH-SCOPE-002medium2securityDetects accelerated cadence configuration for critical-security patches.patchingsecurityISO 25010:Security
PATCH-TELEM-001medium2reliabilityDetects golden signal emission coverage (latency, traffic, errors, saturation) via.patchingobservabilityotelISO 25010:Reliability
PATCH-TELEM-003medium2reliabilityDetects synthetic transaction configuration for proactive failure detection.patchingobservabilityISO 25010:Reliability
PATCH-TRAFFIC-002medium1reliabilityDetects failover/DR documentation in the repository root.patchingtrafficdocumentationISO 25010:Reliability
PATCH-TRAFFIC-003medium1reliabilityDetects connection draining configuration in service mesh for graceful traffic.patchingtrafficservice-meshISO 25010:Reliability
proto-service-versioningmedium2maintainabilityFlags gRPC services that lack version indicators in name or package.grpcprotobufversioningISO 25010:Maintainability
python-dormant-classesmedium2maintainabilityFlags Python classes with high method count but low usage, suggesting dead or.pythondead-codeISO 25010:Maintainability
python-package-subdivisionmedium2maintainabilityFlags Python projects with flat or insufficiently subdivided package structures, detecting god packages with excessive class counts, single-depth hierarchies, and mixed domain concerns within packages.pythonpackage-structurearchitecturedomainISO 25010:Maintainability
python-star-importmedium1maintainabilityFlags wildcard imports (from x import *) that obscure dependencies and pollute.pythonimportsISO 25010:Maintainability
skaffold-build-configmedium1maintainabilityFlags Skaffold configs missing build sections or with weak tag policies.skaffoldbuildkubernetesISO 25010:Maintainability
structure-god-nodemedium1structureFlags entities whose total degree (in + out edges) exceeds 2x the median, indicating coupling hotspots that are difficult to change safely.graphifycouplingarchitectureISO 25010:Maintainability
structure-weak-boundarymedium1structureFlags Leiden communities where cross-boundary edges exceed 40% of total edges, indicating leaky module boundaries.graphifyboundariesarchitectureISO 25010:Maintainability
adr-lifecycle-gaplow1maintainabilityFlags ADRs that exist but lack lifecycle status tracking.adrarchitecturedocumentationISO 25010:Maintainability
cmake-minimum-versionlow1maintainabilityFlags CMake projects with outdated or missing cmake_minimum_required version.cmakecppISO 25010:Maintainability
cpp-clang-formatlow1maintainabilityFlags C++ repos missing a .clang-format configuration file.cppformattingtoolchainISO 25010:Maintainability
cpp-clang-tidylow1maintainabilityFlags C++ repos missing a .clang-tidy configuration file.cpplintingtoolchainISO 25010:Maintainability
cpp-include-guardslow1maintainabilityFlags C++ headers missing include guards or #pragma once.cppheadersISO 25010:Maintainability
csharp-configure-awaitlow1performanceFlags await expressions missing ConfigureAwait(false) in library code.csharpasyncISO 25010:Performance
dockerfile-multistagelow1performanceSuggests multi-stage builds when a single-stage Dockerfile has build-time RUN.dockerimage-sizeISO 25010:Performance
helm-chart-metadatalow1maintainabilityFlags Helm charts with incomplete Chart.yaml metadata (missing version,.helmmetadataISO 25010:Maintainability
PATCH-DEPS-001low2maintainabilityDetects dependency declaration annotations on Kubernetes workloads for patch.kubernetespatchingdependenciesISO 25010:Maintainability
PATCH-SCOPE-001low2reliabilityDetects patch class soak configuration for graduated rollouts.patchingrolloutISO 25010:Reliability
PATCH-TELEM-002low2reliabilityDetects mandatory label presence (service.name, service.version) in OTel resource.patchingobservabilityotelISO 25010:Reliability
proto-method-commentslow2maintainabilityFlags gRPC service methods that lack preceding comment documentation.grpcprotobufdocumentationISO 25010:Maintainability
sample-readme-existslow1maintainabilityVerifies a README file exists at the repository root.documentationrepo-structureISO 25010:Maintainability
structure-coupling-clusterlow1structureFlags pairs of communities with disproportionate inter-community coupling edges (calls, imports), suggesting hidden dependencies between modules.graphifycouplingarchitectureISO 25010:Maintainability
dyn-call-sequenceinfo3reliabilityGenerates Mermaid sequence diagrams from OTel trace span trees to visualise runtime call flows.otelobservabilitydynamic-analysistracingISO 25010:Reliability
dyn-method-coverageinfo3reliabilityReports which instrumented methods were exercised during a test run by aggregating code.namespace and code.function span attributes.otelobservabilitydynamic-analysiscoverageISO 25010:Reliability

The data backing this page lives in site/src/data/rules.json. To regenerate it after adding or modifying rules:

Terminal window
nfr-review list-rules --format json > site/src/data/rules.json