The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles
This report presents the forensic synthetic code analysis of emqx/emqx, a Erlang project with 16,512 GitHub stars. SynthScan v2.0 examined 78,909 lines of code across 1419 source files, recording 352 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 6.7 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 352 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 1 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 3 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 17 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 19 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 36 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 38 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 1 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 3 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 17 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 19 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 30 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 32 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 45 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 47 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 80 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 82 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 69 | # ── HTTP helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 117 | # ── Cleanup ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 151 | # ── Connections ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 176 | # ── AI providers ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 195 | # ── Tools ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 225 | # ── Builder prompt ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 451 | # ── Pipeline ─────────────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 497 | # ── Database setup ──────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 535 | # ── Main ─────────────────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 105 | # ── HTTP helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 162 | # ── Database setup ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 217 | # ── Tools ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 361 | // ── Connection ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 420 | // ── Sending ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 445 | // ── Rendering ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 535 | // ── Misc ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 80 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 82 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 96 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 98 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 140 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 142 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 170 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 172 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 186 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 188 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 193 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 195 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 200 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 202 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 210 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 212 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 231 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 233 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 102 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 104 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 116 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 118 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 161 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 163 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 182 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 184 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 196 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 198 | ## ================================================================ | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/docker-compose-keycloak.yaml | 1 | # Keycloak IDP for SAML SSO integration tests | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-doris-tls.yaml | 1 | ## N.B. | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-otel.yaml | 61 | # driver: default | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-influxdb-v3.yaml | 61 | # - subnet: 172.100.239.0/24 | COMMENT |
| LOW | …i/docker-compose-file/docker-compose-influxdb-tls.yaml | 21 | - "./influxdb/setup-v1.sh:/docker-entrypoint-initdb.d/setup-v1.sh" | COMMENT |
| LOW | …er-compose-file/docker-compose-elastic-search-tls.yaml | 81 | - emqx_bridge | COMMENT |
| LOW | …er-compose-file/docker-compose-elastic-search-tls.yaml | 101 | # test: | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-iceberg.yaml | 1 | ## https://github.com/databricks/docker-spark-iceberg/blob/60754a31cbb2cea7eead2a16702f5c536a8e07ce/docker-compose.yml | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-iceberg.yaml | 21 | services: | COMMENT |
| LOW | …i/docker-compose-file/docker-compose-influxdb-tcp.yaml | 21 | networks: | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-quasardb.yaml | 21 | # docker run -it --rm --network emqx_bridge --name qdbsh bureau14/qdbsh --cluster qdb://172.100.239.30:2836 | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 1 | # Cassandra storage config YAML | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 21 | # on subsequent starts, this setting will apply even if initial token is set. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 41 | # that do not have vnodes enabled. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 61 | # are two nodes in the cluster, each delivery thread will use the maximum | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 81 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 101 | # Please increase system_auth keyspace replication factor if you use this authenticator. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 121 | # - CassandraRoleManager stores role data in the system_auth keyspace. Please | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 141 | # Validity period for permissions cache (fetching permissions can be an | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 161 | # underlying table, it may not bring a significant reduction in the | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 181 | # compatibility include RandomPartitioner, ByteOrderedPartitioner, and | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 201 | cdc_enabled: false | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 221 | # can still be inspected via JMX, kill the JVM for errors during startup. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 241 | # stop_commit | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 261 | # Do only change the default value, if you really have more prepared statements than | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 281 | # time it saves, so it's worthwhile to use it at large numbers. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 301 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 321 | # headroom for OS block level cache. Do never allow your system to swap. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 341 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 361 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 381 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 401 | # NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 421 | - class_name: org.apache.cassandra.locator.SimpleSeedProvider | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 441 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 461 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 481 | # mean larger flushes and hence less compaction, but also less concurrent | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 501 | # Total space to use for commit logs on disk. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 521 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 541 | # Total space to use for change-data-capture logs on disk. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 561 | # more than this amount of memory. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 581 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 601 | # Set listen_address OR listen_interface, not both. Interfaces must correspond | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 621 | # listen_on_broadcast_address: false | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 641 | native_transport_port_ssl: 9142 | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 661 | # Whether to start the thrift rpc server. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 681 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 701 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 721 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 741 | # and when not setting it it is defined by net.ipv4.tcp_wmem | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 761 | # responsibility. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 781 | # and looking up rows withing the partition by collation column | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 801 | # during a single long running compactions. The default is usually | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 821 | # When compacting, the replacement sstable(s) can be opened before they | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 841 | # How long the coordinator should wait for read operations to complete | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 861 | # can be identified. Set this value to zero to disable slow query logging. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 881 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 901 | # if you need to add another datacenter are GossipingPropertyFileSnitch | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 921 | # PropertyFileSnitch: | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 941 | # Proximity is determined by rack and data center, which are | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 961 | # expressed as a double which represents a percentage. Thus, a value of | COMMENT |
| 95 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_unsgov/priv/ui.html | 1560 | function flattenTreeFiltersFromChildren(children, prefix, out) { | CODE |
| LOW | plugins/emqx_agent/demo_apple_box_init.py | 152 | def deactivate_pipeline_maybe(pid: str) -> None: | CODE |
| LOW | plugins/emqx_agent/priv/ui/tools.js | 157 | export function defaultPublishInputSchema() { | CODE |
| LOW | scripts/test/test_emqx_boot.py | 99 | def test_profile_defaults_to_enterprise(): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 106 | def test_emqx_boot_with_invalid_node_name(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 124 | def test_hardened_rejects_insecure_cookie(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 140 | def test_node_cookie_from_file(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 162 | def test_node_cookie_from_missing_file_fails_fast(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 173 | def test_node_cookie_from_empty_file_fails_fast(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 186 | def test_node_cookie_from_fifo_read_once(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 249 | def test_invalid_security_profile_fails_fast(emqx_bin_path, security_profile): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 262 | def test_corrupted_cluster_override_conf(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 314 | def test_corrupted_cluster_hocon(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 349 | def test_corrupted_base_hocon(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 508 | def test_acl_file_read_permission_failure(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 529 | def test_acl_file_corrupted_content(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 575 | def test_feature_gate_essential(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 650 | def test_feature_gate_custom_multiple(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 677 | def test_feature_gate_bad_preset(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 697 | def test_feature_gate_bad_feature(emqx_bin_path): | CODE |
| LOW | scripts/test/test_find_apps.py | 261 | def test_change_app_used_by_others(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 285 | def test_change_app_used_by_all(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 311 | def test_change_app_used_by_none(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 331 | def test_change_multiple_apps(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 353 | def test_change_docker_plugin(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 448 | def test_change_github_directory(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 14 | def run_entrypoint_with_hostname(tmp_path, hostname_script, extra_env=None): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 48 | def test_entrypoint_falls_back_to_interface_ip_when_hostname_resolution_fails(tmp_path): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 69 | def test_entrypoint_fails_when_node_host_cannot_be_determined(tmp_path): | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 84 | def generate_spdx_id_from_bom_ref(bom_ref: str, component: Dict[str, Any] = None, spdx_id_prefix: str = "SPDXRef-") -> s | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 107 | def convert_component_to_spdx_package(component: Dict[str, Any], spdx_id_prefix: str = "SPDXRef-") -> Dict[str, Any]: | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 198 | def convert_cyclonedx_to_spdx(cdx_path: Path, output_path: Path = None) -> Dict[str, Any]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 65 | def normalize_license_to_spdx(license_text: str) -> Optional[str]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 165 | def parse_app_file_for_license(package_dir: Path, package_name: str) -> Optional[str]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 296 | def find_package_source_directory(package_name: str, deps_dir: Path) -> Optional[Path]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 422 | def filter_and_enrich_spdx_sbom( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_agent/demo_builder_init.py | 567 | except Exception as e: | STRING |
| LOW | plugins/emqx_agent/demo_teardown.py | 185 | except Exception as e: | CODE |
| LOW | plugins/emqx_agent/demo_teardown.py | 195 | except Exception as e: | CODE |
| LOW | plugins/emqx_agent/demo_apple_box_init.py | 428 | except Exception as e: | CODE |
| LOW | scripts/demo-lwm2m-blockwise-wakaama.sh | 435 | except Exception: | CODE |
| MEDIUM | scripts/demo-lwm2m-blockwise-wakaama.sh | 432 | def on_message(client, userdata, msg): | CODE |
| MEDIUM | scripts/find_apps.py | 204 | print("Error: --base-ref requires a value", file=sys.stderr) | CODE |
| LOW | scripts/test/test_find_apps.py | 34 | except Exception: | CODE |
| LOW | scripts/test/test_find_apps.py | 137 | except Exception: | CODE |
| LOW | scripts/test/test_find_apps.py | 159 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/convert_cdx_to_spdx.py | 305 | print(f"Error: Input file not found: {args.input}", file=sys.stderr) | CODE |
| LOW⚡ | scripts/sbom/convert_cdx_to_spdx.py | 315 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/convert_cdx_to_spdx.py | 316 | print(f"Error converting SBOM: {e}", file=sys.stderr) | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 207 | except Exception as e: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 291 | except Exception as e: | CODE |
| MEDIUM | scripts/sbom/generate_text_report.py | 17 | print("Error: spdx-tools is not installed. Please install it with: pip install spdx-tools", file=sys.stderr) | CODE |
| MEDIUM⚡ | scripts/sbom/generate_text_report.py | 66 | print(f"Error: Input file not found: {args.input}", file=sys.stderr) | CODE |
| LOW⚡ | scripts/sbom/generate_text_report.py | 76 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/generate_text_report.py | 77 | print(f"Error: Failed to generate text report using spdx-tools: {e}", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-api-scopes.sh | 34 | # Check if the file exports scopes/0 | COMMENT |
| LOW | scripts/find_apps.py | 55 | # Check if mix.exs at root is changed | COMMENT |
| LOW | scripts/find_apps.py | 59 | # Check if .github or .ci directories are changed | COMMENT |
| LOW | scripts/find-suites.sh | 31 | # Check if path prefix is present | COMMENT |
| LOW | scripts/find-suites.sh | 36 | # Check if suffix is present | COMMENT |
| LOW | scripts/test/test_emqx_boot.py | 293 | # Check if error message is in output before timeout | COMMENT |
| LOW | scripts/test/test_emqx_boot.py | 482 | # Check if error message is in output before timeout | COMMENT |
| LOW | scripts/test/emqx-smoke-test.sh | 39 | ## Check if EMQX is responding | COMMENT |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 52 | # Check if it's already a valid SPDX identifier (contains -) | COMMENT |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 59 | # Check if it looks like a valid SPDX ID (contains version number with dash) | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 105 | # Check if converter script exists | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 111 | # Check if filter script exists | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 117 | # Check if report script exists | COMMENT |
| LOW | scripts/sbom/filter_and_enrich.py | 345 | # Check if package already has license | COMMENT |
| LOW⚡ | scripts/rel/cut.sh | 201 | ## Check if all upstream branches are merged | COMMENT |
| LOW⚡ | scripts/rel/cut.sh | 208 | ## Check if the Chart versions are in sync | COMMENT |
| LOW⚡ | scripts/rel/cut.sh | 211 | ## Check if app versions are bumped | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | changes/e5.4.0.en.md | 46 | - [#11766](https://github.com/emqx/emqx/pull/11766) Implemented a preliminary Role-Based Access Control for the REST API | CODE |
| HIGH | changes/v5.4.0.en.md | 46 | - [#11766](https://github.com/emqx/emqx/pull/11766) Implemented a preliminary Role-Based Access Control for the REST API | CODE |
| HIGH | changes/e5.3.1.en.md | 12 | - [#11565](https://github.com/emqx/emqx/pull/11565) Upgraded jq library from v0.3.10 to v0.3.11. In this version, jq_por | CODE |
| HIGH | changes/v5.3.1.en.md | 9 | - [#11565](https://github.com/emqx/emqx/pull/11565) Upgraded jq library from v0.3.10 to v0.3.11. In this version, jq_por | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/clickhouse/config.xml | 341 | Regexps are not aligned: don't forget to add ^ and $. Also don't forget to escape dot (.) metacharacter | CODE |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 38 | # initial_token allows you to specify tokens manually. While you can use it with | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 650 | # you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 870 | # Warning: before enabling this property make sure to ntp is installed | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra.yaml | 38 | # initial_token allows you to specify tokens manually. While you can use it with | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra.yaml | 650 | # you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra.yaml | 870 | # Warning: before enabling this property make sure to ntp is installed | COMMENT |
| LOW | scripts/rel/cut.sh | 272 | logwarn "Don't forget to push the tag to emqx/emqx" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/sca-hyg.py | 18 | CODE | |
| LOW | scripts/find_apps.py | 42 | CODE | |
| LOW | scripts/find_apps.py | 75 | CODE | |
| LOW | scripts/find_apps.py | 158 | CODE | |
| LOW | scripts/find_apps.py | 181 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 70 | CODE | |
| LOW | scripts/test/test_find_apps.py | 23 | CODE | |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 70 | CODE | |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 149 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 165 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 339 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_acme/smoke/pebble_smoke.sh | 26 | ## Usage: | COMMENT |
| LOW | plugins/emqx_acme/smoke/cluster/cluster_smoke.sh | 37 | ## Usage: | COMMENT |
| LOW | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 9 | ## Usage: | COMMENT |
| LOW | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 13 | ## Usage: | COMMENT |
| LOW | scripts/sca-pkg.sh | 9 | ## Usage: | COMMENT |
| LOW | scripts/publish-docker-multi-arch.sh | 6 | ## Usage: | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 13 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/iceberg/query/server.py | 1 | CODE | |
| LOW | scripts/find_apps.py | 14 | CODE | |
| LOW | scripts/find_apps.py | 16 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 7 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 11 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 12 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 13 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 17 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 21 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/sbom/generate_sbom.sh | 123 | # Step 1: Generate CycloneDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 142 | # Step 2: Convert CycloneDX to SPDX | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 161 | # Step 3: Filter SPDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 184 | # Step 4: Generate text report | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/sbom/generate_sbom.sh | 123 | # Step 1: Generate CycloneDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 142 | # Step 2: Convert CycloneDX to SPDX | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 161 | # Step 3: Filter SPDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 184 | # Step 4: Generate text report | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 65 | # Create a stick table for session persistence | COMMENT |
| MEDIUM | scripts/gen-elp-build-info.sh | 22 | # This function contains the original, working logic for processing an app directory. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/sbom/generate_text_report.py | 22 | Generate human-readable text report from SPDX SBOM using spdx-tools. Args: sbom_path: Path to SPDX JSON | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/dex/config.dev.yaml | 44 | - email: "admin@example.com" | CODE |
| LOW | .ci/docker-compose-file/keycloak/realm-export.json | 25 | "email": "admin@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/find_apps.py | 112 | # App not found in deps.txt, just add the changed app itself | COMMENT |