Leaderboard github.com
chrislusf/glow
Glow is an easy-to-use distributed computation system written in Go, similar to Hadoop Map Reduce, Spark, Flink, Storm, etc. I am also working on another similar pure Go system, https://github.com/chrislusf/gleam , which is more flexible and more performant.
AI provenance
0%
none-detected
- Confidence
- 65%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
66/100
adequate
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
41/100
poor
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
0% none-detected
No AI attribution or AI-consistent velocity signals detected.
How the score is built
- Explicitly attributed share0%
- Unattributed share in AI-pace bursts0%
- Estimated AI-generated share0%
- AI tool configuration files0
- Work sessions at AI pace0
- Releases at AI pacenot measured
- Coding-style index (1.0+ means possible)0.00
Lines added per month all AI-attributed share
- 2015-071,089 · 0% AI
- 2015-094,905 · 0% AI
- 2015-102,993 · 0% AI
- 2015-11948 · 0% AI
- 2015-12147 · 0% AI
- 2016-011,613 · 0% AI
- 2016-02707 · 0% AI
- 2016-0388 · 0% AI
- 2016-0492 · 0% AI
- 2016-051 · 0% AI
- 2016-060 · 0% AI
- 2016-07690 · 0% AI
- 2016-08163 · 0% AI
- 2016-099 · 0% AI
- 2016-100 · 0% AI
- 2017-078 · 0% AI
- 2018-100 · 0% AI
- 2018-110 · 0% AI
Evidence by analyzer
Explicit AI attributionok
- attributed_commit_share
- 0.0%
- attributed_commits
- 0
- attributed_loc
- 0
- attributed_loc_share
- 0.0%
- commits
- 293
- effective_loc
- 13,453
- tools_detected
- 0
AI tool configurationok
- artifacts
- 0
- tools_configured
- 0
- workflow_agents
- 0
Commit velocityok
- excluded_import_loc
- 3,473
- flagged_loc
- 0
- flagged_loc_share
- 0.0%
- flagged_units
- 0
- max_loc_per_hour
- 358
- measured_loc
- 9,980
- median_loc_per_hour
- 47.81
- pr_timed_units
- 6
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 9,980
- work_units
- 131
Release velocityskipped
Coding styleok
- count:assistant_voice
- 0
- count:emoji_in_code
- 0
- count:narrated_steps
- 0
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 0
- files:narrated_steps
- 0
- files:placeholder
- 0
- index
- 0
- lines_scanned
- 7,781
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0
- per_kloc:narrated_steps
- 0
- per_kloc:placeholder
- 0
Code quality
66 adequate
Code quality is adequate: test-to-source ratio 0.12, CI runs tests; 2% of function code in complex or long functions; 5% duplicated lines. Weakest area: process.
How the score is built
- Complexity94
- Duplication72
- Lint and smells81
- Tests and CI64
- Documentation40
- Type safetynot measured
- Review process5
Evidence by analyzer
Complexity (lizard)ok2 items
- anonymous__0 in flow/dataset_join.go: complexity 27, 71 lines
- _getLessThanComparatorByKeyValue in flow/dataset_sort_comparator.go: complexity 16, 40 lines
- complex_functions
- 2
- function_nloc
- 5,149
- functions
- 535
- long_functions
- 0
- many_param_functions
- 0
- mean_ccn
- 2.35
- p90_ccn
- 5
- risky_nloc_share
- 2.2%
Duplication (jscpd)ok10 items
- 6+ duplicated lines: driver/context_driver_on_interrupt.go:31 and driver/context_driver_on_interrupt.go:90
- 6+ duplicated lines: driver/plan/group_plot.go:27 and driver/plan/group_plot.go:144
- 6+ duplicated lines: driver/rsync/http_server.go:95 and resource/service_discovery/master/master.go:55
- 6+ duplicated lines: driver/scheduler/market/cda_market.go:115 and driver/scheduler/market/cda_market.go:137
- 6+ duplicated lines: examples/hdfs_source/hdfs_source.go:22 and examples/word_count/word_count.go:51
- 6+ duplicated lines: examples/word_count/word_count.go:173 and examples/word_count/word_count.go:215
- 6+ duplicated lines: flow/dataset_cogroup.go:30 and flow/dataset_cogroup.go:92
- 6+ duplicated lines: flow/dataset_cogroup.go:75 and flow/dataset_join.go:29
- 6+ duplicated lines: flow/dataset_join_utils.go:9 and flow/dataset_join_utils.go:19
- 6+ duplicated lines: flow/dataset_output.go:32 and flow/dataset_output.go:61
- compared_lines
- 5,192
- duplicated_lines
- 284
- duplicated_share
- 5.5%
- files
- 87
Lintok
- category:correctness
- 8
- findings
- 8
- scanned_lines
- 7,781
- weighted_findings
- 6.50
Tests and CIok2 items
- CI config: .travis.yml
.travis.yml - CI runs tests (go test)
- check:ci_present
- yes
- check:ci_runs_lint
- no
- check:ci_runs_tests
- yes
- check:has_tests
- yes
- check:test_ratio
- no
- check:tests_cochange
- no
- ci_files
- 1
- cochange_commits
- 183
- cochange_share
- 7.1%
- source_lines
- 7,781
- test_lines
- 969
- test_ratio
- 0.12
Documentationok1 item
- README.md
README.md
- check:changelog
- no
- check:contributing
- no
- check:license
- no
- check:readme
- yes
- readme_lines
- 97
Type safetyskipped
Security
41 poor
Security posture is poor: 2 possible secret(s) in the tree, 0 only in history; 3 high-severity SAST findings. Weakest area: posture.
How the score is built
- Secrets44
- Static analysis (SAST)67
- Vulnerable dependenciesnot measured
- CI workflowsnot measured
- Security posture0
- OpenSSF Scorecard25
Evidence by analyzer
OpenSSF Scorecardok9 items
- Scorecard Code-Review: 1/10 (Found 3/21 approved changesets -- score normalized to 1)
- Scorecard Maintained: 0/10 (0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0)
- Scorecard Binary-Artifacts: 10/10 (no binaries found in the repo)
- Scorecard CII-Best-Practices: 0/10 (no effort to earn an OpenSSF best practices badge detected)
- Scorecard Security-Policy: 0/10 (security policy file not detected)
- Scorecard License: 0/10 (license file not detected)
- Scorecard Fuzzing: 0/10 (project is not fuzzed)
- Scorecard Branch-Protection: 0/10 (branch protection not enabled on development/release branches)
- Scorecard SAST: 0/10 (SAST tool is not run on all commits -- score normalized to 0)
- aggregate
- 1.60
- check:Binary-Artifacts
- yes
- check:Branch-Protection
- no
- check:CII-Best-Practices
- no
- check:Code-Review
- yes
- check:Fuzzing
- no
- check:License
- no
- check:Maintained
- no
- check:SAST
- no
- check:Security-Policy
- no
Package registriesskipped
no registry dependencies declared
Secrets (gitleaks)ok
- secrets_current
- 2
- secrets_history
- 0
- secrets_low_confidence
- 0
- secrets_nonprod
- 0
Static analysis (opengrep)ok
- findings
- 13
- findings_high
- 3
- findings_low
- 0
- findings_medium
- 10
- parse_errors
- 0
- scanned_lines
- 7,781
- weighted_findings
- 9
Dependencies (osv-scanner)skipped
CI workflows (zizmor)skipped
Security postureok
- check:dependency_updates
- no
- check:lockfiles
- yes
- check:security_policy
- no
- check:signed_commits
- no
- signed_commit_share
- 0.5%
- unpinned_manifests
- 0
Release downloadsok
- binary_assets
- 0
- signals
- 0
- suspicious
- 0
Findings
5 high16 medium2 low
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| high | opengrep/dockerfile.security.missing-user |
Dockerfile:10 | By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile... | Static analysis (opengrep) |
| high | opengrep/dockerfile.security.missing-user-entrypoint |
Dockerfile:9 | By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile... | Static analysis (opengrep) |
| high | opengrep/go.lang.security.audit.dangerous-exec-command |
agent/agent_server_executor_start.go:44 | Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute... | Static analysis (opengrep) |
| high | gitleaks/private-key |
util/test_certs/client.key:1 | Possible private-key secret in the current tree | Secrets (gitleaks) |
| high | gitleaks/private-key |
util/test_certs/server.key:1 | Possible private-key secret in the current tree | Secrets (gitleaks) |
| medium | opengrep/go.lang.correctness.permissions.incorrect-default-permission |
agent/agent_server_executor_start.go:27 | Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set... | Lint |
| medium | opengrep/go.lang.correctness.permissions.incorrect-default-permission |
driver/rsync/fetch_url.go:64 | Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set... | Lint |
| medium | opengrep/go.lang.correctness.use-filepath-join |
netchan/store/data_store.go:26 | `path.Join(...)` always joins using a forward slash. This may cause issues on Windows or other systems using a different delimiter. Use `filepath.Join(...)` instead which uses OS-specific path separators. | Lint |
| medium | opengrep/go.lang.correctness.permissions.incorrect-default-permission |
netchan/store/rotating_file_store.go:205 | Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set... | Lint |
| medium | opengrep/go.lang.correctness.permissions.incorrect-default-permission |
netchan/store/rotating_file_store.go:272 | Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set... | Lint |
| medium | opengrep/go.lang.correctness.permissions.incorrect-default-permission |
netchan/store/rotating_file_store.go:346 | Detected file permissions that are set to more than `0600` (user/owner can read and write). Setting file permissions to higher than `0600` is most likely unnecessary and violates the principle of least privilege. Instead, set... | Lint |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used |
driver/scheduler/scheduler_fetch.go:7 | Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium] | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.crypto.missing-ssl-minversion |
netchan/cert_files.go:57 | `MinVersion` is missing from this TLS configuration. By default, TLS 1.2 is currently used as the minimum when acting as a client, and TLS 1.0 when acting as a server. General purpose web applications should default to TLS 1.3 with all... | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used |
netchan/receiver/receiver_channel.go:8 | Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium] | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used |
resource/service_discovery/client/heartbeater.go:5 | Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium] | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used |
resource/service_discovery/master/master_allocation.go:5 | Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium] | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter |
util/http_handler.go:31 | Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'.... | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter |
util/http_handler.go:39 | Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'.... | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter |
util/http_handler.go:43 | Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'.... | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.xss.no-fprintf-to-responsewriter |
util/http_handler.go:47 | Detected 'Fprintf' or similar writing to 'http.ResponseWriter'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package to render data to users. [confidence low] | Static analysis (opengrep) |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter |
util/http_handler.go:48 | Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'.... | Static analysis (opengrep) |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
etc/start_local_glow_cluster.sh:22 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
etc/start_local_glow_cluster.sh:25 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | skipped | — | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-4 | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 8 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | skipped | — | 0 | |
| CI workflows (zizmor) | Security | skipped | — | 0 | |
| Dependencies (osv-scanner) | Security | skipped | — | 0 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | skipped | — | 0 | no registry dependencies declared |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 13 | |
| OpenSSF Scorecard | Security | ok | scorecard v5.6.0 | 0 | |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 2 |
Score history
Scores from different scoring versions aren't directly comparable.
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | 4c40a2717eee | prov-5+qual-2+sec-2 | 0% | 66 | 41 |
| 2026-11-14 | 4c40a2717eee | prov-4+qual-2+sec-2 | 0% | 66 | 41 |
Full text report
- Repository: https://github.com/chrislusf/glow
- Commit:
4c40a2717eee6512247ce30ab8a8428348d6d9e9 - Generated: 2026-11-14T14:52:03+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 0 | none-detected | 65% | 100% |
| Code quality | 66 | adequate | 90% | 100% |
| Security | 41 | poor | 85% | 100% |
AI provenance
No AI attribution or AI-consistent velocity signals detected.
- Explicitly attributed share (lower bound): 0.0%
- Unattributed share in AI-consistent velocity bursts: 0.0%
- Estimated AI-generated share: 0.0%
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2015-10 | 2,993 | 0% |
| 2015-11 | 948 | 0% |
| 2015-12 | 147 | 0% |
| 2016-01 | 1,613 | 0% |
| 2016-02 | 707 | 0% |
| 2016-03 | 88 | 0% |
| 2016-04 | 92 | 0% |
| 2016-05 | 1 | 0% |
| 2016-07 | 690 | 0% |
| 2016-08 | 163 | 0% |
| 2016-09 | 9 | 0% |
| 2017-07 | 8 | 0% |
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is adequate: test-to-source ratio 0.12, CI runs tests; 2% of function code in complex or long functions; 5% duplicated lines. Weakest area: process.
| Area | Score |
|---|---|
| Complexity (lizard) | 94 |
| Duplication | 72 |
| Code smells (Opengrep) | 81 |
| Tests and CI | 64 |
| Documentation | 40 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | 5 |
- Functions: 535; mean complexity 2.4, 90th percentile 5; 2 complex and 0 long functions
- Duplicated lines: 5.5% of 5,192 compared
- Tests: 969 test lines for 7,781 source lines (ratio 0.12); CI test commands: go test; 7% of recent source commits also change tests
- Docs missing or thin: license, contributing, changelog
Most complex functions:
- anonymous__0 in flow/dataset_join.go: complexity 27, 71 lines
- _getLessThanComparatorByKeyValue in flow/dataset_sort_comparator.go: complexity 16, 40 lines
Security
Security posture is poor: 2 possible secret(s) in the tree, 0 only in history; 3 high-severity SAST findings. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 44 |
| Static analysis (Opengrep) | 67 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | 25 |
- Posture checks passed: lockfiles; missing: security policy, dependency updates, signed commits
- OpenSSF Scorecard aggregate: 1.6/10 (published 2026-11-09)
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | gitleaks/private-key: Possible private-key secret in the current tree |
util/test_certs/server.key:1 |
| high | gitleaks/private-key: Possible private-key secret in the current tree |
util/test_certs/client.key:1 |
| high | opengrep/dockerfile.security.missing-user-entrypoint: By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium] |
Dockerfile:9 |
| high | opengrep/dockerfile.security.missing-user: By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. [confidence medium] |
Dockerfile:10 |
| high | opengrep/go.lang.security.audit.dangerous-exec-command: Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code. [confidence low] |
agent/agent_server_executor_start.go:44 |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used: Do not use math/rand. Use crypto/rand instead. [confidence medium] |
driver/scheduler/scheduler_fetch.go:7 |
| medium | opengrep/go.lang.security.audit.crypto.missing-ssl-minversion: MinVersion is missing from this TLS configuration. By default, TLS 1.2 is currently used as the minimum when acting as a client, and TLS 1.0 when acting as a server. General purpose web applications should default to TLS 1.3 with all other protocols disabled. Only where it is known that a web se [confidence high] |
netchan/cert_files.go:57 |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used: Do not use math/rand. Use crypto/rand instead. [confidence medium] |
netchan/receiver/receiver_channel.go:8 |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used: Do not use math/rand. Use crypto/rand instead. [confidence medium] |
resource/service_discovery/client/heartbeater.go:5 |
| medium | opengrep/go.lang.security.audit.crypto.math-random-used: Do not use math/rand. Use crypto/rand instead. [confidence medium] |
resource/service_discovery/master/master_allocation.go:5 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
util/http_handler.go:31 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
util/http_handler.go:39 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
util/http_handler.go:43 |
| medium | opengrep/go.lang.security.audit.xss.no-fprintf-to-responsewriter: Detected 'Fprintf' or similar writing to 'http.ResponseWriter'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package to render data to users. [confidence low] |
util/http_handler.go:47 |
| medium | opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter: Detected directly writing or similar in 'http.ResponseWriter.write()'. This bypasses HTML escaping that prevents cross-site scripting vulnerabilities. Instead, use the 'html/template' package and render data using 'template.Execute()'. [confidence low] |
util/http_handler.go:48 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Repository profile
- Source lines: 7,781; test lines: 969
| Language | Lines |
|---|---|
| Go | 8,673 |
| Shell | 77 |