{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:05.646256Z","repo":{"ref":{"host":"github.com","owner":"jota2rz","name":"vdj-video-sync"},"default_branch":"main","clone_url":"https://github.com/jota2rz/vdj-video-sync.git","html_url":"https://github.com/jota2rz/vdj-video-sync","description":"Browser-based Automatic BPM-synced video mixing for VirtualDJ","stars":1,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":756,"primary_language":"JavaScript","license_spdx":"GPL-3.0","created_at":"2026-02-19T08:24:19Z","pushed_at":"2026-02-26T12:56:37Z","security_policy_url":null,"distribution":{"owner_created_at":"2021-04-21T04:53:38Z","owner_type":"User","release_assets":[{"name":"vdj-video-sync-server-linux-x64","size":16875844,"download_count":3,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33664034,"download_count":4,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":17144832,"download_count":31,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":128322,"download_count":8,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":118969,"download_count":6,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":241152,"download_count":35,"release_tag":"v0.2.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-windows-x64.dll"},{"name":"vdj-video-sync-server-linux-x64","size":16722147,"download_count":0,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33339170,"download_count":0,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":16981504,"download_count":1,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":127629,"download_count":0,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":117507,"download_count":0,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":239104,"download_count":0,"release_tag":"v0.1.4","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/VdjVideoSync-windows-x64.dll"},{"name":"vdj-video-sync-server-linux-x64","size":16713063,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33339058,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":16976384,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":127629,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":117507,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":239104,"download_count":0,"release_tag":"v0.1.3","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.3/VdjVideoSync-windows-x64.dll"},{"name":"vdj-video-sync-server-linux-x64","size":16651747,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33201474,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":16910848,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":127495,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":117736,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":238080,"download_count":1,"release_tag":"v0.1.2","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.2/VdjVideoSync-windows-x64.dll"},{"name":"vdj-video-sync-server-linux-x64","size":16651747,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33201474,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":16910848,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":127482,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":117736,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":238592,"download_count":1,"release_tag":"v0.1.1","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.1/VdjVideoSync-windows-x64.dll"},{"name":"vdj-video-sync-server-linux-x64","size":16651763,"download_count":4,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/vdj-video-sync-server-linux-x64"},{"name":"vdj-video-sync-server-macos-universal","size":33201474,"download_count":6,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/vdj-video-sync-server-macos-universal"},{"name":"vdj-video-sync-server-windows-x64.exe","size":16910848,"download_count":2,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/vdj-video-sync-server-windows-x64.exe"},{"name":"VdjVideoSync-macos-amd64.bundle.zip","size":125642,"download_count":3,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/VdjVideoSync-macos-amd64.bundle.zip"},{"name":"VdjVideoSync-macos-arm64.bundle.zip","size":116311,"download_count":4,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/VdjVideoSync-macos-arm64.bundle.zip"},{"name":"VdjVideoSync-windows-x64.dll","size":236032,"download_count":3,"release_tag":"v0.1.0","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.0/VdjVideoSync-windows-x64.dll"}]}},"commit_sha":"fd1dd9877347a4bf9508d3fd9f026765e334106f","profile":{"lines_by_language":{"Go":4641,"JavaScript":4246,"C++":450,"C":105},"files_by_category":{"source":21,"other":14,"generated":9,"config":6,"binary":5,"docs":3,"vendored":1},"source_lines":9442,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.54,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.2004,"estimated_share":0.0,"ai_artifacts":0.0,"flagged_work_units":1.0,"flagged_releases":0.0,"style_index":0.318},"summary":"Weak signals consistent with AI-assisted development."},"quality":{"score":44.6,"confidence":0.9,"coverage":1.0,"label":"poor","breakdown":{"complexity":45.7,"duplication":52.3,"lint":70.9,"testing":15.0,"docs":65.0,"type_safety":null,"process":null},"summary":"Code quality is poor: test-to-source ratio 0.00, no CI test run detected; 26% of function code in complex or long functions; 11% duplicated lines. Weakest area: testing."},"security":{"score":63.0,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":61.6,"dependencies":95.1,"ci_actions":2.3,"posture":0.0,"scorecard":null},"summary":"Security posture is weak: 1 known vulnerabilities in 1 dependencies; 12 high-severity SAST findings; 19 high-severity workflow issues. 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":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":54.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":10757.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2026-02":{"loc":10757,"attributed_loc":0}}},"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":11.0,"flagged_units":1.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":4452.0,"flagged_loc":2156.0,"flagged_loc_share":0.48427672955974843,"max_loc_per_hour":539.0,"median_loc_per_hour":146.0,"pr_timed_units":0.0,"excluded_import_loc":5422.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"2,156 lines of first-party code in ~4.0h (539 lines/hour, 1 commit session)","ref":"cb43646c9afe65ded3584bce7cf6a67a26f37b77","url":"https://github.com/jota2rz/vdj-video-sync/commit/cb43646c9afe65ded3584bce7cf6a67a26f37b77","weight":0.1617}],"data":{"flagged_loc_by_commit":{"cb43646c9afe65ded3584bce7cf6a67a26f37b77":2156},"excluded_import_commits":["ee630e4f50adbecb6ee1a314efeb9125fb98d36d"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"releases":5.0,"flagged_releases":0.0,"max_loc_per_day":11045.0},"findings":[],"evidence":[],"data":{"releases":[{"from":"v0.1.0","to":"v0.1.1","loc":299,"days":0.86,"loc_per_day":347.3,"flagged":false},{"from":"v0.1.1","to":"v0.1.2","loc":106,"days":0.14,"loc_per_day":775.6,"flagged":false},{"from":"v0.1.2","to":"v0.1.3","loc":1346,"days":0.6,"loc_per_day":2237.2,"flagged":false},{"from":"v0.1.3","to":"v0.1.4","loc":586,"days":0.05,"loc_per_day":11045.0,"flagged":false},{"from":"v0.1.4","to":"v0.2.0","loc":2308,"days":1.6,"loc_per_day":1438.4,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":9442.0,"index":0.318,"count:narrated_steps":3.0,"per_kloc:narrated_steps":0.318,"files:narrated_steps":1.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":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1: Compute RMS energy per window","ref":"server/internal/bpm/bpm.go:423","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/bpm/bpm.go#L423","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 2: Spectral flux (half-wave rectified difference)","ref":"server/internal/bpm/bpm.go:440","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/bpm/bpm.go#L440","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 3: Autocorrelation of the onset signal","ref":"server/internal/bpm/bpm.go:449","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/bpm/bpm.go#L449","weight":0.0}],"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":27.0,"findings_high":12.0,"findings_medium":13.0,"findings_low":2.0,"weighted_findings":13.075,"scanned_lines":9442.0,"parse_errors":1.0},"findings":[{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":719,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:719"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `col.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":719,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:719"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":1741,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:1741"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `container.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":1741,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:1741"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":1969,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:1969"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `wrapper.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":1969,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:1969"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3225,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:3225"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `listEl.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3225,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:3225"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3309,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:3309"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `wrapper.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3309,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:3309"},{"rule_id":"opengrep/javascript.browser.security.insecure-document-method","severity":"high","message":"User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3640,"fingerprint":"javascript.browser.security.insecure-document-method:server/static/js/app.js:3640"},{"rule_id":"opengrep/javascript.browser.security.insecure-innerhtml","severity":"high","message":"User controlled data in a `container.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low]","path":"server/static/js/app.js","line":3640,"fingerprint":"javascript.browser.security.insecure-innerhtml:server/static/js/app.js:3640"},{"rule_id":"opengrep/go.lang.security.audit.crypto.math-random-used","severity":"medium","message":"Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium]","path":"server/internal/handlers/handlers.go","line":9,"fingerprint":"go.lang.security.audit.crypto.math-random-used:server/internal/handlers/handlers.go:9"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":976,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:976"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":979,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:979"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":982,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:982"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":985,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:985"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":988,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:988"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":995,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:995"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":1007,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:1007"},{"rule_id":"opengrep/go.lang.security.audit.xss.no-direct-write-to-responsewriter","severity":"medium","message":"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]","path":"server/internal/handlers/handlers.go","line":1018,"fingerprint":"go.lang.security.audit.xss.no-direct-write-to-responsewriter:server/internal/handlers/handlers.go:1018"},{"rule_id":"opengrep/go.lang.security.audit.crypto.math-random-used","severity":"medium","message":"Do not use `math/rand`. Use `crypto/rand` instead. [confidence medium]","path":"server/internal/video/matcher.go","line":8,"fingerprint":"go.lang.security.audit.crypto.math-random-used:server/internal/video/matcher.go:8"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"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]","path":"server/static/js/app.js","line":1749,"fingerprint":"javascript.lang.security.html-in-template-string:server/static/js/app.js:1749"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"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]","path":"server/static/js/app.js","line":3244,"fingerprint":"javascript.lang.security.html-in-template-string:server/static/js/app.js:3244"},{"rule_id":"opengrep/javascript.lang.security.html-in-template-string","severity":"medium","message":"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]","path":"server/static/js/app.js","line":3663,"fingerprint":"javascript.lang.security.html-in-template-string:server/static/js/app.js:3663"},{"rule_id":"opengrep/javascript.browser.security.js-open-redirect-from-function","severity":"low","message":"The application accepts potentially user-controlled input `url` which can control the location of the current window context. This can lead two types of vulnerabilities open-redirection and Cross-Site-Scripting (XSS) with JavaScript URIs. It is recommended to validate user-controllable input before  [confidence low]","path":"server/static/js/app.js","line":522,"fingerprint":"javascript.browser.security.js-open-redirect-from-function:server/static/js/app.js:522"},{"rule_id":"opengrep/javascript.browser.security.js-open-redirect-from-function","severity":"low","message":"The application accepts potentially user-controlled input `url` which can control the location of the current window context. This can lead two types of vulnerabilities open-redirection and Cross-Site-Scripting (XSS) with JavaScript URIs. It is recommended to validate user-controllable input before  [confidence low]","path":"server/static/js/app.js","line":548,"fingerprint":"javascript.browser.security.js-open-redirect-from-function:server/static/js/app.js:548"}],"evidence":[],"data":{"rulesets":["go","javascript","c"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":1.0,"vulnerabilities":1.0,"vulns_critical":0.0,"vulns_high":0.0,"vulns_medium":0.0,"vulns_low":0.0,"vulns_unknown":1.0,"penalty":3.0},"findings":[{"rule_id":"osv/GO-2026-5024","severity":"medium","message":"golang.org/x/sys@0.34.0 (Go) is affected by GO-2026-5024","path":"server/go.mod","line":null,"fingerprint":"golang.org/x/sys@0.34.0 (Go):GO-2026-5024"}],"evidence":[],"data":{"ecosystems":["Go"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":5.0,"findings":27.0,"findings_high":19.0,"findings_medium":5.0,"findings_low":3.0,"penalty":225.6},"findings":[{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-plugin.yml","line":46,"fingerprint":"unpinned-uses:.github/workflows/build-plugin.yml:46"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-plugin.yml","line":90,"fingerprint":"unpinned-uses:.github/workflows/build-plugin.yml:90"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-plugin.yml","line":103,"fingerprint":"unpinned-uses:.github/workflows/build-plugin.yml:103"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-plugin.yml","line":122,"fingerprint":"unpinned-uses:.github/workflows/build-plugin.yml:122"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-plugin.yml","line":136,"fingerprint":"unpinned-uses:.github/workflows/build-plugin.yml:136"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-server.yml","line":51,"fingerprint":"unpinned-uses:.github/workflows/build-server.yml:51"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-server.yml","line":54,"fingerprint":"unpinned-uses:.github/workflows/build-server.yml:54"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-server.yml","line":125,"fingerprint":"unpinned-uses:.github/workflows/build-server.yml:125"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/build-server.yml","line":139,"fingerprint":"unpinned-uses:.github/workflows/build-server.yml:139"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/build-server.yml","line":54,"fingerprint":"cache-poisoning:.github/workflows/build-server.yml:54"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codeql.yml","line":51,"fingerprint":"unpinned-uses:.github/workflows/codeql.yml:51"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codeql.yml","line":56,"fingerprint":"unpinned-uses:.github/workflows/codeql.yml:56"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codeql.yml","line":61,"fingerprint":"unpinned-uses:.github/workflows/codeql.yml:61"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/codeql.yml","line":100,"fingerprint":"unpinned-uses:.github/workflows/codeql.yml:100"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy-pages.yml","line":25,"fingerprint":"unpinned-uses:.github/workflows/deploy-pages.yml:25"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy-pages.yml","line":28,"fingerprint":"unpinned-uses:.github/workflows/deploy-pages.yml:28"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy-pages.yml","line":31,"fingerprint":"unpinned-uses:.github/workflows/deploy-pages.yml:31"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/deploy-pages.yml","line":37,"fingerprint":"unpinned-uses:.github/workflows/deploy-pages.yml:37"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/release.yml","line":16,"fingerprint":"unpinned-uses:.github/workflows/release.yml:16"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build-plugin.yml","line":45,"fingerprint":"artipacked:.github/workflows/build-plugin.yml:45"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/build-server.yml","line":50,"fingerprint":"artipacked:.github/workflows/build-server.yml:50"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/codeql.yml","line":50,"fingerprint":"artipacked:.github/workflows/codeql.yml:50"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/deploy-pages.yml","line":24,"fingerprint":"artipacked:.github/workflows/deploy-pages.yml:24"},{"rule_id":"zizmor/artipacked","severity":"medium","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/release.yml","line":15,"fingerprint":"artipacked:.github/workflows/release.yml:15"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/build-plugin.yml","line":103,"fingerprint":"superfluous-actions:.github/workflows/build-plugin.yml:103"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/build-plugin.yml","line":136,"fingerprint":"superfluous-actions:.github/workflows/build-plugin.yml:136"},{"rule_id":"zizmor/superfluous-actions","severity":"info","message":"action functionality is already included by the runner [confidence high]","path":".github/workflows/build-server.yml","line":139,"fingerprint":"superfluous-actions:.github/workflows/build-server.yml:139"}],"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.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":2.0,"binary_assets":24.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release v0.2.0 ships vdj-video-sync-server-windows-x64.exe (31 downloads)","ref":"vdj-video-sync-server-windows-x64.exe","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/vdj-video-sync-server-windows-x64.exe","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.0 ships VdjVideoSync-macos-amd64.bundle.zip (8 downloads)","ref":"VdjVideoSync-macos-amd64.bundle.zip","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-macos-amd64.bundle.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.0 ships VdjVideoSync-macos-arm64.bundle.zip (6 downloads)","ref":"VdjVideoSync-macos-arm64.bundle.zip","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-macos-arm64.bundle.zip","weight":0.0},{"kind":"binary-release-asset","description":"release v0.2.0 ships VdjVideoSync-windows-x64.dll (35 downloads)","ref":"VdjVideoSync-windows-x64.dll","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.2.0/VdjVideoSync-windows-x64.dll","weight":0.0},{"kind":"binary-release-asset","description":"release v0.1.4 ships vdj-video-sync-server-windows-x64.exe (1 downloads)","ref":"vdj-video-sync-server-windows-x64.exe","url":"https://github.com/jota2rz/vdj-video-sync/releases/download/v0.1.4/vdj-video-sync-server-windows-x64.exe","weight":0.0},{"kind":"readme-download-lure","description":"gives an archive password","ref":"README.md","url":null,"weight":0.0}],"data":{"signals":["binary-release-assets","readme-download-lure"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":510.0,"function_nloc":7170.0,"mean_ccn":3.56,"p90_ccn":9.0,"complex_functions":14.0,"long_functions":5.0,"many_param_functions":0.0,"risky_nloc_share":0.2608},"findings":[],"evidence":[{"kind":"complex-function","description":"updateDeckCard in server/static/js/app.js: complexity 36, 79 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L817","weight":0.6},{"kind":"complex-function","description":"HandleDeckUpdate in server/internal/handlers/handlers.go: complexity 32, 112 lines","ref":"server/internal/handlers/handlers.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/handlers/handlers.go#L231","weight":0.5333333333333333},{"kind":"complex-function","description":"updatePlayerInfo in server/static/js/app.js: complexity 25, 50 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L961","weight":0.4166666666666667},{"kind":"complex-function","description":"syncElapsedAndRate in server/static/js/app.js: complexity 24, 50 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L1837","weight":0.4},{"kind":"complex-function","description":"updatePriority in server/static/js/app.js: complexity 24, 44 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L2782","weight":0.4},{"kind":"complex-function","description":"onDeckUpdate in server/static/js/app.js: complexity 23, 53 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L2900","weight":0.38333333333333336},{"kind":"complex-function","description":"Match in server/internal/video/matcher.go: complexity 22, 114 lines","ref":"server/internal/video/matcher.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/video/matcher.go#L394","weight":0.36666666666666664},{"kind":"complex-function","description":"runPreview in server/static/js/app.js: complexity 20, 65 lines","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L3766","weight":0.3333333333333333},{"kind":"complex-function","description":"CVideoSyncPlugin::pollLoop in plugin/src/VideoSyncPlugin.cpp: complexity 19, 41 lines","ref":"plugin/src/VideoSyncPlugin.cpp","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/plugin/src/VideoSyncPlugin.cpp#L295","weight":0.31666666666666665},{"kind":"complex-function","description":"decodeOpus in server/internal/bpm/bpm.go: complexity 18, 56 lines","ref":"server/internal/bpm/bpm.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/bpm/bpm.go#L285","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":7053.0,"duplicated_lines":761.0,"duplicated_share":0.1079,"files":21.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/bpm/bpm.go:206 and server/internal/bpm/bpm.go:304","ref":"server/internal/bpm/bpm.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/bpm/bpm.go#L206","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/db/schema.go:72 and server/internal/db/schema.go:96","ref":"server/internal/db/schema.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/db/schema.go#L72","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/db/schema.go:297 and server/internal/overlay/store.go:165","ref":"server/internal/db/schema.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/db/schema.go#L297","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/handlers/handlers.go:391 and server/internal/handlers/handlers.go:490","ref":"server/internal/handlers/handlers.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/handlers/handlers.go#L391","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/overlay/store.go:33 and server/internal/overlay/store.go:133","ref":"server/internal/overlay/store.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/overlay/store.go#L33","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/internal/video/matcher.go:99 and server/internal/video/matcher.go:212","ref":"server/internal/video/matcher.go","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/internal/video/matcher.go#L99","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: server/static/js/app.js:1480 and server/static/js/app.js:1801","ref":"server/static/js/app.js","url":"https://github.com/jota2rz/vdj-video-sync/blob/fd1dd9877347a4bf9508d3fd9f026765e334106f/server/static/js/app.js#L1480","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":13.0,"weighted_findings":13.0,"scanned_lines":9442.0,"category:best-practice":10.0,"category:correctness":3.0},"findings":[{"rule_id":"opengrep/go.lang.correctness.permissions.incorrect-default-permission","severity":"medium","message":"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 permissions to be `0600` or less for os.Chmod, os.Mkdir, os.OpenFile, os.M","path":"server/internal/handlers/handlers.go","line":1474,"fingerprint":"go.lang.correctness.permissions.incorrect-default-permission:server/internal/handlers/handlers.go:1474"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"server/static/js/app.js","line":2586,"fingerprint":"javascript.lang.correctness.no-stringify-keys:server/static/js/app.js:2586"},{"rule_id":"opengrep/javascript.lang.correctness.no-stringify-keys","severity":"medium","message":"JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead.","path":"server/static/js/app.js","line":2594,"fingerprint":"javascript.lang.correctness.no-stringify-keys:server/static/js/app.js:2594"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-confirm","severity":"medium","message":"found confirm() call; should this be in production code?","path":"server/static/js/app.js","line":3284,"fingerprint":"javascript.lang.best-practice.javascript-confirm:server/static/js/app.js:3284"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3288,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3288"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3413,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3413"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3426,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3426"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-confirm","severity":"medium","message":"found confirm() call; should this be in production code?","path":"server/static/js/app.js","line":3432,"fingerprint":"javascript.lang.best-practice.javascript-confirm:server/static/js/app.js:3432"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3465,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3465"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-confirm","severity":"medium","message":"found confirm() call; should this be in production code?","path":"server/static/js/app.js","line":3715,"fingerprint":"javascript.lang.best-practice.javascript-confirm:server/static/js/app.js:3715"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3719,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3719"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3934,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3934"},{"rule_id":"opengrep/javascript.lang.best-practice.javascript-alert","severity":"medium","message":"found alert() call; should this be in production code?","path":"server/static/js/app.js","line":3957,"fingerprint":"javascript.lang.best-practice.javascript-alert:server/static/js/app.js:3957"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":1.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":9442.0,"test_ratio":0.0,"ci_files":5.0,"cochange_share":0.0,"cochange_commits":14.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/build-plugin.yml","ref":".github/workflows/build-plugin.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/build-server.yml","ref":".github/workflows/build-server.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/codeql.yml","ref":".github/workflows/codeql.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/deploy-pages.yml","ref":".github/workflows/deploy-pages.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/release.yml","ref":".github/workflows/release.yml","url":null,"weight":0.0}],"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":281.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE.md","ref":"LICENSE.md","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null}],"flags":[]}