AI Slop Code Risk Monitor

metersphere/metersphere

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

MeterSphere 是新一代的开源持续测试工具,内置 AI 助手,让软件测试工作更简单、更高效,不再成为持续交付的瓶颈。

1.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for metersphere/metersphere, a Java project with 13,599 GitHub stars. SynthScan examined 722,049 lines of code across 4390 source files, recording 278 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 1.0 (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.

1.0
Adjusted Signal
1.0
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
13.6K
Stars
Java
Language
722.0K
Lines of Code
4.4K
Files
278
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.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 3.1/100 · LOW

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

Agent Over-Engineering Ratio 1.5/100 · LOW

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

PR Review Velocity Impact 4.2/100 · LOW

Which changes need focused human review? 278 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 38HIGH 0MEDIUM 0LOW 240

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 278 distinct pattern matches across 4 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 Indicators38 hits · 440 pts
SeverityFileLineSnippetContext
CRITICAL…nents/pure/ms-minder-editor/script/runtime/receiver.ts100 window.editor.receiver.element.parentElement.removeChild(window.editor.receiver.element);CODE
CRITICAL…gement/components/management/mock/mockDetailDrawer.vue516 const formDataMatch = res.mockMatchRule.body.formDataBody.matchRules.map((item) => {CODE
CRITICAL…gement/components/management/mock/mockDetailDrawer.vue701 params.mockMatchRule.body.jsonBody.jsonSchemaTableData.map((item) => {CODE
CRITICAL…pi-test/management/components/management/api/index.vue468 mock.mockMatchRule.body.wwwFormBody.matchRules.map((e) => ({CODE
CRITICAL…pi-test/management/components/management/api/index.vue477 mock.mockMatchRule.body.formDataBody.matchRules.map((e) => ({CODE
CRITICALfrontend/src/views/api-test/components/config.ts384 defaultParams.mockMatchRule.body.formDataBody.matchRules.push({CODE
CRITICALfrontend/src/views/api-test/components/config.ts388 defaultParams.mockMatchRule.body.wwwFormBody.matchRules.push({CODE
CRITICALfrontend/src/views/api-test/components/config.ts633 headerManager = new org.apache.jmeter.protocol.http.control.HeaderManager();CODE
CRITICALfrontend/src/views/api-test/components/config.ts638headerManager.add(new org.apache.jmeter.protocol.http.control.Header("Authorization", token));CODE
CRITICALfrontend/src/views/api-test/components/config.ts772 headerManager = new org.apache.jmeter.protocol.http.control.HeaderManager()CODE
CRITICALfrontend/src/views/api-test/components/config.ts775headerManager.add(new org.apache.jmeter.protocol.http.control.Header("Authorization", token))`,CODE
CRITICAL…t/scenario/components/common/importApiDrawer/table.vue950 const selectedData = currentTable.value.propsRes.value.data.find((e: any) => e.id === val);CODE
CRITICAL…al/controller/ReviewFunctionalCaseControllerTests.java395 Assertions.assertTrue(org.testcontainers.shaded.org.apache.commons.lang3.StringUtils.isNotBlank(fileId));CODE
CRITICAL…tersphere/functional/service/CaseReviewLogService.java313 if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(request.getExcludeIds())) {CODE
CRITICAL…here/functional/service/FunctionalTestCaseService.java302 if (org.apache.commons.collections.CollectionUtils.isNotEmpty(historySteps)) {CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java87 " at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:240)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java88 " at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java89 " at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:672)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java90 " at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:590)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java91 " at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:502)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java92 " at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:265)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java190 " at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:240)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java191 " at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java192 " at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:672)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java193 " at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:590)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java194 " at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:502)\n" +CODE
CRITICAL⚡…/project/controller/CustomFunctionControllerTests.java195 " at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:265)\n" +CODE
CRITICAL…ller/filemanagement/FileManagementControllerTests.java2558 if (org.apache.commons.lang3.StringUtils.isEmpty(checkLogModel.getUrl())) {CODE
CRITICAL…oller/filemanagement/FileRepositoryControllerTest.java665 if (org.apache.commons.lang3.StringUtils.isEmpty(checkLogModel.getUrl())) {CODE
CRITICAL…io/metersphere/project/service/EnvironmentService.java292 if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(request.getExcludeIds())) {CODE
CRITICAL…metersphere/project/service/CustomFunctionService.java191 if (org.apache.commons.collections4.CollectionUtils.isEmpty(history)) {CODE
CRITICAL…rsphere/api/controller/ApiScenarioControllerTests.java2506 if (org.apache.commons.lang3.StringUtils.isEmpty(checkLogModel.getUrl())) {CODE
CRITICAL…ersphere/api/parser/jmeter/MsHTTPElementConverter.java305 headerMap.forEach((k, v) -> headerManager.add(new org.apache.jmeter.protocol.http.control.Header(k, Mock.buildFuCODE
CRITICAL…rsphere/api/service/CleanupApiResourceServiceImpl.java161 if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(apiScenarioCsv)) {CODE
CRITICAL…/java/io/metersphere/api/service/ApiCommonService.java601 if (org.apache.commons.collections4.CollectionUtils.isEmpty(execTaskItems)) {CODE
CRITICAL…ervice/scenario/ApiScenarioSelectAssociateService.java281 .filter(moduleSelectDTO -> BooleanUtils.isFalse(moduleSelectDTO.isSelectAll()) && org.apache.commons.colCODE
CRITICAL…ervice/scenario/ApiScenarioSelectAssociateService.java308 if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(allSteps)) {CODE
CRITICAL…sphere/api/service/scenario/ApiScenarioRunService.java854 if (org.apache.commons.collections.CollectionUtils.isNotEmpty(httpElements)) {CODE
Hyper-Verbose Identifiers198 hits · 220 pts
SeverityFileLineSnippetContext
LOWfrontend/config/plugin/arcoStyleImport.ts9export default function configArcoStyleImportPlugin() {CODE
LOWfrontend/src/utils/xpath.ts40export function extractTextFromHtmlWithXPath(htmlText: string, xpathQuery: string): Node[] {CODE
LOWfrontend/src/utils/permission.ts83export function topLevelMenuHasPermission(route: RouteLocationNormalized | RouteRecordRaw) {CODE
LOWfrontend/src/utils/permission.ts105export function getFirstRouteNameByPermission(routerList: RouteRecordNormalized[]) {CODE
LOWfrontend/src/utils/permission.ts151export function getFirstRouterNameByCurrentRoute(parentName: string) {CODE
LOWfrontend/src/utils/index.ts698export function getUrlParameterWidthRegExp(name: string) {CODE
LOWfrontend/src/utils/index.ts923export function tableParamsToRequestParams(params: BatchActionQueryParams) {CODE
LOWfrontend/src/utils/index.ts986export function customFieldDataToTableData(customFieldData: Record<string, any>[], customFields: BugEditCustomField[]) {CODE
LOW…usiness/ms-minders/testPlanFeatureCaseMinder/index.vue640 function updateCaseActualResultNode(node: MinderJsonNode, content: string) {CODE
LOW…usiness/ms-minders/testPlanFeatureCaseMinder/index.vue843 function setMoreMenuOtherOperationList(node: MinderJsonNode) {CODE
LOW…usiness/ms-minders/testPlanFeatureCaseMinder/index.vue906 function handleMinderNodeContentChange() {CODE
LOW…omponents/business/ms-minders/testPlanMinder/index.vue593 function handleExecuteMethodMenuSelect(val: RunMode) {CODE
LOW…onents/business/ms-minders/featureCaseMinder/index.vue335 function handleResourceContentChange() {CODE
LOW…onents/business/ms-minders/featureCaseMinder/index.vue364 function handleMinderNodeContentChange(node?: MinderJsonNode) {CODE
LOW…iness/ms-minders/featureCaseMinder/useMinderBaseApi.ts691 function canShowMoreMenuNodeOperation() {CODE
LOW…/business/ms-minders/featureCaseMinder/commentList.vue143 async function initTestPlanExecuteCommentList() {CODE
LOW…ponents/business/ms-minders/caseReviewMinder/index.vue487 function setMoreMenuOtherOperationList(node: MinderJsonNode) {CODE
LOW…ponents/business/ms-minders/caseReviewMinder/index.vue632 function handleMinderNodeContentChange() {CODE
LOW…s/business/ms-personal-drawer/components/localExec.vue180 async function handleApiPriorityBeforeChange(val: string | number | boolean) {CODE
LOW…ts/business/ms-personal-drawer/components/baseInfo.vue283 async function handleChangeAvatarConfirm(done: (closed: boolean) => void) {CODE
LOWfrontend/src/components/business/ms-ai-drawer/index.vue98 function handleAddConversationSuccess() {CODE
LOW…ents/business/ms-ai-drawer/components/conversation.vue426 function handleOpenNewConversation() {CODE
LOW…ponents/business/ms-assertion/comp/ResponseBodyTab.vue709 function handleFastExtractionApply(CODE
LOW…ponents/business/ms-assertion/comp/ResponseBodyTab.vue819 function handleExtractParamMoreActionSelect(event: ActionsItem, record: Record<string, any>) {CODE
LOWfrontend/src/components/pure/ms-table/utils.ts8export function getCurrentRecordChildrenIds(childrenData: TableData[], rowKey: string) {CODE
LOWfrontend/src/components/pure/ms-json-schema/utils.ts13export function parseTableDataToJsonSchema(CODE
LOWfrontend/src/components/pure/ms-json-schema/utils.ts121export function parseJsonToJsonSchemaTableData(CODE
LOWfrontend/src/components/pure/ms-json-schema/utils.ts180export function parseSchemaToJsonSchemaTableData(schema: string | JsonSchema): {CODE
LOWfrontend/src/components/pure/ms-form-table/index.vue448 async function validateAndUpdateErrorMessageList() {CODE
LOWfrontend/src/components/pure/ms-form-table/index.vue448 async function validateAndUpdateErrorMessageList() {CODE
LOWfrontend/src/components/pure/ms-advance-filter/index.ts201export function getAllDataDefaultConditions(viewType: ViewTypeEnum) {CODE
LOWfrontend/src/directive/validateExpiration/index.ts8function checkHasLicenseExpiration(el: HTMLElement) {CODE
LOWfrontend/src/hooks/useOpenNewPage.ts33 function openNewPageWidthSingleParam(CODE
LOWfrontend/src/hooks/useShortcutSave.ts19 function registerCatchSaveShortcut() {CODE
LOWfrontend/src/api/modules/workbench.ts77export function workbenchTestPlanStatistic(data: string[]) {CODE
LOWfrontend/src/api/modules/workbench.ts194export function workScenarioCaseCountDetail(data: WorkHomePageDetail) {CODE
LOWfrontend/src/api/modules/workbench.ts228export function workbenchTodoTestPlanList(data: TableQueryParams) {CODE
LOWfrontend/src/api/modules/workbench.ts237export function workTestPlanOverviewDetail(data: WorkHomePageDetail) {CODE
LOWfrontend/src/api/modules/system.ts33export function getUserHasProjectPermission(userId: string) {CODE
LOWfrontend/src/api/modules/case-management/featureCase.ts314export function deleteFileOrCancelAssociation(data: OperationFile) {CODE
LOWfrontend/src/api/modules/case-management/featureCase.ts361export function getPublicLinkCaseModulesCounts(data: TableQueryParams) {CODE
LOWfrontend/src/api/modules/case-management/featureCase.ts434export function importExcelOrXMindChecked(CODE
LOW⚡frontend/src/api/modules/case-management/featureCase.ts498export function getAssociatedProjectOptions(orgId: string, module: string) {CODE
LOW⚡frontend/src/api/modules/case-management/featureCase.ts503export function getLinkedCaseTestPlanList(data: TableQueryParams) {CODE
LOW⚡frontend/src/api/modules/case-management/featureCase.ts508export function getTestPlanExecuteCommentList(caseId: string) {CODE
LOWfrontend/src/api/modules/project-management/project.ts18export function getProjectListByOrgAndModule(orgId: string, module: string) {CODE
LOW…end/src/api/modules/project-management/commonScript.ts38export function addOrUpdateCommonScriptReq(data: AddOrUpdateCommonScript) {CODE
LOW…end/src/api/modules/project-management/commonScript.ts68export function getInsertCommonScriptPage(data: TableQueryParams) {CODE
LOW…end/src/api/modules/project-management/commonScript.ts79export function getCustomFuncColumnOption(projectId: string) {CODE
LOW…end/src/api/modules/project-management/commonScript.ts92export function getFormApiImportModuleCount(data: TableQueryParams) {CODE
LOW…nd/src/api/modules/project-management/projectMember.ts73export function getProjectMemberCommentOptions(projectId: string, keyword?: string) {CODE
LOW…ontend/src/api/modules/project-management/usergroup.ts14export function updateOrAddProjectUserGroup(data: SystemUserGroupParams) {CODE
LOW…ontend/src/api/modules/project-management/usergroup.ts52export function getProjectUserGroupOptions(projectId: string, userRoleId: string, keyword: string) {CODE
LOWfrontend/src/api/modules/bug-management/index.ts183export function deleteFileOrCancelAssociation(data: OperationFile) {CODE
LOW⚡frontend/src/api/modules/user/index.ts279export function getPersonalModelConfigList(data: GetModelConfigListQueryParams) {CODE
LOW⚡frontend/src/api/modules/user/index.ts287export function getPersonalModelConfigDetail(id: string) {CODE
LOW⚡frontend/src/api/modules/user/index.ts291export function deletePersonalModelConfig(id: string) {CODE
LOWfrontend/src/api/modules/api-test/report.ts85export function getScenarioReportShareDetail(data: { shareId: string; reportId: string }) {CODE
LOWfrontend/src/api/modules/api-test/report.ts131export function getScenarioTaskReportStep(taskId: string, stepId: string) {CODE
LOWfrontend/src/api/modules/api-test/scenario.ts332export function logScenarioReportBatchExport(data: BatchApiParams) {CODE
138 more matches not shown…
Over-Commented Block31 hits · 31 pts
SeverityFileLineSnippetContext
LOWfrontend/src/utils/monitor.ts21 // message: err.message,COMMENT
LOWfrontend/src/components/business/ms-card-list/index.vue121 // ...(props.remoteParams || {}),COMMENT
LOW…ontend/src/components/pure/ms-rich-text/MsRichText.vue341 addOptions() {COMMENT
LOW…ontend/src/components/pure/ms-rich-text/MsRichText.vue361 // ];COMMENT
LOWfrontend/src/components/pure/ms-table/base-table.vue521 });COMMENT
LOWfrontend/src/components/pure/ms-table/base-table.vue541 // }COMMENT
LOWfrontend/src/components/pure/ms-table/base-table.vue561 // // 衡量宽度后将元素移除COMMENT
LOWfrontend/src/components/pure/ms-table/base-table.vue581COMMENT
LOWfrontend/src/components/pure/ms-table/base-table.vue601 // const getMaxRowTagWidth = (rows: TableData[], dataIndex: string) => {COMMENT
LOWfrontend/src/hooks/useI18n.ts41// Why write this function?COMMENT
LOW…tend/src/api/requrls/setting/organizationAndProject.ts1// 系统-组织COMMENT
LOWfrontend/src/api/http/index.ts81 // 错误的时候返回COMMENT
LOWfrontend/src/api/http/index.ts101 // timeoutMsg = t('api.timeoutMessage');COMMENT
LOW…/caseManagementFeature/components/recycleCaseTable.vue321 // slotName: 'lastExecuteResult',COMMENT
LOW…ement/components/management/mock/mockMatchRuleForm.vue341 }COMMENT
LOW…nagement/components/management/api/preview/history.vue101 () => {COMMENT
LOWfrontend/src/views/api-test/components/paramTable.vue821COMMENT
LOW…views/api-test/components/requestComposition/index.vue1681 // layout: 'vertical',COMMENT
LOW…views/api-test/components/requestComposition/index.vue1701 // showAddDependencyDrawer.value = true;COMMENT
LOW…s/api-test/scenario/components/step/useStepNodeEdit.ts181 }COMMENT
LOW…s/api-test/scenario/components/step/useStepNodeEdit.ts201 // ) {COMMENT
LOW…/src/views/test-plan/testPlan/components/planTable.vue1641 function filterChange() {COMMENT
LOW…/src/views/test-plan/testPlan/components/planTable.vue1661 // baseAssociateCaseRequest: { selectIds: [], selectAll: false, condition: {} },COMMENT
LOW…/src/views/test-plan/testPlan/components/planTable.vue1681 // try {COMMENT
LOW…/src/views/test-plan/testPlan/components/planTable.vue1701 // } finally {COMMENT
LOW…tting/organization/template/components/fieldSetting.ts81// 模板列表IconCOMMENT
LOW…ntend/src/views/setting/system/resourcePool/detail.vue601 // 是否填写了命名空间COMMENT
LOW…ain/java/io/metersphere/api/mapper/ApiReportMapper.xml141 pool_id, integrated, project_id, COMMENT
LOW…ain/java/io/metersphere/api/mapper/ApiReportMapper.xml661 pending_count, success_count, assertion_count, assertion_success_count, request_error_rate, COMMENT
LOW…/io/metersphere/api/mapper/ApiScenarioReportMapper.xml681 valuesCOMMENT
LOW…tersphere/plan/controller/TestPlanControllerTests.java2461 // BaseTreeNode a1b1Node = TestPlanTestUtils.getNodeByName(preliminaryTreeNodes, "a1-b1");COMMENT
Fake / Example Data11 hits · 14 pts
SeverityFileLineSnippetContext
LOWfrontend/src/components/business/ms-select/index.tsx583 'placeholder',CODE
LOW…components/pure/ms-form-create/formcreate-password.vue4 :placeholder="placeholder"CODE
LOW…tend/src/components/pure/ms-form-create/form-create.ts13 'placeholder': t('formCreate.PleaseEnter'),CODE
LOW…tend/src/components/pure/ms-form-create/form-create.ts26 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts41 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts72 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts86 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts99 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts111 // 'placeholder': t('formCreate.PleaseSelect'),COMMENT
LOW…tend/src/components/pure/ms-form-create/form-create.ts148 'placeholder': t('formCreate.PleaseEnter'),CODE
LOW…tend/src/components/pure/ms-form-create/form-create.ts159 'placeholder': t('formCreate.PleaseEnter'),CODE