AI Slop Code RIsk Monitor

vernesong/OpenClash

A Clash Client For OpenWrt

6.3 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for vernesong/OpenClash, a HTML project with 27,734 GitHub stars. SynthScan examined 46,637 lines of code across 117 source files, recording 116 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 6.3 (Moderate 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.

6.3
Adjusted Signal
6.3
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
27.7K
Stars
HTML
Language
46.6K
Lines of Code
117
Files
116
Pattern Hits
2026-10-12
Scan Date
0.16
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 6.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 20.7/100 · LOW

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

Agent Over-Engineering Ratio 1.4/100 · LOW

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

PR Review Velocity Impact 27.3/100 · MEDIUM

Which changes need focused human review? 116 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 19HIGH 0MEDIUM 5LOW 92

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 116 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 Indicators19 hits · 210 pts
SeverityFileLineSnippetContext
CRITICAL…share/openclash/ui/metacubexd/assets/index-Csmv4Fkv.js104 */var nO=hn("filled","circle-check-filled","IconCircleCheckFilled",[["path",{d:"M17 3.34a10 10 0 1 1 -14.995 8.984l-.00COMMENT
CRITICAL…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js18 `),in:"SourceGraphic",result:"brightness"}),h.enabled&&s.addShadow(c,t,h,"brightness")}),!h.noUserSpaceOnUse&&((CODE
CRITICAL⚡…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js33 a `).concat(a/2,",").concat(a/2," 0 1,0 -").concat(a,",0")}return s}},{key:"drawMarkerShape",value:function(eCODE
CRITICAL⚡…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js39 </div>`):'<div class="apexcharts-tooltip-box apexcharts-tooltip-'.concat(e.config.chart.type,'">')+"<div>".concaCODE
CRITICAL⚡…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js40`:n,h=this.w;i||(i=h.config.series);var d=[],c=[],u="",g=h.globals.series.map(function(y,C){return h.globals.collapsedSeCODE
CRITICAL…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js116 `);return a.appendChild(r),a}},{key:"getLegendDimensions",value:function(){var e=this.w.globals.dom.baseEl.querySeleCODE
CRITICAL…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js142</svg>`),this.t.download&&r.push({el:this.elMenuIcon,icon:typeof this.t.download=="string"?this.t.download:'<svg xmlns="CODE
CRITICAL…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js145 .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='`).concat(t,"'] path[j='").concat(e,"']")));varCODE
CRITICAL…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js850}`;var d=((h=e.opts.chart)===null||h===void 0?void 0:h.nonce)||e.w.config.chart.nonce;d&&l.setAttribute("nonce",d),r?s.pCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js18 `,in:`SourceGraphic`,result:`brightness`}),s.enabled&&r.addShadow(e,t,s,`brightness`)})),!s.noUserSpaceOnUse&&((CODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js33 a ${r/2},${r/2} 0 1,0 -${r},0`}return i}},{key:`drawMarkerShape`,value:function(e,t,n,r,i){var a=this.drawPatCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js39 </div>`:`<div class="apexcharts-tooltip-box apexcharts-tooltip-${e.config.chart.type}"><div>${r[0]}: <span classCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js112} `,Kn=function(){function e(t){n(this,e),this.ctx=t,this.w=t.w,this.legendInactiveClass=`legend-mouseover-inactive`}retCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js207`:o,c=this.w;n||=c.config.series;var l=[],u=[],d=``,f=c.globals.series.map((function(e,t){return c.globals.collapsedSeriCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js233</svg>`),this.t.download&&a.push({el:this.elMenuIcon,icon:typeof this.t.download==`string`?this.t.download:`<svg xmlns="CODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js236 .apexcharts-rangebar-series .apexcharts-series[data\\:realIndex='${t}'] path[j='${e}']`));var s=o?parseFloat(o.gCODE
CRITICAL…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js1017}`;var c=e.opts.chart?.nonce||e.w.config.chart.nonce;c&&s.setAttribute(`nonce`,c),a?i.prepend(s):!1!==e.w.config.chart.iCODE
CRITICAL…root/www/luci-static/resources/openclash/js/cm6.min.js9`;this.styleTag.textContent=o;let l=i.head||i;this.styleTag.parentNode!=l&&l.insertBefore(this.styleTag,l.firstChild)}}sCODE
CRITICAL…root/www/luci-static/resources/openclash/js/cm6.min.js94`+a.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=c.text):i.push(a);continue}if(e){this.infiniteLoopError(e.chCODE
Over-Commented Block84 hits · 59 pts
SeverityFileLineSnippetContext
LOWluci-app-openclash/tools/po2lmo/src/template_lmo.h21COMMENT
LOWluci-app-openclash/root/usr/share/openclash/YAML.rb281COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml41COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml101# !!!该URL不会验证secret, 如果开启请自行保证安全问题 !!!COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml161 # inet4-route-address: # 启用 auto-route 时使用自定义路由而不是默认路由(旧写法)COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml181 # - 00:11:22:33:44:55COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml221 # - 192.168.0.3/32COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml321 # - '8.8.8.8#en0' # 兼容指定 DNS 出口网卡COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml341COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml381 # 下面两项如果填写则开启 mTLS(需要同时填写)COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml421 # version: 4 # support 1/2/3/4/5COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml441 type: ssCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml481 plugin: v2ray-pluginCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml521 cipher: chacha20-ietf-poly1305COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml541 # Use this proxy through dialer-proxy to carry ss/vmess/vless/trojan/etc.COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml561 port: 12345COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml581 # - name: "ss6-gost-relay-forward"COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml681 # client-fingerprint: chrome # Available: "chrome","firefox","safari","ios","random", currently only support TLS COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml721 port: 443COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml741 uuid: uuidCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml761 # vlessCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml801 uuid: uuidCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml901 host: xxx.comCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml921 # sc-min-posts-interval-ms: 30COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml941 # h-keep-alive-period: 0COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml961 port: 443COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1001 # max-connections: 1 # Maximum connections. Conflict with max-streams.COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1021 # Host: example.comCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1041 - name: "hysteria"COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1061 # recv-window: 52428800COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1081 # obfs: salamander # 默认为空,如果填写则开启 obfs,目前支持 salamander 和 geckoCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1101 # token: publicCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1121 ip: 172.16.0.2COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1141 # # pre-shared-key: 31aIhAPwktDGpH4JDhA8GNvjFXEf/a6+UaQRyOAiyfM=COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1161 # i1: <b 0xf6ab3267fa><c><b 0xf6ab><t><r 10><wt 10> # AmneziaWG v1.5 and v2COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1181 # exit-node: 100.64.0.1 # 使用指定 exit node,可填写节点 IP;也支持 auto:anyCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1221 # -----BEGIN OpenVPN Static key V1-----COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1301 # heartbeat-interval: 10000COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1321 # meta 和 sing-box 私有扩展,将 ss-uot 用于 udp 中继,开启此选项后 udp-relay-mode 将失效COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1421 # sni: "example.com"COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1501 - DIRECTCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1521 # # 您可以通过 "mihomo age keygen-pq" 生成符合要求的 mlkem768-x25519 keyCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1541 interval: 600COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1661 - name: socks5-in-1COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1681 # ACATwY30o/RKgD6hgeQxwrSiApLaCgU+HKh7B6SUrAHaDwBD/g0APwAAIAAgHjzKCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1701 # client-auth-cert: string # 证书 PEM 格式,或者 证书的路径COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1721 # 下面两项如果填写则开启 tls(需要同时填写)COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1761 # mode: http # Available: http, tlsCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1781 # sndwnd: 128 # set send window size(num of packets)COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1801 listen: 0.0.0.0COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1821 - name: vmess-in-1COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1841 # ech-key: |COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1861 # limit-fallback-download:COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1881 # client-auth-type: "" # 可选值:""、"request"、"require-any"、"verify-if-given"、"require-and-verify"COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1921 # xhttp-config: # 如果不为空则开启 xhttp 传输层COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1941 # uplink-chunk-size: 0 # only applicable when uplink-data-placement is not bodyCOMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml1961 # 下面两项为mTLS配置项,如果client-auth-type设置为 "verify-if-given" 或 "require-and-verify" 则client-auth-cert必须不为空COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml2001 certificate: ./server.crt # 证书 PEM 格式,或者 证书的路径COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml2061 # proxy: proxy # 如果不为空则直接将该入站流量交由指定 proxy 处理 (当 proxy 不为空时,这里的 proxy 名称必须合法,否则会出错)COMMENT
LOW…pp-openclash/root/usr/share/openclash/res/default.yaml2081 # reality-config:COMMENT
24 more matches not shown…
Decorative Section Separators4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUM…pp-openclash/root/usr/share/openclash/res/default.yaml803 # -------------------------COMMENT
MEDIUM…pp-openclash/root/usr/share/openclash/res/default.yaml813 # -------------------------COMMENT
MEDIUM…pp-openclash/root/usr/share/openclash/res/default.yaml1945 # -------------------------COMMENT
MEDIUM…pp-openclash/root/usr/share/openclash/res/default.yaml1956 # -------------------------COMMENT
Fake / Example Data5 hits · 6 pts
SeverityFileLineSnippetContext
LOW…share/openclash/ui/metacubexd/assets/index-Csmv4Fkv.js9 */var YA=js.exports,Rh;function XA(){return Rh||(Rh=1,function(e,t){(function(){var n,i="4.17.21",o=200,a="Unsupported COMMENT
LOW…share/openclash/ui/metacubexd/assets/Rules-C4_l0aqo.js9 */const x={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},GCOMMENT
LOW…/share/openclash/ui/metacubexd/assets/Logs-uIQcQmXC.js1import{u as O,d as e,ab as V,i as t,ac as I,ad as q,F as x,ae as H,af as Z,ag as d,ah as Q,ai as X,g as C,aj as W,ak as CODE
LOW…openclash/ui/metacubexd/assets/Connections-N_Z6THP_.js16 */var se=O("filled","zoom-out-filled","IconZoomOutFilled",[["path",{d:"M14 3.072a8 8 0 0 1 2.617 11.424l4.944 4.943a1.5COMMENT
LOW…root/www/luci-static/resources/openclash/js/cm6.min.js20`;)s--;this.fragmentEnd=s?s-1:0}let n=this.cursor;n||(n=this.cursor=this.fragment.tree.cursor(),n.firstChild());let r=e+CODE
Slop Phrases2 hits · 2 pts
SeverityFileLineSnippetContext
LOW⚡…re/openclash/ui/metacubexd/assets/Overview-B99qGorf.js40`:n,h=this.w;i||(i=h.config.series);var d=[],c=[],u="",g=h.globals.series.map(function(y,C){return h.globals.collapsedSeCODE
LOW…nclash/ui/metacubexd/assets/apexcharts.esm-D-nlnKto.js207`:o,c=this.w;n||=c.config.series;var l=[],u=[],d=``,f=c.globals.series.map((function(e,t){return c.globals.collapsedSeriCODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUM…root/www/luci-static/resources/openclash/js/cm6.min.js32}`,{label:"class",detail:"definition",type:"keyword"}),M('import {${names}} from "${module}"\n${}',{label:"import",detaiCODE
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…/root/www/luci-static/resources/openclash/js/common.js369function ocGetActiveEditorInstance() {CODE