{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.261758Z","repo":{"ref":{"host":"github.com","owner":"jIskCoder","name":"work-sessions"},"default_branch":"main","clone_url":"https://github.com/jIskCoder/work-sessions.git","html_url":"https://github.com/jIskCoder/work-sessions","description":null,"stars":0,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":2026,"primary_language":"Python","license_spdx":"MIT","created_at":"2026-11-10T10:18:41Z","pushed_at":"2026-11-10T12:13:10Z","security_policy_url":null,"distribution":{"owner_created_at":"2017-12-23T00:22:50Z","owner_type":"User","release_assets":[]}},"commit_sha":"b850215f253b45e078ca9e63004e044393a9dc48","profile":{"lines_by_language":{"Python":1415,"Shell":150,"JavaScript":14},"files_by_category":{"source":7,"binary":5,"docs":4,"other":3,"test":3,"config":2},"source_lines":1166,"test_lines":413},"pillars":{"ai_provenance":{"score":63.7,"confidence":0.71,"coverage":1.0,"label":"explicit","breakdown":{"attributed_share":0.6371,"suspected_share":0.0,"estimated_share":0.6371,"ai_artifacts":0.0,"flagged_work_units":0.0,"flagged_releases":null,"style_index":0.0},"summary":"Explicit AI attribution on 64% of first-party code added; an estimated 64% including velocity signals."},"quality":{"score":51.9,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":61.3,"duplication":91.9,"lint":1.4,"testing":47.7,"docs":65.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.35, no CI test run detected; 16% of function code in complex or long functions; 1% duplicated lines. Weakest area: lint."},"security":{"score":65.8,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":21.9,"dependencies":100.0,"ci_actions":null,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 4 high-severity SAST findings. Weakest area: posture."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":2.0,"checked":2.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":6.0,"attributed_commits":2.0,"attributed_commit_share":0.3333333333333333,"effective_loc":1587.0,"attributed_loc":1011.0,"attributed_loc_share":0.6370510396975425,"tools_detected":1.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"Claude Code: 2 attributed commits, 1,011 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"6d4c580769cd710e9ca532905b27d016e0255509","url":"https://github.com/jIskCoder/work-sessions/commit/6d4c580769cd710e9ca532905b27d016e0255509","weight":0.9},{"kind":"attributed-commit","description":"Claude Code: trailer 'Co-Authored-By: Claude'","ref":"684b506fa00cabd1e493792ccf52430ee0d9e199","url":"https://github.com/jIskCoder/work-sessions/commit/684b506fa00cabd1e493792ccf52430ee0d9e199","weight":0.9}],"data":{"attributed_loc_by_commit":{"684b506fa00cabd1e493792ccf52430ee0d9e199":1011,"6d4c580769cd710e9ca532905b27d016e0255509":0},"tools":{"claude-code":{"name":"Claude Code","commits":2,"loc":1011,"first_seen":1794305610,"last_seen":1794306113}},"monthly":{"2026-11":{"loc":1587,"attributed_loc":1011}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":3.0,"flagged_units":0.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":1587.0,"flagged_loc":0.0,"flagged_loc_share":0.0,"max_loc_per_hour":381.4275129661645,"median_loc_per_hour":252.75,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[],"data":{"flagged_loc_by_commit":{},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":1166.0,"index":0.0,"count:narrated_steps":0.0,"per_kloc:narrated_steps":0.0,"files:narrated_steps":0.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":13.0,"findings_high":4.0,"findings_medium":8.0,"findings_low":1.0,"weighted_findings":5.062,"scanned_lines":1166.0,"parse_errors":1.0},"findings":[{"rule_id":"opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query","severity":"high","message":"Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low]","path":"app.py","line":345,"fingerprint":"python.sqlalchemy.security.sqlalchemy-execute-raw-query:app.py:345"},{"rule_id":"opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query","severity":"high","message":"Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low]","path":"app.py","line":420,"fingerprint":"python.sqlalchemy.security.sqlalchemy-execute-raw-query:app.py:420"},{"rule_id":"opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query","severity":"high","message":"Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low]","path":"app.py","line":431,"fingerprint":"python.sqlalchemy.security.sqlalchemy-execute-raw-query:app.py:431"},{"rule_id":"opengrep/python.sqlalchemy.security.sqlalchemy-execute-raw-query","severity":"high","message":"Avoiding SQL string concatenation: untrusted input concatenated with raw SQL query can result in SQL Injection. In order to execute raw query safely, prepared statement should be used. SQLAlchemy provides TextualSQL to easily used prepared statement with named parameters. For complex SQL composition [confidence low]","path":"app.py","line":452,"fingerprint":"python.sqlalchemy.security.sqlalchemy-execute-raw-query:app.py:452"},{"rule_id":"opengrep/javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop","severity":"medium","message":"Possibility of prototype polluting function detected. By adding or modifying attributes of an object prototype, it is possible to create attributes that exist on every object, or replace critical attributes with malicious ones. This can be problematic if the software depends on existence or non-exis [confidence low]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"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]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"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]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"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]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.security.audit.unsafe-dynamic-method","severity":"medium","message":"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]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.security.audit.unsafe-dynamic-method:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.jquery.security.audit.jquery-insecure-selector","severity":"medium","message":"User controlled data in a `$(...)` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.jquery.security.audit.jquery-insecure-selector:static/chart.umd.js:13"},{"rule_id":"opengrep/python.lang.security.use-defusedcsv","severity":"low","message":"Detected the generation of a CSV file using the built-in `csv` module. If user data is used to generate the data in this file, it is possible that an attacker could inject a formula when the CSV is imported into a spreadsheet application that runs an attacker script, which could steal data from the  [confidence low]","path":"app.py","line":460,"fingerprint":"python.lang.security.use-defusedcsv:app.py:460"}],"evidence":[],"data":{"rulesets":["python","bash","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":0.0,"vulnerabilities":0.0,"vulns_critical":0.0,"vulns_high":0.0,"vulns_medium":0.0,"vulns_low":0.0,"vulns_unknown":0.0,"penalty":0.0},"findings":[],"evidence":[],"data":{"ecosystems":["PyPI"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":0.0,"check:lockfiles":1.0,"signed_commit_share":0.1667,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":1377.0,"function_nloc":2062.0,"mean_ccn":3.15,"p90_ccn":6.0,"complex_functions":12.0,"long_functions":1.0,"many_param_functions":0.0,"risky_nloc_share":0.1629},"findings":[],"evidence":[{"kind":"complex-function","description":"read_export in import_monday.py: complexity 76, 142 lines","ref":"import_monday.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/import_monday.py#L138","weight":1.0},{"kind":"complex-function","description":"_computeLabelItems in static/chart.umd.js: complexity 41, 1 lines","ref":"static/chart.umd.js","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/static/chart.umd.js#L13","weight":0.6833333333333333},{"kind":"complex-function","description":"Ee in static/chart.umd.js: complexity 35, 1 lines","ref":"static/chart.umd.js","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/static/chart.umd.js#L13","weight":0.5833333333333334},{"kind":"complex-function","description":"n in static/chart.umd.js: complexity 33, 1 lines","ref":"static/chart.umd.js","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/static/chart.umd.js#L13","weight":0.55},{"kind":"complex-function","description":"write_config in import_monday.py: complexity 32, 37 lines","ref":"import_monday.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/import_monday.py#L298","weight":0.5333333333333333},{"kind":"complex-function","description":"do_POST in app.py: complexity 27, 74 lines","ref":"app.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/app.py#L323","weight":0.45},{"kind":"complex-function","description":"do_PATCH in app.py: complexity 21, 37 lines","ref":"app.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/app.py#L399","weight":0.35},{"kind":"complex-function","description":"updateElements in static/chart.umd.js: complexity 20, 1 lines","ref":"static/chart.umd.js","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/static/chart.umd.js#L13","weight":0.3333333333333333},{"kind":"complex-function","description":"build in demo_data.py: complexity 19, 39 lines","ref":"demo_data.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/demo_data.py#L21","weight":0.31666666666666665},{"kind":"complex-function","description":"updateElements in static/chart.umd.js: complexity 18, 1 lines","ref":"static/chart.umd.js","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/static/chart.umd.js#L13","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":991.0,"duplicated_lines":14.0,"duplicated_share":0.0141,"files":7.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: app.py:327 and app.py:402","ref":"app.py","url":"https://github.com/jIskCoder/work-sessions/blob/b850215f253b45e078ca9e63004e044393a9dc48/app.py#L327","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":43.0,"weighted_findings":19.75,"scanned_lines":1166.0,"category:best-practice":2.0,"category:correctness":31.0,"category:maintainability":10.0},"findings":[{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"app.py","line":105,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:app.py:105"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":42,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:42"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":43,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:43"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":44,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:44"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":45,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:45"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":46,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:46"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":47,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:47"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":48,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:48"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":49,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:49"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":50,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:50"},{"rule_id":"opengrep/python.lang.maintainability.return-not-in-function","severity":"medium","message":"`return` only makes sense inside a function","path":"import_monday.py","line":51,"fingerprint":"python.lang.maintainability.return-not-in-function:import_monday.py:51"},{"rule_id":"opengrep/python.lang.best-practice.unspecified-open-encoding","severity":"medium","message":"Missing 'encoding' parameter. 'open()' uses device locale encodings by default, corrupting files with special characters. Specify the encoding to ensure cross-platform support when opening files in text mode (e.g. encoding=\"utf-8\").","path":"import_monday.py","line":332,"fingerprint":"python.lang.best-practice.unspecified-open-encoding:import_monday.py:332"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"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 use a variable that starts with an underscore e.g. $_X instead of ","path":"macos/make-mac-app.sh","line":28,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:macos/make-mac-app.sh:28"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"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 use a variable that starts with an underscore e.g. $_X instead of ","path":"macos/make-mac-app.sh","line":30,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:macos/make-mac-app.sh:30"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":7,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:7"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`e` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`c` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`h` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`o` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`a` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s.garbageCollect` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`e` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`h` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`p` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`p` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`n` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`n` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`i` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`s` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`c` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"},{"rule_id":"opengrep/javascript.lang.correctness.useless-assignment","severity":"low","message":"`h` is assigned twice; the first assignment is useless","path":"static/chart.umd.js","line":13,"fingerprint":"javascript.lang.correctness.useless-assignment:static/chart.umd.js:13"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":1.0,"check:test_ratio":0.7084,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":1.0,"test_lines":413.0,"source_lines":1166.0,"test_ratio":0.3542,"ci_files":0.0,"cochange_share":0.25,"cochange_commits":4.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":115.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":919.0,"other_lines":247.0,"files_blamed":7.0,"blame_failures":0.0,"quality:ai_findings":41.0,"quality:ai_per_kloc":44.614,"quality:other_findings":2.0,"quality:other_per_kloc":8.097,"security:ai_findings":13.0,"security:ai_per_kloc":14.146,"security:other_findings":0.0,"security:other_per_kloc":0.0},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":["unreviewed-ai-risk"]}