Leaderboard github.com
vitallium/markdownlint-lsp
AI provenance
6%
explicit
- Confidence
- 95%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
82/100
strong
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
81/100
adequate
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
6% explicit
Explicit AI attribution on 6% of first-party code added; an estimated 6% including velocity signals.
How the score is built
- Explicitly attributed share6%
- Unattributed share in AI-pace bursts0%
- Estimated AI-generated share6%
- AI tool configuration files1
- Work sessions at AI pace0
- Releases at AI pace0
- Coding-style index (1.0+ means possible)0.00
Attributed AI tools
| Tool | Commits | Lines added | First seen | Last seen |
|---|---|---|---|---|
| Claude Code | 18 | 315 | 2025-07-11 | 2026-07-16 |
| Cursor agent | 1 | 250 | 2026-07-09 | 2026-07-09 |
Lines added per month all AI-attributed share
- 2025-071,231 · 6% AI
- 2025-094 · 0% AI
- 2025-102,204 · 0% AI
- 2025-1167 · 0% AI
- 2025-121 · 0% AI
- 2026-01195 · 86% AI
- 2026-02773 · 0% AI
- 2026-03194 · 11% AI
- 2026-040 · 0% AI
- 2026-051,317 · 0% AI
- 2026-07313 · 99% AI
- 2026-08339 · 0% AI
- 2026-09600 · 0% AI
- 2026-103,008 · 0% AI
Findings in AI-attributed lines vs the rest
From git blame: 98 lines trace to AI-attributed commits, 2,218 to others. Too few lines in one group for a fair comparison. Reported, not scored.
| Findings per 1,000 lines | AI-attributed | Other | Ratio |
|---|---|---|---|
| Code quality | 0.00 | 0.45 | — |
| Security | 0.00 | 0.90 | — |
Evidence by analyzer
Explicit AI attributionok21 items
- Claude Code: 18 attributed commits, 315 lines added
- Cursor agent: 1 attributed commits, 250 lines added
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Cursor agent: trailer 'Co-authored-by: Cursor'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- Claude Code: trailer 'Co-Authored-By: Claude'
- attributed_commit_share
- 10.0%
- attributed_commits
- 19
- attributed_loc
- 565
- attributed_loc_share
- 5.5%
- commits
- 190
- effective_loc
- 10,246
- tools_detected
- 2
AI tool configurationok1 item
- artifacts
- 1
- earliest_adoption
- 2025-10-26
- tools_configured
- 1
- workflow_agents
- 0
Commit velocityok
- excluded_import_loc
- 0
- flagged_loc
- 0
- flagged_loc_share
- 0.0%
- flagged_units
- 0
- max_loc_per_hour
- 686.27
- measured_loc
- 10,246
- median_loc_per_hour
- 178.11
- pr_timed_units
- 18
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 0
- work_units
- 58
Release velocityok
- flagged_releases
- 0
- max_loc_per_day
- 252.70
- releases
- 13
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
- 2,316
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0
- per_kloc:narrated_steps
- 0
- per_kloc:placeholder
- 0
Findings in AI-written linesok
- ai_lines
- 98
- blame_failures
- 0
- files_blamed
- 13
- other_lines
- 2,218
- quality:ai_findings
- 0
- quality:ai_per_kloc
- 0
- quality:other_findings
- 1
- quality:other_per_kloc
- 0.45
- security:ai_findings
- 0
- security:ai_per_kloc
- 0
- security:other_findings
- 2
- security:other_per_kloc
- 0.90
Code quality
82 strong
Code quality is strong: test-to-source ratio 2.32, CI runs tests; 19% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity.
How the score is built
- Complexity57
- Duplication91
- Lint and smells90
- Tests and CI90
- Documentation85
- Type safetynot measured
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok5 items
- loadConfig in lib/config.mjs: complexity 24, 96 lines
- build in lib/code-actions.mjs: complexity 18, 106 lines
- #fixInfoToTextEdit in lib/code-actions.mjs: complexity 17, 63 lines
- matches in lib/ignore-pattern-set.mjs: complexity 16, 41 lines
- getWorkspaceRootFor in lib/workspace-context.mjs: complexity 16, 36 lines
- complex_functions
- 5
- function_nloc
- 1,830
- functions
- 153
- long_functions
- 1
- many_param_functions
- 0
- mean_ccn
- 3.09
- p90_ccn
- 6
- risky_nloc_share
- 18.7%
Duplication (jscpd)ok2 items
- 6+ duplicated lines: lib/code-actions.mjs:235 and lib/position-codec.mjs:135
- 6+ duplicated lines: lib/position-codec.mjs:102 and lib/position-codec.mjs:119
- compared_lines
- 1,548
- duplicated_lines
- 24
- duplicated_share
- 1.6%
- files
- 13
Lintok
- category:best-practice
- 1
- findings
- 1
- scanned_lines
- 2,316
- weighted_findings
- 1
Tests and CIok2 items
- CI config: .github/workflows/ci.yml
.github/workflows/ci.yml - CI runs tests (npm test, pnpm test)
- check:ci_present
- yes
- check:ci_runs_lint
- no
- check:ci_runs_tests
- yes
- check:has_tests
- yes
- check:test_ratio
- yes
- check:tests_cochange
- yes
- ci_files
- 1
- cochange_commits
- 110
- cochange_share
- 38.2%
- source_lines
- 2,316
- test_lines
- 5,381
- test_ratio
- 2.32
Documentationok3 items
- README.md
README.md - LICENSE
LICENSE - CHANGELOG.md
CHANGELOG.md
- check:changelog
- yes
- check:contributing
- no
- check:license
- yes
- check:readme
- yes
- readme_lines
- 70
Type safetyskipped
Security
81 adequate
Security posture is adequate: 4 known vulnerabilities in 4 dependencies. Weakest area: posture.
How the score is built
- Secrets97
- Static analysis (SAST)93
- Vulnerable dependencies78
- CI workflows85
- Security posture20
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesok
- checked
- 13
- declared
- 13
- lookup_errors
- 0
- missing
- 0
- recent
- 0
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 0
- secrets_low_confidence
- 0
- secrets_nonprod
- 1
Static analysis (opengrep)ok
- findings
- 2
- findings_high
- 0
- findings_low
- 0
- findings_medium
- 2
- parse_errors
- 0
- scanned_lines
- 2,316
- weighted_findings
- 0.50
Dependencies (osv-scanner)ok
- penalty
- 15
- vulnerabilities
- 4
- vulnerable_packages
- 4
- vulns_critical
- 0
- vulns_high
- 1
- vulns_low
- 1
- vulns_medium
- 2
- vulns_unknown
- 0
CI workflows (zizmor)ok
- findings
- 5
- findings_high
- 0
- findings_low
- 0
- findings_medium
- 5
- penalty
- 9.60
- workflows
- 1
Security postureok
- check:dependency_updates
- no
- check:lockfiles
- yes
- check:security_policy
- no
- check:signed_commits
- yes
- signed_commit_share
- 95.3%
- unpinned_manifests
- 0
Release downloadsok
- binary_assets
- 0
- signals
- 0
- suspicious
- 0
Findings
1 high10 medium2 low
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| high | osv/GHSA-gg6h-894w-4m9c |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-gg6h-894w-4m9c | Dependencies (osv-scanner) |
| medium | opengrep/javascript.lang.best-practice.lazy-load-module |
lib/config.mjs:119 | Lazy loading can complicate code bundling if care is not taken, also `require`s are run synchronously by Node.js. If they are called from within a function, it may block other requests from being handled at a more critical time. The... | Lint |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:1 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:10 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/ci.yml:13 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:24 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/ci.yml:33 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | opengrep/javascript.lang.security.html-in-template-string |
lib/config.mjs:109 | This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-require |
lib/config.mjs:119 | Detected the use of require(variable). Calling require with a non-literal argument might allow an attacker to load and run arbitrary code, or access arbitrary files. [confidence low] | Static analysis (opengrep) |
| medium | osv/GHSA-3g3m-2fjr-6pw4 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3g3m-2fjr-6pw4 | Dependencies (osv-scanner) |
| medium | osv/GHSA-g3hv-75wg-m249 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 | Dependencies (osv-scanner) |
| low | osv/GHSA-238p-pmpm-9mq7 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-238p-pmpm-9mq7 | Dependencies (osv-scanner) |
| low | gitleaks/generic-api-key |
test/config-log-redaction.test.mjs:62 | Possible generic-api-key secret in the current tree (test/docs/example file) | Secrets (gitleaks) |
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 | ok | prov-4 | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-4 | 0 | |
| Findings in AI-written lines | AI provenance | ok | git-blame | 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 | 1 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | skipped | — | 0 | |
| CI workflows (zizmor) | Security | ok | zizmor 1.32.0 | 5 | |
| Dependencies (osv-scanner) | Security | ok | osv-scanner version: 2.7.1 | 4 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | ok | — | 0 | |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 2 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 1 |
Score history
Scores from different scoring versions aren't directly comparable.
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | e1c9053a39d3 | prov-5+qual-2+sec-2 | 6% | 82 | 81 |
| 2026-11-14 | e1c9053a39d3 | prov-4+qual-2+sec-2 | 6% | 82 | 81 |
Full text report
- Repository: https://github.com/vitallium/markdownlint-lsp
- Commit:
e1c9053a39d3044ffb0dfc4658a39f9860c0980e - Generated: 2026-11-14T14:52:08+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) | 6 | explicit | 95% | 100% |
| Code quality | 82 | strong | 90% | 100% |
| Security | 81 | adequate | 85% | 100% |
AI provenance
Explicit AI attribution on 6% of first-party code added; an estimated 6% including velocity signals.
- Explicitly attributed share (lower bound): 5.5%
- Unattributed share in AI-consistent velocity bursts: 0.0%
- Estimated AI-generated share: 5.5%
| AI tool | Attributed commits | Lines added |
|---|---|---|
| Claude Code | 18 | 315 |
| Cursor agent | 1 | 250 |
- AI tooling configured in repo: generic-agent
Current source lines last changed by AI-attributed commits: 98 of 2,316.
Too few lines in one group to compare finding densities.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-09 | 4 | 0% |
| 2025-10 | 2,204 | 0% |
| 2025-11 | 67 | 0% |
| 2025-12 | 1 | 0% |
| 2026-01 | 195 | 86% |
| 2026-02 | 773 | 0% |
| 2026-03 | 194 | 11% |
| 2026-05 | 1,317 | 0% |
| 2026-07 | 313 | 99% |
| 2026-08 | 339 | 0% |
| 2026-09 | 600 | 0% |
| 2026-10 | 3,008 | 0% |
Evidence
- Claude Code: trailer 'Co-Authored-By: Claude' (db6eabd9c24c)
- Claude Code: trailer 'Co-Authored-By: Claude' (ca352429a037)
- Cursor agent: trailer 'Co-authored-by: Cursor' (d9e4f6b31096)
- Claude Code: trailer 'Co-Authored-By: Claude' (0feb9509deab)
- Claude Code: trailer 'Co-Authored-By: Claude' (a7b2d43a847c)
- Claude Code: trailer 'Co-Authored-By: Claude' (13858507cf8c)
- Claude Code: trailer 'Co-Authored-By: Claude' (f6e5674ebce2)
- Claude Code: trailer 'Co-Authored-By: Claude' (165fcac99f1d)
- Claude Code: trailer 'Co-Authored-By: Claude' (c4baee511c23)
- Claude Code: trailer 'Co-Authored-By: Claude' (dcf9dca418d8)
- Claude Code: trailer 'Co-Authored-By: Claude' (3c6c296901d1)
- Claude Code: trailer 'Co-Authored-By: Claude' (d9fc17c24ee5)
- Claude Code: trailer 'Co-Authored-By: Claude' (e5a0dddac459)
- Claude Code: trailer 'Co-Authored-By: Claude' (97bd4397eed1)
- Claude Code: trailer 'Co-Authored-By: Claude' (8ac6e14fa170)
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 strong: test-to-source ratio 2.32, CI runs tests; 19% of function code in complex or long functions; 2% duplicated lines. Weakest area: complexity.
| Area | Score |
|---|---|
| Complexity (lizard) | 57 |
| Duplication | 91 |
| Code smells (Opengrep) | 90 |
| Tests and CI | 90 |
| Documentation | 85 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 153; mean complexity 3.1, 90th percentile 6; 5 complex and 1 long functions
- Duplicated lines: 1.6% of 1,548 compared
- Tests: 5,381 test lines for 2,316 source lines (ratio 2.32); CI test commands: npm test, pnpm test; 38% of recent source commits also change tests
- Docs missing or thin: contributing
Most complex functions:
- loadConfig in lib/config.mjs: complexity 24, 96 lines
- build in lib/code-actions.mjs: complexity 18, 106 lines
- #fixInfoToTextEdit in lib/code-actions.mjs: complexity 17, 63 lines
- matches in lib/ignore-pattern-set.mjs: complexity 16, 41 lines
- getWorkspaceRootFor in lib/workspace-context.mjs: complexity 16, 36 lines
Security
Security posture is adequate: 4 known vulnerabilities in 4 dependencies. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 97 |
| Static analysis (Opengrep) | 93 |
| Vulnerable dependencies (OSV) | 78 |
| CI workflows (zizmor) | 85 |
| Posture (policy, updates, signing, lockfiles) | 20 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 4 in 4 packages (critical 0, high 1, medium 2, low 1)
-
Posture checks passed: signed commits, lockfiles; missing: security policy, dependency updates
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | osv/GHSA-gg6h-894w-4m9c: [email protected] (npm) is affected by GHSA-gg6h-894w-4m9c |
pnpm-lock.yaml |
| medium | opengrep/javascript.lang.security.html-in-template-string: This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS). [confidence low] |
lib/config.mjs:109 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-require: Detected the use of require(variable). Calling require with a non-literal argument might allow an attacker to load and run arbitrary code, or access arbitrary files. [confidence low] |
lib/config.mjs:119 |
| medium | osv/GHSA-3g3m-2fjr-6pw4: [email protected] (npm) is affected by GHSA-3g3m-2fjr-6pw4 |
pnpm-lock.yaml |
| medium | osv/GHSA-g3hv-75wg-m249: [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 |
pnpm-lock.yaml |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:13 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:33 |
| medium | zizmor/excessive-permissions: overly broad permissions [confidence medium] |
.github/workflows/ci.yml:1 |
| medium | zizmor/excessive-permissions: overly broad permissions [confidence medium] |
.github/workflows/ci.yml:10 |
| medium | zizmor/excessive-permissions: overly broad permissions [confidence medium] |
.github/workflows/ci.yml:24 |
| low | gitleaks/generic-api-key: Possible generic-api-key secret in the current tree (test/docs/example file) |
test/config-log-redaction.test.mjs:62 |
| low | osv/GHSA-238p-pmpm-9mq7: [email protected] (npm) is affected by GHSA-238p-pmpm-9mq7 |
pnpm-lock.yaml |
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: 2,316; test lines: 5,381
| Language | Lines |
|---|---|
| JavaScript | 7,697 |