AI Slop Code Risk Monitor

killbill/killbill

SlopCodeMonitor badge for killbill/killbill Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Open-Source Subscription Billing & Payments Platform

0.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for killbill/killbill, a Java project with 5,834 GitHub stars. SynthScan examined 327,411 lines of code across 2007 source files, recording 100 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 0.8 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.8
Adjusted Signal
0.8
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
5.8K
Stars
Java
Language
327.4K
Lines of Code
2.0K
Files
100
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 1.3/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 64 finding(s).

Hallucinated Dependency & Supply Chain Risk 2.7/100 · LOW

Are imports declared and package/API names verified? 36 finding(s).

Agent Over-Engineering Ratio 0.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 2 finding(s).

PR Review Velocity Impact 3.3/100 · LOW

Which changes need focused human review? 100 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 13HIGH 0MEDIUM 1LOW 86

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 100 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hallucination Indicators13 hits · 155 pts
SeverityFileLineSnippetContext
CRITICAL⚡…ll/billing/util/nodes/DefaultKillbillNodesService.java158 final String kbVersion = org.killbill.billing.util.nodes.KillbillVersions.getKillbillVersion();CODE
CRITICAL⚡…ll/billing/util/nodes/DefaultKillbillNodesService.java159 final String kbApiVersion = org.killbill.billing.util.nodes.KillbillVersions.getApiVersion();CODE
CRITICAL⚡…ll/billing/util/nodes/DefaultKillbillNodesService.java160 final String kbPluginApiVersion = org.killbill.billing.util.nodes.KillbillVersions.getPluginApiVersion();CODE
CRITICAL⚡…ll/billing/util/nodes/DefaultKillbillNodesService.java161 final String kbPlatformVersion = org.killbill.billing.util.nodes.KillbillVersions.getPlatformVersion();CODE
CRITICAL⚡…ll/billing/util/nodes/DefaultKillbillNodesService.java162 final String kbCommonVersion = org.killbill.billing.util.nodes.KillbillVersions.getCommonVersion();CODE
CRITICAL…illbill/billing/jaxrs/TestPaymentPluginProperties.java276 expectProperties.add(new org.killbill.billing.payment.api.PluginProperty(key, value, false));CODE
CRITICAL…illbill/billing/jaxrs/TestPaymentPluginProperties.java281 expectProperties.add(new org.killbill.billing.payment.api.PluginProperty(key, value, false));CODE
CRITICAL…killbill/billing/server/listeners/CleanupListener.java46 com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkedShutdown();CODE
CRITICALprofiles/killpay/src/main/webapp/lib/swagger-ui.min.js8return this.then(void 0,e)},p.progress=F,m.prototype.progress=function(e){return this.then(void 0,void 0,e)},p.fin=p["fiCODE
CRITICAL…/killbill/billing/jaxrs/resources/AccountResource.java156@io.swagger.v3.oas.annotations.tags.Tag(name = "Account", description = "Operations on accounts")CODE
CRITICAL…/org/killbill/billing/jaxrs/resources/TagResource.java74@io.swagger.v3.oas.annotations.tags.Tag(name = "Tag", description = "Operations on tags")CODE
CRITICAL…bill/billing/jaxrs/resources/SubscriptionResource.java128@io.swagger.v3.oas.annotations.tags.Tag(name = "Subscription", description = "Operations on subscriptions")CODE
CRITICAL…rg/killbill/billing/jaxrs/resources/AdminResource.java109@io.swagger.v3.oas.annotations.tags.Tag(name = "Admin", description = "Admin operations (will require special privilegesCODE
Over-Commented Block32 hits · 30 pts
SeverityFileLineSnippetContext
LOW…src/test/resources/org/killbill/billing/util/shiro.ini1###################################################################################COMMENT
LOW…illing/junction/plumbing/billing/DisabledDuration.java81 return result;COMMENT
LOW…bscription/api/user/TestSubscriptionBillingEvents.java41import org.testng.annotations.Test;COMMENT
LOW…/beatrix/integration/TestIntegrationParentInvoice.java521 // issue a $10 adj when invoice is unpaidCOMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java141 // Step 4: Block billing retroactively from the subscription start date.COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java281 // Tracking 4-5 fall on/after Jun 16 → billed under volt-recurring-high ($3.00/unit)COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java341 clock.setDay(new LocalDate(2026, 7, 1));COMMENT
LOW…OverdueStateSkipWithShiftingEarliestUnpaidInvoice.java201 // check ran rather than from the anchor, which would have given 06-02 + 5 = 06-07.COMMENT
LOWapi/src/main/java/org/killbill/billing/util/UUIDs.java101 # the traditional system/thread activity algorithm will be used.COMMENT
LOW…c/test/resources/org/killbill/billing/server/shiro.ini1###################################################################################COMMENT
LOW…/test/resources/org/killbill/billing/server/plugin.yml1############################################################################################COMMENT
LOW…/test/java/org/killbill/billing/jaxrs/TestInvoice.java121 final String htmlInvoice = invoiceApi.getInvoiceAsHTML(invoiceJson.getInvoiceId(), requestOptions);COMMENT
LOW…/test/java/org/killbill/billing/jaxrs/TestInvoice.java141// " <tr class=\"top\">\r\n" + COMMENT
LOW…/test/java/org/killbill/billing/jaxrs/TestInvoice.java161// " <td>\r\n" + COMMENT
LOW…/test/java/org/killbill/billing/jaxrs/TestInvoice.java181// " <td>invoiceItemDescription</td>\r\n" + COMMENT
LOWprofiles/killbill/src/main/resources/shiro.ini1###################################################################################COMMENT
LOWprofiles/killpay/src/main/webapp/lib/shred.bundle.js1161 var http = request.scheme == "http" ? HTTP : HTTPS;COMMENT
LOWprofiles/killpay/src/main/webapp/lib/shred.bundle.js2121// header.COMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java101 // ----------------------------------------------------------------------------------COMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java121 // Kill Bill declare via @Produces(APPLICATION_JSON) — even though they return no body.COMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java141 // generated return type — e.g., BlockingState[] or String). A side-effect is thatCOMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java161 "addAccountBlockingState",COMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java521 // map (void operations returning 204, bodyless PUTs/DELETEs).COMMENT
LOW…/killbill/billing/jaxrs/resources/SwaggerResource.java561 // is empty after conversion. Codegen uses consumes to set Content-Type header.COMMENT
LOW…g/killbill/billing/jaxrs/resources/ExportResource.java81 @GETCOMMENT
LOW…rg/killbill/billing/jaxrs/resources/AdminResource.java161 // Response hierarchy (EntityTag, Link, MediaType, NewCookie, StatusType, UriBuilder),COMMENT
LOW…org/killbill/billing/jaxrs/resources/TestResource.java81import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;COMMENT
LOW…ill/billing/jaxrs/resources/KillBillApiDefinition.java81 }COMMENT
LOW…ill/billing/jaxrs/resources/KillBillApiDefinition.java121 // the inline schema is set explicitly in decorateOperation above)COMMENT
LOW…nerator/TestFixedAndRecurringInvoiceItemGenerator.java1441COMMENT
LOW…va/org/killbill/billing/invoice/tree/NodeInterval.java141 // Note that it does not matter what happens with newNode#end, and whether it even spans multiple chCOMMENT
LOW…org/killbill/billing/invoice/usage/UsageClockUtil.java21import org.joda.time.DateTimeZone;COMMENT
Fake / Example Data23 hits · 26 pts
SeverityFileLineSnippetContext
LOW…bill/billing/tenant/api/TestInvoiceBrandingLoader.java56 final CompanyInfo companyInfo = new CompanyInfo("Kill Bill", "123 Main St", "Palo Alto, CA", "USA", "https://kilCODE
LOW…/billing/tenant/api/user/TestDefaultTenantUserApi.java152 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. AeneaCODE
LOW…/billing/tenant/api/user/TestDefaultTenantUserApi.java152 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. AeneaCODE
LOW⚡…/test/resources/org/killbill/billing/util/ddl_test.sql127 dummy_id varchar(36) NOT NULL,CODE
LOW⚡…/test/resources/org/killbill/billing/util/ddl_test.sql129 PRIMARY KEY(dummy_id)CODE
LOW⚡…/test/resources/org/killbill/billing/util/ddl_test.sql135 dummy_id varchar(36) NOT NULL,CODE
LOW…l/billing/util/globallocker/TestMysqlGlobalLocker.java45 conn.execute("insert into dummy2 (dummy_id) values ('" + UUID.randomUUID().toString() + "')");CODE
LOW…ment/core/TestPaymentMethodProcessorRefreshWithDB.java53 final Account account = testHelper.createTestAccount("foo@bar.com", true);CODE
LOW…ing/payment/core/TestPaymentMethodProcessorWithDB.java41 final Account account = testHelper.createTestAccount("foo@bar.com", true);CODE
LOW…ing/payment/core/TestPaymentMethodProcessorWithDB.java52 final Account account = testHelper.createTestAccount("foo@bar.com", true);CODE
LOW…ing/payment/core/TestPaymentMethodProcessorWithDB.java65 final Account account = testHelper.createTestAccount("foo@bar.com", true);CODE
LOW⚡…a/org/killbill/billing/payment/api/TestPaymentApi.java918 final String paymentExternalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo liguCODE
LOW⚡…a/org/killbill/billing/payment/api/TestPaymentApi.java918 final String paymentExternalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo liguCODE
LOW⚡…a/org/killbill/billing/payment/api/TestPaymentApi.java919 final String transactionExternalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo CODE
LOW⚡…a/org/killbill/billing/payment/api/TestPaymentApi.java919 final String transactionExternalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo CODE
LOWprofiles/killbill/src/main/webapp/lib/swagger-ui.js1!function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory(require("react"),requirCODE
LOW…ll/src/main/webapp/lib/swagger-ui-standalone-preset.js13var r=n(225),i=n(360),o=n(169);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()<e)CODE
LOWprofiles/killpay/src/main/webapp/lib/swagger-ui.min.js9"click .submit":"submitOperation","click .response_hider":"hideResponse","click .toggleOperation":"toggleOperationContenCODE
LOWprofiles/killpay/src/main/webapp/lib/jsoneditor.min.js8});else if(window.ace){var d=this.input_type;("cpp"===d||"c++"===d||"c"===d)&&(d="c_cpp"),this.ace_container=document.crCODE
LOW…illing/account/api/user/TestDefaultAccountUserApi.java496 accountModelDao.setExternalKey("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula CODE
LOW…illing/account/api/user/TestDefaultAccountUserApi.java496 accountModelDao.setExternalKey("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula CODE
LOW…illing/entitlement/api/TestDefaultSubscriptionApi.java725 final String externalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula egetCODE
LOW…illing/entitlement/api/TestDefaultSubscriptionApi.java725 final String externalKey = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula egetCODE
Verbosity Indicators14 hits · 24 pts
SeverityFileLineSnippetContext
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java134 // Step 3: Advance clock to 2026-06-18 (plan-change day).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java141 // Step 4: Block billing retroactively from the subscription start date.COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java178 // Step 6: Advance clock to 2026-06-28 (end of first billing period).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java185 // Step 7: Unblock billing from the same date (subscription start date).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java293 // Step 3: Advance clock to 2026-06-16 (plan-change day).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java300 // Step 4: Block billing retroactively from the subscription start date.COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java337 // Step 6: Advance clock to 2026-07-01 (billing date).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java345 // Step 7: Unblock billing from the subscription start date (2026-06-01).COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java97 // Step 1: Create account (BCD=28) and subscription on volt-usage-lowCOMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java119 // Step 2: Record 6 usage points spread across the billing periodCOMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java164 // Step 5: Change plan to volt-usage-high on 2026-06-18.COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java252 // Step 1: Create account (BCD=1) and subscription on volt-recurring-low.COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java278 // Step 2: Record usage data across the billing period (Jun 1 → Jul 1, BCD=1).COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java324 // Step 5: Change plan to volt-recurring-high on 2026-06-16.COMMENT
Structural Annotation Overuse14 hits · 24 pts
SeverityFileLineSnippetContext
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java134 // Step 3: Advance clock to 2026-06-18 (plan-change day).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java141 // Step 4: Block billing retroactively from the subscription start date.COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java178 // Step 6: Advance clock to 2026-06-28 (end of first billing period).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java185 // Step 7: Unblock billing from the same date (subscription start date).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java293 // Step 3: Advance clock to 2026-06-16 (plan-change day).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java300 // Step 4: Block billing retroactively from the subscription start date.COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java337 // Step 6: Advance clock to 2026-07-01 (billing date).COMMENT
LOW⚡…atrix/integration/usage/TestUsageUpgradeWithBlock.java345 // Step 7: Unblock billing from the subscription start date (2026-06-01).COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java97 // Step 1: Create account (BCD=28) and subscription on volt-usage-lowCOMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java119 // Step 2: Record 6 usage points spread across the billing periodCOMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java164 // Step 5: Change plan to volt-usage-high on 2026-06-18.COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java252 // Step 1: Create account (BCD=1) and subscription on volt-recurring-low.COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java278 // Step 2: Record usage data across the billing period (Jun 1 → Jul 1, BCD=1).COMMENT
LOW…atrix/integration/usage/TestUsageUpgradeWithBlock.java324 // Step 5: Change plan to volt-recurring-high on 2026-06-16.COMMENT
AI Slop Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUM…va/org/killbill/billing/jaxrs/TestPluginIssue2205.java157 // path to keep the assertion robust.COMMENT
LOW…ll/src/main/webapp/lib/swagger-ui-standalone-preset.js13var r=n(225),i=n(360),o=n(169);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(t,e){if(s()<e)CODE
Hyper-Verbose Identifiers2 hits · 2 pts
SeverityFileLineSnippetContext
LOWbin/ec2-launcher.rb120 def terminate_all_running_instances(wait_for_completion)CODE
LOWbin/ec2-launcher.rb155 def upload_file_to_running_instances(src, dest)CODE