HubSpot/messenger
Growl-style alerts and messages for your app. #hubspot-open-source
- Repository: https://github.com/HubSpot/messenger
- Commit:
b1b176185276464f45bf6be3d28c4064a82198c7 - Generated: 2026-11-13T23:24:07+00:00
- Scorer 0.1.0, scoring prov-4+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 | 50 | weak | 90% | 100% |
| Security | 68 | weak | 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 |
|---|---|---|
| 2013-01 | 12 | 0% |
| 2013-02 | 158 | 0% |
| 2013-03 | 1,574 | 0% |
| 2013-05 | 83 | 0% |
| 2013-09 | 1 | 0% |
| 2013-11 | 1,435 | 0% |
| 2014-02 | 56 | 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 weak: test-to-source ratio 0.41, no CI test run detected; 14% of function code in complex or long functions; 31% duplicated lines. Weakest area: process.
| Area | Score |
|---|---|
| Complexity (lizard) | 65 |
| Duplication | 15 |
| Code smells (Opengrep) | 100 |
| Tests and CI | 41 |
| Documentation | 65 |
| Type safety | n/a |
| Process (Scorecard review/maintenance) | 10 |
- Functions: 560; mean complexity 4.2, 90th percentile 9; 23 complex and 1 long functions
- Duplicated lines: 31.3% of 1,227 compared
- Tests: 717 test lines for 1,732 source lines (ratio 0.41); CI test commands: none detected; 0% of recent source commits also change tests
- Docs missing or thin: readme, contributing
Most complex functions:
- performAction in docs/welcome/lib/executr/lib/coffee-script.js: complexity 202, 1 lines
- b.prototype.compileNode in docs/welcome/lib/executr/lib/coffee-script.js: complexity 41, 1 lines
- parse in docs/welcome/lib/executr/lib/coffee-script.js: complexity 37, 1 lines
- tokenBase in docs/welcome/lib/executr/lib/CodeMirror/mode/coffeescript/coffeescript.js: complexity 34, 102 lines
- c.prototype.compilePatternMatch in docs/welcome/lib/executr/lib/coffee-script.js: complexity 34, 1 lines
Security
Security posture is weak: no high-impact findings. Weakest area: scorecard.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 100 |
| Static analysis (Opengrep) | 64 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 40 |
| OpenSSF Scorecard | 25 |
- Posture checks passed: security policy; missing: dependency updates, signed commits, lockfiles
- OpenSSF Scorecard aggregate: 3.2/10 (published 2026-11-09)
Top findings
| Severity | Finding | Location |
|---|---|---|
| medium | opengrep/javascript.jquery.security.audit.jquery-insecure-selector: User controlled data in a $(...) is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
docs/welcome/javascripts/location-sel.js:45 |
| medium | opengrep/javascript.jquery.security.audit.jquery-insecure-selector: User controlled data in a $(...) is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
docs/welcome/javascripts/theme-sel.js:39 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a words function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlle [confidence low] |
docs/welcome/lib/executr/lib/CodeMirror/mode/coffeescript/coffeescript.js:9 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a a function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a b function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-regexp: RegExp() called with a b function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled in [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
| medium | opengrep/javascript.lang.security.audit.unsafe-dynamic-method: Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
| medium | opengrep/javascript.lang.security.audit.detect-non-literal-fs-filename: Detected that function argument b has entered the fs module. An attacker could potentially control the location of this file, to include going backwards in the directory with '../'. To address this, ensure that user-controlled variables in file paths are validated. [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
| medium | opengrep/javascript.browser.security.eval-detected: Detected the use of eval(). eval() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources. [confidence low] |
docs/welcome/lib/executr/lib/coffee-script.js:8 |
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: 1,732; test lines: 717
| Language | Lines |
|---|---|
| JavaScript | 2,445 |
| Shell | 4 |